diff --git a/packages/ui/certd-server/src/controller/basic/app-controller.test.ts b/packages/ui/certd-server/src/controller/basic/app-controller.test.ts
new file mode 100644
index 000000000..95cd7f21c
--- /dev/null
+++ b/packages/ui/certd-server/src/controller/basic/app-controller.test.ts
@@ -0,0 +1,17 @@
+///
+///
+
+import assert from "node:assert/strict";
+
+import { normalizeReleaseVersion } from "./app-controller.js";
+
+describe("AppController.normalizeReleaseVersion", () => {
+ it("normalizes AtomGit release tag names", () => {
+ assert.equal(normalizeReleaseVersion({ tag_name: "v1.40.0" }), "1.40.0");
+ assert.equal(normalizeReleaseVersion({ tag_name: "1.40.0" }), "1.40.0");
+ });
+
+ it("falls back to release name when tag_name is empty", () => {
+ assert.equal(normalizeReleaseVersion({ name: "v1.40.0" }), "1.40.0");
+ });
+});
diff --git a/packages/ui/certd-server/src/controller/basic/app-controller.ts b/packages/ui/certd-server/src/controller/basic/app-controller.ts
index b77ac5c50..cf8aaf93a 100644
--- a/packages/ui/certd-server/src/controller/basic/app-controller.ts
+++ b/packages/ui/certd-server/src/controller/basic/app-controller.ts
@@ -3,6 +3,11 @@ import { BaseController, Constants, FileService, SysSettingsService, SysSiteInfo
import { http, logger } from '@certd/basic';
import { isComm } from '@certd/plus-core';
+export function normalizeReleaseVersion(release: { tag_name?: string; name?: string }) {
+ const version = release?.tag_name || release?.name || '';
+ return version.replace(/^v/i, '');
+}
+
/**
*/
@Provide()
@@ -17,12 +22,12 @@ export class AppController extends BaseController {
async latest(): Promise {
try {
const res = await http.request({
- url: 'https://registry.npmmirror.com/@certd/pipeline',
+ url: 'https://api.atomgit.com/api/v5/repos/certd/certd/releases/latest',
method: 'get',
logRes: false,
timeout: 5000,
});
- const latest = res['dist-tags'].latest;
+ const latest = normalizeReleaseVersion(res);
return this.ok(latest);
} catch (e: any) {
logger.error(e);