diff --git a/docker/multi-runner.yaml b/docker/multi-runner.yaml index 11b712c..e7f4ed1 100644 --- a/docker/multi-runner.yaml +++ b/docker/multi-runner.yaml @@ -1,16 +1,71 @@ +# 多机构建需要合成 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: - go-run: + 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: - - uses: actions/checkout@v4 + - <<: *docker-setup-buildx - - uses: actions/setup-go@v5 + - <<: *docker-login + + - name: Create manifest + uses: int128/docker-manifest-create-action@v2 with: - cache: false # 使用缓存会非常慢,所以禁用 - go-version-file: 'go.mod' - - - run: | - go run . + 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