build(release): workspace 版本 0.1.0 → 0.2.0,README 的 tag 事实改成 v0.2.0 口径
- Cargo.toml [workspace.package] version = 0.2.0;Cargo.lock 由 cargo 重新解出一致
(只有 8 个 unlucky-* 成员条目变动,第三方版本一字未动)
- 各 crate 的 `unlucky-*` path 依赖 `version = "0.1"` 同步提到 "0.2",否则工作区
根本解析不出来(cargo metadata 会报 `failed to select a version for
unlucky-core = "^0.1"`);crates/app 虽被 exclude、cargo 不读,也一并跟上避免将来
重新纳入时立刻解析失败
- core::launch::LauncherConfig 兜底的 launcher_version 改成 env!("CARGO_PKG_VERSION"),
不再是把版本写死一份(CLI / presenter 本来就这么写)
- README.md / README.zh-CN.md:删掉「v0.1.0 是目前唯一的 tag / the only tagged release」
这类随 v0.2.0 发布即变假的陈述,改写成「v0.1.0 是最后一个 Slint 版 tag,v0.2.0 是
重写后的第一个 tag」;所有讲 v0.1.0 资产 / Slint Royalty-Free 义务的历史记录原样保留
- packaging/README.md:命名与校验示例跟当前 tag 走(v0.2.0);§7 实测记录里的 0.1.0
输出加一句「属实测记录、不回填」,并把过期的「四个 workspace member」改成「任何一个」
This commit is contained in:
1 parent
7235cf08e4
commit
bf6b0c4126
14 files changed
+39
-36
No files matched your search
Generated
+8
-8
@@ -4982,7 +4982,7 @@ checksum = "ca718471876992059f251e33aafc334346ada08042b7661dd1fe313a9bced557"
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "unlucky-agent"
|
name = "unlucky-agent"
|
||||||
version = "0.1.0"
|
version = "0.2.0"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"axum",
|
"axum",
|
||||||
"futures-util",
|
"futures-util",
|
||||||
@@ -4997,7 +4997,7 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "unlucky-app-iced"
|
name = "unlucky-app-iced"
|
||||||
version = "0.1.0"
|
version = "0.2.0"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"iced",
|
"iced",
|
||||||
"image",
|
"image",
|
||||||
@@ -5010,7 +5010,7 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "unlucky-cli"
|
name = "unlucky-cli"
|
||||||
version = "0.1.0"
|
version = "0.2.0"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"serde",
|
"serde",
|
||||||
"serde_json",
|
"serde_json",
|
||||||
@@ -5021,7 +5021,7 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "unlucky-core"
|
name = "unlucky-core"
|
||||||
version = "0.1.0"
|
version = "0.2.0"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"flate2",
|
"flate2",
|
||||||
"futures-util",
|
"futures-util",
|
||||||
@@ -5040,15 +5040,15 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "unlucky-design"
|
name = "unlucky-design"
|
||||||
version = "0.1.0"
|
version = "0.2.0"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "unlucky-i18n"
|
name = "unlucky-i18n"
|
||||||
version = "0.1.0"
|
version = "0.2.0"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "unlucky-palette-extract"
|
name = "unlucky-palette-extract"
|
||||||
version = "0.1.0"
|
version = "0.2.0"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"image",
|
"image",
|
||||||
"unlucky-design",
|
"unlucky-design",
|
||||||
@@ -5056,7 +5056,7 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "unlucky-presenter"
|
name = "unlucky-presenter"
|
||||||
version = "0.1.0"
|
version = "0.2.0"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"serde",
|
"serde",
|
||||||
"serde_json",
|
"serde_json",
|
||||||
|
|||||||
+1
-1
@@ -30,7 +30,7 @@ members = [
|
|||||||
exclude = ["crates/app"]
|
exclude = ["crates/app"]
|
||||||
|
|
||||||
[workspace.package]
|
[workspace.package]
|
||||||
version = "0.1.0"
|
version = "0.2.0"
|
||||||
edition = "2021"
|
edition = "2021"
|
||||||
license = "Apache-2.0"
|
license = "Apache-2.0"
|
||||||
authors = ["AskaEth <i@yeij.top>"]
|
authors = ["AskaEth <i@yeij.top>"]
|
||||||
|
|||||||
@@ -40,9 +40,9 @@ attached to other agent tooling as an MCP server.
|
|||||||
|
|
||||||
## Status
|
## Status
|
||||||
|
|
||||||
`v0.1.0` (2026-11-01) is the only tagged release so far and it predates the UI rewrite: its assets
|
`v0.1.0` (2026-11-01) predates the UI rewrite: its assets are Slint builds, and it stays the last
|
||||||
are Slint builds. Everything described below lives on the development line and is what the release
|
Slint tag. `v0.2.0` is the first tag after the rewrite — the iced line, which is what the release
|
||||||
pipeline now builds.
|
pipeline builds now. Everything described below lives on that line.
|
||||||
|
|
||||||
- **The iced UI is feature-complete**: fourteen pages — instances, version management (three-column
|
- **The iced UI is feature-complete**: fourteen pages — instances, version management (three-column
|
||||||
rail layout with search), content library (modpacks / mods / resource packs / shaders with source
|
rail layout with search), content library (modpacks / mods / resource packs / shaders with source
|
||||||
|
|||||||
+4
-3
@@ -15,7 +15,7 @@ Unlucky Launcher(ULL)是一个用 Rust 写的免费开源 Minecraft: Java
|
|||||||
启动器按实例下载管理,不是启动器的依赖。
|
启动器按实例下载管理,不是启动器的依赖。
|
||||||
- **默认构建里只有一套 UI**:UI 是 iced 0.14 + Material 3 Expressive。早先的 Slint 实现
|
- **默认构建里只有一套 UI**:UI 是 iced 0.14 + Material 3 Expressive。早先的 Slint 实现
|
||||||
(`crates/app`)作为**历史参考**保留源码:已被 workspace `exclude`,默认构建不编、测试不跑、
|
(`crates/app`)作为**历史参考**保留源码:已被 workspace `exclude`,默认构建不编、测试不跑、
|
||||||
发布不发。唯一已发布的 tag `v0.1.0` 发的仍是 Slint 版(见「当前状态」)。
|
发布不发。`v0.1.0` 那个 tag 发的仍是 Slint 版;iced 重写后的第一个 tag 是 `v0.2.0`(见「当前状态」)。
|
||||||
- **CPU 软渲染兜底**:`--software-renderer` 让没有可用 GPU 或驱动有问题的老机也能正常显示界面。
|
- **CPU 软渲染兜底**:`--software-renderer` 让没有可用 GPU 或驱动有问题的老机也能正常显示界面。
|
||||||
- **AI Agent + MCP**:启动器内可对话、改设置、读崩溃诊断;`ull agent serve` 把同一个内核以 MCP
|
- **AI Agent + MCP**:启动器内可对话、改设置、读崩溃诊断;`ull agent serve` 把同一个内核以 MCP
|
||||||
server 形态(stdio 或 Streamable HTTP)开放给外部 Agent 工具。
|
server 形态(stdio 或 Streamable HTTP)开放给外部 Agent 工具。
|
||||||
@@ -28,8 +28,9 @@ Unlucky Launcher(ULL)是一个用 Rust 写的免费开源 Minecraft: Java
|
|||||||
|
|
||||||
## 当前状态
|
## 当前状态
|
||||||
|
|
||||||
`v0.1.0`(2026-11-01)是目前唯一的 tag,它早于 UI 重写:那批资产是 Slint 版。下面说的这套东西在开发
|
`v0.1.0`(2026-11-01)早于 UI 重写:那批资产是 Slint 版,它也是最后一个 Slint 版 tag。重写之后的
|
||||||
线上,也正是发布流水线现在会打出来的东西。
|
第一个 tag 是 `v0.2.0`——也就是 iced 这条线,下面说的这套东西都在线上,也正是发布流水线现在会打
|
||||||
|
出来的东西。
|
||||||
|
|
||||||
- **iced 版界面功能已齐**:十四页——实例、版本管理(三栏 + 搜索)、内容库(整合包 / Mod / 资源包 /
|
- **iced 版界面功能已齐**:十四页——实例、版本管理(三栏 + 搜索)、内容库(整合包 / Mod / 资源包 /
|
||||||
光影,带来源与版本筛选)、日志、设置(通用 / 外观 / Java / 下载)、账户(微软设备码、第三方社区服、
|
光影,带来源与版本筛选)、日志、设置(通用 / 外观 / Java / 下载)、账户(微软设备码、第三方社区服、
|
||||||
|
|||||||
@@ -13,7 +13,7 @@ publish.workspace = true
|
|||||||
# 端口层(src/port*.rs)让 agent 能在没有 core 实现时独立编译与测试;装配层用 core 实现
|
# 端口层(src/port*.rs)让 agent 能在没有 core 实现时独立编译与测试;装配层用 core 实现
|
||||||
# 填充 `Ports`(GUI 侧是 `crates/app`,headless 侧是 `crates/cli` 的 `ull agent serve`)。
|
# 填充 `Ports`(GUI 侧是 `crates/app`,headless 侧是 `crates/cli` 的 `ull agent serve`)。
|
||||||
[dependencies]
|
[dependencies]
|
||||||
unlucky-core = { path = "../core", version = "0.1" }
|
unlucky-core = { path = "../core", version = "0.2" }
|
||||||
|
|
||||||
# 序列化:工具 JSON Schema 是手写 serde_json::Value(不引 schemars),
|
# 序列化:工具 JSON Schema 是手写 serde_json::Value(不引 schemars),
|
||||||
# 工具结果 / 审计记录 / 事件流都用 serde derive。
|
# 工具结果 / 审计记录 / 事件流都用 serde derive。
|
||||||
|
|||||||
@@ -22,12 +22,12 @@ path = "src/lib.rs"
|
|||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
# 令牌唯一真源(M61):颜色/排版/形状/间距/图标几何全部只从这里取。
|
# 令牌唯一真源(M61):颜色/排版/形状/间距/图标几何全部只从这里取。
|
||||||
unlucky-design = { path = "../design", version = "0.1" }
|
unlucky-design = { path = "../design", version = "0.2" }
|
||||||
|
|
||||||
# M85:UI 框架无关的宿主层(DTO / 状态 reducer / host)。**只登记依赖,本 mission 不接线**——
|
# M85:UI 框架无关的宿主层(DTO / 状态 reducer / host)。**只登记依赖,本 mission 不接线**——
|
||||||
# 页面用它的时机由后续 iced 页面 mission 决定(接线流程见 crates/presenter/src/lib.rs 的 crate 文档)。
|
# 页面用它的时机由后续 iced 页面 mission 决定(接线流程见 crates/presenter/src/lib.rs 的 crate 文档)。
|
||||||
# 与 Slint 版共用同一套 host 与状态语义,这是 D26「重写只换渲染」的落点。
|
# 与 Slint 版共用同一套 host 与状态语义,这是 D26「重写只换渲染」的落点。
|
||||||
unlucky-presenter = { path = "../presenter", version = "0.1" }
|
unlucky-presenter = { path = "../presenter", version = "0.2" }
|
||||||
|
|
||||||
# UI 框架(D26 锁定 iced 0.14)。**不得依赖 slint**。
|
# UI 框架(D26 锁定 iced 0.14)。**不得依赖 slint**。
|
||||||
# 关掉默认 features 后必须显式给执行器(M60 踩坑 Q2:否则 `No futures executor has been enabled`),
|
# 关掉默认 features 后必须显式给执行器(M60 踩坑 Q2:否则 `No futures executor has been enabled`),
|
||||||
@@ -57,11 +57,11 @@ image = { version = "0.25", default-features = false, features = [
|
|||||||
# 进 UI 之前分发,命中就把控制权交给 `unlucky_cli::run`。依赖方向 app-iced → cli →
|
# 进 UI 之前分发,命中就把控制权交给 `unlucky_cli::run`。依赖方向 app-iced → cli →
|
||||||
# core/agent 不违反 core 零 UI 铁律(core 的依赖树里没有 cli)。零 UI 依赖的 `ull`
|
# core/agent 不违反 core 零 UI 铁律(core 的依赖树里没有 cli)。零 UI 依赖的 `ull`
|
||||||
# 仍在 `crates/cli`,给没有图形库的机器用——两者不是重复品。
|
# 仍在 `crates/cli`,给没有图形库的机器用——两者不是重复品。
|
||||||
unlucky-cli = { path = "../cli", version = "0.1" }
|
unlucky-cli = { path = "../cli", version = "0.2" }
|
||||||
|
|
||||||
# M92(D28):国际化地基(语言探测 / 消息目录 / 中文字体策略)。零依赖 crate——它拿不到 iced,
|
# M92(D28):国际化地基(语言探测 / 消息目录 / 中文字体策略)。零依赖 crate——它拿不到 iced,
|
||||||
# 所以系统字体扫描留在这里(`src/fonts/cjk.rs`),本 crate 只把族名喂给它的纯函数。
|
# 所以系统字体扫描留在这里(`src/fonts/cjk.rs`),本 crate 只把族名喂给它的纯函数。
|
||||||
unlucky-i18n = { path = "../i18n", version = "0.1" }
|
unlucky-i18n = { path = "../i18n", version = "0.2" }
|
||||||
|
|
||||||
# M97:判据表第 8 行的取证通道。`iced_wgpu` 在真创建设备时会 `log::info!("Selected: {adapter:#?}")`,
|
# M97:判据表第 8 行的取证通道。`iced_wgpu` 在真创建设备时会 `log::info!("Selected: {adapter:#?}")`,
|
||||||
# 但进程里从来没人装 logger,于是「看不见」被当成了「没发生」。这里装一个只放行 `iced_wgpu*` /
|
# 但进程里从来没人装 logger,于是「看不见」被当成了「没发生」。这里装一个只放行 `iced_wgpu*` /
|
||||||
|
|||||||
@@ -28,18 +28,18 @@ serde_json.workspace = true
|
|||||||
# presenter 的零 UI 依赖守门(原文与实测输出就在这里,放不进 present 的自家文档——自指):
|
# presenter 的零 UI 依赖守门(原文与实测输出就在这里,放不进 present 的自家文档——自指):
|
||||||
# grep -rn slint crates/presenter # 期望:无输出
|
# grep -rn slint crates/presenter # 期望:无输出
|
||||||
# cargo tree -p unlucky-presenter --edges normal # 期望:只有 serde/serde_json/unlucky-core
|
# cargo tree -p unlucky-presenter --edges normal # 期望:只有 serde/serde_json/unlucky-core
|
||||||
unlucky-presenter = { path = "../presenter", version = "0.1" }
|
unlucky-presenter = { path = "../presenter", version = "0.2" }
|
||||||
|
|
||||||
# 边界(01c §5 / D3):app 只经 DTO 消费 core/agent,**不 import 内部类型**。
|
# 边界(01c §5 / D3):app 只经 DTO 消费 core/agent,**不 import 内部类型**。
|
||||||
# 迁移到 presenter 之后,app 侧只剩视图模型转换(`conv/ui.rs` 的 BgFill/强调色映射)与
|
# 迁移到 presenter 之后,app 侧只剩视图模型转换(`conv/ui.rs` 的 BgFill/强调色映射)与
|
||||||
# 系统主题探测需要 core;业务装配(读盘/起进程/写设置)全部在 presenter 的 host 里。
|
# 系统主题探测需要 core;业务装配(读盘/起进程/写设置)全部在 presenter 的 host 里。
|
||||||
unlucky-core = { path = "../core", version = "0.1" }
|
unlucky-core = { path = "../core", version = "0.2" }
|
||||||
unlucky-agent = { path = "../agent", version = "0.1" }
|
unlucky-agent = { path = "../agent", version = "0.2" }
|
||||||
# M82:同一个二进制也带 CLI 子命令(`unlucky-launcher instances list` …)。
|
# M82:同一个二进制也带 CLI 子命令(`unlucky-launcher instances list` …)。
|
||||||
# 依赖方向 app → cli → core/agent 不违反 core 零 UI 铁律(guards.yml 的 core-no-ui 只查
|
# 依赖方向 app → cli → core/agent 不违反 core 零 UI 铁律(guards.yml 的 core-no-ui 只查
|
||||||
# `cargo tree -p unlucky-core`,core 不依赖 cli)。零 UI 依赖的 `ull` 仍在 `crates/cli`,
|
# `cargo tree -p unlucky-core`,core 不依赖 cli)。零 UI 依赖的 `ull` 仍在 `crates/cli`,
|
||||||
# 给没有图形库的机器用——两者不是重复品。
|
# 给没有图形库的机器用——两者不是重复品。
|
||||||
unlucky-cli = { path = "../cli", version = "0.1" }
|
unlucky-cli = { path = "../cli", version = "0.2" }
|
||||||
|
|
||||||
[build-dependencies]
|
[build-dependencies]
|
||||||
slint-build.workspace = true
|
slint-build.workspace = true
|
||||||
|
|||||||
@@ -22,10 +22,10 @@ path = "src/lib.rs"
|
|||||||
# 参数解析手写(不引 clap):子命令集小,没必要为它多引一棵依赖树(Win10+ 单基线,
|
# 参数解析手写(不引 clap):子命令集小,没必要为它多引一棵依赖树(Win10+ 单基线,
|
||||||
# 但 CLI 是 headless/服务器场景的产物,体积与启动开销仍是关注项)。
|
# 但 CLI 是 headless/服务器场景的产物,体积与启动开销仍是关注项)。
|
||||||
[dependencies]
|
[dependencies]
|
||||||
unlucky-core = { path = "../core", version = "0.1" }
|
unlucky-core = { path = "../core", version = "0.2" }
|
||||||
# agent:`redact`(输出脱敏)+ `ull agent serve`(M39 的 MCP server:注册表 → rmcp 双投影,
|
# agent:`redact`(输出脱敏)+ `ull agent serve`(M39 的 MCP server:注册表 → rmcp 双投影,
|
||||||
# core 侧五个端口在 src/commands/agent/ports/ 装配)。
|
# core 侧五个端口在 src/commands/agent/ports/ 装配)。
|
||||||
unlucky-agent = { path = "../agent", version = "0.1" }
|
unlucky-agent = { path = "../agent", version = "0.2" }
|
||||||
# `ull agent serve` 要长驻跑 rmcp 的 stdio / Streamable HTTP 传输(tokio 运行时)。
|
# `ull agent serve` 要长驻跑 rmcp 的 stdio / Streamable HTTP 传输(tokio 运行时)。
|
||||||
tokio.workspace = true
|
tokio.workspace = true
|
||||||
serde.workspace = true
|
serde.workspace = true
|
||||||
|
|||||||
@@ -69,7 +69,7 @@ impl ModRecord {
|
|||||||
/// 启动环境快照(Java/内存/OS/组件/mod 清单)。
|
/// 启动环境快照(Java/内存/OS/组件/mod 清单)。
|
||||||
#[derive(Debug, Clone, PartialEq, Eq, Default)]
|
#[derive(Debug, Clone, PartialEq, Eq, Default)]
|
||||||
pub struct EnvironmentSnapshot {
|
pub struct EnvironmentSnapshot {
|
||||||
/// 启动器版本(`ull 0.1.0`)。
|
/// 启动器版本(`ull 0.2.0`)。
|
||||||
pub launcher: Option<String>,
|
pub launcher: Option<String>,
|
||||||
/// 实例 id。
|
/// 实例 id。
|
||||||
pub instance_id: Option<String>,
|
pub instance_id: Option<String>,
|
||||||
|
|||||||
@@ -57,7 +57,7 @@ impl LauncherConfig {
|
|||||||
platform,
|
platform,
|
||||||
process: ProcessConfig::default(),
|
process: ProcessConfig::default(),
|
||||||
launcher_name: "UnluckyLauncher".to_string(),
|
launcher_name: "UnluckyLauncher".to_string(),
|
||||||
launcher_version: "0.1.0".to_string(),
|
launcher_version: env!("CARGO_PKG_VERSION").to_string(),
|
||||||
scan_crash_reports: true,
|
scan_crash_reports: true,
|
||||||
max_crash_artifacts: 4,
|
max_crash_artifacts: 4,
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -12,7 +12,7 @@ publish.workspace = true
|
|||||||
# 分层纪律(D40):`crates/design` 保持零第三方依赖,**图片解码只能在这里**。
|
# 分层纪律(D40):`crates/design` 保持零第三方依赖,**图片解码只能在这里**。
|
||||||
# 本 crate 的职责边界很窄:解码 + 限尺寸 + 把像素交给 design,不碰 UI、不碰设置、不碰壁纸探测。
|
# 本 crate 的职责边界很窄:解码 + 限尺寸 + 把像素交给 design,不碰 UI、不碰设置、不碰壁纸探测。
|
||||||
[dependencies]
|
[dependencies]
|
||||||
unlucky-design = { path = "../design", version = "0.1" }
|
unlucky-design = { path = "../design", version = "0.2" }
|
||||||
|
|
||||||
# 只开两个编解码器(MIT OR Apache-2.0,deny.toml 白名单内):
|
# 只开两个编解码器(MIT OR Apache-2.0,deny.toml 白名单内):
|
||||||
# - png:启动器背景图最常见的无损格式,也是截图通道用的格式;
|
# - png:启动器背景图最常见的无损格式,也是截图通道用的格式;
|
||||||
|
|||||||
@@ -22,7 +22,7 @@ serde_json.workspace = true
|
|||||||
|
|
||||||
# 边界(01c §5 / D3):presenter 只经 DTO 消费 core,**不 import core 的领域类型到 DTO 里**。
|
# 边界(01c §5 / D3):presenter 只经 DTO 消费 core,**不 import core 的领域类型到 DTO 里**。
|
||||||
# host 是 core 的快照/事件流与本 crate DTO 之间的唯一翻译层,所以它需要 core。
|
# host 是 core 的快照/事件流与本 crate DTO 之间的唯一翻译层,所以它需要 core。
|
||||||
unlucky-core = { path = "../core", version = "0.1" }
|
unlucky-core = { path = "../core", version = "0.2" }
|
||||||
|
|
||||||
[lints]
|
[lints]
|
||||||
workspace = true
|
workspace = true
|
||||||
+7
-5
@@ -27,7 +27,7 @@
|
|||||||
LICENSE/NOTICE/README.md 是许可义务,而这三份本来就作为并列 Release 资产分发,裸 `ull` 不缺条款。
|
LICENSE/NOTICE/README.md 是许可义务,而这三份本来就作为并列 Release 资产分发,裸 `ull` 不缺条款。
|
||||||
- `unlucky-launcher` 本体也认全部 CLI 子命令(M82),`ull` 不是第二个界面,而是**不链接图形栈**的同一套命令(差异见 §4 与 §7.4),两者不是重复品。
|
- `unlucky-launcher` 本体也认全部 CLI 子命令(M82),`ull` 不是第二个界面,而是**不链接图形栈**的同一套命令(差异见 §4 与 §7.4),两者不是重复品。
|
||||||
M118:GUI 的**构建产物**名是 `unlucky-launcher-iced`(`crates/app` 已被 workspace `exclude`,不再产出 `unlucky-launcher`);对外文件名仍是 `unlucky-launcher`,改名在 `make_artifacts.py` 落盘时(`LAUNCHER_BIN` 找产物 / `LAUNCHER_ASSET` 定对外名),所以下载链接 / `SHA256SUMS` / 本文矩阵不变。
|
M118:GUI 的**构建产物**名是 `unlucky-launcher-iced`(`crates/app` 已被 workspace `exclude`,不再产出 `unlucky-launcher`);对外文件名仍是 `unlucky-launcher`,改名在 `make_artifacts.py` 落盘时(`LAUNCHER_BIN` 找产物 / `LAUNCHER_ASSET` 定对外名),所以下载链接 / `SHA256SUMS` / 本文矩阵不变。
|
||||||
- `<ver>` 不带前导 `v`(tag 是 `v0.1.0`,文件名是 `0.1.0`)——由脚本统一裁剪。
|
- `<ver>` 不带前导 `v`(tag 是 `v0.2.0`,文件名是 `0.2.0`)——由脚本统一裁剪。
|
||||||
- UNIX 归档内 `mtime`/`uid`/`gid` 归零、权限固定(二进制 0755、文本 0644),
|
- UNIX 归档内 `mtime`/`uid`/`gid` 归零、权限固定(二进制 0755、文本 0644),
|
||||||
同源构建的 sha256 不受打包时刻影响。
|
同源构建的 sha256 不受打包时刻影响。
|
||||||
- **架构不靠猜**:脚本打包前回读二进制的可执行文件头(PE 机器码 / ELF `e_machine` /
|
- **架构不靠猜**:脚本打包前回读二进制的可执行文件头(PE 机器码 / ELF `e_machine` /
|
||||||
@@ -39,7 +39,7 @@
|
|||||||
版本号只有一个来源:**`Cargo.toml` 的 `[workspace.package] version`**。
|
版本号只有一个来源:**`Cargo.toml` 的 `[workspace.package] version`**。
|
||||||
|
|
||||||
- `<ver>` 由 `make_artifacts.py` 通过 `cargo metadata --no-deps` 读出(不是正则扒文件),
|
- `<ver>` 由 `make_artifacts.py` 通过 `cargo metadata --no-deps` 读出(不是正则扒文件),
|
||||||
四个 workspace member 版本不一致时直接失败。
|
任何一个 workspace member 版本不一致时直接失败。
|
||||||
- 带 tag 构建时(CI)额外传 `--version "$TAG"`:脚本裁剪 `v` 后与 `Cargo.toml` 交叉校验,
|
- 带 tag 构建时(CI)额外传 `--version "$TAG"`:脚本裁剪 `v` 后与 `Cargo.toml` 交叉校验,
|
||||||
**不一致即失败**——避免出现 tag 说 0.2.0、产物里写 0.1.0 的发布事故。
|
**不一致即失败**——避免出现 tag 说 0.2.0、产物里写 0.1.0 的发布事故。
|
||||||
- `ull --version` 必报同一版本(脚本打包前跑一次冒烟 `ull --version` 断言版本串在其中),
|
- `ull --version` 必报同一版本(脚本打包前跑一次冒烟 `ull --version` 断言版本串在其中),
|
||||||
@@ -54,7 +54,7 @@
|
|||||||
cargo build --release --locked # 产出 target/release/{unlucky-launcher-iced,ull}(M118:Slint 版不再进 workspace)
|
cargo build --release --locked # 产出 target/release/{unlucky-launcher-iced,ull}(M118:Slint 版不再进 workspace)
|
||||||
cargo build --profile fast --bins # 只是想快点看到画面/跑测试:快档(§6),产物在 target/fast/
|
cargo build --profile fast --bins # 只是想快点看到画面/跑测试:快档(§6),产物在 target/fast/
|
||||||
python packaging/make_artifacts.py --out dist # 产物落在 dist/,含 SHA256SUMS.txt
|
python packaging/make_artifacts.py --out dist # 产物落在 dist/,含 SHA256SUMS.txt
|
||||||
python packaging/make_artifacts.py --version v0.1.0 # 顺带校验版本一致性
|
python packaging/make_artifacts.py --version v0.2.0 # 顺带校验版本一致性
|
||||||
python packaging/make_artifacts.py --no-smoke # 跳过 ull --version 冒烟
|
python packaging/make_artifacts.py --no-smoke # 跳过 ull --version 冒烟
|
||||||
```
|
```
|
||||||
|
|
||||||
@@ -83,7 +83,7 @@ CI 真机上:`windows-arm64` 由 cross 构建产物 + M50 的 dumpbin 导入
|
|||||||
|
|
||||||
- 触发:`push` tag `v*`;`workflow_dispatch` 只构建不发布(验证矩阵仍编得过)。
|
- 触发:`push` tag `v*`;`workflow_dispatch` 只构建不发布(验证矩阵仍编得过)。
|
||||||
`inputs.prerelease` **只在 tag ref 上 dispatch 才可达**——Actions 页面的 "Run workflow" 只能选分支,
|
`inputs.prerelease` **只在 tag ref 上 dispatch 才可达**——Actions 页面的 "Run workflow" 只能选分支,
|
||||||
要跑 tag 得 `gh workflow run release.yml --ref v0.1.0`。分支 ref 的 dispatch 与 push 一样被
|
要跑 tag 得 `gh workflow run release.yml --ref v0.2.0`。分支 ref 的 dispatch 与 push 一样被
|
||||||
`release` job 的 `if: github.ref_type == 'tag'` 挡在发布之外,所以「dispatch 只构建不发布」
|
`release` job 的 `if: github.ref_type == 'tag'` 挡在发布之外,所以「dispatch 只构建不发布」
|
||||||
与「dispatch 能关 pre-release」是两条互不冲突的规则。
|
与「dispatch 能关 pre-release」是两条互不冲突的规则。
|
||||||
- 矩阵(六槽位;`matrix.build_dir` 参数化产物根,脚本不再假设产物一定在 `target/release`):
|
- 矩阵(六槽位;`matrix.build_dir` 参数化产物根,脚本不再假设产物一定在 `target/release`):
|
||||||
@@ -103,7 +103,7 @@ CI 真机上:`windows-arm64` 由 cross 构建产物 + M50 的 dumpbin 导入
|
|||||||
`inputs.prerelease` 为空)时**不传** `--prerelease`,所以重跑**不会**翻转标记;只有 tag ref 上的
|
`inputs.prerelease` 为空)时**不传** `--prerelease`,所以重跑**不会**翻转标记;只有 tag ref 上的
|
||||||
`workflow_dispatch` 显式给了输入才断言——`prerelease=true` → `--prerelease`,`prerelease=false` →
|
`workflow_dispatch` 显式给了输入才断言——`prerelease=true` → `--prerelease`,`prerelease=false` →
|
||||||
`--prerelease=false`。要改标记两条路等价且互不打架:① 走流水线
|
`--prerelease=false`。要改标记两条路等价且互不打架:① 走流水线
|
||||||
`gh workflow run release.yml --ref v0.1.0 -f prerelease=false`(会落到 edit 分支显式断言)
|
`gh workflow run release.yml --ref v0.2.0 -f prerelease=false`(会落到 edit 分支显式断言)
|
||||||
② 直接 `gh release edit <tag> --prerelease=false`(不经流水线;后续默认重跑不碰该标记,
|
② 直接 `gh release edit <tag> --prerelease=false`(不经流水线;后续默认重跑不碰该标记,
|
||||||
不会被翻回去)。首建(`create`)仍保持「pre-release 默认开」的老契约,空输入按 `true` 处理。
|
不会被翻回去)。首建(`create`)仍保持「pre-release 默认开」的老契约,空输入按 `true` 处理。
|
||||||
|
|
||||||
@@ -220,6 +220,8 @@ SLINT_BACKEND=winit-software unlucky-launcher # 环境变量(Slint
|
|||||||
|
|
||||||
构建环境:rustc 1.99.1 stable / `x86_64-pc-windows-gnu`(MinGW 链接器)。§7.2/§7.3 的早数字是另有 worker 并发做全量 debug 构建时测的(偏悲观);§7.1 的三行 M96 数据是空载冷编译。
|
构建环境:rustc 1.99.1 stable / `x86_64-pc-windows-gnu`(MinGW 链接器)。§7.2/§7.3 的早数字是另有 worker 并发做全量 debug 构建时测的(偏悲观);§7.1 的三行 M96 数据是空载冷编译。
|
||||||
|
|
||||||
|
**本节以下所有输出里的 `0.1.0` 都是当时那次运行的真实输出(workspace 版本那时是 `0.1.0`),属实测记录,不随后续版本号改动而回填**;当前版本见 `Cargo.toml` 的 `[workspace.package] version`。§2 的校验机制不依赖任何写死的数字,改版本号不会让它失效。
|
||||||
|
|
||||||
### 7.1 体积与冷构建耗时(实测字节数,不是估算)
|
### 7.1 体积与冷构建耗时(实测字节数,不是估算)
|
||||||
|
|
||||||
| 档位 | `unlucky-launcher.exe` | `unlucky-launcher-iced.exe` | `ull.exe` | 冷构建耗时 |
|
| 档位 | `unlucky-launcher.exe` | `unlucky-launcher-iced.exe` | `ull.exe` | 冷构建耗时 |
|
||||||
|
|||||||
@@ -38,7 +38,7 @@ never be shipped under a slot name it was not built for.
|
|||||||
|
|
||||||
Usage:
|
Usage:
|
||||||
cargo build --release --locked
|
cargo build --release --locked
|
||||||
python3 packaging/make_artifacts.py [--version v0.1.0] [--out dist] [--no-smoke]
|
python3 packaging/make_artifacts.py [--version v0.2.0] [--out dist] [--no-smoke]
|
||||||
# cross build (arm64 exe from an x64 host):
|
# cross build (arm64 exe from an x64 host):
|
||||||
python3 packaging/make_artifacts.py --slot windows-arm64 \\
|
python3 packaging/make_artifacts.py --slot windows-arm64 \\
|
||||||
--build-dir target/aarch64-pc-windows-msvc/release
|
--build-dir target/aarch64-pc-windows-msvc/release
|
||||||
|
|||||||
Reference in new issue
Block a user