Skip to content

Commit f19875b

Browse files
committed
fix website release links and deploy trigger
1 parent b96a0a5 commit f19875b

4 files changed

Lines changed: 50 additions & 16 deletions

File tree

.github/workflows/website.yml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,9 @@ on:
77
paths:
88
- 'website/**'
99
- '.github/workflows/website.yml'
10+
release:
11+
types:
12+
- published
1013
workflow_dispatch:
1114

1215
permissions:
@@ -43,6 +46,9 @@ jobs:
4346

4447
- name: Build
4548
working-directory: website
49+
env:
50+
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
51+
VITE_SITE_URL: 'https://${{ github.repository_owner }}.github.io/${{ github.event.repository.name }}/'
4652
run: pnpm build
4753

4854
- name: Upload artifact

website/README.md

Lines changed: 20 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,22 @@
1-
# Vue 3 + Vite
1+
# BPM Sniffer Website
22

3-
This template should help get you started developing with Vue 3 in Vite. The template uses Vue 3 `<script setup>` SFCs, check out the [script setup docs](https://v3.vuejs.org/api/sfc-script-setup.html#sfc-script-setup) to learn more.
3+
官网使用 `Vue 3 + Vite + Vite SSG` 构建,发布到 GitHub Pages。
44

5-
Learn more about IDE Support for Vue in the [Vue Docs Scaling up Guide](https://vuejs.org/guide/scaling-up/tooling.html#ide-support).
5+
## Commands
6+
7+
```bash
8+
pnpm install
9+
pnpm build
10+
pnpm preview
11+
```
12+
13+
## Release Data
14+
15+
- `pnpm build` 会先执行 `scripts/fetch-release.mjs`,把最新稳定版信息写入 `src/generated/release.json`
16+
- 首屏下载按钮的静态 HTML 默认先指向 `https://github.com/coderDJing/bpm-sniffer/releases/latest`,避免站点未重建时把旧版安装包直链吐出去。
17+
- 页面挂载后会再次请求 GitHub Release API,成功后把按钮更新为最新 `.exe` 直链,并刷新版本号与更新摘要。
18+
19+
## Deploy
20+
21+
- `.github/workflows/website.yml` 会在 `website/**` 变更后重建官网。
22+
- 同一个工作流也会在 GitHub Release 发布时重建官网,确保静态首屏版本号跟上最新正式版。

website/src/generated/release.json

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
11
{
2-
"tagName": "v1.1.3",
3-
"publishedAt": "2025-11-26T09:24:05Z",
4-
"notes": "1.Optimized the style of the floating ball\r\n\r\n1.优化了悬浮球的样式",
5-
"assetName": "BPM.Sniffer_1.1.3_x64-setup.exe",
6-
"downloadUrl": "https://github.com/coderDJing/bpm-sniffer/releases/download/v1.1.3/BPM.Sniffer_1.1.3_x64-setup.exe",
7-
"releaseUrl": "https://github.com/coderDJing/bpm-sniffer/releases/tag/v1.1.3",
8-
"fetchedAt": "2025-11-27T03:48:44.947Z",
2+
"tagName": "v1.1.7",
3+
"publishedAt": "2026-03-09T02:09:37Z",
4+
"notes": "Add to the right-click menu of the floating ball\r\n\r\n加入悬浮球右键菜单",
5+
"assetName": "BPM.Sniffer_1.1.7_x64-setup.exe",
6+
"downloadUrl": "https://github.com/coderDJing/bpm-sniffer/releases/download/v1.1.7/BPM.Sniffer_1.1.7_x64-setup.exe",
7+
"releaseUrl": "https://github.com/coderDJing/bpm-sniffer/releases/tag/v1.1.7",
8+
"fetchedAt": "2026-03-16T01:23:36.968Z",
99
"state": "ready",
1010
"source": "github"
1111
}

website/src/views/HomeView.vue

Lines changed: 17 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,7 @@ const downloadUrl = ref(releaseSeed.downloadUrl)
4646
const releaseUrl = ref(releaseSeed.releaseUrl)
4747
const releaseAssetName = ref(releaseSeed.assetName)
4848
const releaseState = ref<'loading' | 'ready' | 'error'>(releaseSeed.state)
49+
const hasRuntimeRelease = ref(false)
4950
5051
async function fetchLatestRelease() {
5152
releaseState.value = 'loading'
@@ -70,11 +71,15 @@ async function fetchLatestRelease() {
7071
downloadUrl.value = fallbackUrl
7172
releaseAssetName.value = ''
7273
}
74+
hasRuntimeRelease.value = true
7375
releaseState.value = 'ready'
7476
} catch (err) {
7577
console.warn('[release]', err)
78+
hasRuntimeRelease.value = false
7679
releaseState.value = 'error'
7780
downloadUrl.value = fallbackUrl
81+
releaseUrl.value = fallbackUrl
82+
releaseAssetName.value = ''
7883
}
7984
}
8085
@@ -281,13 +286,19 @@ watch(routeLang, (next) => {
281286
const localized = computed(() => translations[lang.value])
282287
const features = computed(() => localized.value.features)
283288
const steps = computed(() => localized.value.steps)
284-
const releaseNotesTitleText = computed(() => localized.value.releaseNotesTitle(latestVersion.value))
289+
const releaseNotesTitleText = computed(() =>
290+
localized.value.releaseNotesTitle(hasRuntimeRelease.value ? latestVersion.value : undefined)
291+
)
285292
const releaseLinkLabel = computed(() =>
286-
releaseState.value === 'ready' ? localized.value.releaseLinkReady : localized.value.releaseLoadingLink
293+
hasRuntimeRelease.value && releaseState.value === 'ready'
294+
? localized.value.releaseLinkReady
295+
: localized.value.releaseLoadingLink
287296
)
297+
const downloadHref = computed(() => (hasRuntimeRelease.value ? downloadUrl.value || fallbackUrl : fallbackUrl))
298+
const releaseHref = computed(() => (hasRuntimeRelease.value ? releaseUrl.value || fallbackUrl : fallbackUrl))
288299
const downloadCta = computed(() => {
289300
const locale = localized.value
290-
if (latestVersion.value) return locale.downloadWithVersion(latestVersion.value)
301+
if (hasRuntimeRelease.value && latestVersion.value) return locale.downloadWithVersion(latestVersion.value)
291302
return locale.downloadDefault
292303
})
293304
const releaseDateText = computed(() => {
@@ -413,7 +424,7 @@ onMounted(() => {
413424
{{ localized.heroLede }}
414425
</p>
415426
<div class="hero-actions">
416-
<a class="btn primary" :href="downloadUrl" target="_blank" rel="noreferrer noopener">
427+
<a class="btn primary" :href="downloadHref" target="_blank" rel="noreferrer noopener">
417428
{{ downloadCta }}
418429
</a>
419430
<a class="btn ghost" href="https://github.com/coderDJing/bpm-sniffer" target="_blank" rel="noreferrer noopener">
@@ -433,8 +444,8 @@ onMounted(() => {
433444
<small v-if="releaseDateText">{{ localized.releaseDatePrefix }}{{ releaseDateText }}</small>
434445
</div>
435446
<div>
436-
<a :href="releaseUrl" target="_blank" rel="noreferrer noopener">{{ releaseLinkLabel }}</a>
437-
<span v-if="releaseAssetName"> · {{ releaseAssetName }}</span>
447+
<a :href="releaseHref" target="_blank" rel="noreferrer noopener">{{ releaseLinkLabel }}</a>
448+
<span v-if="hasRuntimeRelease && releaseAssetName"> · {{ releaseAssetName }}</span>
438449
</div>
439450
</template>
440451
<template v-else-if="releaseState === 'error'">

0 commit comments

Comments
 (0)