建置稽核

CI 矩阵、SHA256SUMS、可复现、OpenSSF。

建置矩阵

5 目标 GitHub Actions 矩阵,各目标原生 runner:

目标runner链接归档
x86_64-linux-muslubuntu-latest + Alpine 3.20 docker完全静态 musl.tar.gz
aarch64-linux-muslubuntu-24.04-arm + Alpine 3.20 docker完全静态 musl.tar.gz
aarch64-macosmacos-14静态,系统 libc++/libSystem.tar.gz
x86_64-macosmacos-14(从 aarch64 交叉)静态,系统 libc++/libSystem.tar.gz
x86_64-windowswindows-latest + MSYS2 + mingw64完全静态.zip

aarch64-windows 暂不做——MSYS2 MINGW64 没 mingw-w64-aarch64-gcc 包,需要 LLVM clang 加 -target aarch64-w64-windows-msvc 或者从源碼编译 mingw-w64-aarch64。

CI 两阶段

  1. build-and-test.yml — 每个 push 到 main 和每个 PR 都跑。全矩阵建置 + smoke + 把 dist/ 作为 workflow artifact 上传(7 天保留)。 PR 准入门槛就是它。
  2. release.yml — 只在 tag push (v*)和 workflow_dispatch 触发。 建置矩阵跟前者完全一致;最后一步通过 softprops/action-gh-release 发 GitHub Release,带每个 archive 的 .sha256 和顶层 SHA256SUMS

Smoke 测试

脚本(scripts/smoke.sh)做两件事:

  1. 版本检查——确认 lha 跑出预期的版本横幅。
  2. CLI 解码 round-trip——拿 upstream/lhasa/test/archives/ 里的 .lzh / .lzs / .pmalha llha xq

不直接跑 make check:上游测试 driver 用相对路径 source test_extract.sh,跟我们用的 musl+glibc 隔离的 out-of-tree 模式冲突。走 CLI 等价路径。

相依足迹

lhasa 源碼树零外部库相依——没 zlib、没 libiconv、没 libcurl、 没 libarchive。configure.ac 只 probe C 编译器和 Libtool。

OpenSSF Scorecard

等 GitHub 历史积累够 PR 让启发式有意义再开 Scorecard。已经满足的项: