build-push.yml 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. name: Build and Push API & Web
  2. on:
  3. push:
  4. branches:
  5. - "main"
  6. - "deploy/dev"
  7. release:
  8. types: [published]
  9. env:
  10. DOCKERHUB_USER: ${{ secrets.DOCKERHUB_USER }}
  11. DOCKERHUB_TOKEN: ${{ secrets.DOCKERHUB_TOKEN }}
  12. DIFY_WEB_IMAGE_NAME: ${{ vars.DIFY_WEB_IMAGE_NAME || 'langgenius/dify-web' }}
  13. DIFY_API_IMAGE_NAME: ${{ vars.DIFY_API_IMAGE_NAME || 'langgenius/dify-api' }}
  14. jobs:
  15. build-and-push:
  16. runs-on: ubuntu-latest
  17. if: github.event.pull_request.draft == false
  18. strategy:
  19. matrix:
  20. include:
  21. - service_name: "web"
  22. image_name_env: "DIFY_WEB_IMAGE_NAME"
  23. context: "web"
  24. - service_name: "api"
  25. image_name_env: "DIFY_API_IMAGE_NAME"
  26. context: "api"
  27. steps:
  28. - name: Set up QEMU
  29. uses: docker/setup-qemu-action@v3
  30. - name: Set up Docker Buildx
  31. uses: docker/setup-buildx-action@v3
  32. - name: Login to Docker Hub
  33. uses: docker/login-action@v2
  34. with:
  35. username: ${{ env.DOCKERHUB_USER }}
  36. password: ${{ env.DOCKERHUB_TOKEN }}
  37. - name: Extract metadata (tags, labels) for Docker
  38. id: meta
  39. uses: docker/metadata-action@v5
  40. with:
  41. images: ${{ env[matrix.image_name_env] }}
  42. tags: |
  43. type=raw,value=latest,enable=${{ startsWith(github.ref, 'refs/tags/') }}
  44. type=ref,event=branch
  45. type=sha,enable=true,priority=100,prefix=,suffix=,format=long
  46. type=raw,value=${{ github.ref_name }},enable=${{ startsWith(github.ref, 'refs/tags/') }}
  47. - name: Build and push
  48. uses: docker/build-push-action@v5
  49. with:
  50. context: "{{defaultContext}}:${{ matrix.context }}"
  51. platforms: ${{ startsWith(github.ref, 'refs/tags/') && 'linux/amd64,linux/arm64' || 'linux/amd64' }}
  52. build-args: COMMIT_SHA=${{ fromJSON(steps.meta.outputs.json).labels['org.opencontainers.image.revision'] }}
  53. push: true
  54. tags: ${{ steps.meta.outputs.tags }}
  55. labels: ${{ steps.meta.outputs.labels }}
  56. cache-from: type=gha
  57. cache-to: type=gha,mode=max