name: Publish Docker Image on: push: branches: [ master ] tags: - '**' concurrency: group: ${{ github.ref }}-${{ github.workflow }} cancel-in-progress: true 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: Docker login uses: docker/login-action@v2 with: username: ${{ secrets.DOCKER_USERNAME }} password: ${{ secrets.DOCKER_PASSWORD }} - name: Get commit SHA id: vars run: echo "sha_short=$(git rev-parse --short HEAD)" >> $GITHUB_OUTPUT - 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: asdlokj1qpi23/subconverter:latest build-args: | SHA=${{ steps.vars.outputs.sha_short }} outputs: type=image,push=true - name: Replace tag without `v` if: startsWith(github.ref, 'refs/tags/') uses: actions/github-script@v6 id: version with: script: | return context.payload.ref.replace(/\/?refs\/tags\/v/, '') result-encoding: string - name: Build release and export id: build_rel if: startsWith(github.ref, 'refs/tags/') uses: docker/build-push-action@v3 with: platforms: linux/amd64 context: scripts/ tags: asdlokj1qpi23/subconverter:${{steps.version.outputs.result}} outputs: type=image,push=true - name: Save digest if: github.ref == 'refs/heads/master' run: echo ${{ steps.build.outputs.digest }} > /tmp/digest.txt - name: Save release digest if: startsWith(github.ref, 'refs/tags/') run: echo ${{ steps.build_rel.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: Docker login uses: docker/login-action@v2 with: username: ${{ secrets.DOCKER_USERNAME }} password: ${{ secrets.DOCKER_PASSWORD }} - name: Get commit SHA id: vars run: echo "sha_short=$(git rev-parse --short HEAD)" >> $GITHUB_OUTPUT - 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: asdlokj1qpi23/subconverter:latest-x86 build-args: | SHA=${{ steps.vars.outputs.sha_short }} outputs: type=image,push=true - name: Replace tag without `v` if: startsWith(github.ref, 'refs/tags/') uses: actions/github-script@v6 id: version with: script: | return context.payload.ref.replace(/\/?refs\/tags\/v/, '') result-encoding: string - name: Build release and export id: build_rel if: startsWith(github.ref, 'refs/tags/') uses: docker/build-push-action@v3 with: platforms: linux/386 context: scripts/ tags: asdlokj1qpi23/subconverter:${{steps.version.outputs.result}}-x86 outputs: type=image,push=true - name: Save digest if: github.ref == 'refs/heads/master' run: echo ${{ steps.build.outputs.digest }} > /tmp/digest.txt - name: Save release digest if: startsWith(github.ref, 'refs/tags/') run: echo ${{ steps.build_rel.outputs.digest }} > /tmp/digest.txt - name: Upload artifact uses: actions/upload-artifact@v3 with: name: digest_386 path: /tmp/digest.txt armv7_build: name: Build ARMv7 Image runs-on: [self-hosted, linux, ARM] steps: - name: Checkout base uses: actions/checkout@v3 with: fetch-depth: 0 - name: Set up Docker Buildx uses: docker/setup-buildx-action@v2 - 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 "sha_short=$(git rev-parse --short HEAD)" >> $GITHUB_OUTPUT - name: Build and export id: build if: github.ref == 'refs/heads/master' uses: docker/build-push-action@v3 with: platforms: linux/arm/v7 context: scripts/ tags: asdlokj1qpi23/subconverter:latest-armv7 build-args: | SHA=${{ steps.vars.outputs.sha_short }} THREADS=4 outputs: type=image,push=true - name: Replace tag without `v` if: startsWith(github.ref, 'refs/tags/') uses: actions/github-script@v6 id: version with: script: | return context.payload.ref.replace(/\/?refs\/tags\/v/, '') result-encoding: string - name: Build release and export id: build_rel if: startsWith(github.ref, 'refs/tags/') uses: docker/build-push-action@v3 with: platforms: linux/arm/v7 context: scripts/ tags: asdlokj1qpi23/subconverter:${{steps.version.outputs.result}}-armv7 build-args: | THREADS=4 outputs: type=image,push=true - name: Save digest if: github.ref == 'refs/heads/master' run: echo ${{ steps.build.outputs.digest }} > /tmp/digest.txt - name: Save release digest if: startsWith(github.ref, 'refs/tags/') run: echo ${{ steps.build_rel.outputs.digest }} > /tmp/digest.txt - name: Upload artifact uses: actions/upload-artifact@v3 with: name: digest_armv7 path: /tmp/digest.txt arm64_build: name: Build ARM64 Image runs-on: [self-hosted, linux, ARM64] steps: - name: Checkout base uses: actions/checkout@v3 with: fetch-depth: 0 - name: Set up Docker Buildx uses: docker/setup-buildx-action@v2 - 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 "sha_short=$(git rev-parse --short HEAD)" >> $GITHUB_OUTPUT - 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: asdlokj1qpi23/subconverter:latest-arm64 build-args: | SHA=${{ steps.vars.outputs.sha_short }} THREADS=4 outputs: type=image,push=true - name: Replace tag without `v` if: startsWith(github.ref, 'refs/tags/') uses: actions/github-script@v6 id: version with: script: | return context.payload.ref.replace(/\/?refs\/tags\/v/, '') result-encoding: string - name: Build release and export id: build_rel if: startsWith(github.ref, 'refs/tags/') uses: docker/build-push-action@v3 with: platforms: linux/arm64 context: scripts/ tags: asdlokj1qpi23/subconverter:${{steps.version.outputs.result}}-arm64 build-args: | THREADS=4 outputs: type=image,push=true - name: Save digest if: github.ref == 'refs/heads/master' run: echo ${{ steps.build.outputs.digest }} > /tmp/digest.txt - name: Save release digest if: startsWith(github.ref, 'refs/tags/') run: echo ${{ steps.build_rel.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, armv7_build, arm64_build] runs-on: ubuntu-latest steps: - name: Checkout base uses: actions/checkout@v3 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/images/ - name: Docker login uses: docker/login-action@v2 with: username: ${{ secrets.DOCKER_USERNAME }} password: ${{ secrets.DOCKER_PASSWORD }} - name: Replace tag without `v` if: startsWith(github.ref, 'refs/tags/') uses: actions/github-script@v6 id: version with: script: | return context.payload.ref.replace(/\/?refs\/tags\/v/, '') result-encoding: string - name: Merge and push manifest on master branch if: github.ref == 'refs/heads/master' run: python scripts/merge_manifest.py - name: Merge and push manifest on release if: startsWith(github.ref, 'refs/tags/') run: python scripts/merge_manifest.py ${{steps.version.outputs.result}}