Team Ai
Apppublic

Underground-Digital/Workflow-Engine

sourceHugging Faceupdated 2y agoView on Hugging Face
0likes
build-push.yml142 linesDownload Raw Back to workflows
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