# 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-qemu-action # https://github.com/docker/setup-buildx-action#with-qemu #- name: Set up QEMU # uses: docker/setup-qemu-action@v1 # with: # platforms: arm64 # https://github.com/docker/setup-buildx-action - name: Set up Docker Buildx uses: docker/setup-buildx-action@v2 # 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@v2 with: registry: ghcr.io username: ${{ github.repository_owner }} password: ${{ github.token }} - name: Login to DockerHub uses: docker/login-action@v2 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@v4 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@v3 with: push: true tags: ${{ steps.metadata.outputs.tags }} labels: ${{ steps.metadata.outputs.labels }} #platforms: linux/amd64,linux/arm64 platforms: linux/amd64 # 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 }}