Skip to content

LinuxWave 3.0

Choose a tag to compare

@Sha0huaZhang Sha0huaZhang released this 09 Oct 06:25

Release Note 更新日志

本次为不兼容更新:包与版本数据从「代码仓库的分支」迁出到独立仓库,依赖数据目录由 surfboard/ 改名为 deps/;并且 LinuxWave 3.0 不能通过 wave selfupdate 升级,必须用 install.sh 重新安装。

本次是不兼容更新

3.0 之前,包元数据与版本数据都放在代码仓库 LinuxWaveOrg/LinuxWave 的分支里(infosource / configdata),依赖数据则放在该分支的 surfboard/ 目录下。

3.0 起:

  • 数据迁到各自的独立仓库,路径与引用全部改变;
  • 依赖数据的目录名 surfboard/ → deps/;
  • 官网站点从代码仓库的 gh-pages 分支迁到独立仓库;
  • 测试包 test_bin_* 从 MacWave 的测试仓库改用 LinuxWave 自己的。

旧版本(≤ 2.6.5)读的仍是旧地址。 旧分支目前还在,但已冻结、不再更新——老版本继续能用,只是拿不到 3.0 之后的内容。要拿到 3.0,请按下文用 install.sh 重装。

不能通过 selfupdate 升级到 3.0

3.0 的 selfupdate.sh 增加了跨大版本守卫:当目标版本与当前已装版本的大版本号不同时,直接拒绝并提示改用 install.sh。

当前版本 目标 行为
2.x(任意) 3.0 拒绝,提示改用 install.sh ⛔
3.0 3.0 已是最新,短路退出
3.0 3.x 正常自更新 ✅

这是一条通用规则,不是 3.0 专属:每个大版本的第一个版本、以及任何跨大版本升级,都不能走 selfupdate(这类升级通常同时改动仓库与目录结构)。守卫写在 selfupdate.sh 里、随目标分支下发,因此以后每个大版本都自动生效,无需逐版写死在数据里。

仓库 / 分支迁移前后地址

内容 迁移前 迁移后
代码仓库 LinuxWaveOrg/LinuxWave 不变(仍是 LinuxWaveOrg/LinuxWave;main 与 3.0 自动同步)
包元数据(描述 / 下载地址 / 校验值) LinuxWave 仓库的 infosource 分支
raw.githubusercontent.com/LinuxWaveOrg/LinuxWave/infosource/pkg/…
LinuxWaveOrg/infosource 仓库的 main 分支
raw.githubusercontent.com/LinuxWaveOrg/infosource/main/pkg/…
依赖数据 同一分支的 surfboard/ 目录
…/LinuxWaveOrg/LinuxWave/infosource/surfboard/depsinfo_{arch}/…
新仓库、目录改名 deps/
…/LinuxWaveOrg/infosource/main/deps/depsinfo_{arch}/…
包列表 API api.github.com/repos/LinuxWaveOrg/LinuxWave/contents/pkg/pkginfo_{arch}?ref=infosource api.github.com/repos/LinuxWaveOrg/infosource/contents/pkg/pkginfo_{arch}?ref=main
版本 / 迁移数据 LinuxWave 仓库的 configdata 分支
raw.githubusercontent.com/LinuxWaveOrg/LinuxWave/configdata/…
LinuxWaveOrg/configdata 仓库的 main 分支
raw.githubusercontent.com/LinuxWaveOrg/configdata/main/…
官网站点 LinuxWave 仓库的 gh-pages 分支 LinuxWaveOrg/Pages 仓库的 main 分支(自定义域仍是 linuxwave.org)
测试包(格式测试用) MacWaveOrg/MacWavePkgTest(MacWave 那边) LinuxWaveOrg/pkgtest(自有副本,同一份 1.0 release 与附件)
迁移前的历史归档 — 新增 LinuxWaveOrg/legacy-LinuxWave:迁移前的完整镜像,已归档只读,保留全部提交历史

为什么要发一版

这次迁移改动的是数据来源,而不是功能,但必须发一版才能把「怎么升级」送达用户:

