Skip to content

Commit c84ef00

Browse files
committed
ci: add playground deployment workflow to Huawei Cloud CDN
1 parent b6700a6 commit c84ef00

File tree

1 file changed

+151
-0
lines changed

1 file changed

+151
-0
lines changed
Lines changed: 151 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,151 @@
1+
name: Deploy Playground to CDN
2+
3+
on:
4+
workflow_dispatch:
5+
6+
env:
7+
HUAWEI_CLOUD_AK: ${{ secrets.HUAWEI_CLOUD_AK }}
8+
HUAWEI_CLOUD_SK: ${{ secrets.HUAWEI_CLOUD_SK }}
9+
HUAWEI_CLOUD_ENDPOINT: ${{ secrets.HUAWEI_CLOUD_ENDPOINT }}
10+
HUAWEI_CLOUD_BUCKET: ${{ secrets.HUAWEI_CLOUD_BUCKET }}
11+
12+
jobs:
13+
check-secrets:
14+
runs-on: ubuntu-latest
15+
outputs:
16+
secrets-ready: ${{ steps.check.outputs.secrets-ready }}
17+
steps:
18+
- name: Check required secrets
19+
id: check
20+
run: |
21+
if [[ -z "${{ secrets.HUAWEI_CLOUD_AK }}" ]] || \
22+
[[ -z "${{ secrets.HUAWEI_CLOUD_SK }}" ]] || \
23+
[[ -z "${{ secrets.HUAWEI_CLOUD_ENDPOINT }}" ]] || \
24+
[[ -z "${{ secrets.HUAWEI_CLOUD_BUCKET }}" ]]; then
25+
echo "secrets-ready=false" >> $GITHUB_OUTPUT
26+
echo "::error::Required Huawei Cloud secrets are not configured."
27+
echo "::error::Please set: HUAWEI_CLOUD_AK, HUAWEI_CLOUD_SK, HUAWEI_CLOUD_ENDPOINT, HUAWEI_CLOUD_BUCKET"
28+
exit 1
29+
fi
30+
echo "secrets-ready=true" >> $GITHUB_OUTPUT
31+
echo "✅ All required secrets are configured"
32+
33+
build:
34+
# 指定运行环境为最新版本的ubuntu
35+
runs-on: ubuntu-latest
36+
steps:
37+
# 步骤1: 检出代码
38+
- name: CheckOut Code
39+
uses: actions/checkout@v4
40+
with:
41+
ref: ${{ github.ref_name }}
42+
43+
# 步骤2: 设置pnpm包管理器
44+
- name: Setup pnpm
45+
uses: pnpm/action-setup@v4
46+
47+
# 步骤3: 设置Node.js环境
48+
- name: Setup Node
49+
uses: actions/setup-node@v4
50+
with:
51+
node-version: 20 # 使用Node.js 20版本
52+
registry-url: 'https://registry.npmjs.org' # 设置npm registry地址
53+
54+
# 步骤4: 获取pnpm缓存目录路径
55+
- name: Get pnpm store directory
56+
id: pnpm-cache
57+
run: |
58+
echo "pnpm_cache_dir=$(pnpm store path)" >> $GITHUB_OUTPUT
59+
60+
# 步骤5: 配置pnpm缓存
61+
- uses: actions/cache@v3
62+
name: Setup pnpm cache
63+
with:
64+
path: ${{ steps.pnpm-cache.outputs.pnpm_cache_dir }}
65+
# 使用操作系统类型和pnpm-lock.yaml的哈希值作为缓存键
66+
key: ${{ runner.os }}-pnpm-store-${{ hashFiles('**/pnpm-lock.yaml') }}
67+
restore-keys: |
68+
${{ runner.os }}-pnpm-store-
69+
70+
# 步骤6: 安装项目依赖
71+
- name: Install dependencies
72+
run: pnpm i --no-frozen-lockfile
73+
74+
- id: prepare-version
75+
name: Prepare version-timestamp
76+
run: |
77+
# Extract version from package.json
78+
VERSION=$(node -p "require('./packages/playground/package.json').version")
79+
80+
# Generate timestamp in YYYYMMDD-HHMMSS format
81+
TIMESTAMP=$(date +%Y%m%d-%H%M%S)
82+
83+
# Combine for version-timestamp
84+
VERSION_TIMESTAMP="${VERSION}-${TIMESTAMP}"
85+
86+
# Set CDN base path
87+
CDN_BASE="https://res-static.opentiny.design/tiny-robot-playground/${VERSION_TIMESTAMP}/"
88+
OBS_PATH="tiny-robot-playground/${VERSION_TIMESTAMP}/"
89+
90+
# Export as environment variables for subsequent steps
91+
echo "VERSION_TIMESTAMP=$VERSION_TIMESTAMP" >> $GITHUB_ENV
92+
echo "CDN_BASE=$CDN_BASE" >> $GITHUB_ENV
93+
echo "OBS_PATH=$OBS_PATH" >> $GITHUB_ENV
94+
95+
# Set outputs for job-level export
96+
echo "version_timestamp=$VERSION_TIMESTAMP" >> $GITHUB_OUTPUT
97+
echo "cdn_base=$CDN_BASE" >> $GITHUB_OUTPUT
98+
echo "obs_path=$OBS_PATH" >> $GITHUB_OUTPUT
99+
100+
echo "Version-Timestamp: $VERSION_TIMESTAMP"
101+
echo "CDN Base: $CDN_BASE"
102+
echo "OBS Path: $OBS_PATH"
103+
104+
# 构建Playground
105+
- name: Build Playground
106+
run: pnpm build:playground
107+
env:
108+
PLAYGROUND_BASE: ${{ env.CDN_BASE }}
109+
110+
- name: Verify build output
111+
run: ls -la ./packages/playground/dist
112+
113+
- name: Upload build artifacts
114+
uses: actions/upload-artifact@v4
115+
with:
116+
name: playground-dist
117+
path: ./packages/playground/dist/
118+
retention-days: 1
119+
120+
deploy-cdn:
121+
runs-on: ubuntu-latest
122+
needs: [check-secrets, build]
123+
steps:
124+
- name: Checkout
125+
uses: actions/checkout@v4
126+
127+
- name: Download build artifacts
128+
uses: actions/download-artifact@v4
129+
with:
130+
name: playground-dist
131+
path: ./packages/playground/dist/
132+
133+
- name: Install obsutil
134+
run: |
135+
curl -o obsutil.tar.gz https://obs-community.obs.cn-north-1.myhuaweicloud.com/obsutil/current/obsutil_linux_amd64.tar.gz
136+
tar -xzf obsutil.tar.gz
137+
chmod +x obsutil_linux_amd64_*/obsutil
138+
sudo mv obsutil_linux_amd64_*/obsutil /usr/local/bin/obsutil
139+
140+
- name: Configure and Upload to OBS
141+
run: |
142+
obsutil config -i=${{ env.HUAWEI_CLOUD_AK }} \
143+
-k=${{ env.HUAWEI_CLOUD_SK }} \
144+
-e=${{ env.HUAWEI_CLOUD_ENDPOINT }}
145+
# Upload to versioned path
146+
obsutil cp ./packages/playground/dist \
147+
obs://${{ env.HUAWEI_CLOUD_BUCKET }}/${{ needs.build.outputs.obs-path }} \
148+
-r -f
149+
150+
echo "Uploaded to: obs://${{ env.HUAWEI_CLOUD_BUCKET }}/${{ needs.build.outputs.obs-path }}"
151+
echo "CDN URL: https://res-static.opentiny.design/${{ needs.build.outputs.obs-path }}"

0 commit comments

Comments
 (0)