Build with docker/metadata-action #1267
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# This workflow will perform a test whenever there | |
# is some change in code done to ensure that the changes | |
# are not buggy and we are getting the desired output. | |
name: Build with docker/metadata-action | |
on: | |
push: | |
pull_request: | |
workflow_dispatch: | |
schedule: | |
- cron: '0 0 * * *' # every day at midnight | |
jobs: | |
build-containerfile: | |
name: Build image with Containerfile | |
runs-on: ubuntu-22.04 | |
strategy: | |
fail-fast: false | |
matrix: | |
install_latest: [ true, false ] | |
env: | |
IMAGE_NAME: "hello-world" | |
steps: | |
# Checkout buildah action github repository | |
- name: Checkout Buildah action | |
uses: actions/checkout@v4 | |
- name: Docker Metadata | |
id: docker-metadata | |
uses: docker/metadata-action@v4 | |
with: | |
images: | | |
${{ env.IMAGE_NAME }} | |
tags: | | |
type=edge | |
type=sha | |
type=ref,event=branch | |
type=ref,event=pr | |
type=schedule | |
type=semver,pattern={{version}} | |
type=semver,pattern={{major}}.{{minor}} | |
type=semver,pattern={{major}},enable=${{ !startsWith(github.ref, 'refs/tags/v0.') }} | |
- name: Install latest buildah | |
if: matrix.install_latest | |
run: | | |
bash .github/install_latest_buildah.sh | |
- name: Create Dockerfile | |
run: | | |
cat > Containerfile<<EOF | |
FROM busybox | |
RUN echo "hello world" | |
EOF | |
# Build image using Buildah action | |
- name: Build Image | |
id: build_image | |
uses: ./ | |
with: | |
layers: false | |
tags: ${{ steps.docker-metadata.outputs.tags }} | |
labels: ${{ steps.docker-metadata.outputs.labels }} | |
containerfiles: | | |
./Containerfile | |
extra-args: | | |
--pull | |
- name: Echo Outputs | |
run: | | |
echo "Image: ${{ steps.build_image.outputs.image }}" | |
echo "Tags: ${{ steps.build_image.outputs.tags }}" | |
echo "Tagged Image: ${{ steps.build_image.outputs.image-with-tag }}" | |
# Check if image is build | |
- name: Check images created | |
run: buildah images | grep '${{ env.IMAGE_NAME }}' | |
- name: Check image metadata | |
run: | | |
set -x | |
buildah inspect ${{ steps.build_image.outputs.image-with-tag }} | jq '.OCIv1.config.Labels."org.opencontainers.image.title"' | |
buildah inspect ${{ steps.build_image.outputs.image-with-tag }} | jq '.OCIv1.config.Labels."org.opencontainers.image.description"' | |
buildah inspect ${{ steps.build_image.outputs.image-with-tag }} | jq '.Docker.config.Labels."org.opencontainers.image.title"' | |
buildah inspect ${{ steps.build_image.outputs.image-with-tag }} | jq '.Docker.config.Labels."org.opencontainers.image.description"' | |
build-scratch: | |
name: Build image without Containerfile | |
runs-on: ubuntu-22.04 | |
strategy: | |
fail-fast: false | |
matrix: | |
install_latest: [ true, false ] | |
env: | |
PROJECT_DIR: spring-petclinic | |
IMAGE_NAME: spring-petclinic | |
MVN_REPO_DIR: ~/.m2/repository | |
steps: | |
# Checkout buildah action github repository | |
- name: Checkout Buildah action | |
uses: actions/checkout@v4 | |
- name: Docker Metadata | |
id: docker-metadata | |
uses: docker/metadata-action@v4 | |
with: | |
images: | | |
${{ env.IMAGE_NAME }} | |
tags: | | |
type=edge | |
type=sha | |
type=ref,event=branch | |
type=ref,event=pr | |
type=schedule | |
type=semver,pattern={{version}} | |
type=semver,pattern={{major}}.{{minor}} | |
type=semver,pattern={{major}},enable=${{ !startsWith(github.ref, 'refs/tags/v0.') }} | |
- name: Install latest buildah | |
if: matrix.install_latest | |
run: | | |
bash .github/install_latest_buildah.sh | |
# Checkout spring-petclinic github repository | |
- name: Checkout spring-petclinic project | |
uses: actions/checkout@v4 | |
with: | |
repository: "spring-projects/spring-petclinic" | |
path: ${{ env.PROJECT_DIR }} | |
# Setup java. | |
- name: Setup Java | |
uses: actions/setup-java@v3 | |
with: | |
distribution: 'temurin' | |
java-version: '17' | |
cache: 'maven' | |
# Run maven to build the project | |
- name: Maven | |
working-directory: ${{ env.PROJECT_DIR }} | |
run: | | |
mvn package -ntp -B | |
# Build image using Buildah action | |
- name: Build Image | |
id: build_image | |
uses: ./ | |
with: | |
tags: ${{ steps.docker-metadata.outputs.tags }} | |
labels: ${{ steps.docker-metadata.outputs.labels }} | |
base-image: 'registry.access.redhat.com/openjdk/openjdk-11-rhel7' | |
# To avoid hardcoding a particular version of the binary. | |
content: | | |
./spring-petclinic/target/spring-petclinic-*.jar | |
entrypoint: | | |
java | |
-jar | |
spring-petclinic-*.jar | |
port: 8080 | |
arch: amd64 | |
workdir: "." | |
- name: Echo Outputs | |
run: | | |
echo "Image: ${{ steps.build_image.outputs.image }}" | |
echo "Tags: ${{ steps.build_image.outputs.tags }}" | |
echo "Tagged Image: ${{ steps.build_image.outputs.image-with-tag }}" | |
# Check if image is build | |
- name: Check images created | |
run: buildah images | grep '${{ env.IMAGE_NAME }}' | |
- name: Check image metadata | |
run: | | |
set -x | |
buildah inspect ${{ steps.build_image.outputs.image-with-tag }} | jq '.OCIv1.config.Labels."org.opencontainers.image.title"' | |
buildah inspect ${{ steps.build_image.outputs.image-with-tag }} | jq '.OCIv1.config.Labels."org.opencontainers.image.description"' | |
buildah inspect ${{ steps.build_image.outputs.image-with-tag }} | jq '.Docker.config.Labels."org.opencontainers.image.title"' | |
buildah inspect ${{ steps.build_image.outputs.image-with-tag }} | jq '.Docker.config.Labels."org.opencontainers.image.description"' |