mirror of
https://github.com/hpd840321/craftlabs-authorization-sdk.git
synced 2026-06-10 02:20:28 +08:00
105 lines
3.8 KiB
YAML
105 lines
3.8 KiB
YAML
# Gitea Actions: 平台部署流水线
|
||
# 触发条件:推送 main 分支 或 手动触发
|
||
# 运行环境:self-hosted runner(需要安装 docker + docker-compose)
|
||
|
||
name: deploy
|
||
|
||
on:
|
||
push:
|
||
branches: [main]
|
||
paths:
|
||
- "services/**"
|
||
- "web/**"
|
||
- "services/docker-compose.yml"
|
||
workflow_dispatch:
|
||
|
||
env:
|
||
REGISTRY: gitea.craftlabs.cn/craftlabs
|
||
API_IMAGE: delivery-platform-api
|
||
WEBHOOK_IMAGE: license-webhook-ingress
|
||
UI_IMAGE: delivery-platform-ui
|
||
|
||
jobs:
|
||
build-and-deploy:
|
||
runs-on: ubuntu-latest # self-hosted runner 需注册该标签
|
||
steps:
|
||
- name: Checkout
|
||
uses: actions/checkout@v4
|
||
|
||
# ============ 后端 API ============
|
||
- name: Setup Java
|
||
uses: actions/setup-java@v4
|
||
with:
|
||
distribution: temurin
|
||
java-version: "17"
|
||
cache: maven
|
||
|
||
- name: Build delivery-platform-api
|
||
run: |
|
||
mvn -f services/pom.xml -pl delivery-platform-api -am -DskipTests clean package -q
|
||
|
||
- name: Build API Docker image
|
||
run: |
|
||
docker build -t ${{ env.REGISTRY }}/${{ env.API_IMAGE }}:${{ github.sha }} \
|
||
-t ${{ env.REGISTRY }}/${{ env.API_IMAGE }}:latest \
|
||
services/delivery-platform-api
|
||
|
||
# ============ Webhook ============
|
||
- name: Build license-webhook-ingress
|
||
run: |
|
||
mvn -f services/pom.xml -pl license-webhook-ingress -am -DskipTests clean package -q
|
||
|
||
- name: Build Webhook Docker image
|
||
run: |
|
||
docker build -t ${{ env.REGISTRY }}/${{ env.WEBHOOK_IMAGE }}:${{ github.sha }} \
|
||
-t ${{ env.REGISTRY }}/${{ env.WEBHOOK_IMAGE }}:latest \
|
||
services/license-webhook-ingress
|
||
|
||
# ============ 前端 ============
|
||
- name: Setup Node
|
||
uses: actions/setup-node@v4
|
||
with:
|
||
node-version: "20"
|
||
|
||
- name: Build frontend
|
||
working-directory: web/delivery-platform-ui
|
||
run: |
|
||
npm install
|
||
npm run build
|
||
|
||
- name: Build Frontend Docker image
|
||
run: |
|
||
docker build -t ${{ env.REGISTRY }}/${{ env.UI_IMAGE }}:${{ github.sha }} \
|
||
-t ${{ env.REGISTRY }}/${{ env.UI_IMAGE }}:latest \
|
||
web/delivery-platform-ui
|
||
|
||
# ============ 推送镜像到 Gitea Registry ============
|
||
- name: Login to Gitea Container Registry
|
||
run: echo "${{ secrets.GITEA_REGISTRY_TOKEN }}" | docker login gitea.craftlabs.cn -u "${{ secrets.GITEA_REGISTRY_USER }}" --password-stdin
|
||
|
||
- name: Push images
|
||
run: |
|
||
docker push ${{ env.REGISTRY }}/${{ env.API_IMAGE }}:${{ github.sha }}
|
||
docker push ${{ env.REGISTRY }}/${{ env.API_IMAGE }}:latest
|
||
docker push ${{ env.REGISTRY }}/${{ env.WEBHOOK_IMAGE }}:${{ github.sha }}
|
||
docker push ${{ env.REGISTRY }}/${{ env.WEBHOOK_IMAGE }}:latest
|
||
docker push ${{ env.REGISTRY }}/${{ env.UI_IMAGE }}:${{ github.sha }}
|
||
docker push ${{ env.REGISTRY }}/${{ env.UI_IMAGE }}:latest
|
||
|
||
# ============ 远程部署 ============
|
||
- name: Deploy via docker-compose
|
||
env:
|
||
DB_PASSWORD: ${{ secrets.DB_PASSWORD }}
|
||
PLATFORM_JWT_SECRET: ${{ secrets.PLATFORM_JWT_SECRET }}
|
||
CRAFTLABS_WEBHOOK_EXPECTED_TOKEN: ${{ secrets.WEBHOOK_TOKEN }}
|
||
run: |
|
||
# 将 docker-compose.yml 复制到部署目录并替换镜像版本
|
||
mkdir -p /opt/craftlabs/deploy
|
||
cp services/docker-compose.yml /opt/craftlabs/deploy/
|
||
cd /opt/craftlabs/deploy
|
||
export API_IMAGE_TAG=${{ env.REGISTRY }}/${{ env.API_IMAGE }}:${{ github.sha }}
|
||
export WEBHOOK_IMAGE_TAG=${{ env.REGISTRY }}/${{ env.WEBHOOK_IMAGE }}:${{ github.sha }}
|
||
export UI_IMAGE_TAG=${{ env.REGISTRY }}/${{ env.UI_IMAGE }}:${{ github.sha }}
|
||
docker compose pull
|
||
docker compose up -d --remove-orphans
|