fix(updater): preserve published ARM64 release manifests
This commit is contained in:
1 parent
9d6e2b2391
commit
052162b8ba
6 files changed
+63
-27
No files matched your search
+2
-5
@@ -10,7 +10,6 @@ Every release entry is provided in English and Simplified Chinese.
|
||||
|
||||
#### Added
|
||||
|
||||
- Added a native Windows ARM64 installer and in-app automatic installation, alongside the existing ARM64 portable ZIP.
|
||||
- Added in-app updates for packaged macOS applications on Apple Silicon and Intel. Verified updates can install after restart or on the next launch, then restore the saved workspace. Immediate relaunch failure rolls back to the original application. Installation requires a writable application location; copies running from a disk image or App Translocation must first be moved.
|
||||
- Added SSH display names to the Shell picker, Quick Jump and command palette. Named hosts show their configured name alongside the original connection target; unnamed hosts keep the previous display. Search matches both the name and target, and selecting a row still connects to the original destination.
|
||||
- Added a configurable tab-rename shortcut in Settings → Key Bindings → Tabs. The default remains F2; changing or clearing the shortcut lets F2 reach terminal applications such as Codex CLI. Changes apply without restarting, and menu shortcut hints follow the effective binding.
|
||||
@@ -33,13 +32,12 @@ Every release entry is provided in English and Simplified Chinese.
|
||||
- Organized Windows Explorer integration into one normal Pebrel open command and one WSL submenu containing the installed distributions. Installation migrates Pebrel-owned flat entries while preserving unrelated or user-edited commands.
|
||||
- Expanded issue forms with operating-system, shell, pane-program and connection details, and clearer reproduction and evidence fields to make problem reports easier to investigate.
|
||||
|
||||
Windows x64 and ARM64 provide installers and portable ZIPs. On Windows, automatic installation supports both architectures; packaged macOS applications support in-app installation. Linux x64 packages and macOS Apple Silicon / Intel DMGs remain Preview releases.
|
||||
Windows x64 provides an installer and portable ZIP; Windows ARM64 provides a native portable ZIP. On Windows, the installer and automatic installation remain x64-only; packaged macOS applications support in-app installation. Linux x64 packages and macOS Apple Silicon / Intel DMGs remain Preview releases.
|
||||
|
||||
### 中文
|
||||
|
||||
#### 新增
|
||||
|
||||
- 新增原生 Windows ARM64 安装器及应用内自动安装,同时保留 ARM64 便携 ZIP。
|
||||
- 为 Apple Silicon 和 Intel 上的 macOS 打包应用加入应用内更新:校验通过后,可选择重启安装或下次启动时安装,并恢复已保存的工作区;新应用立即重启失败时回滚到原应用。安装位置必须可写,从磁盘映像或 App Translocation 路径运行的副本需先移动到正常安装位置。
|
||||
- 在 Shell 选择器、快速跳转和命令面板中显示 SSH 主机名称:已命名的主机显示名称与原始连接目标,未命名的主机保持原来的显示。搜索同时匹配名称和目标,选择后仍连接原始地址。
|
||||
- 在“设置 → 按键映射 → 标签页”中新增可修改的“重命名标签”快捷键,默认仍为 F2。修改或清除后,F2 可传递给 Codex CLI 等终端程序;设置无需重启即可生效,菜单提示同步显示实际快捷键。
|
||||
@@ -62,7 +60,7 @@ Windows x64 and ARM64 provide installers and portable ZIPs. On Windows, automati
|
||||
- 整理 Windows 资源管理器右键菜单,保留一个普通 Pebrel 打开入口,并将已安装的 WSL 发行版集中到一个子菜单中;安装时迁移 Pebrel 自有的旧平铺入口,保留无关或经过用户编辑的命令。
|
||||
- 完善问题反馈表单,补充操作系统、Shell、面板程序和连接方式等信息,并明确复现步骤与日志、截图要求,便于定位问题。
|
||||
|
||||
Windows x64 与 ARM64 均提供安装器和 ZIP 便携包;Windows 自动安装支持两种架构;macOS 打包应用支持应用内安装。Linux x64 包及 macOS Apple Silicon/Intel DMG 继续标记为 Preview。
|
||||
Windows x64 提供安装器和 ZIP 便携包,Windows ARM64 提供原生便携 ZIP;Windows 安装器和自动安装仍仅支持 x64;macOS 打包应用支持应用内安装。Linux x64 包及 macOS Apple Silicon/Intel DMG 继续标记为 Preview。
|
||||
|
||||
### Contributors
|
||||
|
||||
@@ -86,7 +84,6 @@ Checksums will be filled from the final release artifacts. / 校验值将在最
|
||||
- `Pebrel-v1.9.1-windows-x64.zip`: `PENDING FINAL BUILD`
|
||||
- `Pebrel-v1.9.1-windows-x64-setup.exe`: `PENDING FINAL BUILD`
|
||||
- `Pebrel-v1.9.1-windows-arm64.zip`: `PENDING FINAL BUILD`
|
||||
- `Pebrel-v1.9.1-windows-arm64-setup.exe`: `PENDING FINAL BUILD`
|
||||
|
||||
## 1.9.0 - 2026-09-22
|
||||
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
|
||||
## Status
|
||||
|
||||
Proposed for review on 2026-09-24.
|
||||
Reviewed for integration on 2026-09-25.
|
||||
|
||||
## Context
|
||||
|
||||
@@ -13,7 +13,10 @@ but automatic installation still has no ARM64 installer asset.
|
||||
|
||||
- The native ARM64 application, Hook and console runtime already build and pass ARM64 conformance.
|
||||
- The existing Windows update handoff is architecture-independent once the selected installer and installed payload are native.
|
||||
- Inno Setup documents `ArchitecturesAllowed=arm64` for installers shipping ARM64 binaries.
|
||||
- [Inno Setup documents `ArchitecturesAllowed=arm64`](https://jrsoftware.org/ishelp/topic_setup_architecturesallowed.htm)
|
||||
for installers shipping ARM64 binaries.
|
||||
- [The published v1.9.1 release](https://github.com/Kuddev/pebrel/releases/tag/v1.9.1)
|
||||
contains an ARM64 ZIP, not an ARM64 installer (verified on 2026-09-25).
|
||||
|
||||
## Decision
|
||||
|
||||
@@ -22,8 +25,8 @@ installer path. The ARM64 release job reuses its already-built native payload, v
|
||||
that payload as ARM64, builds `windows-arm64-setup.exe`, and publishes it beside the ZIP.
|
||||
Release discovery selects that exact asset on ARM64; Windows x64 behavior is unchanged.
|
||||
|
||||
Pebrel 1.9.0 remains the historical ARM64 portable-only release. Later stable manifests
|
||||
require the ARM64 installer.
|
||||
Pebrel 1.9.0 and 1.9.1 remain historical ARM64 portable-only releases. Stable manifests
|
||||
from 1.9.2 require the ARM64 installer; published notes, tags and assets stay unchanged.
|
||||
|
||||
## Rejected alternatives
|
||||
|
||||
@@ -34,12 +37,18 @@ and release asset are native.
|
||||
## Consequences
|
||||
|
||||
Windows ARM64 gains the same installer-managed update path as x64 without introducing a second
|
||||
transaction or migration implementation. Stable releases after 1.9.0 gain one additional asset.
|
||||
transaction or migration implementation. Stable releases after 1.9.1 gain one additional asset.
|
||||
|
||||
## Validation
|
||||
|
||||
Run the existing packaging tests, stable-release contracts, and native Windows ARM64 CI,
|
||||
including actual Inno installer generation.
|
||||
- Stable-release and branding contracts: 26 tests passed, including the historical
|
||||
1.9.1 manifest and rejection of a missing ARM64 installer from 1.9.2 onward.
|
||||
- Existing PE payload tests passed for x64 and ARM64, including mismatched helpers
|
||||
and truncated executables.
|
||||
- [Native ARM64 installer generation](https://github.com/WilliamWang1721/pebrel/actions/runs/35831885007)
|
||||
passed using the published 1.9.0 ARM64 payload as a packaging fixture. The builder
|
||||
and payload-architecture validator match this candidate; later version defaults
|
||||
and upstream WSL menu messages are separate from that generation evidence.
|
||||
|
||||
## Supersedes
|
||||
|
||||
|
||||
@@ -4,7 +4,6 @@
|
||||
|
||||
### Added
|
||||
|
||||
- Added a native Windows ARM64 installer and in-app automatic installation, alongside the existing ARM64 portable ZIP.
|
||||
- Added in-app updates for packaged macOS applications on Apple Silicon and Intel. Verified updates can install after restart or on the next launch, then restore the saved workspace. Immediate relaunch failure rolls back to the original application. Installation requires a writable application location; copies running from a disk image or App Translocation must first be moved.
|
||||
- Added SSH display names to the Shell picker, Quick Jump and command palette. Named hosts show their configured name alongside the original connection target; unnamed hosts keep the previous display. Search matches both the name and target, and selecting a row still connects to the original destination.
|
||||
- Added a configurable tab-rename shortcut in Settings → Key Bindings → Tabs. The default remains F2; changing or clearing the shortcut lets F2 reach terminal applications such as Codex CLI. Changes apply without restarting, and menu shortcut hints follow the effective binding.
|
||||
@@ -27,13 +26,12 @@
|
||||
- Organized Windows Explorer integration into one normal Pebrel open command and one WSL submenu containing the installed distributions. Installation migrates Pebrel-owned flat entries while preserving unrelated or user-edited commands.
|
||||
- Expanded issue forms with operating-system, shell, pane-program and connection details, and clearer reproduction and evidence fields to make problem reports easier to investigate.
|
||||
|
||||
Windows x64 and ARM64 provide installers and portable ZIPs. On Windows, automatic installation supports both architectures; packaged macOS applications support in-app installation. Linux x64 packages and macOS Apple Silicon / Intel DMGs remain Preview releases.
|
||||
Windows x64 provides an installer and portable ZIP; Windows ARM64 provides a native portable ZIP. On Windows, the installer and automatic installation remain x64-only; packaged macOS applications support in-app installation. Linux x64 packages and macOS Apple Silicon / Intel DMGs remain Preview releases.
|
||||
|
||||
## 中文
|
||||
|
||||
### 新增
|
||||
|
||||
- 新增原生 Windows ARM64 安装器及应用内自动安装,同时保留 ARM64 便携 ZIP。
|
||||
- 为 Apple Silicon 和 Intel 上的 macOS 打包应用加入应用内更新:校验通过后,可选择重启安装或下次启动时安装,并恢复已保存的工作区;新应用立即重启失败时回滚到原应用。安装位置必须可写,从磁盘映像或 App Translocation 路径运行的副本需先移动到正常安装位置。
|
||||
- 在 Shell 选择器、快速跳转和命令面板中显示 SSH 主机名称:已命名的主机显示名称与原始连接目标,未命名的主机保持原来的显示。搜索同时匹配名称和目标,选择后仍连接原始地址。
|
||||
- 在“设置 → 按键映射 → 标签页”中新增可修改的“重命名标签”快捷键,默认仍为 F2。修改或清除后,F2 可传递给 Codex CLI 等终端程序;设置无需重启即可生效,菜单提示同步显示实际快捷键。
|
||||
@@ -56,7 +54,7 @@ Windows x64 and ARM64 provide installers and portable ZIPs. On Windows, automati
|
||||
- 整理 Windows 资源管理器右键菜单,保留一个普通 Pebrel 打开入口,并将已安装的 WSL 发行版集中到一个子菜单中;安装时迁移 Pebrel 自有的旧平铺入口,保留无关或经过用户编辑的命令。
|
||||
- 完善问题反馈表单,补充操作系统、Shell、面板程序和连接方式等信息,并明确复现步骤与日志、截图要求,便于定位问题。
|
||||
|
||||
Windows x64 与 ARM64 均提供安装器和 ZIP 便携包;Windows 自动安装支持两种架构;macOS 打包应用支持应用内安装。Linux x64 包及 macOS Apple Silicon/Intel DMG 继续标记为 Preview。
|
||||
Windows x64 提供安装器和 ZIP 便携包,Windows ARM64 提供原生便携 ZIP;Windows 安装器和自动安装仍仅支持 x64;macOS 打包应用支持应用内安装。Linux x64 包及 macOS Apple Silicon/Intel DMG 继续标记为 Preview。
|
||||
|
||||
## Contributors
|
||||
|
||||
@@ -80,4 +78,3 @@ Checksums will be filled from the final release artifacts. / 校验值将在最
|
||||
- `Pebrel-v1.9.1-windows-x64.zip`: `PENDING FINAL BUILD`
|
||||
- `Pebrel-v1.9.1-windows-x64-setup.exe`: `PENDING FINAL BUILD`
|
||||
- `Pebrel-v1.9.1-windows-arm64.zip`: `PENDING FINAL BUILD`
|
||||
- `Pebrel-v1.9.1-windows-arm64-setup.exe`: `PENDING FINAL BUILD`
|
||||
@@ -101,8 +101,25 @@ mod tests {
|
||||
}
|
||||
#[test]
|
||||
fn windows_architectures_are_exact() {
|
||||
assert_eq!(windows_names("1.9.1", "aarch64"), ["Pebrel-v1.9.1-windows-arm64-setup.exe"]);
|
||||
assert!(windows_names("1.9.1", "unknown").is_empty());
|
||||
let version = "1.9.2";
|
||||
let arm = windows_names(version, "aarch64");
|
||||
let x64 = windows_names(version, "x86_64");
|
||||
assert_eq!(arm, ["Pebrel-v1.9.2-windows-arm64-setup.exe"]);
|
||||
assert_eq!(x64, super::super::windows_x64_installer_names(version));
|
||||
assert!(windows_names(version, "unknown").is_empty());
|
||||
let assets = [x64[0].clone(), arm[0].clone(), "Pebrel-v1.9.2-windows-arm64.zip".into()]
|
||||
.into_iter()
|
||||
.map(|name| GitHubReleaseAsset {
|
||||
name,
|
||||
browser_download_url: "https://example.invalid".into(),
|
||||
size: 42,
|
||||
digest: Some(format!("sha256:{}", "a".repeat(64))),
|
||||
})
|
||||
.collect::<Vec<_>>();
|
||||
assert_eq!(select(version, "", &assets, &arm).unwrap().name, arm[0]);
|
||||
assert_eq!(select(version, "", &assets, &x64).unwrap().name, x64[0]);
|
||||
assert!(select(version, "", &assets[..1], &arm).is_none());
|
||||
assert!(select(version, "", &assets[2..], &arm).is_none());
|
||||
}
|
||||
#[test]
|
||||
fn checksum_manifest_requires_one_exact_valid_entry() {
|
||||
|
||||
@@ -34,6 +34,7 @@ def validate_version(version: str) -> None:
|
||||
|
||||
def expected_asset_names(version: str) -> tuple[str, ...]:
|
||||
validate_version(version)
|
||||
version_parts = tuple(map(int, version.split(".")))
|
||||
names = (
|
||||
f"Pebrel-v{version}-linux-x64-preview.AppImage",
|
||||
f"Pebrel-v{version}-linux-x64-preview.deb",
|
||||
@@ -43,12 +44,13 @@ def expected_asset_names(version: str) -> tuple[str, ...]:
|
||||
f"Pebrel-v{version}-windows-x64.zip",
|
||||
f"Pebrel-v{version}-windows-x64-setup.exe",
|
||||
)
|
||||
if tuple(map(int, version.split("."))) >= (1, 9, 0):
|
||||
if version_parts >= (1, 9, 0):
|
||||
names += (f"Pebrel-v{version}-windows-arm64.zip",)
|
||||
if tuple(map(int, version.split("."))) > (1, 9, 0):
|
||||
# 1.9.0 和 1.9.1 已公开发布且仅含 ARM64 ZIP,不能追溯要求不存在的安装器。
|
||||
if version_parts >= (1, 9, 2):
|
||||
names += (f"Pebrel-v{version}-windows-arm64-setup.exe",)
|
||||
# The old-name installer was retired from 1.7.0; retain historical manifests.
|
||||
if tuple(map(int, version.split("."))) < (1, 7, 0):
|
||||
if version_parts < (1, 7, 0):
|
||||
names += (f"NebulaTerminal-{version}-windows-x64-setup.exe",)
|
||||
return names
|
||||
|
||||
|
||||
@@ -138,11 +138,11 @@ class StableReleaseTests(unittest.TestCase):
|
||||
expected_asset_names("1.6.0-rc.1")
|
||||
|
||||
def test_17_and_later_assets_use_only_pebrel_installer(self) -> None:
|
||||
for version in ("1.7.0", "1.7.1", "1.10.0", "2.0.0"):
|
||||
for version in ("1.7.0", "1.7.1", "1.9.0", "1.9.1", "1.9.2", "1.10.0", "2.0.0"):
|
||||
with self.subTest(version=version):
|
||||
names = expected_asset_names(version)
|
||||
parsed = tuple(map(int, version.split('.')))
|
||||
self.assertEqual(len(names), 9 if parsed > (1, 9, 0) else 8 if parsed >= (1, 9, 0) else 7)
|
||||
self.assertEqual(len(names), 9 if parsed >= (1, 9, 2) else 8 if parsed >= (1, 9, 0) else 7)
|
||||
self.assertIn(f"Pebrel-v{version}-windows-x64-setup.exe", names)
|
||||
self.assertNotIn(f"NebulaTerminal-{version}-windows-x64-setup.exe", names)
|
||||
|
||||
@@ -158,14 +158,28 @@ class StableReleaseTests(unittest.TestCase):
|
||||
with self.assertRaisesRegex(StableReleaseError, "missing: Pebrel-v1.9.0-windows-arm64.zip"):
|
||||
validate_assets(root, version)
|
||||
|
||||
def test_post_190_requires_native_windows_arm64_installer(self) -> None:
|
||||
self.assertNotIn("Pebrel-v1.9.0-windows-arm64-setup.exe", expected_asset_names("1.9.0"))
|
||||
for version in ("1.9.1", "1.10.0", "2.0.0"):
|
||||
def test_post_191_requires_native_windows_arm64_installer(self) -> None:
|
||||
for version in ("1.9.0", "1.9.1"):
|
||||
with self.subTest(historical_version=version):
|
||||
self.assertNotIn(
|
||||
f"Pebrel-v{version}-windows-arm64-setup.exe",
|
||||
expected_asset_names(version),
|
||||
)
|
||||
for version in ("1.9.2", "1.10.0", "2.0.0"):
|
||||
with self.subTest(version=version):
|
||||
self.assertIn(
|
||||
f"Pebrel-v{version}-windows-arm64-setup.exe",
|
||||
expected_asset_names(version),
|
||||
)
|
||||
version = "1.9.2"
|
||||
with tempfile.TemporaryDirectory() as directory:
|
||||
root = Path(directory)
|
||||
for name in expected_asset_names(version):
|
||||
write_fake_asset(root / name)
|
||||
self.assertEqual(len(validate_assets(root, version)), 9)
|
||||
(root / f"Pebrel-v{version}-windows-arm64-setup.exe").unlink()
|
||||
with self.assertRaisesRegex(StableReleaseError, "missing: Pebrel-v1.9.2-windows-arm64-setup.exe"):
|
||||
validate_assets(root, version)
|
||||
|
||||
def test_17_assets_reject_retired_alias_and_missing_installer(self) -> None:
|
||||
version = "1.7.0"
|
||||
|
||||
Reference in new issue
Block a user