cicy-desktop 2.1.246 → 2.1.248

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -76,3 +76,31 @@ jobs:
76
76
  dist/*.deb
77
77
  dist/*.AppImage
78
78
  dist/latest-linux.yml
79
+
80
+ # AppImage + 版本指针传到 OSS —— app-updater 现已全走 OSS(不碰 GitHub),linux 也要在
81
+ # OSS 上有 versioned AppImage(CiCy-Desktop-<ver>.AppImage)和自己的指针 linux-latest-version.txt。
82
+ # 和 mac/win 同一 bucket/凭证。electron-builder 默认产物名含空格,重命名成代码约定的连字符名。
83
+ - name: Upload AppImage to OSS (versioned + latest pointer)
84
+ if: startsWith(github.ref, 'refs/tags/v')
85
+ shell: bash
86
+ env:
87
+ OSS_AK: ${{ secrets.OSS_ACCESS_KEY_ID }}
88
+ OSS_SK: ${{ secrets.OSS_ACCESS_KEY_SECRET }}
89
+ run: |
90
+ set -e
91
+ if [ -z "${OSS_AK:-}" ] || [ -z "${OSS_SK:-}" ]; then echo "::warning::OSS creds missing — skip"; exit 0; fi
92
+ VER="${GITHUB_REF_NAME#v}"
93
+ curl -sL https://gosspublic.alicdn.com/ossutil/1.7.18/ossutil64 -o ossutil && chmod +x ossutil
94
+ test -s ossutil && head -c4 ossutil | grep -q ELF || { echo "ossutil download bad"; exit 1; }
95
+ ./ossutil config -e oss-cn-shanghai.aliyuncs.com -i "$OSS_AK" -k "$OSS_SK"
96
+ BASE="oss://cicy-1372193042-cn/releases"
97
+ HOST="https://cicy-1372193042-cn.oss-cn-shanghai.aliyuncs.com/releases"
98
+ APP=$(ls dist/*.AppImage 2>/dev/null | head -1)
99
+ [ -n "$APP" ] && [ -f "$APP" ] || { echo "::error::no AppImage built"; exit 1; }
100
+ DEST="CiCy-Desktop-$VER.AppImage"
101
+ ./ossutil cp "$APP" "$BASE/$DEST" -f --acl public-read
102
+ ./ossutil cp "$APP" "$BASE/CiCy-Desktop-latest.AppImage" -f --acl public-read || true
103
+ # 版本指针最后写(包传完再更新),避免版本号涨了但包还没就位。
104
+ printf '%s' "$VER" > linux-latest-version.txt
105
+ ./ossutil cp linux-latest-version.txt "$BASE/linux-latest-version.txt" -f --acl public-read
106
+ echo "OSS linux: $HOST/$DEST"
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "cicy-desktop",
3
- "version": "2.1.246",
3
+ "version": "2.1.248",
4
4
  "description": "CiCy - AI-powered operating system browser",
5
5
  "main": "src/main.js",
6
6
  "bin": {
@@ -19,18 +19,7 @@ const path = require("path");
19
19
  const fs = require("fs");
20
20
  const https = require("https");
21
21
  const log = require("electron-log");
22
- const { OSS_RELEASES_BASE, MIRRORS, mirrorUrl } = require("./sidecar/mirrors");
23
-
24
- const REPO = "cicy-ai/cicy-desktop";
25
- const GH_DL = (ver) => `https://github.com/${REPO}/releases/download/v${ver}`;
26
-
27
- // ── 网络判定(缓存)──────────────────────────────────────────────────────────
28
- let _network = null;
29
- async function detectNetwork() {
30
- if (_network) return _network;
31
- try { _network = await require("./sidecar/net-detect")(); } catch { _network = "unknown"; }
32
- return _network;
33
- }
22
+ const { OSS_RELEASES_BASE } = require("./sidecar/mirrors");
34
23
 
35
24
  // ── 版本比较:>0 a 新于 b ─────────────────────────────────────────────────────
36
25
  function cmpVer(a, b) {
@@ -61,12 +50,6 @@ function getText(url, redirects = 0) {
61
50
  });
62
51
  }
63
52
 
64
- // CN 走 ghproxy 兜底(OSS 没有 mac/linux 包)。
65
- function mirrored(githubUrl) {
66
- const m = MIRRORS[0];
67
- return m ? mirrorUrl(githubUrl, m) : githubUrl;
68
- }
69
-
70
53
  // HEAD 探测 URL 是否可下(200/206 = ok)。跟随重定向(GitHub release 会 302 到 CDN)。
71
54
  // 用于「先出包再更新版本」的客户端保险:版本号涨了但包还没传 → HEAD 404 → 先不报更新。
72
55
  function headOk(url, redirects = 0) {
@@ -89,40 +72,25 @@ function headOk(url, redirects = 0) {
89
72
  }
90
73
 
91
74
  // ── 最新版本号 ────────────────────────────────────────────────────────────────
92
- async function fetchLatestVersion(network) {
93
- // **Windows 包只在 OSS(GitHub 不发 win),版本清单也一律读 OSS —— 与网络判定无关。**
94
- // 否则 net=unknown(启动探测超时会被缓存成 unknown 整个会话)或 global 时去读 GitHub,CN
95
- // 用户读不到 → 更新提示整段会话都不出现(用户报的「更新 banner 没出现」)。win→win-latest。
96
- if (process.platform === "win32") {
97
- return (await getText(`${OSS_RELEASES_BASE}/win-latest-version.txt`)).trim().replace(/^v/, "");
98
- }
99
- // mac/linux:net-detect 契约是「cn 和 unknown 都优先镜像」—— 只有确认可达 GitHub(global)
100
- // 才走 GitHub;cn/unknown 一律读 OSS。按平台读各自指针(win/mac 两条独立 CI、版本可能不
101
- // 同步,读错平台会 404);linux 无独立 OSS 指针、沿用裸名(与 win 同 tag、走 GitHub 下载)。
102
- if (network !== "global") {
103
- const file = process.platform === "darwin" ? "mac-latest-version.txt" : "latest-version.txt";
104
- return (await getText(`${OSS_RELEASES_BASE}/${file}`)).trim().replace(/^v/, "");
105
- }
106
- // 确认可达 GitHub:releases/latest 的 tag_name。
107
- const j = JSON.parse(await getText(`https://api.github.com/repos/${REPO}/releases/latest`));
108
- return String(j.tag_name || "").trim().replace(/^v/, "");
75
+ async function fetchLatestVersion() {
76
+ // 版本清单**一律读 OSS**(win/mac/linux 各自指针),与网络判定无关 —— 彻底不碰 GitHub,
77
+ // 这样 cicy-desktop 仓库私有也不影响更新检查。win/mac 是两条独立 CI、版本可能不同步,读错
78
+ // 平台会 404,所以各读各的指针文件。
79
+ const file = process.platform === "win32" ? "win-latest-version.txt"
80
+ : process.platform === "darwin" ? "mac-latest-version.txt"
81
+ : "linux-latest-version.txt";
82
+ return (await getText(`${OSS_RELEASES_BASE}/${file}`)).trim().replace(/^v/, "");
109
83
  }
110
84
 
111
85
  // ── 安装包 URL(分平台 + 分网络)+ 本地文件名 ────────────────────────────────
112
- function assetFor(version, network) {
86
+ function assetFor(version) {
113
87
  const plat = process.platform;
114
88
  const arch = process.arch === "arm64" ? "arm64" : "x64";
115
- if (plat === "win32") {
116
- // win 包只在 OSS(GitHub 不发);CN/非 CN 都用 OSS。
117
- return { url: `${OSS_RELEASES_BASE}/cicy-desktop-${version}.exe`, file: `cicy-desktop-${version}.exe` };
118
- }
119
- if (plat === "darwin") {
120
- const gh = `${GH_DL(version)}/cicy-desktop-${version}-${arch}.pkg`;
121
- return { url: network === "global" ? gh : mirrored(gh), file: `cicy-desktop-${version}-${arch}.pkg` };
122
- }
123
- // linux
124
- const gh = `${GH_DL(version)}/CiCy-Desktop-${version}.AppImage`;
125
- return { url: network === "global" ? gh : mirrored(gh), file: `CiCy-Desktop-${version}.AppImage` };
89
+ // 三端安装包**全部从 OSS 拉**,与网络无关 —— 不再拼 GitHub 下载 URL,仓库私有也能更新。
90
+ const file = plat === "win32" ? `cicy-desktop-${version}.exe`
91
+ : plat === "darwin" ? `cicy-desktop-${version}-${arch}.pkg`
92
+ : `CiCy-Desktop-${version}.AppImage`;
93
+ return { url: `${OSS_RELEASES_BASE}/${file}`, file };
126
94
  }
127
95
 
128
96
  // ── 下载(带进度,跟随重定向)──────────────────────────────────────────────────
@@ -187,13 +155,12 @@ function init(mainWin) {
187
155
  async function check() {
188
156
  try {
189
157
  broadcast({ status: "checking", error: null });
190
- const net = await detectNetwork();
191
- const latest = await fetchLatestVersion(net);
158
+ const latest = await fetchLatestVersion();
192
159
  const current = app.getVersion();
193
160
  if (latest && cmpVer(latest, current) > 0) {
194
161
  // 「先出包再更新版本」客户端保险:版本号涨了不代表包传完了。先 HEAD 确认本平台安装包
195
162
  // 真能下(200),否则当成「还没就绪」继续显已是最新,避免用户点下载 404。
196
- const { url } = assetFor(latest, net);
163
+ const { url } = assetFor(latest);
197
164
  const ready = await headOk(url);
198
165
  if (ready) broadcast({ status: "available", version: latest, current, progress: null, filePath: null });
199
166
  else { log.info(`[app-updater] ${latest} 版本号已更新但安装包未就位(HEAD 非 200):${url} — 暂不提示更新`); broadcast({ status: "up-to-date", version: current, current }); }
@@ -215,8 +182,7 @@ async function downloadUpdate() {
215
182
  if (!version) { broadcast({ status: "error", error: "no version" }); return _state; }
216
183
  _downloading = true;
217
184
  try {
218
- const net = await detectNetwork();
219
- const { url, file } = assetFor(version, net);
185
+ const { url, file } = assetFor(version);
220
186
  // 下到 ~/Downloads(用户能直接找到安装包);目录不存在则建。
221
187
  const dir = app.getPath("downloads");
222
188
  try { fs.mkdirSync(dir, { recursive: true }); } catch {}