From 4a6667754794db2ee25bbb55fa60d23f90fbf9b8 Mon Sep 17 00:00:00 2001 From: kdletters Date: Mon, 31 Aug 2026 15:06:32 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=20AGC=20=E4=B8=80=E9=94=AE?= =?UTF-8?q?=E6=9E=84=E5=BB=BA=E4=B8=8A=E4=BC=A0=E5=91=BD=E4=BB=A4=20?= =?UTF-8?q?=E6=9E=84=E5=BB=BA=E5=AE=8C=E6=88=90=E5=90=8E=E8=87=AA=E5=8A=A8?= =?UTF-8?q?=E7=94=9F=E6=88=90=E5=B9=B6=E4=B8=8A=E4=BC=A0=E6=9B=B4=E6=96=B0?= =?UTF-8?q?=E6=B8=85=E5=8D=95=20=E9=80=9A=E8=BF=87=20ossutil=20=E4=B8=8A?= =?UTF-8?q?=E4=BC=A0=20Windows=20x64=20=E5=AE=89=E8=A3=85=E5=8C=85=20?= =?UTF-8?q?=E4=BF=9D=E7=95=99=E6=9C=AC=E6=9C=BA=E5=87=AD=E6=8D=AE=E4=B8=8E?= =?UTF-8?q?=20OSS=20=E5=8F=82=E6=95=B0=E9=85=8D=E7=BD=AE=E8=BE=B9=E7=95=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/ai-game-creator-shell/package.json | 1 + .../scripts/build-release.mjs | 2 +- .../scripts/release-upload.mjs | 34 +++++++++++++++++++ ...œ¯æ–¹æ¡ˆã€‘AGC客户端更新检查与下载-2026-08-31.md | 2 ++ package.json | 1 + 5 files changed, 39 insertions(+), 1 deletion(-) create mode 100644 apps/ai-game-creator-shell/scripts/release-upload.mjs diff --git a/apps/ai-game-creator-shell/package.json b/apps/ai-game-creator-shell/package.json index ae8f2b9fc..50f3050c7 100644 --- a/apps/ai-game-creator-shell/package.json +++ b/apps/ai-game-creator-shell/package.json @@ -8,6 +8,7 @@ "dev-server": "node scripts/start-dev-server.mjs", "dev-stack": "node scripts/start-dev-stack.mjs", "build": "node scripts/build-release.mjs", + "release:upload": "node scripts/release-upload.mjs", "skill-pack:check": "node scripts/check-skill-pack.mjs", "skill-pack:sync": "node scripts/check-skill-pack.mjs --write", "skill-pack:test": "node --test scripts/check-skill-pack.test.mjs", diff --git a/apps/ai-game-creator-shell/scripts/build-release.mjs b/apps/ai-game-creator-shell/scripts/build-release.mjs index c970c8555..643723e57 100644 --- a/apps/ai-game-creator-shell/scripts/build-release.mjs +++ b/apps/ai-game-creator-shell/scripts/build-release.mjs @@ -22,7 +22,7 @@ const packageJson = JSON.parse( const defaultOssBaseUrl = 'https://agc-dev.oss-rg-china-mainland.aliyuncs.com/agc'; -function runTauriBuild(args) { +export function runTauriBuild(args = []) { const noBundle = args.includes('--no-bundle'); const hasTarget = args.includes('--target'); const targetArgs = noBundle || hasTarget ? [] : ['--target', releaseTarget]; diff --git a/apps/ai-game-creator-shell/scripts/release-upload.mjs b/apps/ai-game-creator-shell/scripts/release-upload.mjs new file mode 100644 index 000000000..5b602512a --- /dev/null +++ b/apps/ai-game-creator-shell/scripts/release-upload.mjs @@ -0,0 +1,34 @@ +import { spawnSync } from 'node:child_process'; +import path from 'node:path'; + +const bucket = process.env.AGC_OSS_BUCKET?.trim() || 'agc-dev'; +const endpoint = + process.env.AGC_OSS_ENDPOINT?.trim() || 'oss-rg-china-mainland.aliyuncs.com'; +if (!/^[a-z0-9][a-z0-9.-]{1,62}$/u.test(bucket) || /[\r\n\0]/u.test(endpoint)) { + throw new Error('OSS bucket 或 endpoint é…置无效'); +} +process.env.AGC_UPDATE_OSS_BASE_URL ||= `https://${bucket}.${endpoint}/agc`; + +const { generateUpdateManifest, runTauriBuild } = await import( + './build-release.mjs' +); + +function runOssutil(args) { + const binary = process.env.OSSUTIL_BIN?.trim() || 'ossutil'; + const result = spawnSync(binary, [...args, '--endpoint', endpoint], { + stdio: 'inherit', + shell: false, + }); + if (result.error) { + throw new Error(`无法执行 ${binary},请先安装并é…ç½® ossutil`); + } + if (result.status !== 0) process.exit(result.status ?? 1); +} + +runTauriBuild([]); +const { artifact, manifestPath, manifest } = generateUpdateManifest(); +const artifactKey = `agc/${manifest.version}/${path.basename(artifact)}`; +runOssutil(['cp', artifact, `oss://${bucket}/${artifactKey}`]); +runOssutil(['cp', manifestPath, `oss://${bucket}/agc/latest.json`]); +console.log(`[ai-game-creator-shell] 已上传 oss://${bucket}/${artifactKey}`); +console.log(`[ai-game-creator-shell] 已上传 oss://${bucket}/agc/latest.json`); diff --git a/docs/technical/ã€æŠ€æœ¯æ–¹æ¡ˆã€‘AGC客户端更新检查与下载-2026-08-31.md b/docs/technical/ã€æŠ€æœ¯æ–¹æ¡ˆã€‘AGC客户端更新检查与下载-2026-08-31.md index 3d92339e7..9c5f26e0b 100644 --- a/docs/technical/ã€æŠ€æœ¯æ–¹æ¡ˆã€‘AGC客户端更新检查与下载-2026-08-31.md +++ b/docs/technical/ã€æŠ€æœ¯æ–¹æ¡ˆã€‘AGC客户端更新检查与下载-2026-08-31.md @@ -32,3 +32,5 @@ AGC æ¯æ¬¡å¯åŠ¨æ—¶ç”±æ ¹çª—å£æ£€æŸ¥ä¸€æ¬¡å…¬å¼€ OSS 更新清å•。清å•默 当å‰å‘布目标固定为 Windows x64 NSIS。执行 `npm run ai-game-creator-shell:build` ä¼šå‘ Tauri ä¼ å…¥ `--target x86_64-pc-windows-msvc`,在构建完æˆåŽè‡ªåŠ¨æ‰«æ `.exe` 安装包,并在 `apps/ai-game-creator-shell/src-tauri/target/x86_64-pc-windows-msvc/release/bundle/latest.json` 生æˆåŒ…å«ç‰ˆæœ¬ã€ä¸‹è½½åœ°å€ã€å¤§å°å’Œ SHA-256 的清å•。å¯é€šè¿‡ `AGC_BUILD_TARGET` 显å¼è¦†ç›–目标(å‘布ä»åº”使用 Windows x64),通过 `AGC_UPDATE_ARTIFACT` 指定è¦å‘布的安装包,通过 `AGC_UPDATE_OSS_BASE_URL` 指定 OSS å‰ç¼€ï¼Œé€šè¿‡ `AGC_UPDATE_RELEASE_NOTES` 写入å‘布说明;`--no-bundle` smoke 构建ä¸ä¼šç”Ÿæˆæ¸…å•。 æ¯æ¬¡å‘布安装包上传完æˆåŽï¼Œå†ä¸Šä¼ åŒä¸€ç›®å½•生æˆçš„ `latest.json`ï¼Œç¡®ä¿ `downloadUrl` 指å‘已存在的 OSS 对象;清å•和安装包å‡ä½¿ç”¨å…¬å¼€å¯è¯»å¯¹è±¡ï¼Œä¸åœ¨æ¸…å•中ä¿å­˜å‡­æ®ã€ç­¾å或本地路径。构建脚本ä¸è‡ªåŠ¨ä¸Šä¼  OSS,é¿å…把 AccessKey 写入本地é…置或 CI 日志。 + +å¦‚éœ€ä¸€é”®æž„å»ºå¹¶ä¸Šä¼ ï¼Œå¯æ‰§è¡Œ `npm run ai-game-creator-shell:release:upload`ã€‚è¯¥å‘½ä»¤è¦æ±‚本机已安装并é…ç½® `ossutil`,先构建 Windows x64 NSIS,å†ä¸Šä¼ å®‰è£…包和 `latest.json`。默认上传到 `agc-dev` / `oss-rg-china-mainland.aliyuncs.com`,也å¯ç”¨ `AGC_OSS_BUCKET`ã€`AGC_OSS_ENDPOINT` å’Œ `OSSUTIL_BIN` 覆盖;凭æ®ç”± ossutil 本机é…置读å–,ä¸èƒ½å†™å…¥ä»“åº“æˆ–å‘½ä»¤è¡Œå‚æ•°ã€‚ diff --git a/package.json b/package.json index 617fb24cd..3002ad3fa 100644 --- a/package.json +++ b/package.json @@ -170,6 +170,7 @@ "ai-game-creator-shell:dev": "npm --prefix apps/ai-game-creator-shell run dev", "ai-game-creator-shell:dev-server": "npm --prefix apps/ai-game-creator-shell run dev-server", "ai-game-creator-shell:build": "npm --prefix apps/ai-game-creator-shell run build --", + "ai-game-creator-shell:release:upload": "npm --prefix apps/ai-game-creator-shell run release:upload", "ai-game-creator-shell:llm-status": "npm --prefix apps/ai-game-creator-shell run llm-status --", "ai-game-creator-shell:agent-task": "npm --prefix apps/ai-game-creator-shell run agent-task --", "agc:chat": "npm --prefix apps/ai-game-creator-shell run chat --",