因为 3.0 无法用 wave selfupdate 到达(见上),release 说明本身就是升级通知——存量用户需要知道要改用 install.sh 重装,而不是等一个永远不会到来的自更新。

这次发布也顺带修复了「判断要不要重新登录」时查错地方的老问题(见下)。

升级方式

重新安装:

/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/LinuxWaveOrg/LinuxWave/HEAD/lib/install.sh)"

安装脚本现在从 configdata 读取版本号与代码来源分支(不再写死在脚本里),因此它会自动安装 configdata 当前公布的版本(本次为 3.0)。

其他改动

  • lib/install.sh:LINUXWAVE_VERSION 与代码来源分支改为从 configdata 的 versiondata/latest_version 读取(version / branch 一起读,保证「下载的代码」与「写进 VERSION.json 的版本号」对应同一版本)
  • lib/selfupdate.sh:新增跨大版本守卫(见上)
  • 新增工作流 Sync main with the release branch:main 与「发布分支」自动互相检测并快进同步;发布分支由 configdata 的 branch 字段决定(现为 3.0),分叉时直接报错交人工处理,历史分支(2.0.0-dev / 2.5 等)不会被触碰
  • configdata:versiondata/latest_version 更新为 3.0(构建号 282D1414,branch: "3.0"),并新增 updatedata/3.0(N,沿用 2.6.x 的惯例)
  • format-test.yml:数据改从 LinuxWaveOrg/infosource 检出,触发分支改为 LinuxWave 自己的分支名并加入 3.0
  • 官网与 README 显示的版本号同步为 3.0

验证方式

  • CI 全绿:3.0 分支上的 Format Test 通过,其中「跨大版本 selfupdate 必须被拒绝、且 VERSION.json 不被改动」的用例为新增项
  • 跨大版本守卫实测:已装 2.x、目标 3.0 时被拒绝并提示改用 install.sh;同大版本(3.0 → 3.x)不被误拦
  • 数据地址实测:LinuxWaveOrg/infosource(pkg/ 与 deps/)与 LinuxWaveOrg/configdata 的 raw 地址均返回 200,包列表 API 可用
  • 测试包实测:LinuxWaveOrg/pkgtest 的 1.0 release 附件与数据里声明的 sha256 逐字节一致
  • 站点实测:linuxwave.org 返回 200,页面显示 Latest Version : 3.0
  • 双向同步实测:main 与 3.0 自动保持同步(推送任一侧即快进另一侧)

Release Notes

This is a breaking update: package and version data moved out of the code repository's branches into dedicated repositories, the dependency data folder was renamed surfboard/ → deps/, and LinuxWave 3.0 cannot be reached with wave selfupdate — it must be installed with install.sh.

This is a breaking update

Before 3.0, the package metadata and the version data both lived in branches of the code
repository LinuxWaveOrg/LinuxWave (infosource / configdata), with the dependency data
under a surfboard/ directory on that branch.

As of 3.0:

  • the data moved into dedicated repositories, changing every path and reference;
  • the dependency data folder was renamed surfboard/ → deps/;
  • the website moved from the code repository's gh-pages branch into its own repository;
  • the test_bin_* test packages moved from MacWave's test repository to LinuxWave's own.

Older versions (<= 2.6.5) still read the old addresses. Those branches are still
present but frozen — old installs keep working, they simply stop receiving anything
published after 3.0. To get 3.0, reinstall with install.sh as described below.

You cannot update to 3.0 with selfupdate

selfupdate.sh now carries a cross-major guard: when the target version's major
number differs from the installed one, it refuses outright and points at install.sh.

Installed Target Behaviour
2.x (any) 3.0 refused, points at install.sh ⛔
3.0 3.0 already up to date, exits early
3.0 3.x self-update runs ✅

This is a general rule, not a 3.0 special case: the first release of every major
version — and any cross-major upgrade — cannot go through selfupdate
(such upgrades
usually change both repositories and directory layout). The guard lives in
selfupdate.sh and is delivered by the target branch, so every future major gets it
automatically instead of it being hardcoded per release.

