From 7ecb735db0b15b5c437974363927bfa38bcc148c Mon Sep 17 00:00:00 2001 From: mesalogo Date: Mon, 17 Aug 2026 21:21:07 +0800 Subject: [PATCH] fix: restore release index publication The v0.10.2 native packages completed, but the publication job rejected the valid --base-url option before any GitHub Release or mirror assets were published. Normalize CLI option names and cover the exact workflow arguments with a regression test. Advance recovery metadata to 0.10.3 and move the approved user-facing notes forward, removing the unpublished 0.10.2 note to avoid a duplicate first-open display. Release note: 0.10.3 carries forward the approved mirror-node and conversation timestamp improvements from the unpublished 0.10.2 candidate. --- build/create-site-release.cjs | 14 ++++++++------ package-lock.json | 4 ++-- package.json | 2 +- resources/release-notes.json | 6 +++--- tests/site-release.test.ts | 23 +++++++++++++++++++++++ 5 files changed, 37 insertions(+), 12 deletions(-) diff --git a/build/create-site-release.cjs b/build/create-site-release.cjs index 7383777..99094d9 100644 --- a/build/create-site-release.cjs +++ b/build/create-site-release.cjs @@ -16,18 +16,20 @@ const supportedTargets = new Map([ function parseArguments(argv) { const options = {} + const optionNames = new Map([ + ['--manifest', 'manifest'], + ['--base-url', 'baseUrl'], + ['--output', 'output'] + ]) for (let index = 0; index < argv.length; index += 1) { const argument = argv[index] - if ( - argument === '--manifest' || - argument === '--base-url' || - argument === '--output' - ) { + const optionName = optionNames.get(argument) + if (optionName) { const value = argv[index + 1] if (!value) { throw new Error(`${argument} 缺少值`) } - options[argument.slice(2)] = value + options[optionName] = value index += 1 } else { throw new Error(`未知参数:${argument}`) diff --git a/package-lock.json b/package-lock.json index a727d11..356e755 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "goodbuddy", - "version": "0.10.2", + "version": "0.10.3", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "goodbuddy", - "version": "0.10.2", + "version": "0.10.3", "license": "0BSD", "dependencies": { "@agentclientprotocol/sdk": "0.25.1", diff --git a/package.json b/package.json index 16f2c05..eb1fa45 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "goodbuddy", - "version": "0.10.2", + "version": "0.10.3", "private": true, "description": "Secure desktop AI workspace with controlled Agent Runtimes", "desktopName": "GoodBuddy", diff --git a/resources/release-notes.json b/resources/release-notes.json index 5d9be4f..58286a6 100644 --- a/resources/release-notes.json +++ b/resources/release-notes.json @@ -2,12 +2,12 @@ "formatVersion": 1, "releases": [ { - "version": "0.10.2", + "version": "0.10.3", "releasedAt": "2026-08-17", "notes": { "zh-CN": { "highlights": [ - "GoodBuddy 0.10.2 新增可选的镜像节点,并改进最近对话的时间显示。" + "GoodBuddy 0.10.3 新增可选的镜像节点,并改进最近对话的时间显示。" ], "features": [ "**镜像节点与更新源。** 在“关于与更新”中可选择 GitHub(默认)或镜像节点。手动检查、启动时检查和打开下载页会使用同一选择,应用仍只检查版本,不会自动下载安装。" @@ -21,7 +21,7 @@ }, "en-US": { "highlights": [ - "GoodBuddy 0.10.2 adds an optional mirror node and improves how recent conversation times are displayed." + "GoodBuddy 0.10.3 adds an optional mirror node and improves how recent conversation times are displayed." ], "features": [ "**Mirror node and update source.** About & Updates now lets you choose GitHub (default) or the mirror node. Manual checks, startup checks, and the download page use the same selection. GoodBuddy still checks versions only and never downloads or installs updates automatically." diff --git a/tests/site-release.test.ts b/tests/site-release.test.ts index c6312bb..8431e60 100644 --- a/tests/site-release.test.ts +++ b/tests/site-release.test.ts @@ -1,4 +1,5 @@ import { createRequire } from 'node:module' +import { resolve } from 'node:path' import { describe, expect, it, vi } from 'vitest' interface ReleaseFile { @@ -9,6 +10,11 @@ interface ReleaseFile { } interface SiteReleaseModule { + parseArguments: (argv: string[]) => { + manifest: string + baseUrl: string + output: string + } createSiteRelease: ( manifest: object, baseUrl: string @@ -68,6 +74,23 @@ function createAggregateManifest() { } describe('site release manifest', () => { + it('parses the CLI options used by the release workflow', () => { + expect( + siteRelease.parseArguments([ + '--manifest', + 'dist/release-upload/release-manifest.json', + '--base-url', + 'https://example.com/releases/v1.2.3/', + '--output', + 'dist/site-release.json' + ]) + ).toEqual({ + manifest: resolve('dist/release-upload/release-manifest.json'), + baseUrl: 'https://example.com/releases/v1.2.3/', + output: resolve('dist/site-release.json') + }) + }) + it('creates direct HTTPS download entries for all release targets', () => { const result = siteRelease.createSiteRelease( createAggregateManifest(),