Forráskód Böngészése

feat: add github compilation workflows

Yeuoly 9 hónapja%!(EXTRA string=óta)
szülő
commit
bda1ca4d70
1 módosított fájl, 119 hozzáadás és 0 törlés
  1. 119 0
      .github/workflows/build-push.yml

+ 119 - 0
.github/workflows/build-push.yml

@@ -0,0 +1,119 @@
+name: Build and Push Daemon
+
+on:
+  push:
+    branches:
+      - "main"
+      - "deploy/dev"
+  release:
+    types: [published]
+
+concurrency:
+  group: build-push-${{ github.head_ref || github.run_id }}
+  cancel-in-progress: true
+
+env:
+  DOCKERHUB_USER: ${{ secrets.DOCKERHUB_USER }}
+  DOCKERHUB_TOKEN: ${{ secrets.DOCKERHUB_TOKEN }}
+  DIFY_DAEMON_IMAGE_NAME: ${{ vars.DIFY_DAEMON_IMAGE_NAME || 'langgenius/dify-plugin-daemon' }}
+
+jobs:
+  build:
+    runs-on: ${{ matrix.platform == 'linux/arm64' && 'arm64_runner' || 'ubuntu-latest' }}
+    if: github.repository == 'langgenius/dify'
+    strategy:
+      matrix:
+        include:
+          - service_name: "build-serverless-daemon-amd64"
+            image_name_env: "DIFY_DAEMON_IMAGE_NAME"
+            platform: linux/amd64
+            dockerfile: "docker/serverless/Dockerfile"
+            scope: serverless
+          - service_name: "build-serverless-daemon-arm64"
+            image_name_env: "DIFY_DAEMON_IMAGE_NAME"
+            platform: linux/arm64
+            dockerfile: "docker/serverless/Dockerfile"
+            scope: serverless
+          - service_name: "build-local-daemon-amd64"
+            image_name_env: "DIFY_DAEMON_IMAGE_NAME"
+            platform: linux/amd64
+            dockerfile: "docker/local/Dockerfile"
+            scope: local
+          - service_name: "build-local-daemon-arm64"
+            image_name_env: "DIFY_DAEMON_IMAGE_NAME"
+            platform: linux/arm64
+            dockerfile: "docker/local/Dockerfile"
+            scope: local
+    steps:
+      - name: Checkout code
+        uses: actions/checkout@v3
+
+      - name: Prepare
+        run: |
+          platform=${{ matrix.platform }}
+          echo "PLATFORM_PAIR=${platform//\//-}" >> $GITHUB_ENV
+          echo "GITHUB_SHA_SHORT=$(echo $GITHUB_SHA | cut -c 1-7)" >> $GITHUB_ENV
+          echo "BRANCH_NAME=$(echo ${GITHUB_REF#refs/heads/})" >> $GITHUB_ENV
+
+      - name: Login to Docker Hub
+        uses: docker/login-action@v2
+        with:
+          username: ${{ env.DOCKERHUB_USER }}
+          password: ${{ env.DOCKERHUB_TOKEN }}
+
+      - name: Set up QEMU
+        uses: docker/setup-qemu-action@v3
+
+      - name: Set up Docker Buildx
+        uses: docker/setup-buildx-action@v3
+
+      - name: Build and push
+        uses: docker/build-push-action@v4
+        with:
+          context: .
+          file: ${{ matrix.dockerfile }}
+          platforms: ${{ matrix.platform }}
+          push: true
+          tags: |
+            ${{ env.DIFY_DAEMON_IMAGE_NAME }}:${{ matrix.scope }}-latest
+            ${{ env.DIFY_DAEMON_IMAGE_NAME }}:${{ matrix.scope }}-${{ env.GITHUB_SHA_SHORT }}
+            ${{ env.DIFY_DAEMON_IMAGE_NAME }}:${{ matrix.scope }}-${{ env.BRANCH_NAME }}
+          cache-from: type=gha,scope=${{ matrix.service_name }}
+          cache-to: type=gha,mode=max,scope=${{ matrix.service_name }}
+
+  create-manifest:
+    needs: build
+    runs-on: ubuntu-latest
+    if: github.repository == 'langgenius/dify'
+    strategy:
+      matrix:
+        scope: [serverless, local]
+    steps:
+      - name: Login to Docker Hub
+        uses: docker/login-action@v2
+        with:
+          username: ${{ env.DOCKERHUB_USER }}
+          password: ${{ env.DOCKERHUB_TOKEN }}
+
+      - name: Create and push manifest
+        run: |
+          docker manifest create ${{ env.DIFY_DAEMON_IMAGE_NAME }}:${{ matrix.scope }}-latest \
+            ${{ env.DIFY_DAEMON_IMAGE_NAME }}:${{ matrix.scope }}-latest-linux-amd64 \
+            ${{ env.DIFY_DAEMON_IMAGE_NAME }}:${{ matrix.scope }}-latest-linux-arm64
+          docker manifest push ${{ env.DIFY_DAEMON_IMAGE_NAME }}:${{ matrix.scope }}-latest
+
+          docker manifest create ${{ env.DIFY_DAEMON_IMAGE_NAME }}:${{ matrix.scope }}-${{ env.GITHUB_SHA_SHORT }} \
+            ${{ env.DIFY_DAEMON_IMAGE_NAME }}:${{ matrix.scope }}-${{ env.GITHUB_SHA_SHORT }}-linux-amd64 \
+            ${{ env.DIFY_DAEMON_IMAGE_NAME }}:${{ matrix.scope }}-${{ env.GITHUB_SHA_SHORT }}-linux-arm64
+          docker manifest push ${{ env.DIFY_DAEMON_IMAGE_NAME }}:${{ matrix.scope }}-${{ env.GITHUB_SHA_SHORT }}
+
+          docker manifest create ${{ env.DIFY_DAEMON_IMAGE_NAME }}:${{ matrix.scope }}-${{ env.BRANCH_NAME }} \
+            ${{ env.DIFY_DAEMON_IMAGE_NAME }}:${{ matrix.scope }}-${{ env.BRANCH_NAME }}-linux-amd64 \
+            ${{ env.DIFY_DAEMON_IMAGE_NAME }}:${{ matrix.scope }}-${{ env.BRANCH_NAME }}-linux-arm64
+          docker manifest push ${{ env.DIFY_DAEMON_IMAGE_NAME }}:${{ matrix.scope }}-${{ env.BRANCH_NAME }}
+
+      - name: Inspect images
+        run: |
+          docker buildx imagetools inspect ${{ env.DIFY_DAEMON_IMAGE_NAME }}:${{ matrix.scope }}-latest
+          docker buildx imagetools inspect ${{ env.DIFY_DAEMON_IMAGE_NAME }}:${{ matrix.scope }}-${{ env.GITHUB_SHA_SHORT }}
+          docker buildx imagetools inspect ${{ env.DIFY_DAEMON_IMAGE_NAME }}:${{ matrix.scope }}-${{ env.BRANCH_NAME }}