From 214936f5274a57120bfd9c6b7d6f6c7d323815ff Mon Sep 17 00:00:00 2001 From: Seto <61304189@qq.com> Date: Wed, 16 Oct 2024 15:45:37 +0800 Subject: [PATCH] docker fix --- .github/workflows/docker.yml | 265 ++++++++++++++--------------------- 1 file changed, 105 insertions(+), 160 deletions(-) diff --git a/.github/workflows/docker.yml b/.github/workflows/docker.yml index 7fbfae7..d0387ff 100644 --- a/.github/workflows/docker.yml +++ b/.github/workflows/docker.yml @@ -1,177 +1,54 @@ name: Publish Docker Image -on: +on: push: - branches: [master] + branches: [ master ] + tags: + - '**' -concurrency: +concurrency: group: ${{ github.ref }}-${{ github.workflow }} cancel-in-progress: true +env: + REGISTRY_IMAGE: ghcr.io/metacubex/subconverter + jobs: - amd64_build: - name: Build AMD64 Image - runs-on: ubuntu-latest - steps: - - name: Checkout base - uses: actions/checkout@v3 - with: - fetch-depth: 0 - - - name: Set up Docker Buildx - uses: docker/setup-buildx-action@v2 - - - name: login to ghcr.io - uses: docker/login-action@v3 - with: - registry: ghcr.io - username: ${{ github.actor }} - password: ${{ secrets.GITHUB_TOKEN }} - - - name: Get commit SHA - id: vars - run: echo "::set-output name=sha_short::$(git rev-parse --short HEAD)" - - - name: Build and export - id: build - if: github.ref == 'refs/heads/master' - uses: docker/build-push-action@v3 - with: - platforms: linux/amd64 - context: scripts/ - tags: ghcr.io/metacubex/subconverter:latest - build-args: | - SHA=${{ steps.vars.outputs.sha_short }} - outputs: type=image,push=true - - - name: Save digest - if: github.ref == 'refs/heads/master' - run: echo ${{ steps.build.outputs.digest }} > /tmp/digest.txt - - - name: Upload artifact - uses: actions/upload-artifact@v3 - with: - name: digest_amd64 - path: /tmp/digest.txt - - x86_build: - name: Build x86 Image - runs-on: ubuntu-latest - steps: - - name: Checkout base - uses: actions/checkout@v3 - with: - fetch-depth: 0 - - - name: Set up Docker Buildx - uses: docker/setup-buildx-action@v2 - - - name: login to ghcr.io - uses: docker/login-action@v3 - with: - registry: ghcr.io - username: ${{ github.actor }} - password: ${{ secrets.GITHUB_TOKEN }} - - - name: Get commit SHA - id: vars - run: echo "::set-output name=sha_short::$(git rev-parse --short HEAD)" - - - name: Build and export - id: build - if: github.ref == 'refs/heads/master' - uses: docker/build-push-action@v3 - with: - platforms: linux/386 - context: scripts/ - tags: ghcr.io/metacubex/subconverter:latest - build-args: | - SHA=${{ steps.vars.outputs.sha_short }} - outputs: type=image,push=true - - - name: Save digest - if: github.ref == 'refs/heads/master' - run: echo ${{ steps.build.outputs.digest }} > /tmp/digest.txt - - - name: Upload artifact - uses: actions/upload-artifact@v3 - with: - name: digest_386 - path: /tmp/digest.txt - - arm64_build: - name: Build ARM64 Image - runs-on: ubuntu-latest - steps: - - name: Checkout base - uses: actions/checkout@v3 - with: - fetch-depth: 0 - - - name: Set up QEMU - uses: docker/setup-qemu-action@v2 - - - name: Set up Docker Buildx - uses: docker/setup-buildx-action@v2 - - - name: login to ghcr.io - uses: docker/login-action@v3 - with: - registry: ghcr.io - username: ${{ github.actor }} - password: ${{ secrets.GITHUB_TOKEN }} - - - name: Get commit SHA - id: vars - run: echo "::set-output name=sha_short::$(git rev-parse --short HEAD)" - - - name: Build and export - id: build - if: github.ref == 'refs/heads/master' - uses: docker/build-push-action@v3 - with: - platforms: linux/arm64 - context: scripts/ - tags: ghcr.io/metacubex/subconverter:latest - build-args: | - SHA=${{ steps.vars.outputs.sha_short }} - THREADS=2 - outputs: type=image,push=true - - - name: Save digest - if: github.ref == 'refs/heads/master' - run: echo ${{ steps.build.outputs.digest }} > /tmp/digest.txt - - - name: Upload artifact - uses: actions/upload-artifact@v3 - with: - name: digest_arm64 - path: /tmp/digest.txt build: - name: Build - needs: [amd64_build, x86_build, arm64_build] - runs-on: ubuntu-latest + strategy: + matrix: + include: + - platform: linux/amd64 + os: ubuntu-latest + - platform: linux/386 + os: ubuntu-latest + - platform: linux/arm/v7 + os: ubuntu-latest + - platform: linux/arm64 + os: ubuntu-latest + runs-on: ${{ matrix.os }} + name: Build ${{ matrix.platform }} Image steps: + - name: Prepare + run: | + platform=${{ matrix.platform }} + echo "PLATFORM_PAIR=${platform//\//-}" >> $GITHUB_ENV + - name: Checkout base - uses: actions/checkout@v3 + uses: actions/checkout@v4 with: fetch-depth: 0 - # https://github.com/docker/setup-qemu-action - - name: Set up QEMU - uses: docker/setup-qemu-action@v2 - - # https://github.com/docker/setup-buildx-action - name: Set up Docker Buildx - uses: docker/setup-buildx-action@v2 - with: - config-inline: | - [worker.oci] - max-parallelism = 1 + uses: docker/setup-buildx-action@v3 - - name: Download artifact - uses: actions/download-artifact@v3 + - name: Docker meta + id: meta + uses: docker/metadata-action@v5 with: - path: /tmp/images/ + images: ${{ env.REGISTRY_IMAGE }} + tags: | + type=semver,pattern={{version}} + type=raw,value=latest,enable={{is_default_branch}} - name: login to ghcr.io uses: docker/login-action@v3 @@ -180,6 +57,74 @@ jobs: username: ${{ github.actor }} password: ${{ secrets.GITHUB_TOKEN }} - - name: Merge and push manifest on master branch + - name: Get commit SHA if: github.ref == 'refs/heads/master' - run: python scripts/merge_manifest.py + id: vars + run: echo "sha_short=$(git rev-parse --short HEAD)" >> $GITHUB_OUTPUT + + - name: Build and export + id: build + uses: docker/build-push-action@v5 + with: + platforms: ${{ matrix.platform }} + context: scripts/ + labels: ${{ steps.meta.outputs.labels }} + build-args: | + SHA=${{ steps.vars.outputs.sha_short }} + outputs: type=image,name=${{ env.REGISTRY_IMAGE }},push-by-digest=true,name-canonical=true,push=true + + - name: Export digest + run: | + rm -rf /tmp/digests + mkdir -p /tmp/digests + digest="${{ steps.build.outputs.digest }}" + touch "/tmp/digests/${digest#sha256:}" + + - name: Upload artifact + uses: actions/upload-artifact@v4 + with: + name: digest-${{ env.PLATFORM_PAIR }} + path: /tmp/digests/* + if-no-files-found: error + retention-days: 1 + + merge: + name: Merge + needs: build + runs-on: ubuntu-latest + steps: + - name: Download digests + uses: actions/download-artifact@v4 + with: + path: /tmp/digests + pattern: digest-* + merge-multiple: true + + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v3 + + - name: Docker meta + id: meta + uses: docker/metadata-action@v5 + with: + images: ${{ env.REGISTRY_IMAGE }} + tags: | + type=semver,pattern={{version}} + type=raw,value=latest,enable={{is_default_branch}} + + - name: login to ghcr.io + uses: docker/login-action@v3 + with: + registry: ghcr.io + username: ${{ github.actor }} + password: ${{ secrets.GITHUB_TOKEN }} + + - name: Create manifest list and push + working-directory: /tmp/digests + run: | + docker buildx imagetools create $(jq -cr '.tags | map("-t " + .) | join(" ")' <<< "$DOCKER_METADATA_OUTPUT_JSON") \ + $(printf '${{ env.REGISTRY_IMAGE }}@sha256:%s ' *) + + - name: Inspect image + run: | + docker buildx imagetools inspect ${{ env.REGISTRY_IMAGE }}:${{ steps.meta.outputs.version }} \ No newline at end of file