Skip to content

Commit fb6b15b

Browse files
committed
ci: add release workflow
1 parent 305e28a commit fb6b15b

3 files changed

Lines changed: 134 additions & 1 deletion

File tree

.github/workflows/release.yml

Lines changed: 117 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,117 @@
1+
name: Release
2+
3+
on:
4+
push:
5+
tags:
6+
- "v*"
7+
8+
permissions:
9+
contents: write
10+
11+
concurrency:
12+
group: release-${{ github.ref_name }}
13+
cancel-in-progress: false
14+
15+
jobs:
16+
release:
17+
name: Build and publish release assets
18+
runs-on: ubuntu-latest
19+
20+
steps:
21+
- name: Checkout
22+
uses: actions/checkout@v4
23+
with:
24+
fetch-depth: 0
25+
submodules: recursive
26+
27+
- name: Setup pnpm
28+
uses: pnpm/action-setup@v4
29+
with:
30+
version: 10.29.3
31+
32+
- name: Setup Node.js
33+
uses: actions/setup-node@v4
34+
with:
35+
node-version: 24
36+
cache: pnpm
37+
38+
- name: Install dependencies
39+
run: pnpm install --frozen-lockfile
40+
41+
- name: Validate
42+
run: pnpm lint
43+
44+
- name: Prepare release metadata
45+
id: meta
46+
shell: bash
47+
run: |
48+
set -euo pipefail
49+
version="$(node -p "JSON.parse(require('fs').readFileSync('package.json', 'utf8')).version")"
50+
commit_hash="$(git rev-parse --short HEAD)"
51+
base_name="FlashMaster-${version}-${commit_hash}"
52+
{
53+
echo "version=${version}"
54+
echo "commit_hash=${commit_hash}"
55+
echo "base_name=${base_name}"
56+
} >> "$GITHUB_OUTPUT"
57+
58+
- name: Build release assets
59+
shell: bash
60+
run: |
61+
set -euo pipefail
62+
base_name="${{ steps.meta.outputs.base_name }}"
63+
rm -rf release .release-work
64+
mkdir -p release .release-work
65+
66+
pnpm build:singlefile
67+
singlefile="$(find dist-singlefile -maxdepth 1 -type f -name 'FlashMaster-*.html' | sort | head -n 1)"
68+
cp "$singlefile" "release/${base_name}.html"
69+
70+
VITE_FLASHMASTER_ROUTER_MODE=hash pnpm build
71+
hash_dir=".release-work/${base_name}-web-hash"
72+
mkdir -p "$hash_dir"
73+
cp -R dist/. "$hash_dir/"
74+
(cd .release-work && zip -qr "../release/${base_name}-web-hash.zip" "${base_name}-web-hash")
75+
76+
VITE_FLASHMASTER_ROUTER_MODE=history pnpm build
77+
history_dir=".release-work/${base_name}-web-history"
78+
mkdir -p "$history_dir"
79+
cp -R dist/. "$history_dir/"
80+
(cd .release-work && zip -qr "../release/${base_name}-web-history.zip" "${base_name}-web-history")
81+
82+
(cd release && sha256sum * > SHA256SUMS.txt)
83+
ls -lh release
84+
85+
- name: Write release notes
86+
shell: bash
87+
run: |
88+
set -euo pipefail
89+
base_name="${{ steps.meta.outputs.base_name }}"
90+
cat > release-notes.md <<EOF
91+
## FlashMaster ${GITHUB_REF_NAME}
92+
93+
Release assets:
94+
95+
- \`${base_name}.html\`: single-file offline build for direct browser opening.
96+
- \`${base_name}-web-hash.zip\`: complete static web package using hash routing.
97+
- \`${base_name}-web-history.zip\`: complete static web package using history routing; deploy with SPA rewrite rules.
98+
- \`SHA256SUMS.txt\`: SHA-256 checksums for release assets.
99+
EOF
100+
101+
- name: Create or update GitHub Release
102+
env:
103+
GH_TOKEN: ${{ github.token }}
104+
shell: bash
105+
run: |
106+
set -euo pipefail
107+
if gh release view "$GITHUB_REF_NAME" >/dev/null 2>&1; then
108+
gh release edit "$GITHUB_REF_NAME" \
109+
--title "FlashMaster ${GITHUB_REF_NAME}" \
110+
--notes-file release-notes.md
111+
gh release upload "$GITHUB_REF_NAME" release/* --clobber
112+
else
113+
gh release create "$GITHUB_REF_NAME" release/* \
114+
--title "FlashMaster ${GITHUB_REF_NAME}" \
115+
--notes-file release-notes.md \
116+
--verify-tag
117+
fi

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
# iTXTech FlashMaster
22

3-
[Chinese](README-zh.md)
3+
[简体中文](README-zh.md)
44

55
FlashMaster is a dense Memory Chip Intelligence Platform for memory-chip
66
part-number lookup, NAND Flash ID lookup, database search, and result

docs/DEPLOYMENT.md

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,22 @@ dist-singlefile/FlashMaster-<version>-<commitHash>.html
7373

7474
单文件 flavor 不启用 PWA,因为 service worker 和 Web App Manifest 需要浏览器提供 origin。
7575

76+
## GitHub Release 自动发布
77+
78+
推送 `v*` tag 时,GitHub Actions 会自动创建或更新同名 GitHub Release,并上传以下文件:
79+
80+
- `FlashMaster-<version>-<commitHash>.html`:单文件离线构建,可直接在浏览器中打开。
81+
- `FlashMaster-<version>-<commitHash>-web-hash.zip`:完整静态 Web 包,使用 hash 路由。
82+
- `FlashMaster-<version>-<commitHash>-web-history.zip`:完整静态 Web 包,使用 history 路由,部署时需要 SPA rewrite。
83+
- `SHA256SUMS.txt`:Release 附件的 SHA-256 校验值。
84+
85+
发布一个版本时,在目标提交上创建并推送 tag:
86+
87+
```bash
88+
git tag v2.1.0
89+
git push origin v2.1.0
90+
```
91+
7692
## 公开路由集合
7793

7894
两种路由模式暴露同一组应用路由:

0 commit comments

Comments
 (0)