Files
“dongming” 31f2b58d2b fix:修复CI
2025-12-16 00:54:39 +08:00

155 lines
5.4 KiB
YAML
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
name: Deploy to Cloudflare Pages
on:
push:
tags:
- 'deploy-*' # 只在推送 deploy-* 标签时触发
jobs:
deploy:
runs-on: ubuntu-latest
container:
image: swr.cn-south-1.myhuaweicloud.com/bws/node:20.19.6-bookworm-slim-ci
steps:
# 1. 拉取代码
- name: Checkout
uses: actions/checkout@v4
# 2. 设置 pnpm使用 corepack避免从 GitHub 拉取 action
- name: Setup pnpm
run: |
corepack enable
corepack prepare pnpm@10.23.0 --activate
pnpm --version
- name: Parse tag to env
shell: bash
run: |
# 获取 tag 名称(Gitea Actions 使用 GITHUB_REF_NAME)
TAG_NAME="${GITHUB_REF_NAME}"
echo "TAG_NAME=$TAG_NAME"
# Tag 格式: deploy-{project_name}-{deploymentId_no_dashes}
# 例如: deploy-b7ea026a-cf09-4e31-9f29-b55d7c652b71-123e4567e89b12d3a456426614174000
# 去掉 "deploy-" 前缀
PREFIX="deploy-"
REST="${TAG_NAME#$PREFIX}"
# deploymentId(无破折号)固定是最后32个字符
DEPLOYMENT_ID="${REST: -32}"
# project_name 是剩余部分(去掉最后的 "-" 和 deploymentId)
PROJECT_NAME="${REST%-${DEPLOYMENT_ID}}"
echo "PROJECT_NAME=$PROJECT_NAME" >> "$GITHUB_ENV"
echo "DEPLOYMENT_ID=$DEPLOYMENT_ID" >> "$GITHUB_ENV"
#echo "DOMAIN=${PROJECT_NAME}-preview.turingflowai.com" >> "$GITHUB_ENV"
# 调试输出
echo "Parsed PROJECT_NAME: $PROJECT_NAME"
echo "Parsed DEPLOYMENT_ID: $DEPLOYMENT_ID"
- name: Check toolchain (debug only, 可选)
run: |
node -v || echo "node not found"
pnpm -v || echo "pnpm not found"
curl --version || echo "curl not found"
- name: Use CN npm registry
run: |
pnpm config set registry http://repo.myhuaweicloud.com/repository/npm/
- name: Install dependencies
run: |
pnpm install --frozen-lockfile
- name: Build
run: pnpm run build
- name: Deploy to Cloudflare Pages
shell: bash
env:
CLOUDFLARE_ACCOUNT_ID: ${{ secrets.CF_ACCOUNT_ID }}
CLOUDFLARE_API_TOKEN: ${{ secrets.CF_API_TOKEN }}
PROJECT_NAME: ${{ env.PROJECT_NAME }}
DOMAIN: ${{ env.DOMAIN }}
run: |
set -euo pipefail
echo "[deploy] project: $PROJECT_NAME"
#echo "[deploy] domain: $DOMAIN"
# 部署到 Cloudflare Pages (假定构建产物在 dist/)
# 使用项目本地安装的 wrangler
npx wrangler pages deploy dist \
--project-name "$PROJECT_NAME" \
--branch main
# 绑定自定义域名:<project_name>-preview.turingflowai.com
#echo "[deploy] 正在绑定自定义域名..."
#DOMAIN_RESPONSE=$(curl -s -w "\n%{http_code}" -X POST \
# "https://api.cloudflare.com/client/v4/accounts/${CLOUDFLARE_ACCOUNT_ID}/pages/projects/${PROJECT_NAME}/domains" \
# -H "Authorization: Bearer ${CLOUDFLARE_API_TOKEN}" \
# -H "Content-Type: application/json" \
# -d '{"name":"'"${DOMAIN}"'"}')
#HTTP_CODE=$(echo "$DOMAIN_RESPONSE" | tail -n1)
#RESPONSE_BODY=$(echo "$DOMAIN_RESPONSE" | sed '$d')
#if [ "$HTTP_CODE" = "200" ] || [ "$HTTP_CODE" = "409" ]; then
# echo "[deploy] 域名绑定成功或已存在 (HTTP $HTTP_CODE)"
#else
# echo "[deploy] 警告: 域名绑定失败 (HTTP $HTTP_CODE)"
# echo "[deploy] 响应: $RESPONSE_BODY"
# echo "[deploy] 继续执行,但域名可能未绑定成功"
#fi
- name: Notify Deploy Service (success)
if: success()
shell: bash
env:
DEPLOY_SERVICE_CALLBACK_URL: ${{ secrets.DEPLOY_SERVICE_CALLBACK_URL }}
DEPLOY_SERVICE_TOKEN: ${{ secrets.DEPLOY_SERVICE_TOKEN }}
DEPLOYMENT_ID: ${{ env.DEPLOYMENT_ID }}
run: |
set -euo pipefail
# 获取当前 commit SHA (Gitea Actions 使用 GITHUB_SHA)
COMMIT_SHA="${GITHUB_SHA}"
curl -X POST "$DEPLOY_SERVICE_CALLBACK_URL" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $DEPLOY_SERVICE_TOKEN" \
-d '{
"deploymentId": "'"${DEPLOYMENT_ID}"'",
"status": "deployed",
"commitSha": "'"${COMMIT_SHA}"'",
"cfDeploymentId": "",
"errorMessage": null
}'
- name: Notify Deploy Service (failure)
if: failure()
shell: bash
env:
DEPLOY_SERVICE_CALLBACK_URL: ${{ secrets.DEPLOY_SERVICE_CALLBACK_URL }}
DEPLOY_SERVICE_TOKEN: ${{ secrets.DEPLOY_SERVICE_TOKEN }}
DEPLOYMENT_ID: ${{ env.DEPLOYMENT_ID }}
run: |
set -euo pipefail
# 获取当前 commit SHA
COMMIT_SHA="${GITHUB_SHA}"
curl -X POST "$DEPLOY_SERVICE_CALLBACK_URL" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $DEPLOY_SERVICE_TOKEN" \
-d '{
"deploymentId": "'"${DEPLOYMENT_ID}"'",
"status": "failed",
"commitSha": "'"${COMMIT_SHA}"'",
"cfDeploymentId": "",
"errorMessage": "see Gitea Actions logs"
}'