mirror of
https://github.com/langgenius/dify.git
synced 2024-11-16 03:32:23 +08:00
Refactor: Streamline the build-push and deploy-dev workflow (#2852)
This commit is contained in:
parent
056331981e
commit
15a6d94953
|
@ -1,17 +1,32 @@
|
||||||
name: Build and Push API Image
|
name: Build and Push API & Web
|
||||||
|
|
||||||
on:
|
on:
|
||||||
push:
|
push:
|
||||||
branches:
|
branches:
|
||||||
- 'main'
|
- "main"
|
||||||
- 'deploy/dev'
|
- "deploy/dev"
|
||||||
release:
|
release:
|
||||||
types: [ published ]
|
types: [published]
|
||||||
|
|
||||||
|
env:
|
||||||
|
DOCKERHUB_USER: ${{ secrets.DOCKERHUB_USER }}
|
||||||
|
DOCKERHUB_TOKEN: ${{ secrets.DOCKERHUB_TOKEN }}
|
||||||
|
DIFY_WEB_IMAGE_NAME: ${{ vars.DIFY_WEB_IMAGE_NAME || 'langgenius/dify-web' }}
|
||||||
|
DIFY_API_IMAGE_NAME: ${{ vars.DIFY_API_IMAGE_NAME || 'langgenius/dify-api' }}
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
build-and-push:
|
build-and-push:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
if: github.event.pull_request.draft == false
|
if: github.event.pull_request.draft == false
|
||||||
|
strategy:
|
||||||
|
matrix:
|
||||||
|
include:
|
||||||
|
- service_name: "web"
|
||||||
|
image_name_env: "DIFY_WEB_IMAGE_NAME"
|
||||||
|
context: "web"
|
||||||
|
- service_name: "api"
|
||||||
|
image_name_env: "DIFY_API_IMAGE_NAME"
|
||||||
|
context: "api"
|
||||||
steps:
|
steps:
|
||||||
- name: Set up QEMU
|
- name: Set up QEMU
|
||||||
uses: docker/setup-qemu-action@v3
|
uses: docker/setup-qemu-action@v3
|
||||||
|
@ -22,14 +37,14 @@ jobs:
|
||||||
- name: Login to Docker Hub
|
- name: Login to Docker Hub
|
||||||
uses: docker/login-action@v2
|
uses: docker/login-action@v2
|
||||||
with:
|
with:
|
||||||
username: ${{ secrets.DOCKERHUB_USER }}
|
username: ${{ env.DOCKERHUB_USER }}
|
||||||
password: ${{ secrets.DOCKERHUB_TOKEN }}
|
password: ${{ env.DOCKERHUB_TOKEN }}
|
||||||
|
|
||||||
- name: Extract metadata (tags, labels) for Docker
|
- name: Extract metadata (tags, labels) for Docker
|
||||||
id: meta
|
id: meta
|
||||||
uses: docker/metadata-action@v5
|
uses: docker/metadata-action@v5
|
||||||
with:
|
with:
|
||||||
images: langgenius/dify-api
|
images: ${{ env[matrix.image_name_env] }}
|
||||||
tags: |
|
tags: |
|
||||||
type=raw,value=latest,enable=${{ startsWith(github.ref, 'refs/tags/') }}
|
type=raw,value=latest,enable=${{ startsWith(github.ref, 'refs/tags/') }}
|
||||||
type=ref,event=branch
|
type=ref,event=branch
|
||||||
|
@ -39,22 +54,11 @@ jobs:
|
||||||
- name: Build and push
|
- name: Build and push
|
||||||
uses: docker/build-push-action@v5
|
uses: docker/build-push-action@v5
|
||||||
with:
|
with:
|
||||||
context: "{{defaultContext}}:api"
|
context: "{{defaultContext}}:${{ matrix.context }}"
|
||||||
platforms: ${{ startsWith(github.ref, 'refs/tags/') && 'linux/amd64,linux/arm64' || 'linux/amd64' }}
|
platforms: ${{ startsWith(github.ref, 'refs/tags/') && 'linux/amd64,linux/arm64' || 'linux/amd64' }}
|
||||||
build-args: |
|
build-args: COMMIT_SHA=${{ fromJSON(steps.meta.outputs.json).labels['org.opencontainers.image.revision'] }}
|
||||||
COMMIT_SHA=${{ fromJSON(steps.meta.outputs.json).labels['org.opencontainers.image.revision'] }}
|
|
||||||
push: true
|
push: true
|
||||||
tags: ${{ steps.meta.outputs.tags }}
|
tags: ${{ steps.meta.outputs.tags }}
|
||||||
labels: ${{ steps.meta.outputs.labels }}
|
labels: ${{ steps.meta.outputs.labels }}
|
||||||
cache-from: type=gha
|
cache-from: type=gha
|
||||||
cache-to: type=gha,mode=max
|
cache-to: type=gha,mode=max
|
||||||
|
|
||||||
- name: Deploy to server
|
|
||||||
if: github.ref == 'refs/heads/deploy/dev'
|
|
||||||
uses: appleboy/ssh-action@v0.1.8
|
|
||||||
with:
|
|
||||||
host: ${{ secrets.SSH_HOST }}
|
|
||||||
username: ${{ secrets.SSH_USER }}
|
|
||||||
key: ${{ secrets.SSH_PRIVATE_KEY }}
|
|
||||||
script: |
|
|
||||||
${{ secrets.SSH_SCRIPT }}
|
|
60
.github/workflows/build-web-image.yml
vendored
60
.github/workflows/build-web-image.yml
vendored
|
@ -1,60 +0,0 @@
|
||||||
name: Build and Push WEB Image
|
|
||||||
|
|
||||||
on:
|
|
||||||
push:
|
|
||||||
branches:
|
|
||||||
- 'main'
|
|
||||||
- 'deploy/dev'
|
|
||||||
release:
|
|
||||||
types: [ published ]
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
build-and-push:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
if: github.event.pull_request.draft == false
|
|
||||||
steps:
|
|
||||||
- name: Set up QEMU
|
|
||||||
uses: docker/setup-qemu-action@v3
|
|
||||||
|
|
||||||
- name: Set up Docker Buildx
|
|
||||||
uses: docker/setup-buildx-action@v3
|
|
||||||
|
|
||||||
- name: Login to Docker Hub
|
|
||||||
uses: docker/login-action@v2
|
|
||||||
with:
|
|
||||||
username: ${{ secrets.DOCKERHUB_USER }}
|
|
||||||
password: ${{ secrets.DOCKERHUB_TOKEN }}
|
|
||||||
|
|
||||||
- name: Extract metadata (tags, labels) for Docker
|
|
||||||
id: meta
|
|
||||||
uses: docker/metadata-action@v5
|
|
||||||
with:
|
|
||||||
images: langgenius/dify-web
|
|
||||||
tags: |
|
|
||||||
type=raw,value=latest,enable=${{ startsWith(github.ref, 'refs/tags/') }}
|
|
||||||
type=ref,event=branch
|
|
||||||
type=sha,enable=true,priority=100,prefix=,suffix=,format=long
|
|
||||||
type=raw,value=${{ github.ref_name }},enable=${{ startsWith(github.ref, 'refs/tags/') }}
|
|
||||||
|
|
||||||
- name: Build and push
|
|
||||||
uses: docker/build-push-action@v5
|
|
||||||
with:
|
|
||||||
context: "{{defaultContext}}:web"
|
|
||||||
platforms: ${{ startsWith(github.ref, 'refs/tags/') && 'linux/amd64,linux/arm64' || 'linux/amd64' }}
|
|
||||||
build-args: |
|
|
||||||
COMMIT_SHA=${{ fromJSON(steps.meta.outputs.json).labels['org.opencontainers.image.revision'] }}
|
|
||||||
push: true
|
|
||||||
tags: ${{ steps.meta.outputs.tags }}
|
|
||||||
labels: ${{ steps.meta.outputs.labels }}
|
|
||||||
cache-from: type=gha
|
|
||||||
cache-to: type=gha,mode=max
|
|
||||||
|
|
||||||
- name: Deploy to server
|
|
||||||
if: github.ref == 'refs/heads/deploy/dev'
|
|
||||||
uses: appleboy/ssh-action@v0.1.8
|
|
||||||
with:
|
|
||||||
host: ${{ secrets.SSH_HOST }}
|
|
||||||
username: ${{ secrets.SSH_USER }}
|
|
||||||
key: ${{ secrets.SSH_PRIVATE_KEY }}
|
|
||||||
script: |
|
|
||||||
${{ secrets.SSH_SCRIPT }}
|
|
24
.github/workflows/deploy-dev.yml
vendored
Normal file
24
.github/workflows/deploy-dev.yml
vendored
Normal file
|
@ -0,0 +1,24 @@
|
||||||
|
name: Deploy Dev
|
||||||
|
|
||||||
|
on:
|
||||||
|
workflow_run:
|
||||||
|
workflows: ["Build and Push API & Web"]
|
||||||
|
branches:
|
||||||
|
- "deploy/dev"
|
||||||
|
types:
|
||||||
|
- completed
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
deploy:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
if: |
|
||||||
|
github.event.workflow_run.conclusion == 'success'
|
||||||
|
steps:
|
||||||
|
- name: Deploy to server
|
||||||
|
uses: appleboy/ssh-action@v0.1.8
|
||||||
|
with:
|
||||||
|
host: ${{ secrets.SSH_HOST }}
|
||||||
|
username: ${{ secrets.SSH_USER }}
|
||||||
|
key: ${{ secrets.SSH_PRIVATE_KEY }}
|
||||||
|
script: |
|
||||||
|
${{ vars.SSH_SCRIPT || secrets.SSH_SCRIPT }}
|
43
Makefile
Normal file
43
Makefile
Normal file
|
@ -0,0 +1,43 @@
|
||||||
|
# Variables
|
||||||
|
DOCKER_REGISTRY=langgenius
|
||||||
|
WEB_IMAGE=$(DOCKER_REGISTRY)/dify-web
|
||||||
|
API_IMAGE=$(DOCKER_REGISTRY)/dify-api
|
||||||
|
VERSION=latest
|
||||||
|
|
||||||
|
# Build Docker images
|
||||||
|
build-web:
|
||||||
|
@echo "Building web Docker image: $(WEB_IMAGE):$(VERSION)..."
|
||||||
|
docker build -t $(WEB_IMAGE):$(VERSION) ./web
|
||||||
|
@echo "Web Docker image built successfully: $(WEB_IMAGE):$(VERSION)"
|
||||||
|
|
||||||
|
build-api:
|
||||||
|
@echo "Building API Docker image: $(API_IMAGE):$(VERSION)..."
|
||||||
|
docker build -t $(API_IMAGE):$(VERSION) ./api
|
||||||
|
@echo "API Docker image built successfully: $(API_IMAGE):$(VERSION)"
|
||||||
|
|
||||||
|
# Push Docker images
|
||||||
|
push-web:
|
||||||
|
@echo "Pushing web Docker image: $(WEB_IMAGE):$(VERSION)..."
|
||||||
|
docker push $(WEB_IMAGE):$(VERSION)
|
||||||
|
@echo "Web Docker image pushed successfully: $(WEB_IMAGE):$(VERSION)"
|
||||||
|
|
||||||
|
push-api:
|
||||||
|
@echo "Pushing API Docker image: $(API_IMAGE):$(VERSION)..."
|
||||||
|
docker push $(API_IMAGE):$(VERSION)
|
||||||
|
@echo "API Docker image pushed successfully: $(API_IMAGE):$(VERSION)"
|
||||||
|
|
||||||
|
# Build all images
|
||||||
|
build-all: build-web build-api
|
||||||
|
|
||||||
|
# Push all images
|
||||||
|
push-all: push-web push-api
|
||||||
|
|
||||||
|
build-push-api: build-api push-api
|
||||||
|
build-push-web: build-web push-web
|
||||||
|
|
||||||
|
# Build and push all images
|
||||||
|
build-push-all: build-all push-all
|
||||||
|
@echo "All Docker images have been built and pushed."
|
||||||
|
|
||||||
|
# Phony targets
|
||||||
|
.PHONY: build-web build-api push-web push-api build-all push-all build-push-all
|
Loading…
Reference in New Issue
Block a user