# 多机构建需要合成 manifest,不然后提交的 docker 镜像会覆盖前面的 on: workflow_dispatch: env: DOCKER_REGISTRY: git.furtherverse.com IMAGE_NAME: ${{ github.repository }} .docker-setup-buildx: &docker-setup-buildx name: Set up Docker Buildx uses: docker/setup-buildx-action@v3 .docker-login: &docker-login name: Login to Docker Registry uses: docker/login-action@v3 with: registry: ${{ env.DOCKER_REGISTRY }} username: ${{ secrets.DOCKER_REGISTRY_USERNAME }} password: ${{ secrets.DOCKER_REGISTRY_PASSWORD }} .build-template: &build-template steps: - name: Checkout code uses: actions/checkout@v4 - <<: *docker-setup-buildx - <<: *docker-login - name: Build and push uses: docker/build-push-action@v6 with: context: . file: docker/Dockerfile push: true tags: ${{ env.DOCKER_REGISTRY }}/${{ env.IMAGE_NAME }}:latest-${{ env.ARCH }} jobs: build-amd64: name: Build for AMD64 runs-on: ubuntu-latest-amd64 env: ARCH: amd64 <<: *build-template build-arm64: name: Build for ARM64 runs-on: ubuntu-latest-arm64 env: ARCH: arm64 <<: *build-template create-manifest: name: Create Image Manifest runs-on: ubuntu-latest needs: - build-amd64 - build-arm64 steps: - <<: *docker-setup-buildx - <<: *docker-login - name: Create manifest uses: int128/docker-manifest-create-action@v2 with: tags: ${{ env.DOCKER_REGISTRY }}/${{ env.IMAGE_NAME }}:latest sources: | ${{ env.DOCKER_REGISTRY }}/${{ env.IMAGE_NAME }}:latest-amd64 ${{ env.DOCKER_REGISTRY }}/${{ env.IMAGE_NAME }}:latest-arm64