GitHub Action to use 'buildah' to build a container image.
Find a file
divyansh42 eabfb92395 Add example workflow
Adds example workflow to build and push image using buildah action
and push to registry action which pushes image to quay.io

Signed-off-by: divyansh42 <diagrawa@redhat.com>
2020-11-20 01:16:07 +05:30
.github/workflows Add example workflow 2020-11-20 01:16:07 +05:30
dist Small readme edit, fix ncc dependency 2020-11-19 13:49:47 -05:00
src Update readme, make 'image' input required 2020-11-19 13:46:44 -05:00
.gitignore add language recognizer 2020-11-13 12:38:29 +01:00
action.yml Update readme, make 'image' input required 2020-11-19 13:46:44 -05:00
language-image.json add language recognizer 2020-11-13 12:38:29 +01:00
LICENSE add missing files for the action 2020-11-06 22:48:47 +01:00
package-lock.json Small readme edit, fix ncc dependency 2020-11-19 13:49:47 -05:00
package.json Small readme edit, fix ncc dependency 2020-11-19 13:49:47 -05:00
README.md Small readme edit, fix ncc dependency 2020-11-19 13:49:47 -05:00
tsconfig.json add support for building images with docker files (#4) (#5) 2020-11-19 09:19:57 +01:00

buildah

Verify Bundle tag badge license badge size badge

Buildah is a GitHub Action for building OCI-compatible (Docker- and Kubernetes-compatible) images quickly and easily.

Buildah action works only on Linux distributions, and it is not supported on Windows or Mac platforms at this time.

Note that GitHub's Ubuntu Environments (ubuntu-20.04 and ubuntu-18.04) come with buildah 1.17.0 installed. If you are not using these environments, you must first install buildah.

Action Inputs

Input Required Description
image Yes Name to give the output image.
tag No Tag to give to the output image.
Default: latest
base-image No The base image to use to create the initial container. If not specified, the action will try to pick one automatically. (N.B: At this time the action is only able to auto select Java base image)
dockerfiles No The list of Dockerfile paths to perform a build using docker instructions. This is a multiline input if you wish to add multiple Dockerfiles.
context No Path to directory to use as the build context.
Default: .
content No The content to copy inside the container to create the final image. This is a multiline input to allow you to copy more than one file/directory.
content: |
  target/spring-petclinic-2.3.0.BUILD-SNAPSHOT.jar
entrypoint No The entry point to set for the container. Can split arguments across multiple lines if desired.
entrypoint: java -jar spring-petclinic-2.3.0.BUILD-SNAPSHOT.jar
port No The port to expose when running the container.
workdir No The working directory to use within the container.
envs No The environment variables to be set when running the container. This is a multiline input to add multiple environment variables.
envs: |
  GOPATH=/root/buildah/go

Build Types

You can configure the buildah action to build your image using one or more Dockerfiles, or from scratch.

Building using Docker

If you have been using Docker and have an existing Dockerfile, buildah can reuse your dockerfile.

In this case the inputs needed are image and dockerfiles. tag is also recommended.

name: Build Image using Dockerfile
on: [push]

jobs:
  build:
    name: Build image
    runs-on: ubuntu-latest

    steps:
    - uses: actions/checkout@v2

    - name: Buildah Action
      uses: redhat-actions/buildah-action@v1
      with:
        image: my-new-image
        tag: v1
        dockerfiles: |
          ./Dockerfile          

Building from scratch

Building from scratch requires more inputs, that would normally be specified in the Dockerfile.

Do not set dockerfiles if you are doing a build from scratch, or a docker build will be performed, and the other inputs will be ignored.

  • An output image name and usually a tag.
  • base-image
    • In a Dockerfile, this would be the FROM directive.
  • content to copy into the new image
    • In a Dockerfile, this would be COPY directives.
  • entrypoint so the container knows what command to run.
    • In a Dockerfile, this would be the ENTRYPOINT.
  • All other optional configuration inputs, such as port, envs, and workdir.

Example of building a Spring Boot Java app image:

name: Build Image
on: [push]

jobs:
  build-image:
    name: Build image
    runs-on: ubuntu-latest

    steps:
    - uses: actions/checkout@v2

    - run: mvn package

    - name: Build Image
      uses: redhat-actions/buildah-action@v1
      with:
        base-image: docker.io/fabric8/java-alpine-openjdk11-jre
        image: my-new-image
        tag: v1
        content: |
          target/spring-petclinic-2.3.0.BUILD-SNAPSHOT.jar          
        entrypoint: java -jar spring-petclinic-2.3.0.BUILD-SNAPSHOT.jar
        port: 8080

Contributing

This is an open source project open to anyone. This project welcomes contributions and suggestions!

Feedback & Questions

If you discover an issue please file a bug in GitHub issues and we will fix it as soon as possible.

License

MIT, See LICENSE for more information.