Files
stack/.gitea/workflows/build-tutorial.yml
T

71 lines
3.5 KiB
YAML
Raw 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: Build Tutorial
# 主仓库 gitea.idealjs.com/idealjs/stack 的 CI:打包新教程站。
# 全 shell、零外部 action——runner 连 github.com 不稳(actions 下载常超时):
# 源码:gitea API tarball(同机房,不走 github)
# node:自有 release 资产(提取自 node:24.14.0-alpine,镜像在阿里云 idealjs/node)
# 产物:滚动 release「ci-dist」资产(node 解析 JSON 上传)
on:
push:
branches: [main]
pull_request:
workflow_dispatch:
env:
NODE_DIST: https://gitea.idealjs.com/attachments/edad7a7e-3b3d-4d1b-9551-1a978fdf95d1
YARN_NPM_REGISTRY_SERVER: https://registry.npmmirror.com
API: https://gitea.idealjs.com/api/v1/repos/idealjs/stack
jobs:
build:
name: Build @stack/tutorial
runs-on: ubuntu-latest
steps:
- name: 拉源码(gitea tarball)
run: |
wget -q "$API/archive/$GITHUB_SHA.tar.gz" -O /tmp/src.tgz
tar -xzf /tmp/src.tgz --strip-components=1
ls apps/tutorial/package.json
- name: 装便携 node 24(musl bundle,自有资产)
run: |
wget -q "$NODE_DIST" -O /tmp/node.tar.xz
mkdir -p "$RUNNER_TEMP/node"
tar -xJf /tmp/node.tar.xz -C "$RUNNER_TEMP/node" --strip-components=1
echo "$RUNNER_TEMP/node/bin" >> "$GITHUB_PATH"
# alpine node 动态依赖 libstdc++/libgcc——bundle 自带,指给它
echo "LD_LIBRARY_PATH=$RUNNER_TEMP/node/lib" >> "$GITHUB_ENV"
export LD_LIBRARY_PATH="$RUNNER_TEMP/node/lib"
"$RUNNER_TEMP/node/bin/node" -v
- name: 安装依赖(corepack yarn4,registry 走 npmmirror)
run: |
# 镜像自带的 yarn1 断链(指向未提取的 /opt/yarn-*),清掉让 corepack 接管
rm -f "$(dirname "$(command -v node)")/yarn" "$(dirname "$(command -v node)")/yarnpkg"
corepack enable
yarn install --immutable
- name: 构建(Vite MPA:教程七页 + 博客 + 设计系统四册)
run: yarn workspace @stack/tutorial build
- name: 产物上传(滚动 release 资产;权限不足仅告警不红)
run: |
TOK="${{ github.token }}"
J() { node -e "let d='';process.stdin.on('data',c=>d+=c).on('end',()=>{try{const o=JSON.parse(d);console.log(eval('o.'+process.argv[1])??'')}catch(e){console.log('')}})" "$1"; }
tar -czf /tmp/tutorial-dist.tar.gz -C apps/tutorial/dist .
RID=$(curl -sf -H "Authorization: token $TOK" "$API/releases/tags/ci-dist" | J id)
if [ -z "$RID" ]; then
RID=$(curl -sf -X POST -H "Authorization: token $TOK" -H "Content-Type: application/json" "$API/releases" \
-d '{"tag_name":"ci-dist","name":"CI 产物(滚动更新)","body":"每次构建的最新 dist。","draft":false,"prerelease":true}' | J id)
fi
if [ -z "$RID" ]; then
echo "::warning::release 不可用(job token 无写权限)——构建已成功,产物留在 runner"
exit 0
fi
for AID in $(curl -s -H "Authorization: token $TOK" "$API/releases/$RID/assets" | J 'assets.map(a=>a.id).join(" ")'); do
curl -s -X DELETE -H "Authorization: token $TOK" "$API/releases/$RID/assets/$AID" >/dev/null
done
URL=$(curl -sf -X POST -H "Authorization: token $TOK" "$API/releases/$RID/assets?name=tutorial-dist.tar.gz" \
-F "attachment=@/tmp/tutorial-dist.tar.gz" | J browser_download_url)
echo "产物下载:${URL:-上传失败}"