Create Docker Image (Release and Staging) #7
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 publish a docker image for every full release to the GitHub package repository | |
name: Create Docker Image (Release and Staging) | |
on: | |
release: | |
# Allow pre-releases | |
types: [published] | |
schedule: | |
# Build the staging image everyday at 00:00 UTC | |
- cron: "0 0 * * *" | |
env: | |
# This should allow creation of docker images even in forked repositories | |
IMAGE_NAME: ${{ github.repository }} | |
REGISTRY: ghcr.io | |
jobs: | |
build: | |
runs-on: ubuntu-latest | |
steps: | |
# Using the following workaround because currently GitHub Actions | |
# does not support logical AND/OR operations on triggers | |
# It's currently not possible to have `branches` under the `schedule` trigger | |
- name: Checkout the release branch | |
if: ${{ github.event_name == 'release' }} | |
uses: actions/checkout@v3 | |
with: | |
ref: "release" | |
- name: Checkout the staging branch | |
if: ${{ github.event_name == 'schedule' }} | |
uses: actions/checkout@v3 | |
with: | |
ref: "staging" | |
# Setting up QEMU for multi-arch image build | |
- name: Set up QEMU | |
uses: docker/setup-qemu-action@v3 | |
- name: Set up Docker Buildx | |
uses: docker/setup-buildx-action@v3 | |
- name: Extract metadata (tags, labels) for the image | |
uses: docker/[email protected] | |
id: metadata | |
with: | |
images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }} | |
tags: ${{ github.ref_name }} | |
# Login into package repository as the person who created the release | |
- name: Log in to the Container registry | |
uses: docker/login-action@v3 | |
with: | |
registry: ${{ env.REGISTRY }} | |
username: ${{ github.actor }} | |
password: ${{ secrets.GITHUB_TOKEN }} | |
# Build docker image using dockerfile for amd64 and arm64 | |
# Tag it with branch name | |
# Assumes branch name is the version number | |
- name: Build and push | |
uses: docker/[email protected] | |
with: | |
context: . | |
platforms: linux/amd64,linux/arm64 | |
file: Dockerfile | |
push: true | |
tags: ${{ steps.metadata.outputs.tags }} | |
labels: ${{ steps.metadata.outputs.labels }} | |
# If the workflow is triggered by a release, marks and push the image as such | |
- name: Docker tag latest and push | |
if: ${{ github.event_name == 'release' }} | |
run: | | |
docker tag $IMAGE_NAME:${{ github.ref_name }} $IMAGE_NAME:latest | |
docker push $IMAGE_NAME:latest |