Repository / branch addresses before and after

What Before After
Code repository LinuxWaveOrg/LinuxWave unchanged (still LinuxWaveOrg/LinuxWave; main and 3.0 kept in sync)
Package metadata (description / download url / checksum) infosource branch of LinuxWave
raw.githubusercontent.com/LinuxWaveOrg/LinuxWave/infosource/pkg/…
main branch of LinuxWaveOrg/infosource
raw.githubusercontent.com/LinuxWaveOrg/infosource/main/pkg/…
Dependency data surfboard/ on that same branch
…/LinuxWaveOrg/LinuxWave/infosource/surfboard/depsinfo_{arch}/…
new repository, folder renamed deps/
…/LinuxWaveOrg/infosource/main/deps/depsinfo_{arch}/…
Package listing API api.github.com/repos/LinuxWaveOrg/LinuxWave/contents/pkg/pkginfo_{arch}?ref=infosource api.github.com/repos/LinuxWaveOrg/infosource/contents/pkg/pkginfo_{arch}?ref=main
Version / migration data configdata branch of LinuxWave
raw.githubusercontent.com/LinuxWaveOrg/LinuxWave/configdata/…
main branch of LinuxWaveOrg/configdata
raw.githubusercontent.com/LinuxWaveOrg/configdata/main/…
Website gh-pages branch of LinuxWave main branch of LinuxWaveOrg/Pages (custom domain is still linuxwave.org)
Test packages (format tests) MacWaveOrg/MacWavePkgTest (MacWave's) LinuxWaveOrg/pkgtest (its own copy, same 1.0 release and assets)
Pre-migration archive — new LinuxWaveOrg/legacy-LinuxWave: a full mirror of the repository as it was, archived read-only, all commit history kept

Why cut a release at all

This migration changed where the data comes from, not what it does, yet a release is
the only way to deliver the "how to upgrade" message:

because 3.0 cannot be reached with wave selfupdate (see above), these release notes
are themselves the upgrade notice
— existing users need to know they must reinstall
with install.sh rather than wait for a self-update that will never arrive.

How to upgrade

Reinstall:

/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/LinuxWaveOrg/LinuxWave/HEAD/lib/install.sh)"

The installer now reads the version and the code source branch from configdata
instead of hardcoding them, so it installs whatever version configdata currently
publishes (3.0 as of this release).

Other changes

  • lib/install.sh: LINUXWAVE_VERSION and the code source branch are now read from
    configdata's versiondata/latest_version (version / branch are read together so
    the code downloaded and the version recorded in VERSION.json always match)
  • lib/selfupdate.sh: the cross-major guard described above
  • new workflow Sync main with the release branch: main and the release branch
    detect each other and fast-forward automatically; the release branch comes from
    configdata's branch field (3.0 today), divergence fails the run for a human, and
    historical branches (2.0.0-dev / 2.5 …) are never touched
  • configdata: versiondata/latest_version bumped to 3.0 (build 282D1414,
    branch: "3.0") plus updatedata/3.0 (N, following the 2.6.x convention)
  • format-test.yml: checks the data out from LinuxWaveOrg/infosource, uses LinuxWave's
    own branch names and adds 3.0
  • the version shown on the site and in the READMEs is now 3.0

How it was verified

  • CI green: Format Test passes on the 3.0 branch, including the new case that a
    cross-major selfupdate is refused and leaves VERSION.json untouched
  • Cross-major guard, exercised for real: an installed 2.x asked to reach 3.0 is
    refused and told to use install.sh; a same-major upgrade (3.0 → 3.x) is not blocked
  • Data addresses: the raw URLs under LinuxWaveOrg/infosource (pkg/ and deps/)
    and LinuxWaveOrg/configdata all return 200, and the package listing API works
  • Test packages: the 1.0 release assets under LinuxWaveOrg/pkgtest match the
    sha256 values declared in the data byte for byte
  • Site: linuxwave.org returns 200 and shows Latest Version : 3.0
  • Two-way sync: main and 3.0 keep each other up to date (pushing either side
    fast-forwards the other)