|
|
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 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|