| name: Publish Docker image (Multi Registries, native amd64+arm64) |
|
|
| on: |
| push: |
| tags: |
| - '*' |
|
|
| jobs: |
| build_single_arch: |
| name: Build & push (${{ matrix.arch }}) [native] |
| strategy: |
| fail-fast: false |
| matrix: |
| include: |
| - arch: amd64 |
| platform: linux/amd64 |
| runner: ubuntu-latest |
| - arch: arm64 |
| platform: linux/arm64 |
| runner: ubuntu-24.04-arm |
| runs-on: ${{ matrix.runner }} |
|
|
| permissions: |
| packages: write |
| contents: read |
|
|
| steps: |
| - name: Check out (shallow) |
| uses: actions/checkout@v4 |
| with: |
| fetch-depth: 1 |
|
|
| - name: Resolve tag & write VERSION |
| run: | |
| git fetch --tags --force --depth=1 |
| TAG=${GITHUB_REF#refs/tags/} |
| echo "TAG=$TAG" >> $GITHUB_ENV |
| echo "$TAG" > VERSION |
| echo "Building tag: $TAG for ${{ matrix.arch }}" |
| |
|
|
| |
| |
|
|
| - name: Set up Docker Buildx |
| uses: docker/setup-buildx-action@v3 |
|
|
| - name: Log in to Docker Hub |
| uses: docker/login-action@v3 |
| with: |
| username: ${{ secrets.DOCKERHUB_USERNAME }} |
| password: ${{ secrets.DOCKERHUB_TOKEN }} |
|
|
| |
| |
| |
| |
| |
| |
|
|
| - name: Extract metadata (labels) |
| id: meta |
| uses: docker/metadata-action@v5 |
| with: |
| images: | |
| calciumion/new-api |
| |
|
|
| - name: Build & push single-arch (to both registries) |
| uses: docker/build-push-action@v6 |
| with: |
| context: . |
| platforms: ${{ matrix.platform }} |
| push: true |
| tags: | |
| calciumion/new-api:${{ env.TAG }}-${{ matrix.arch }} |
| calciumion/new-api:latest-${{ matrix.arch }} |
| |
| |
| labels: ${{ steps.meta.outputs.labels }} |
| cache-from: type=gha |
| cache-to: type=gha,mode=max |
| provenance: false |
| sbom: false |
|
|
| create_manifests: |
| name: Create multi-arch manifests (Docker Hub) |
| needs: [build_single_arch] |
| runs-on: ubuntu-latest |
| if: startsWith(github.ref, 'refs/tags/') |
| steps: |
| - name: Extract tag |
| run: echo "TAG=${GITHUB_REF#refs/tags/}" >> $GITHUB_ENV |
| |
| |
| |
|
|
| - name: Log in to Docker Hub |
| uses: docker/login-action@v3 |
| with: |
| username: ${{ secrets.DOCKERHUB_USERNAME }} |
| password: ${{ secrets.DOCKERHUB_TOKEN }} |
|
|
| - name: Create & push manifest (Docker Hub - version) |
| run: | |
| docker buildx imagetools create \ |
| -t calciumion/new-api:${TAG} \ |
| calciumion/new-api:${TAG}-amd64 \ |
| calciumion/new-api:${TAG}-arm64 |
| |
| - name: Create & push manifest (Docker Hub - latest) |
| run: | |
| docker buildx imagetools create \ |
| -t calciumion/new-api:latest \ |
| calciumion/new-api:latest-amd64 \ |
| calciumion/new-api:latest-arm64 |
| |
| |
| |
| |
| |
| |
| |
| |
|
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
|
|