Files
danbooru/.github/workflows/docker-build.yaml
evazion cc9d7b8349 Revert "ci: prevent running multiple Docker builds at once."
This reverts commit 9d62f71cd9.

This caused a problem where if you pushed multiple branches or tags at
once, for example to the betabooru and production branches, then the
Docker image would only get built for one branch. This led to deploys
not fetching the latest image.
2021-09-29 08:13:39 -05:00

83 lines
3.2 KiB
YAML

# On every commit, build and push a Docker image to the GitHub Container
# registry and to DockerHub.
#
# The resulting Docker images are tagged with the full commit hash, the git
# branch name, the git tag, and the 'latest' tag for the latest commit to
# master.
#
# https://github.com/danbooru/danbooru/pkgs/container/danbooru
# https://hub.docker.com/r/evazion/danbooru
#
# https://docs.github.com/en/packages/working-with-a-github-packages-registry/working-with-the-container-registry
# https://docs.github.com/en/packages/managing-github-packages-using-github-actions-workflows/publishing-and-installing-a-package-with-github-actions
# https://docs.github.com/en/actions/guides/publishing-docker-images
name: Docker Build
# https://docs.github.com/en/actions/reference/events-that-trigger-workflows
on: [push, create, workflow_dispatch]
# https://docs.github.com/en/actions/reference/authentication-in-a-workflow#permissions-for-the-github_token
# https://docs.github.com/en/actions/reference/workflow-syntax-for-github-actions#jobsjob_idpermissions
permissions:
packages: write
jobs:
docker-build:
runs-on: ubuntu-latest
steps:
# https://github.com/docker/setup-buildx-action
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v1
# https://github.com/docker/login-action
# https://github.com/docker/build-push-action/blob/master/docs/advanced/push-multi-registries.md
- name: Login to Github Container Registry
uses: docker/login-action@v1
with:
registry: ghcr.io
username: ${{ github.repository_owner }}
password: ${{ github.token }}
- name: Login to DockerHub
uses: docker/login-action@v1
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
# Generate Docker tags from Git tags.
# https://github.com/docker/metadata-action
- name: Generate Docker tags
uses: docker/metadata-action@v3
id: metadata
with:
images: |
docker.io/evazion/danbooru
ghcr.io/danbooru/danbooru
tags: |
type=sha,format=long,prefix=
type=ref,event=branch
type=ref,event=tag
type=ref,event=pr
# Tag `latest` on every commit pushed to master
# https://github.com/docker/metadata-action/issues/112
flavor: |
latest=${{ github.ref == 'refs/heads/master' }}
# https://github.com/docker/build-push-action
- name: Build image
uses: docker/build-push-action@v2
with:
push: true
tags: ${{ steps.metadata.outputs.tags }}
labels: ${{ steps.metadata.outputs.labels }}
# https://github.com/docker/build-push-action/blob/master/docs/advanced/cache.md#registry-cache
# https://dev.to/pst418/speed-up-multi-stage-docker-builds-in-ci-cd-with-buildkit-s-registry-cache-11gi
cache-from: type=registry,ref=ghcr.io/${{ github.repository }}:buildcache
cache-to: type=registry,ref=ghcr.io/${{ github.repository }}:buildcache,mode=max
build-args: |
SOURCE_COMMIT=${{ github.sha }}