149 lines
5.3 KiB
YAML
149 lines
5.3 KiB
YAML
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:
|
|
- name: Checkout
|
|
uses: actions/checkout@v4
|
|
|
|
- name: Parse tag to env
|
|
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"
|
|
npm -v || echo "npm not found"
|
|
curl --version || echo "curl not found"
|
|
|
|
# 已经在 node:20-bookworm-slim 容器内,无需再 setup-node
|
|
# - name: Setup Node
|
|
# uses: actions/setup-node@v4
|
|
# with:
|
|
# node-version: '20'
|
|
|
|
- name: Use CN npm registry
|
|
run: |
|
|
npm config set registry http://repo.myhuaweicloud.com/repository/npm/
|
|
|
|
- name: Install dependencies
|
|
run: |
|
|
npm ci --no-audit --no-fund
|
|
|
|
- name: Build
|
|
run: npm run build
|
|
|
|
- name: Deploy to Cloudflare Pages
|
|
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()
|
|
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()
|
|
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"
|
|
}'
|