Merge branch 'feat/m153-docsweep-close-forgotten-doc-findin'
Guards / 依赖许可与来源(cargo-deny) (push) Canceled after 0s
Guards / 文件行数 ≤400 守门 (push) Canceled after 0s
Guards / unsafe 落点守门(集合必须恰好一个文件) (push) Canceled after 0s
Guards / design 零第三方依赖守门 (push) Canceled after 0s
Guards / presenter 零 UI 守门 (push) Canceled after 0s
Guards / core 零 UI 守门 (push) Canceled after 0s
Dev Guards / 架构与合规守门(同 main 口径) (push) Canceled after 0s
Dev Guards / fmt (rustfmt --check) (push) Canceled after 0s
Dev Guards / clippy (ubuntu) (push) Canceled after 0s
Guards / 依赖许可与来源(cargo-deny) (push) Canceled after 0s
Guards / 文件行数 ≤400 守门 (push) Canceled after 0s
Guards / unsafe 落点守门(集合必须恰好一个文件) (push) Canceled after 0s
Guards / design 零第三方依赖守门 (push) Canceled after 0s
Guards / presenter 零 UI 守门 (push) Canceled after 0s
Guards / core 零 UI 守门 (push) Canceled after 0s
Dev Guards / 架构与合规守门(同 main 口径) (push) Canceled after 0s
Dev Guards / fmt (rustfmt --check) (push) Canceled after 0s
Dev Guards / clippy (ubuntu) (push) Canceled after 0s
This commit is contained in:
commit
afdbc9fd51
4 files changed
+43
-36
No files matched your search
@@ -173,10 +173,11 @@ This list is the reason to believe the rest. None of it is hidden behind marketi
|
|||||||
section*, *Add override*. Each writes `[page] 占位动作 …` to stderr and changes nothing — instance
|
section*, *Add override*. Each writes `[page] 占位动作 …` to stderr and changes nothing — instance
|
||||||
management from the GUI is the instance-wizard work still outstanding, and settings change as you
|
management from the GUI is the instance-wizard work still outstanding, and settings change as you
|
||||||
edit them rather than on a Save.
|
edit them rather than on a Save.
|
||||||
- **Linux and macOS artifacts are unverified.** The reference machine is Windows; the `linux-x64`,
|
- **Linux and macOS artifacts are unverified, and this release does not even build them.** The
|
||||||
`linux-arm64`, `macos-arm64` and `macos-x64` archives are produced by the CI matrix and have not
|
reference machine is Windows; the `linux-x64`, `linux-arm64`, `macos-arm64` and `macos-x64` slots
|
||||||
been downloaded and run end to end. Treat them as untested output, not as "supported because the
|
sit in the CI matrix but the default release run skips them, and they have never been downloaded and
|
||||||
matrix lists them".
|
run end to end. `gh workflow run release.yml -f all_slots=true` builds them for evidence. Treat them
|
||||||
|
as untested output, not as "supported because the matrix lists them".
|
||||||
- **macOS is not finalised.** It has two rounds of real-device evidence (Apple Silicon), which is why
|
- **macOS is not finalised.** It has two rounds of real-device evidence (Apple Silicon), which is why
|
||||||
the build exists — but the menu-bar name, the placement of the three window buttons (macOS puts
|
the build exists — but the menu-bar name, the placement of the three window buttons (macOS puts
|
||||||
them top-left; ours are drawn top-right), and 300s+ steady state still need a real machine. macOS
|
them top-left; ours are drawn top-right), and 300s+ steady state still need a real machine. macOS
|
||||||
@@ -207,19 +208,20 @@ Grab the file for your platform from
|
|||||||
|------|-------|-------|
|
|------|-------|-------|
|
||||||
| `windows-x64` | `unlucky-launcher_<version>_windows_x64.exe` | bare `.exe`, double-click to run |
|
| `windows-x64` | `unlucky-launcher_<version>_windows_x64.exe` | bare `.exe`, double-click to run |
|
||||||
| `windows-arm64` | `unlucky-launcher_<version>_windows_arm64.exe` | bare `.exe` — **not yet published**, see below |
|
| `windows-arm64` | `unlucky-launcher_<version>_windows_arm64.exe` | bare `.exe` — **not yet published**, see below |
|
||||||
| `linux-x64` | `unlucky-launcher_<version>_linux_x64.tar.gz` | one archive, one top-level directory |
|
| `linux-x64` | `unlucky-launcher_<version>_linux_x64.tar.gz` | one archive, one top-level directory — **not yet published** |
|
||||||
| `linux-arm64` | `unlucky-launcher_<version>_linux_arm64.tar.gz` | same |
|
| `linux-arm64` | `unlucky-launcher_<version>_linux_arm64.tar.gz` | same — **not yet published** |
|
||||||
| `macos-arm64` | `unlucky-launcher_<version>_macos_arm64.tar.gz` | same |
|
| `macos-arm64` | `unlucky-launcher_<version>_macos_arm64.tar.gz` | same — **not yet published** |
|
||||||
| `macos-x64` | `unlucky-launcher_<version>_macos_x64.tar.gz` | same |
|
| `macos-x64` | `unlucky-launcher_<version>_macos_x64.tar.gz` | same — **not yet published** |
|
||||||
| every slot | `ull_<version>_<platform>_<arch>[.exe]` | bare CLI binary, its own asset |
|
| every published slot | `ull_<version>_<platform>_<arch>[.exe]` | bare CLI binary, its own asset |
|
||||||
| all | `SHA256SUMS.txt` | `sha256sum -c` eats it directly |
|
| all | `SHA256SUMS.txt` | `sha256sum -c` eats it directly |
|
||||||
|
|
||||||
`windows-arm64` is the one row documented but **not in the current release**: the CI ARM64 runner is
|
**This release publishes `windows-x64` and nothing else.** The publish job keeps only the slots named
|
||||||
missing the Windows SDK's ARM64 import libraries — the cause is located and the fix is in progress.
|
in `PUBLISH_SLOTS` (`.github/workflows/release-publish.yml`) and deletes every other artifact before
|
||||||
The row stays because the architecture is still supported and the slot still builds (unpublished) in
|
it writes `SHA256SUMS.txt`, so a row marked **not yet published** is a naming rule, not a downloadable
|
||||||
the matrix; what decides whether a slot reaches a Release is `PUBLISH_SLOTS` in
|
asset. Of those rows `windows-arm64` is the one CI still builds — natively, on GitHub's
|
||||||
`.github/workflows/release.yml`, which today names `windows-x64` only — so `windows-x64` is the
|
`windows-11-arm` runner, for evidence — but that slot's toolchain check has not gone green yet, so its
|
||||||
only downloadable Windows asset.
|
`.exe` stays out of the release. The row stays because the architecture is still supported; it rejoins
|
||||||
|
the download list once the build is green.
|
||||||
|
|
||||||
Each UNIX archive contains the executable plus `LICENSE`, `NOTICE` and `README.md`, in one top-level
|
Each UNIX archive contains the executable plus `LICENSE`, `NOTICE` and `README.md`, in one top-level
|
||||||
directory. Windows ships a bare `.exe` (a single file cannot carry the texts), so those three
|
directory. Windows ships a bare `.exe` (a single file cannot carry the texts), so those three
|
||||||
@@ -293,7 +295,7 @@ merge. The macOS probe is not there yet — manual dispatch only, result recorde
|
|||||||
|----------|---------|
|
|----------|---------|
|
||||||
| `.github/workflows/ci.yml` | fmt + clippy + test + release build (Windows / Linux matrix); Linux runtime smoke (Xvfb, one real frame, PNG asserted non-blank); macOS runtime probe (manual dispatch only) |
|
| `.github/workflows/ci.yml` | fmt + clippy + test + release build (Windows / Linux matrix); Linux runtime smoke (Xvfb, one real frame, PNG asserted non-blank); macOS runtime probe (manual dispatch only) |
|
||||||
| `.github/workflows/guards.yml` | zero-UI guards (`crates/core`, `crates/presenter`, `crates/design`), 400-lines-per-file guard, cargo-deny licence and source guard |
|
| `.github/workflows/guards.yml` | zero-UI guards (`crates/core`, `crates/presenter`, `crates/design`), 400-lines-per-file guard, cargo-deny licence and source guard |
|
||||||
| `.github/workflows/release.yml` | tag `v*` → six-slot build → single-file artifacts + `SHA256SUMS.txt` → GitHub Release |
|
| `.github/workflows/release.yml` | tag `v*` → build both Windows slots (`windows-x64` + `windows-arm64`) on native runners → single-file artifacts + `SHA256SUMS.txt` → GitHub Release (publishes `windows-x64` only; `-f all_slots=true` builds all six slots for evidence) |
|
||||||
|
|
||||||
## Architecture and module map
|
## Architecture and module map
|
||||||
|
|
||||||
|
|||||||
+14
-12
@@ -140,8 +140,9 @@ unlucky-launcher --version # CLI,版本 + 系统摘要
|
|||||||
- **有一批按钮是占位。** 实例页:*新建实例*、*导入*、*复制*、*打开文件夹*、*删除*。日志页:*打开文件夹*。
|
- **有一批按钮是占位。** 实例页:*新建实例*、*导入*、*复制*、*打开文件夹*、*删除*。日志页:*打开文件夹*。
|
||||||
设置页框架:*保存*、*重置本组*、*添加覆盖*。点下去只往 stderr 写一行 `[page] 占位动作 …`,什么都不改
|
设置页框架:*保存*、*重置本组*、*添加覆盖*。点下去只往 stderr 写一行 `[page] 占位动作 …`,什么都不改
|
||||||
——图形界面里的实例管理就是还欠着的那块实例向导;设置项是边改边生效,而不是靠「保存」。
|
——图形界面里的实例管理就是还欠着的那块实例向导;设置项是边改边生效,而不是靠「保存」。
|
||||||
- **Linux 与 macOS 产物未验证。** 参考机是 Windows;`linux-x64`、`linux-arm64`、`macos-arm64`、
|
- **Linux 与 macOS 产物未验证,而且本版连构建都不跑。** 参考机是 Windows;`linux-x64`、`linux-arm64`、
|
||||||
`macos-x64` 四份归档由 CI 矩阵产出,还没被下载下来端到端跑过。把它们当**未经测试的产出**,而不是
|
`macos-arm64`、`macos-x64` 四档只躺在 CI 矩阵里,默认的发布流程会跳过它们,也还没被下载下来端到端跑过;
|
||||||
|
`gh workflow run release.yml -f all_slots=true` 才编它们来取证。把它们当**未经测试的产出**,而不是
|
||||||
「矩阵里有就算支持」。
|
「矩阵里有就算支持」。
|
||||||
- **macOS 未定型。** 有两轮真机证据(Apple Silicon),构建因此存在——但菜单栏显示名、三个窗口按钮的位置
|
- **macOS 未定型。** 有两轮真机证据(Apple Silicon),构建因此存在——但菜单栏显示名、三个窗口按钮的位置
|
||||||
(macOS 习惯在左上,我们自绘在右上)、300s+ 稳态仍需真机复核。macOS 产物未签名,首次启动要自己清掉
|
(macOS 习惯在左上,我们自绘在右上)、300s+ 稳态仍需真机复核。macOS 产物未签名,首次启动要自己清掉
|
||||||
@@ -169,17 +170,18 @@ unlucky-launcher --version # CLI,版本 + 系统摘要
|
|||||||
|------|------|------|
|
|------|------|------|
|
||||||
| `windows-x64` | `unlucky-launcher_<版本>_windows_x64.exe` | 裸 `.exe`,双击即用 |
|
| `windows-x64` | `unlucky-launcher_<版本>_windows_x64.exe` | 裸 `.exe`,双击即用 |
|
||||||
| `windows-arm64` | `unlucky-launcher_<版本>_windows_arm64.exe` | 裸 `.exe` —— **暂未发布**,见下 |
|
| `windows-arm64` | `unlucky-launcher_<版本>_windows_arm64.exe` | 裸 `.exe` —— **暂未发布**,见下 |
|
||||||
| `linux-x64` | `unlucky-launcher_<版本>_linux_x64.tar.gz` | 单个归档,解压出一个顶层目录 |
|
| `linux-x64` | `unlucky-launcher_<版本>_linux_x64.tar.gz` | 单个归档,解压出一个顶层目录 —— **暂未发布** |
|
||||||
| `linux-arm64` | `unlucky-launcher_<版本>_linux_arm64.tar.gz` | 同上 |
|
| `linux-arm64` | `unlucky-launcher_<版本>_linux_arm64.tar.gz` | 同上 —— **暂未发布** |
|
||||||
| `macos-arm64` | `unlucky-launcher_<版本>_macos_arm64.tar.gz` | 同上 |
|
| `macos-arm64` | `unlucky-launcher_<版本>_macos_arm64.tar.gz` | 同上 —— **暂未发布** |
|
||||||
| `macos-x64` | `unlucky-launcher_<版本>_macos_x64.tar.gz` | 同上 |
|
| `macos-x64` | `unlucky-launcher_<版本>_macos_x64.tar.gz` | 同上 —— **暂未发布** |
|
||||||
| 每个槽位 | `ull_<版本>_<平台>_<架构>[.exe]` | 裸 CLI 文件,独立资产 |
|
| 每个已发布槽位 | `ull_<版本>_<平台>_<架构>[.exe]` | 裸 CLI 文件,独立资产 |
|
||||||
| 全平台 | `SHA256SUMS.txt` | `sha256sum -c` 可直吃 |
|
| 全平台 | `SHA256SUMS.txt` | `sha256sum -c` 可直吃 |
|
||||||
|
|
||||||
`windows-arm64` 是表里唯一「写了但**本次未发布**」的一行:CI 的 ARM64 runner 上缺 Windows SDK 的
|
**本版只发布 `windows-x64`。** 发布 job 只留 `PUBLISH_SLOTS` 里点名的槽位
|
||||||
ARM64 导入库——原因已定位,正在修。这一行不删,是因为架构仍然要支持、槽位也仍在矩阵里构建(只是不进
|
(`.github/workflows/release-publish.yml`),其余产物在写 `SHA256SUMS.txt` 之前就被删掉——所以表里标
|
||||||
Release);决定一个槽位能否进 Release 的是 `.github/workflows/release.yml` 里的 `PUBLISH_SLOTS`,
|
**暂未发布** 的行是命名规则,不是本版可下载的资产。这几行里 `windows-arm64` 是 CI 唯一真跑的那档:M140 起在
|
||||||
它现在只写了 `windows-x64`——所以 `windows-x64` 是当前唯一可下载的 Windows 资产。
|
GitHub 原生 `windows-11-arm` runner 上编来取证,但该槽位的工具链体检还没绿,所以它的 `.exe` 不进 Release;
|
||||||
|
行不删是因为架构仍要支持,绿了就把键加回 `PUBLISH_SLOTS`。
|
||||||
|
|
||||||
UNIX 归档里是二进制加 `LICENSE`、`NOTICE`、`README.md`,都在一个顶层目录下。Windows 发的是裸 `.exe`
|
UNIX 归档里是二进制加 `LICENSE`、`NOTICE`、`README.md`,都在一个顶层目录下。Windows 发的是裸 `.exe`
|
||||||
(一个文件装不下这三份文本),所以这三份作为并列资产挂在 Release 上——下 Windows 二进制不会把许可条款
|
(一个文件装不下这三份文本),所以这三份作为并列资产挂在 Release 上——下 Windows 二进制不会把许可条款
|
||||||
@@ -240,7 +242,7 @@ cargo deny check licenses bans sources # 依赖许可(CI 必
|
|||||||
|----------|------|
|
|----------|------|
|
||||||
| `.github/workflows/ci.yml` | fmt + clippy + test + release build(Windows / Linux 矩阵);Linux runtime smoke(Xvfb 真渲染一帧、断言 PNG 非空白);macOS 运行期探针(仅手动 dispatch) |
|
| `.github/workflows/ci.yml` | fmt + clippy + test + release build(Windows / Linux 矩阵);Linux runtime smoke(Xvfb 真渲染一帧、断言 PNG 非空白);macOS 运行期探针(仅手动 dispatch) |
|
||||||
| `.github/workflows/guards.yml` | `crates/core` / `crates/presenter` / `crates/design` 零 UI 守门、单文件 ≤400 行守门、cargo-deny 许可与来源守门 |
|
| `.github/workflows/guards.yml` | `crates/core` / `crates/presenter` / `crates/design` 零 UI 守门、单文件 ≤400 行守门、cargo-deny 许可与来源守门 |
|
||||||
| `.github/workflows/release.yml` | tag `v*` → 六槽位构建 → 单文件产物 + `SHA256SUMS.txt` → GitHub Release |
|
| `.github/workflows/release.yml` | tag `v*` → 构建两个 Windows 槽位(`windows-x64` + `windows-arm64`,各自原生 runner)→ 单文件产物 + `SHA256SUMS.txt` → GitHub Release(只发布 `windows-x64`;`-f all_slots=true` 才整表六槽位取证) |
|
||||||
|
|
||||||
## 架构与模块地图
|
## 架构与模块地图
|
||||||
|
|
||||||
|
|||||||
@@ -84,10 +84,12 @@ pub(crate) fn map_auth_error(error: unlucky_core::auth::AuthError) -> CliError {
|
|||||||
AuthError::CredentialExpired => Some("重新登录:%prog% accounts add msa".to_string()),
|
AuthError::CredentialExpired => Some("重新登录:%prog% accounts add msa".to_string()),
|
||||||
// M117:id 缺失是「没配置」,不是「没实现」。hint 里给**能照抄的命令**(两条路:
|
// M117:id 缺失是「没配置」,不是「没实现」。hint 里给**能照抄的命令**(两条路:
|
||||||
// 运行期一次性的、构建期烘进二进制的),别只丢一个变量名让用户自己猜。
|
// 运行期一次性的、构建期烘进二进制的),别只丢一个变量名让用户自己猜。
|
||||||
|
// M149:官方发布构建已把 id 烘进二进制(真值走仓库 Secret,不进 git 文件),所以能走到这个
|
||||||
|
// hint 的只可能是自建且没注入 id 的二进制——文案与 `cli/help.rs` 对齐:官方构建已内置。
|
||||||
AuthError::Unsupported(_) => Some(format!(
|
AuthError::Unsupported(_) => Some(format!(
|
||||||
"先配 Azure 公共客户端 id(id 不进仓库):\
|
"官方构建已内置微软登录所需的客户端 id,装完即可用;自建构建得自己给:\
|
||||||
`{env}=<id> %prog% accounts add msa`;\
|
运行期 `{env}=<id> %prog% accounts add msa`(优先于内置值);\
|
||||||
想让二进制自带就构建时注入 `{env}=<id> cargo build`。环境变量优先于构建期注入。",
|
或构建时注入 `{env}=<id> cargo build` 让二进制自带。",
|
||||||
env = unlucky_core::auth::microsoft::CLIENT_ID_ENV
|
env = unlucky_core::auth::microsoft::CLIENT_ID_ENV
|
||||||
)),
|
)),
|
||||||
AuthError::Conflict { .. } => Some("用 `%prog% accounts list` 查看已有账户".to_string()),
|
AuthError::Conflict { .. } => Some("用 `%prog% accounts list` 查看已有账户".to_string()),
|
||||||
|
|||||||
@@ -4,7 +4,7 @@
|
|||||||
Release matrix (see `packaging/README.md` for the full contract):
|
Release matrix (see `packaging/README.md` for the full contract):
|
||||||
|
|
||||||
Windows x64 unlucky-launcher_<ver>_windows_x64.exe (bare exe, no zip)
|
Windows x64 unlucky-launcher_<ver>_windows_x64.exe (bare exe, no zip)
|
||||||
Windows arm64 unlucky-launcher_<ver>_windows_arm64.exe (bare exe, cross-built)
|
Windows arm64 unlucky-launcher_<ver>_windows_arm64.exe (bare exe, native arm64 runner)
|
||||||
Linux x64 unlucky-launcher_<ver>_linux_x64.tar.gz
|
Linux x64 unlucky-launcher_<ver>_linux_x64.tar.gz
|
||||||
Linux arm64 unlucky-launcher_<ver>_linux_arm64.tar.gz
|
Linux arm64 unlucky-launcher_<ver>_linux_arm64.tar.gz
|
||||||
macOS arm64 unlucky-launcher_<ver>_macos_arm64.tar.gz
|
macOS arm64 unlucky-launcher_<ver>_macos_arm64.tar.gz
|
||||||
@@ -40,10 +40,11 @@ one is the single writer of the **manifest**, and it derives every sha256/size f
|
|||||||
use this flag: `release-publish.yml` recomputes `SHA256SUMS.txt` after pruning the publish
|
use this flag: `release-publish.yml` recomputes `SHA256SUMS.txt` after pruning the publish
|
||||||
whitelist and generates the manifest from *that*, so the manifest always describes what ships.
|
whitelist and generates the manifest from *that*, so the manifest always describes what ships.
|
||||||
|
|
||||||
Slot and build directory are overridable because a cross build's binaries live in
|
Slot and build directory are overridable because the build host is not always the
|
||||||
`target/<triple>/release` and the build host (x64) is not the artifact (arm64): CI
|
artifact: a cross build's binaries live in `target/<triple>/release` under an x64
|
||||||
passes both from its matrix, and the executable header is read back so a binary can
|
host, while every native slot (all six in CI, M140) puts them in `target/release`.
|
||||||
never be shipped under a slot name it was not built for.
|
CI passes both from its matrix, and the executable header is read back so a binary
|
||||||
|
can never be shipped under a slot name it was not built for.
|
||||||
|
|
||||||
Usage:
|
Usage:
|
||||||
cargo build --release --locked
|
cargo build --release --locked
|
||||||
|
|||||||
Reference in new issue
Block a user