Skip to content

Merge pull request #9 from DSLZL/v3.0 #35

Merge pull request #9 from DSLZL/v3.0

Merge pull request #9 from DSLZL/v3.0 #35

Workflow file for this run

name: docker-image
on:
push:
branches:
- main
- master
tags:
- "v*"
paths:
- "Dockerfile"
- "docker-entrypoint.sh"
- "config.docker.json"
- "go.mod"
- "go.sum"
- "cmd/**"
- "internal/**"
- "static/**"
- "frontend/**"
- ".dockerignore"
- ".github/workflows/docker-image.yml"
workflow_dispatch:
permissions:
contents: read
packages: write
concurrency:
group: docker-image-${{ github.ref }}
cancel-in-progress: true
env:
REGISTRY: ghcr.io
jobs:
prep:
runs-on: ubuntu-latest
outputs:
image_name_lc: ${{ steps.norm.outputs.image_name_lc }}
steps:
- name: Normalize image name
id: norm
run: |
echo "image_name_lc=${GITHUB_REPOSITORY,,}" >> "$GITHUB_OUTPUT"
build:
runs-on: ubuntu-latest
needs: prep
strategy:
fail-fast: false
matrix:
include:
- platform: linux/amd64
arch: amd64
- platform: linux/arm64
arch: arm64
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Set up QEMU
uses: docker/setup-qemu-action@v3
with:
platforms: arm64
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
- name: Log in to GHCR
uses: docker/login-action@v3
with:
registry: ${{ env.REGISTRY }}
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}
- name: Extract Docker metadata
id: meta
uses: docker/metadata-action@v5
with:
images: ${{ env.REGISTRY }}/${{ needs.prep.outputs.image_name_lc }}
tags: |
type=ref,event=branch
type=ref,event=tag
type=sha,prefix=sha-
type=raw,value=latest,enable={{is_default_branch}}
- name: Build and push by digest
id: build
uses: docker/build-push-action@v6
with:
context: .
file: ./Dockerfile
platforms: ${{ matrix.platform }}
labels: ${{ steps.meta.outputs.labels }}
outputs: type=image,name=${{ env.REGISTRY }}/${{ needs.prep.outputs.image_name_lc }},push-by-digest=true,name-canonical=true,push=true
cache-from: |
type=gha,scope=notion2api-${{ matrix.arch }}
type=registry,ref=${{ env.REGISTRY }}/${{ needs.prep.outputs.image_name_lc }}:buildcache-${{ matrix.arch }}
cache-to: |
type=gha,mode=max,scope=notion2api-${{ matrix.arch }}
type=registry,ref=${{ env.REGISTRY }}/${{ needs.prep.outputs.image_name_lc }}:buildcache-${{ matrix.arch }},mode=max,oci-mediatypes=true,image-manifest=true
- name: Export digest
run: |
mkdir -p "${{ runner.temp }}/digests"
digest="${{ steps.build.outputs.digest }}"
touch "${{ runner.temp }}/digests/${digest#sha256:}"
- name: Upload digest artifact
uses: actions/upload-artifact@v4
with:
name: digests-${{ matrix.arch }}
path: ${{ runner.temp }}/digests/*
if-no-files-found: error
retention-days: 1
merge:
runs-on: ubuntu-latest
needs:
- prep
- build
steps:
- name: Download digest artifacts
uses: actions/download-artifact@v4
with:
path: ${{ runner.temp }}/digests
pattern: digests-*
merge-multiple: true
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
- name: Log in to GHCR
uses: docker/login-action@v3
with:
registry: ${{ env.REGISTRY }}
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}
- name: Extract Docker metadata
id: meta
uses: docker/metadata-action@v5
with:
images: ${{ env.REGISTRY }}/${{ needs.prep.outputs.image_name_lc }}
tags: |
type=ref,event=branch
type=ref,event=tag
type=sha,prefix=sha-
type=raw,value=latest,enable={{is_default_branch}}
- name: Create and push manifest list
working-directory: ${{ runner.temp }}/digests
run: |
tags=$(jq -r '.tags | map("-t " + .) | join(" ")' <<< '${{ steps.meta.outputs.json }}')
sources=$(printf '${{ env.REGISTRY }}/${{ needs.prep.outputs.image_name_lc }}@sha256:%s ' *)
docker buildx imagetools create $tags $sources
- name: Inspect image
run: docker buildx imagetools inspect ${{ env.REGISTRY }}/${{ needs.prep.outputs.image_name_lc }}:${{ steps.meta.outputs.version }}