This commit is contained in:
shanshanzhong 2025-09-25 11:43:59 -07:00
parent 71dbb921ff
commit d37e2abf0d
2 changed files with 76 additions and 17 deletions

View File

@ -14,6 +14,12 @@ env:
TELEGRAM_BOT_TOKEN: 8114337882:AAHkEx03HSu7RxN4IHBJJEnsK9aPPzNLIk0 TELEGRAM_BOT_TOKEN: 8114337882:AAHkEx03HSu7RxN4IHBJJEnsK9aPPzNLIk0
TELEGRAM_CHAT_ID: "-4940243803" TELEGRAM_CHAT_ID: "-4940243803"
DOCKER_REGISTRY: registry.kxsw.us DOCKER_REGISTRY: registry.kxsw.us
DOCKER_BUILDKIT: 1
# Host SSH
SSH_HOST: ${{ vars.SSH_HOST }}
SSH_PORT: ${{ vars.SSH_PORT }}
SSH_USER: ${{ vars.SSH_USER }}
SSH_PASSWORD: ${{ vars.SSH_PASSWORD }}
jobs: jobs:
build: build:
@ -75,6 +81,34 @@ jobs:
echo "registry=https://registry.npmmirror.com" >> .npmrc echo "registry=https://registry.npmmirror.com" >> .npmrc
echo "canvas_binary_host_mirror=https://registry.npmmirror.com/-/binary/canvas" >> .npmrc echo "canvas_binary_host_mirror=https://registry.npmmirror.com/-/binary/canvas" >> .npmrc
- name: Install dependencies cache (Bun)
uses: https://gitea.cn/actions/cache@v3
with:
path: /root/.bun
key: bun-${{ runner.os }}-${{ matrix.node }}-${{ hashFiles('bun.lock') }}
restore-keys: |
bun-${{ runner.os }}-${{ matrix.node }}-
- name: Install dependencies cache (node_modules)
uses: https://gitea.cn/actions/cache@v3
with:
path: |
node_modules
apps/admin/node_modules
apps/user/node_modules
packages/ui/node_modules
key: nm-${{ runner.os }}-${{ matrix.node }}-${{ hashFiles('bun.lock') }}
restore-keys: |
nm-${{ runner.os }}-${{ matrix.node }}-
- name: Turborepo cache (.turbo)
uses: https://gitea.cn/actions/cache@v3
with:
path: .turbo
key: turbo-${{ runner.os }}-${{ hashFiles('turbo.json') }}-${{ hashFiles('bun.lock') }}
restore-keys: |
turbo-${{ runner.os }}-
- name: Install dependencies (bun) - name: Install dependencies (bun)
run: bun install run: bun install
@ -111,6 +145,16 @@ jobs:
- name: Read version from package.json - name: Read version from package.json
run: echo "VERSION=$(jq -r .version package.json)" >> $GITHUB_ENV run: echo "VERSION=$(jq -r .version package.json)" >> $GITHUB_ENV
- name: Cache Next.js build artifacts (.next/cache)
uses: https://gitea.cn/actions/cache@v3
with:
path: |
apps/admin/.next/cache
apps/user/.next/cache
key: nextcache-${{ runner.os }}-${{ hashFiles('apps/**') }}-${{ hashFiles('packages/**') }}-${{ hashFiles('turbo.json') }}-${{ hashFiles('bun.lock') }}
restore-keys: |
nextcache-${{ runner.os }}-
- name: Build Admin (turbo via bun) - name: Build Admin (turbo via bun)
if: env.BUILD_TARGET == 'admin' || env.BUILD_TARGET == 'both' if: env.BUILD_TARGET == 'admin' || env.BUILD_TARGET == 'both'
run: bun run build --filter=ppanel-admin-web run: bun run build --filter=ppanel-admin-web
@ -135,13 +179,39 @@ jobs:
if: env.BUILD_TARGET == 'user' || env.BUILD_TARGET == 'both' if: env.BUILD_TARGET == 'user' || env.BUILD_TARGET == 'both'
run: docker push ${{ env.DOCKER_REGISTRY }}/ppanel/ppanel-user-web:${{ env.VERSION }} run: docker push ${{ env.DOCKER_REGISTRY }}/ppanel/ppanel-user-web:${{ env.VERSION }}
- name: Run Admin container after push - name: Deploy Admin via SSH (docker run)
if: env.BUILD_TARGET == 'admin' || env.BUILD_TARGET == 'both' if: env.BUILD_TARGET == 'admin' || env.BUILD_TARGET == 'both'
run: make admin-run uses: appleboy/ssh-action@v0.1.11
with:
host: ${{ env.SSH_HOST }}
port: ${{ env.SSH_PORT }}
username: ${{ env.SSH_USER }}
password: ${{ env.SSH_PASSWORD }}
script: |
set -e
REG="${{ env.DOCKER_REGISTRY }}"
VERSION="${{ env.VERSION }}"
echo "Deploying admin: $REG/ppanel/ppanel-admin-web:$VERSION"
docker pull "$REG/ppanel/ppanel-admin-web:$VERSION" || true
docker rm -f ppanel-admin-web || true
docker run -d --name ppanel-admin-web --restart=always -p 3000:3000 -e NEXT_PUBLIC_API_URL="https://api.airoport.co" "$REG/ppanel/ppanel-admin-web:$VERSION"
- name: Run User container after push - name: Deploy User via SSH (docker run)
if: env.BUILD_TARGET == 'user' || env.BUILD_TARGET == 'both' if: env.BUILD_TARGET == 'user' || env.BUILD_TARGET == 'both'
run: make user-run uses: appleboy/ssh-action@v0.1.11
with:
host: ${{ env.SSH_HOST }}
port: ${{ env.SSH_PORT }}
username: ${{ env.SSH_USER }}
password: ${{ env.SSH_PASSWORD }}
script: |
set -e
REG="${{ env.DOCKER_REGISTRY }}"
VERSION="${{ env.VERSION }}"
echo "Deploying user: $REG/ppanel/ppanel-user-web:$VERSION"
docker pull "$REG/ppanel/ppanel-user-web:$VERSION" || true
docker rm -f ppanel-user-web || true
docker run -d --name ppanel-user-web --restart=always -p 3001:3000 -e NEXT_PUBLIC_API_URL="https://api.airoport.co" "$REG/ppanel/ppanel-user-web:$VERSION"
- name: Notify success to Telegram - name: Notify success to Telegram
uses: chapvic/telegram-notify@master uses: chapvic/telegram-notify@master
@ -151,7 +221,7 @@ jobs:
chat: ${{ env.TELEGRAM_CHAT_ID }} chat: ${{ env.TELEGRAM_CHAT_ID }}
status: ${{ job.status }} status: ${{ job.status }}
title: ✅ 构建成功 title: ✅ 构建成功
message: "${{ gitea.repository }} 构建成功 · 分支: ${{ gitea.ref }} · 提交: ${{ gitea.sha }} · 目标: ${{ env.BUILD_TARGET }} · 版本: ${{ env.VERSION }}" message: "${{ gitea.repository }} 构建成功"
footer: "触发者: ${{ gitea.actor }}" footer: "触发者: ${{ gitea.actor }}"
parse_mode: HTML parse_mode: HTML
@ -163,6 +233,6 @@ jobs:
chat: ${{ env.TELEGRAM_CHAT_ID }} chat: ${{ env.TELEGRAM_CHAT_ID }}
status: ${{ job.status }} status: ${{ job.status }}
title: ❌ 构建失败 title: ❌ 构建失败
message: "${{ gitea.repository }} 构建失败 · 分支: ${{ gitea.ref }} · 提交: ${{ gitea.sha }} · 目标: ${{ env.BUILD_TARGET }} · 版本: ${{ env.VERSION }}" message: "${{ gitea.repository }} 构建失败
footer: "触发者: ${{ gitea.actor }}" footer: "触发者: ${{ gitea.actor }}"
parse_mode: HTML parse_mode: HTML

View File

@ -71,17 +71,6 @@ ensure-version:
exit 1; \ exit 1; \
fi fi
.PHONY: admin-run
admin-run: ensure-version ## Run the admin container locally (binds to localhost:3000)
@echo "Running admin container from image ${ADMIN_IMAGE}:${VERSION} on http://localhost:3000 ..."
docker run --name ppanel-admin-web --rm -e NEXT_PUBLIC_API_URL=https://airoport.co -p 3000:3000 ${ADMIN_IMAGE}:${VERSION}
.PHONY: user-run
user-run: ensure-version ## Run the user container locally (binds to localhost:3001)
@echo "Running user container from image ${USER_IMAGE}:${VERSION} on http://localhost:3001 ..."
docker run --name ppanel-user-web --rm -p 3001:3000 ${USER_IMAGE}:${VERSION}
# ============================================================================== # ==============================================================================
# Other Targets # Other Targets
# ============================================================================== # ==============================================================================