Skip to content

Commit 21f647b

Browse files
committed
refactor(dashboard): use generic release URL helpers and avoid latest suffix duplication
1 parent b4edae4 commit 21f647b

2 files changed

Lines changed: 15 additions & 10 deletions

File tree

dashboard/README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,3 +7,4 @@
77
- `VITE_ASTRBOT_RELEASE_BASE_URL`(可选)
88
- 默认值:`https://github.com/AstrBotDevs/AstrBot/releases`
99
- 用途:管理面板内“更新到最新版本”外部跳转所使用的 release 基地址。集成方可按需覆盖(例如 Desktop 指向其自身发布页)。
10+
- 建议传入仓库的 `.../releases` 基地址(不带 `/latest`)。

dashboard/src/layouts/full/vertical-header/VerticalHeader.vue

Lines changed: 14 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -58,10 +58,17 @@ const resolveReleaseBaseUrl = () => {
5858
const raw = import.meta.env.VITE_ASTRBOT_RELEASE_BASE_URL;
5959
// Keep upstream default on AstrBot releases; desktop distributors can override via env injection.
6060
const normalized = raw?.trim()?.replace(/\/+$/, '') || '';
61-
return normalized || DEFAULT_ASTRBOT_RELEASE_BASE_URL;
61+
const withoutLatestSuffix = normalized.replace(/\/latest$/i, '');
62+
return withoutLatestSuffix || DEFAULT_ASTRBOT_RELEASE_BASE_URL;
63+
};
64+
const releaseBaseUrl = resolveReleaseBaseUrl();
65+
const getReleaseUrlByTag = (tag: string | null | undefined) => {
66+
const normalizedTag = (tag || '').trim();
67+
if (!normalizedTag || normalizedTag.toLowerCase() === 'latest') {
68+
return `${releaseBaseUrl}/latest`;
69+
}
70+
return `${releaseBaseUrl}/tag/${normalizedTag}`;
6271
};
63-
const desktopReleaseBaseUrl = resolveReleaseBaseUrl();
64-
const fallbackReleaseUrl = `${desktopReleaseBaseUrl}/latest`;
6572
6673
const getSelectedGitHubProxy = () => {
6774
if (typeof window === "undefined" || !window.localStorage) return "";
@@ -144,14 +151,11 @@ function confirmExternalRedirect() {
144151
const getReleaseUrlForDesktop = () => {
145152
const firstRelease = (releases.value as any[])?.[0];
146153
if (firstRelease?.tag_name) {
147-
const tag = firstRelease.tag_name as string;
148-
return `${desktopReleaseBaseUrl}/tag/${tag}`;
154+
return getReleaseUrlByTag(firstRelease.tag_name as string);
149155
}
150-
if (hasNewVersion.value) return fallbackReleaseUrl;
156+
if (hasNewVersion.value) return getReleaseUrlByTag('latest');
151157
const tag = botCurrVersion.value?.startsWith('v') ? botCurrVersion.value : 'latest';
152-
return tag === 'latest'
153-
? fallbackReleaseUrl
154-
: `${desktopReleaseBaseUrl}/tag/${tag}`;
158+
return getReleaseUrlByTag(tag);
155159
};
156160
157161
function handleUpdateClick() {
@@ -160,7 +164,7 @@ function handleUpdateClick() {
160164
resolvingReleaseTarget.value = true;
161165
checkUpdate();
162166
void getReleases().finally(() => {
163-
pendingRedirectUrl.value = getReleaseUrlForDesktop() || fallbackReleaseUrl;
167+
pendingRedirectUrl.value = getReleaseUrlForDesktop() || getReleaseUrlByTag('latest');
164168
resolvingReleaseTarget.value = false;
165169
});
166170
return;

0 commit comments

Comments
 (0)