Underground-Digital/Workflow-Engine
0
1name: Build and Push API & Web2 3on:4 push:5 branches:6 - "main"7 - "deploy/dev"8 release:9 types: [published]10 11concurrency:12 group: build-push-${{ github.head_ref || github.run_id }}13 cancel-in-progress: true14 15env:16 DOCKERHUB_USER: ${{ secrets.DOCKERHUB_USER }}17 DOCKERHUB_TOKEN: ${{ secrets.DOCKERHUB_TOKEN }}18 DIFY_WEB_IMAGE_NAME: ${{ vars.DIFY_WEB_IMAGE_NAME || 'langgenius/dify-web' }}19 DIFY_API_IMAGE_NAME: ${{ vars.DIFY_API_IMAGE_NAME || 'langgenius/dify-api' }}20 21jobs:22 build:23 runs-on: ${{ matrix.platform == 'linux/arm64' && 'arm64_runner' || 'ubuntu-latest' }}24 if: github.repository == 'langgenius/dify'25 strategy:26 matrix:27 include:28 - service_name: "build-api-amd64"29 image_name_env: "DIFY_API_IMAGE_NAME"30 context: "api"31 platform: linux/amd6432 - service_name: "build-api-arm64"33 image_name_env: "DIFY_API_IMAGE_NAME"34 context: "api"35 platform: linux/arm6436 - service_name: "build-web-amd64"37 image_name_env: "DIFY_WEB_IMAGE_NAME"38 context: "web"39 platform: linux/amd6440 - service_name: "build-web-arm64"41 image_name_env: "DIFY_WEB_IMAGE_NAME"42 context: "web"43 platform: linux/arm6444 45 steps:46 - name: Prepare47 run: |48 platform=${{ matrix.platform }}49 echo "PLATFORM_PAIR=${platform//\//-}" >> $GITHUB_ENV50 51 - name: Login to Docker Hub52 uses: docker/login-action@v353 with:54 username: ${{ env.DOCKERHUB_USER }}55 password: ${{ env.DOCKERHUB_TOKEN }}56 57 - name: Set up QEMU58 uses: docker/setup-qemu-action@v359 60 - name: Set up Docker Buildx61 uses: docker/setup-buildx-action@v362 63 - name: Extract metadata for Docker64 id: meta65 uses: docker/metadata-action@v566 with:67 images: ${{ env[matrix.image_name_env] }}68 69 - name: Build Docker image70 id: build71 uses: docker/build-push-action@v672 with:73 context: "{{defaultContext}}:${{ matrix.context }}"74 platforms: ${{ matrix.platform }}75 build-args: COMMIT_SHA=${{ fromJSON(steps.meta.outputs.json).labels['org.opencontainers.image.revision'] }}76 labels: ${{ steps.meta.outputs.labels }}77 outputs: type=image,name=${{ env[matrix.image_name_env] }},push-by-digest=true,name-canonical=true,push=true78 cache-from: type=gha,scope=${{ matrix.service_name }}79 cache-to: type=gha,mode=max,scope=${{ matrix.service_name }}80 81 - name: Export digest82 run: |83 mkdir -p /tmp/digests84 digest="${{ steps.build.outputs.digest }}"85 touch "/tmp/digests/${digest#sha256:}"86 87 - name: Upload digest88 uses: actions/upload-artifact@v489 with:90 name: digests-${{ matrix.context }}-${{ env.PLATFORM_PAIR }}91 path: /tmp/digests/*92 if-no-files-found: error93 retention-days: 194 95 create-manifest:96 needs: build97 runs-on: ubuntu-latest98 if: github.repository == 'langgenius/dify'99 strategy:100 matrix:101 include:102 - service_name: "merge-api-images"103 image_name_env: "DIFY_API_IMAGE_NAME"104 context: "api"105 - service_name: "merge-web-images"106 image_name_env: "DIFY_WEB_IMAGE_NAME"107 context: "web"108 steps:109 - name: Download digests110 uses: actions/download-artifact@v4111 with:112 path: /tmp/digests113 pattern: digests-${{ matrix.context }}-*114 merge-multiple: true115 116 - name: Login to Docker Hub117 uses: docker/login-action@v3118 with:119 username: ${{ env.DOCKERHUB_USER }}120 password: ${{ env.DOCKERHUB_TOKEN }}121 122 - name: Extract metadata for Docker123 id: meta124 uses: docker/metadata-action@v5125 with:126 images: ${{ env[matrix.image_name_env] }}127 tags: |128 type=raw,value=latest,enable=${{ startsWith(github.ref, 'refs/tags/') && !contains(github.ref, '-') }}129 type=ref,event=branch130 type=sha,enable=true,priority=100,prefix=,suffix=,format=long131 type=raw,value=${{ github.ref_name }},enable=${{ startsWith(github.ref, 'refs/tags/') }}132 133 - name: Create manifest list and push134 working-directory: /tmp/digests135 run: |136 docker buildx imagetools create $(jq -cr '.tags | map("-t " + .) | join(" ")' <<< "$DOCKER_METADATA_OUTPUT_JSON") \137 $(printf '${{ env[matrix.image_name_env] }}@sha256:%s ' *)138 139 - name: Inspect image140 run: |141 docker buildx imagetools inspect ${{ env[matrix.image_name_env] }}:${{ steps.meta.outputs.version }}142 