From 4387829e599a2069c6a55c513ba48946badd676a Mon Sep 17 00:00:00 2001 From: Tindy X <49061470+tindy2013@users.noreply.github.com> Date: Tue, 23 Aug 2022 16:59:53 +0800 Subject: [PATCH] Update Docker build script --- .github/workflows/docker.yml | 340 ++++++++++++++++++++++++++++++++--- 1 file changed, 318 insertions(+), 22 deletions(-) diff --git a/.github/workflows/docker.yml b/.github/workflows/docker.yml index 14990fe..f231871 100644 --- a/.github/workflows/docker.yml +++ b/.github/workflows/docker.yml @@ -6,35 +6,40 @@ concurrency: cancel-in-progress: true jobs: - build: - name: Build + amd64_build: + name: Build AMD64 Image runs-on: ubuntu-latest steps: - - name: Checkout base uses: actions/checkout@v2 with: fetch-depth: 0 - # https://github.com/docker/setup-qemu-action - - name: Set up QEMU - uses: docker/setup-qemu-action@v1 - # https://github.com/docker/setup-buildx-action - name: Set up Docker Buildx - uses: docker/setup-buildx-action@v1 + uses: docker/setup-buildx-action@v2 - - name: Docker login - env: - DOCKER_USERNAME: ${{ secrets.DOCKER_USERNAME }} - DOCKER_PASSWORD: ${{ secrets.DOCKER_PASSWORD }} - run: | - echo "${DOCKER_PASSWORD}" | docker login --username "${DOCKER_USERNAME}" --password-stdin - - - name: Docker buildx image and push on master branch + - name: Get commit SHA + id: vars + run: echo "::set-output name=sha_short::$(git rev-parse --short HEAD)" + + - name: Build and export if: github.ref == 'refs/heads/master' - run: | - SHA=$(git rev-parse --short HEAD) - docker buildx build --build-arg SHA="$SHA" --build-arg THREADS=1 --output "type=image,push=true" --platform=linux/amd64,linux/arm/v7,linux/arm64,linux/386 --tag tindy2013/subconverter:latest scripts/ + uses: docker/build-push-action@v3 + with: + platforms: linux/amd64 + context: scripts/ + tags: tindy2013/subconverter:latest + build-args: | + SHA=${{ steps.vars.outputs.sha_short }} + THREADS=1 + outputs: type=docker,dest=/tmp/image_amd64.tar + + - name: Upload artifact + if: github.ref == 'refs/heads/master' + uses: actions/upload-artifact@v3 + with: + name: image_amd64 + path: /tmp/image_amd64.tar - name: Replace tag without `v` if: startsWith(github.ref, 'refs/tags/') @@ -45,8 +50,299 @@ jobs: return context.payload.ref.replace(/\/?refs\/tags\/v/, '') result-encoding: string - - name: Docker buildx image and push on release + - name: Build release and export + if: startsWith(github.ref, 'refs/tags/') + uses: docker/build-push-action@v3 + with: + platforms: linux/amd64 + context: scripts/ + tags: tindy2013/subconverter:${{steps.version.outputs.result}} + build-args: | + THREADS=1 + outputs: type=docker,dest=/tmp/image_amd64_release.tar + + + - name: Upload release artifact + if: startsWith(github.ref, 'refs/tags/') + uses: actions/upload-artifact@v3 + with: + name: image_amd64_release + path: /tmp/image_amd64_release.tar + + x86_build: + name: Build x86 Image + runs-on: ubuntu-latest + steps: + - name: Checkout base + uses: actions/checkout@v2 + with: + fetch-depth: 0 + + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v2 + + - name: Get commit SHA + id: vars + run: echo "::set-output name=sha_short::$(git rev-parse --short HEAD)" + + - name: Build and export + if: github.ref == 'refs/heads/master' + uses: docker/build-push-action@v3 + with: + platforms: linux/386 + context: scripts/ + tags: tindy2013/subconverter:latest + build-args: | + SHA=${{ steps.vars.outputs.sha_short }} + THREADS=1 + outputs: type=docker,dest=/tmp/image_386.tar + + - name: Upload artifact + if: github.ref == 'refs/heads/master' + uses: actions/upload-artifact@v3 + with: + name: image_386 + path: /tmp/image_386.tar + + - name: Replace tag without `v` + if: startsWith(github.ref, 'refs/tags/') + uses: actions/github-script@v1 + id: version + with: + script: | + return context.payload.ref.replace(/\/?refs\/tags\/v/, '') + result-encoding: string + + - name: Build release and export + if: startsWith(github.ref, 'refs/tags/') + uses: docker/build-push-action@v3 + with: + platforms: linux/386 + context: scripts/ + tags: tindy2013/subconverter:${{steps.version.outputs.result}} + build-args: | + THREADS=1 + outputs: type=docker,dest=/tmp/image_386_release.tar + + + - name: Upload release artifact + if: startsWith(github.ref, 'refs/tags/') + uses: actions/upload-artifact@v3 + with: + name: image_386_release + path: /tmp/image_386_release.tar + + armv7_build: + name: Build ARMv7 Image + runs-on: ubuntu-latest + steps: + - name: Checkout base + uses: actions/checkout@v2 + with: + fetch-depth: 0 + + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v2 + + - name: Get commit SHA + id: vars + run: echo "::set-output name=sha_short::$(git rev-parse --short HEAD)" + + - name: Build and export + if: github.ref == 'refs/heads/master' + uses: docker/build-push-action@v3 + with: + platforms: linux/arm/v7 + context: scripts/ + tags: tindy2013/subconverter:latest + build-args: | + SHA=${{ steps.vars.outputs.sha_short }} + THREADS=1 + outputs: type=docker,dest=/tmp/image_armv7.tar + + - name: Upload artifact + if: github.ref == 'refs/heads/master' + uses: actions/upload-artifact@v3 + with: + name: image_armv7 + path: /tmp/image_armv7.tar + + - name: Replace tag without `v` + if: startsWith(github.ref, 'refs/tags/') + uses: actions/github-script@v1 + id: version + with: + script: | + return context.payload.ref.replace(/\/?refs\/tags\/v/, '') + result-encoding: string + + - name: Build release and export + if: startsWith(github.ref, 'refs/tags/') + uses: docker/build-push-action@v3 + with: + platforms: linux/arm/v7 + context: scripts/ + tags: tindy2013/subconverter:${{steps.version.outputs.result}} + build-args: | + THREADS=1 + outputs: type=docker,dest=/tmp/image_armv7_release.tar + + + - name: Upload release artifact + if: startsWith(github.ref, 'refs/tags/') + uses: actions/upload-artifact@v3 + with: + name: image_armv7_release + path: /tmp/image_armv7_release.tar + + arm64_build: + name: Build ARM64 Image + runs-on: ubuntu-latest + steps: + - name: Checkout base + uses: actions/checkout@v2 + with: + fetch-depth: 0 + + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v2 + + - name: Get commit SHA + id: vars + run: echo "::set-output name=sha_short::$(git rev-parse --short HEAD)" + + - name: Build and export + if: github.ref == 'refs/heads/master' + uses: docker/build-push-action@v3 + with: + platforms: linux/arm64 + context: scripts/ + tags: tindy2013/subconverter:latest + build-args: | + SHA=${{ steps.vars.outputs.sha_short }} + THREADS=1 + outputs: type=docker,dest=/tmp/image_arm64.tar + + - name: Upload artifact + if: github.ref == 'refs/heads/master' + uses: actions/upload-artifact@v3 + with: + name: image_arm64 + path: /tmp/image_arm64.tar + + - name: Replace tag without `v` + if: startsWith(github.ref, 'refs/tags/') + uses: actions/github-script@v1 + id: version + with: + script: | + return context.payload.ref.replace(/\/?refs\/tags\/v/, '') + result-encoding: string + + - name: Build release and export + if: startsWith(github.ref, 'refs/tags/') + uses: docker/build-push-action@v3 + with: + platforms: linux/arm64 + context: scripts/ + tags: tindy2013/subconverter:${{steps.version.outputs.result}} + build-args: | + THREADS=1 + outputs: type=docker,dest=/tmp/image_arm64_release.tar + + + - name: Upload release artifact + if: startsWith(github.ref, 'refs/tags/') + uses: actions/upload-artifact@v3 + with: + name: image_arm64_release + path: /tmp/image_arm64_release.tar + + build: + name: Build + needs: [amd64_build, x86_build, armv7_build, arm64_build] + runs-on: ubuntu-latest + steps: + - name: Checkout base + uses: actions/checkout@v2 + 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 + + - name: Download artifact + uses: actions/download-artifact@v3 + with: + path: /tmp + + - name: Load image + if: github.ref == 'refs/heads/master' + run: | + docker load --input /tmp/image_amd64/image_amd64.tar + docker load --input /tmp/image_386/image_386.tar + docker load --input /tmp/image_armv7/image_armv7.tar + docker load --input /tmp/image_arm64/image_arm64.tar + docker image ls -a + + - name: Docker login + uses: docker/login-action@v2 + with: + username: ${{ secrets.DOCKER_USERNAME }} + password: ${{ secrets.DOCKER_PASSWORD }} + + - name: Get commit SHA + id: vars + run: echo "::set-output name=sha_short::$(git rev-parse --short HEAD)" + + - name: Docker buildx image and push on master branch + if: github.ref == 'refs/heads/master' + uses: docker/build-push-action@v3 + with: + platforms: linux/amd64,linux/arm/v7,linux/arm64,linux/386 + context: scripts/ + tags: tindy2013/subconverter:latest + build-args: | + SHA=${{ steps.vars.outputs.sha_short }} + THREADS=1 + outputs: | + type=image,push=true + + - name: Replace tag without `v` + if: startsWith(github.ref, 'refs/tags/') + uses: actions/github-script@v1 + id: version + with: + script: | + return context.payload.ref.replace(/\/?refs\/tags\/v/, '') + result-encoding: string + + - name: Load release image if: startsWith(github.ref, 'refs/tags/') run: | - docker buildx build --output "type=image,push=true" --platform=linux/amd64,linux/arm/v7,linux/arm64,linux/386 --tag tindy2013/subconverter:${{steps.version.outputs.result}} scripts/ - docker buildx build --output "type=image,push=true" --platform=linux/amd64,linux/arm/v7,linux/arm64,linux/386 --tag tindy2013/subconverter:latest scripts/ + docker load --input /tmp/image_amd64/image_amd64_release.tar + docker load --input /tmp/image_386/image_386_release.tar + docker load --input /tmp/image_armv7/image_armv7_release.tar + docker load --input /tmp/image_arm64/image_arm64_release.tar + docker image ls -a + + - name: Docker buildx image and push on release + if: startsWith(github.ref, 'refs/tags/') + uses: docker/build-push-action@v3 + with: + platforms: linux/amd64,linux/arm/v7,linux/arm64,linux/386 + context: scripts/ + tags: tindy2013/subconverter:${{steps.version.outputs.result}} + build-args: | + THREADS=1 + outputs: | + type=image,push=true