add support for building images with docker files (#4) (#5)

* add support for building images with docker files (#4)

Signed-off-by: Luca Stocchi <lstocchi@redhat.com>

* fix issues when building image with dockerfile

Signed-off-by: Luca Stocchi <lstocchi@redhat.com>

* update readme

Signed-off-by: Luca Stocchi <lstocchi@redhat.com>

* Update README.md

Co-authored-by: Divyanshu Agrawal <diagrawa@redhat.com>

Co-authored-by: Divyanshu Agrawal <diagrawa@redhat.com>
This commit is contained in:
Luca Stocchi 2020-11-19 09:19:57 +01:00 committed by GitHub
parent 329be0a470
commit deaddbe502
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
7 changed files with 137 additions and 43 deletions

View file

@ -7,23 +7,45 @@ import * as path from 'path';
import { Language } from 'language-recognizer/lib/types';
export async function run(): Promise<void> {
if (process.env.RUNNER_OS !== 'Linux') {
return Promise.reject(new Error('Only linux platform is supported at this time.'));
}
// get buildah cli
const buildahPath = await io.which('buildah', true);
const cli: BuildahCli = new BuildahCli(buildahPath);
const workspace = process.env['GITHUB_WORKSPACE'];
let dockerFiles = getInputList('dockerfiles');
const newImage = core.getInput('image');
if (dockerFiles.length !== 0) {
doBuildUsingDockerFiles(cli, newImage, workspace, dockerFiles);
} else {
doBuildFromScratch(cli, newImage, workspace);
}
}
async function doBuildUsingDockerFiles(cli: BuildahCli, newImage: string, workspace: string, dockerFiles: string[]): Promise<void> {
const context = path.join(workspace, core.getInput('context'));
dockerFiles = dockerFiles.map(file => path.join(workspace, file));
const build = await cli.buildUsingDocker(newImage, context, dockerFiles);
if (build.succeeded === false) {
return Promise.reject(new Error('Failed building an image from docker files.'));
}
}
async function doBuildFromScratch(cli: BuildahCli, newImage: string, workspace: string) {
let baseImage = core.getInput('base-image');
const content = getInputList('content');
const newImageName = core.getInput('new-image-name');
const content = getInputList('content');
const entrypoint = getInputList('entrypoint');
const port = core.getInput('port');
const workingDir = core.getInput('working-dir');
const envs = getInputList('envs');
if (process.env.RUNNER_OS !== 'Linux') {
return Promise.reject(new Error('Only linux platform is supported at this time.'));
}
// get buildah cli
const buildahPath = await io.which('buildah', true);
// if base-image is not specified by the user we need to pick one automatically
if (!baseImage) {
const workspace = process.env['GITHUB_WORKSPACE'];
if (!baseImage) {
if (workspace) {
// check language/framework used and pick base-image automatically
const languages = await recognizer.detectLanguages(workspace);
@ -35,9 +57,7 @@ export async function run(): Promise<void> {
return Promise.reject(new Error('No base image found to create a new container'));
}
}
// create the new image
const cli: BuildahCli = new BuildahCli(buildahPath);
const container = await cli.from(baseImage);
if (container.succeeded === false) {
return Promise.reject(new Error(container.reason));
@ -60,7 +80,7 @@ export async function run(): Promise<void> {
return Promise.reject(new Error(configResult.reason));
}
const commit = await cli.commit(containerId, newImageName, ['--squash']);
const commit = await cli.commit(containerId, newImage, ['--squash']);
if (commit.succeeded === false) {
return Promise.reject(new Error(commit.reason));
}