Compare commits

..
3 Commits
Author SHA1 Message Date
yyyyyynnn 34ec59f28b Soften startup update notification 2026-07-04 14:03:52 +08:00
yyyyyynnn 9a82612d5d Fix release asset upload 2026-07-04 13:47:14 +08:00
yyyyyynnn 10c16cba7b Fix release workflow publishing 2026-07-04 13:35:51 +08:00
8 changed files with 106 additions and 29 deletions
+67 -19
View File
@@ -9,20 +9,37 @@ on:
permissions:
contents: write
defaults:
run:
shell: bash
jobs:
build:
name: Build ${{ matrix.platform }}
name: Build ${{ matrix.name }}
runs-on: ${{ matrix.platform }}
strategy:
fail-fast: false
matrix:
include:
- platform: macos-latest
- name: macOS
platform: macos-latest
args: --bundles dmg
- platform: ubuntu-22.04
artifact: codex-x-macos
paths: |
apps/desktop/src-tauri/target/release/bundle/dmg/*.dmg
- name: Linux
platform: ubuntu-22.04
args: --bundles deb,rpm
- platform: windows-latest
artifact: codex-x-linux
paths: |
apps/desktop/src-tauri/target/release/bundle/deb/*.deb
apps/desktop/src-tauri/target/release/bundle/rpm/*.rpm
- name: Windows
platform: windows-latest
args: --bundles msi
artifact: codex-x-windows
paths: |
apps/desktop/src-tauri/target/release/bundle/msi/*.msi
steps:
- name: Checkout
@@ -61,9 +78,35 @@ jobs:
- name: Install dependencies
run: pnpm install --frozen-lockfile
- name: Build Tauri bundles
run: pnpm --dir apps/desktop tauri build ${{ matrix.args }}
- name: Upload bundle artifacts
uses: actions/upload-artifact@v4
with:
name: ${{ matrix.artifact }}
path: ${{ matrix.paths }}
if-no-files-found: error
retention-days: 7
release:
name: Publish GitHub Release
needs: build
runs-on: ubuntu-22.04
permissions:
contents: write
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Download bundle artifacts
uses: actions/download-artifact@v4
with:
path: release-assets
merge-multiple: true
- name: Prepare release notes
id: release_notes
shell: bash
run: |
python3 - <<'PY'
from pathlib import Path
@@ -80,21 +123,26 @@ jobs:
body = match.group(1).strip() if match else ""
if not body:
body = "Codex-X desktop release."
with open(os.environ["GITHUB_OUTPUT"], "a", encoding="utf-8") as fh:
fh.write("body<<EOF\n")
with open("release-body.md", "w", encoding="utf-8") as fh:
fh.write(body + "\n")
fh.write("EOF\n")
PY
- name: Build and upload Tauri bundles
uses: tauri-apps/tauri-action@v0
- name: Publish release
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
projectPath: apps/desktop
tagName: ${{ github.ref_name }}
releaseName: Codex-X ${{ github.ref_name }}
releaseBody: ${{ steps.release_notes.outputs.body }}
releaseDraft: false
prerelease: false
args: ${{ matrix.args }}
GH_TOKEN: ${{ github.token }}
run: |
set -euo pipefail
tag="${GITHUB_REF_NAME}"
title="Codex-X ${tag}"
if gh release view "$tag" >/dev/null 2>&1; then
gh release edit "$tag" --title "$title" --notes-file release-body.md --latest
else
gh release create "$tag" --title "$title" --notes-file release-body.md --latest
fi
mapfile -t assets < <(find release-assets -type f \( -name '*.dmg' -o -name '*.msi' -o -name '*.deb' -o -name '*.rpm' \) -print | sort)
if [ "${#assets[@]}" -eq 0 ]; then
echo "No release assets found" >&2
exit 1
fi
printf 'Uploading %s\n' "${assets[@]}"
gh release upload "$tag" "${assets[@]}" --clobber
+18
View File
@@ -2,6 +2,24 @@
All notable changes to Codex-X will be documented here.
## [v0.2.11] - 2026-07-04
- 调整首次启动自动检查更新体验:不再弹出居中的强提醒窗口。
- 自动检测到新版本时仅显示轻量 toast,并保留概览页顶部“发现新版本”提示条。
- 只有用户在【关于】页面主动点击“检查更新”时,检测到新版本才弹出“现在下载 / 稍后”窗口。
## [v0.2.10] - 2026-07-04
- 修复 Release 发布任务上传 Linux 产物时误把 `deb/`、`rpm/` 目录当作资产上传的问题。
- 发布任务现在只收集 `.dmg` / `.msi` / `.deb` / `.rpm` 文件并统一上传。
- 补齐稳定的三平台 Release 自动发布流程。
## [v0.2.9] - 2026-07-04
- 修复 GitHub Actions Release 发布流程:不再由三平台矩阵并发创建 Release,改为先上传构建产物,再由单独发布任务统一创建/更新 Release。
- 修复 `Resource not accessible by integration` 导致 Release 创建失败的问题。
- Release 仍会从 `CHANGELOG.md` 自动读取当前 tag 的更新日志,并上传 macOS / Windows / Linux 安装包。
## [v0.2.8] - 2026-07-04
- 更新页进一步产品化:去掉资源/仓库调试信息,将“有更新”改为更明显的绿色标签。
+1 -1
View File
@@ -1,6 +1,6 @@
{
"name": "codex-x",
"version": "0.2.8",
"version": "0.2.11",
"private": true,
"description": "Codex Switch & Instruct desktop manager",
"type": "module",
+1 -1
View File
@@ -337,7 +337,7 @@ dependencies = [
[[package]]
name = "codex-x"
version = "0.2.8"
version = "0.2.11"
dependencies = [
"chrono",
"dirs 5.0.1",
+1 -1
View File
@@ -1,6 +1,6 @@
[package]
name = "codex-x"
version = "0.2.8"
version = "0.2.11"
description = "Codex Switch & Instruct desktop manager"
authors = ["yynxxxxx"]
license = "MIT"
+1 -1
View File
@@ -1,7 +1,7 @@
{
"$schema": "https://schema.tauri.app/config/2",
"productName": "Codex-X",
"version": "0.2.8",
"version": "0.2.11",
"identifier": "com.yynxxxxx.codexx",
"build": {
"frontendDist": "../dist",
+16 -5
View File
@@ -1019,6 +1019,9 @@ function App() {
const latestVersion = release.tag_name || release.name || "";
const asset = releaseAssetForPlatform(release.assets || []);
const hasUpdate = compareVersions(latestVersion, appVersion) > 0;
const message = hasUpdate
? (lang === "zh" ? "发现新版本" : "Update available")
: (lang === "zh" ? "当前已是最新版本" : "You are up to date");
setReleaseInfo({
status: "ok",
latestVersion,
@@ -1026,16 +1029,24 @@ function App() {
assetName: asset?.name,
body: release.body || "",
hasUpdate,
message: hasUpdate
? (lang === "zh" ? "发现新版本" : "Update available")
: (lang === "zh" ? "当前已是最新版本" : "You are up to date"),
message,
});
if (hasUpdate) setUpdatePromptOpen(true);
if (hasUpdate) {
if (quiet) {
setToast(lang === "zh" ? `发现新版本 ${latestVersion},可在概览页查看` : `New version ${latestVersion} is available`);
} else {
setUpdatePromptOpen(true);
}
} else if (!quiet) {
setToast(message);
}
} catch (e) {
const message = quiet ? (lang === "zh" ? "自动检查失败" : "Auto check failed") : (lang === "zh" ? "检查失败" : "Check failed");
setReleaseInfo({
status: "error",
message: quiet ? (lang === "zh" ? "自动检查失败" : "Auto check failed") : (lang === "zh" ? "检查失败" : "Check failed"),
message,
});
if (!quiet) setToast(message);
}
}, [aboutInfo?.githubRepo, aboutInfo?.appVersion, lang]);
+1 -1
View File
@@ -1,7 +1,7 @@
{
"name": "codex-x-workspace",
"private": true,
"version": "0.2.8",
"version": "0.2.11",
"scripts": {
"dev": "pnpm --dir apps/desktop tauri dev",
"build": "pnpm --dir apps/desktop tauri build",