name: Docker Build (multi-arch AMD64 + ARM64) on: workflow_dispatch: env: REGISTRY: gitea.cuihang1201.synology.me IMAGE_NAME: hangpersonal/sad-workspace TAG_NAME: latest PLATFORMS: linux/amd64,linux/arm64 jobs: build-and-push: runs-on: ubuntu-latest permissions: contents: read packages: write steps: - name: Checkout uses: actions/checkout@v4 - name: Set up QEMU (for cross-compiling) uses: docker/setup-qemu-action@v3 - name: Set up Docker Buildx run: | if docker buildx inspect multi >/dev/null 2>&1; then echo "Builder multi already exists" else echo "Creating builder 'multi'" docker buildx create --name multi --use docker buildx inspect --bootstrap fi # Login to your Gitea registry - name: Log in to registry uses: docker/login-action@v3 with: registry: ${{ env.REGISTRY }} username: ${{ secrets.REGISTRY_USER }} password: ${{ secrets.REGISTRY_TOKEN }} - name: Build Docker image run: | docker buildx build \ --platform ${{ env.PLATFORMS }} \ -t ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:${{ env.TAG_NAME }} \ --push --progress=plain . - name: Inspect pushed manifest run: | docker buildx imagetools inspect ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:${{ env.TAG_NAME }} - name: Cleanup Buildx (builder, container, volume, cache) if: always() run: | set -euxo pipefail # Remove the builder (stops its BuildKit container) if docker buildx version >/dev/null 2>&1; then docker buildx rm multi || true fi # Belt-and-suspenders: kill any lingering buildkit container docker rm -f $(docker ps -a --filter name='buildx_buildkit_multi' -q) 2>/dev/null || true # Remove the builder's state volume(s) docker volume rm $(docker volume ls -q | grep '^buildx_buildkit_multi') 2>/dev/null || true # (Optional) prune caches to reclaim disk if docker buildx version >/dev/null 2>&1; then docker buildx prune --all --force || true fi