Files

98 lines
3.0 KiB
YAML

name: Release Build
on:
push:
tags:
- 'v*'
jobs:
build-and-release:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Check if tag is on main branch
run: |
git fetch origin main
if ! git merge-base --is-ancestor ${{ github.sha }} origin/main; then
echo "Tag is not on main branch"
exit 1
fi
- uses: pnpm/action-setup@v2
with:
version: 10.14.0
- uses: actions/setup-node@v4
with:
node-version: '20'
cache: 'pnpm'
- run: pnpm install
- run: pnpm build:release
- name: Package files
run: |
cd build
zip -r ../web.vocechat.zip . -x robots.txt CNAME email.tpl.html widget_demo.html
cd ..
- name: Create Release
uses: softprops/action-gh-release@v1
with:
files: |
web.vocechat.zip
build/web.vocechat.md5
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- name: Sync to CNB
env:
CNB_TOKEN: ${{ secrets.CNB_TOKEN }}
TAG_NAME: ${{ github.ref_name }}
run: |
CNB_API="https://api.cnb.cool"
CNB_OWNER="haorwen"
CNB_REPO="Privoce/vocechat-web"
echo "创建 CNB release..."
RELEASE_JSON=$(curl -fsSL -X POST \
"$CNB_API/$CNB_OWNER/$CNB_REPO/-/releases" \
-H "Authorization: Bearer $CNB_TOKEN" \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-d "{\"tag_name\":\"$TAG_NAME\",\"name\":\"$TAG_NAME\",\"body\":\"\",\"draft\":false,\"make_latest\":\"true\",\"prerelease\":false,\"target_commitish\":\"main\"}")
RELEASE_ID=$(echo "$RELEASE_JSON" | jq -r '.id')
echo "CNB Release ID: $RELEASE_ID"
upload_file() {
local file=$1
local size=$(stat -c%s "$file")
local name=$(basename "$file")
echo "上传 $name..."
UPLOAD_JSON=$(curl -fsSL -X POST \
"$CNB_API/$CNB_OWNER/$CNB_REPO/-/releases/$RELEASE_ID/asset-upload-url" \
-H "Authorization: Bearer $CNB_TOKEN" \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-d "{\"asset_name\":\"$name\",\"size\":$size,\"overwrite\":true}")
UPLOAD_URL=$(echo "$UPLOAD_JSON" | jq -r '.upload_url')
VERIFY_URL=$(echo "$UPLOAD_JSON" | jq -r '.verify_url')
curl -fsSL -X PUT "$UPLOAD_URL" -T "$file"
curl -fsSL -X POST "$VERIFY_URL" -H "Authorization: Bearer $CNB_TOKEN" -H "Accept: application/json"
echo "$name 上传完成"
}
upload_file "web.vocechat.zip"
upload_file "build/web.vocechat.md5"
echo "同步到 CNB 完成"