Skip to content

Commit 94736ff

Browse files
authored
feat(dashboard): make release redirect base URL configurable (#5330)
* feat(dashboard): make desktop release base URL configurable * refactor(dashboard): use generic release base URL env with upstream default * fix(dashboard): guard release base URL normalization when env is unset * refactor(dashboard): use generic release URL helpers and avoid latest suffix duplication
1 parent aff92a4 commit 94736ff

3 files changed

Lines changed: 36 additions & 10 deletions

File tree

dashboard/README.md

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,10 @@
11
# AstrBot 管理面板
22

3-
基于 CodedThemes/Berry 模板开发。
3+
基于 CodedThemes/Berry 模板开发。
4+
5+
## 环境变量
6+
7+
- `VITE_ASTRBOT_RELEASE_BASE_URL`(可选)
8+
- 默认值:`https://github.com/AstrBotDevs/AstrBot/releases`
9+
- 用途:管理面板内“更新到最新版本”外部跳转所使用的 release 基地址。集成方可按需覆盖(例如 Desktop 指向其自身发布页)。
10+
- 建议传入仓库的 `.../releases` 基地址(不带 `/latest`)。

dashboard/env.d.ts

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1 +1,9 @@
11
/// <reference types="vite/client" />
2+
3+
interface ImportMetaEnv {
4+
readonly VITE_ASTRBOT_RELEASE_BASE_URL?: string;
5+
}
6+
7+
interface ImportMeta {
8+
readonly env: ImportMetaEnv;
9+
}

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

Lines changed: 20 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -53,8 +53,22 @@ const isDesktopReleaseMode = ref(
5353
const redirectConfirmDialog = ref(false);
5454
const pendingRedirectUrl = ref('');
5555
const resolvingReleaseTarget = ref(false);
56-
const desktopReleaseBaseUrl = 'https://github.com/AstrBotDevs/AstrBot-desktop/releases';
57-
const fallbackReleaseUrl = desktopReleaseBaseUrl;
56+
const DEFAULT_ASTRBOT_RELEASE_BASE_URL = 'https://github.com/AstrBotDevs/AstrBot/releases';
57+
const resolveReleaseBaseUrl = () => {
58+
const raw = import.meta.env.VITE_ASTRBOT_RELEASE_BASE_URL;
59+
// Keep upstream default on AstrBot releases; desktop distributors can override via env injection.
60+
const normalized = raw?.trim()?.replace(/\/+$/, '') || '';
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}`;
71+
};
5872
5973
const getSelectedGitHubProxy = () => {
6074
if (typeof window === "undefined" || !window.localStorage) return "";
@@ -137,14 +151,11 @@ function confirmExternalRedirect() {
137151
const getReleaseUrlForDesktop = () => {
138152
const firstRelease = (releases.value as any[])?.[0];
139153
if (firstRelease?.tag_name) {
140-
const tag = firstRelease.tag_name as string;
141-
return `${desktopReleaseBaseUrl}/tag/${tag}`;
154+
return getReleaseUrlByTag(firstRelease.tag_name as string);
142155
}
143-
if (hasNewVersion.value) return fallbackReleaseUrl;
156+
if (hasNewVersion.value) return getReleaseUrlByTag('latest');
144157
const tag = botCurrVersion.value?.startsWith('v') ? botCurrVersion.value : 'latest';
145-
return tag === 'latest'
146-
? fallbackReleaseUrl
147-
: `${desktopReleaseBaseUrl}/tag/${tag}`;
158+
return getReleaseUrlByTag(tag);
148159
};
149160
150161
function handleUpdateClick() {
@@ -153,7 +164,7 @@ function handleUpdateClick() {
153164
resolvingReleaseTarget.value = true;
154165
checkUpdate();
155166
void getReleases().finally(() => {
156-
pendingRedirectUrl.value = getReleaseUrlForDesktop() || fallbackReleaseUrl;
167+
pendingRedirectUrl.value = getReleaseUrlForDesktop() || getReleaseUrlByTag('latest');
157168
resolvingReleaseTarget.value = false;
158169
});
159170
return;

0 commit comments

Comments
 (0)