From da5118185d06416b9703248a146a634d17891877 Mon Sep 17 00:00:00 2001 From: Ralf Anton Beier Date: Thu, 2 Jul 2026 07:51:06 +0200 Subject: [PATCH] feat(checksum_updater): manage spar/synth/witness; bump spar 0.10.0 -> 0.22.0 (#539) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Four PulseEngine verification/synthesis toolchains were never wired into the updater and had drifted far behind: spar 0.10.0 (upstream 0.22.0), synth 0.6.0 (0.20.0), witness 0.22.0 (0.38.0), meld 0.10.0 (0.37.0). #539 flagged spar. Wire spar, synth, witness as PerPlatformAsset — they publish `-v{version}-{triple}.{ext}` archives (mixed extension: .tar.gz unix, .zip Windows where present) and the toolchain reads the triple as url_suffix, exactly the wsc/wit-bindgen shape. synth ships no Windows build (4 platforms). Bump spar 0.10.0 -> 0.22.0 (the #539 ask; latest is 0.22.0, newer than the 0.21.0 cited). Verified: update resolves v0.22.0 and downloads all 5 platforms; validate re-downloads 5/5 checksums; linux_amd64 sha cross-checked against upstream SHA256SUMS.txt. Restored the description field the serializer drops. Run-level consumption is exercised by the spar smoke test in CI. synth/witness are now updater-manageable but NOT bumped here: 0.6->0.20 and 0.22->0.38 are large jumps on verification/synthesis paths and warrant separate review. meld is intentionally excluded — it migrated from standalone binaries (meld-{triple}) to versioned tarballs (meld-v{version}-{triple}.tar.gz) between 0.10 and 0.37, so adopting it needs a toolchain migration (extraction), not just an updater entry. Follow-ups tracked. Co-Authored-By: Claude Opus 4.8 (1M context) --- checksums/tools/spar.json | 63 +++++++++++++++++------ tools/checksum_updater/src/tool_config.rs | 49 ++++++++++++++++++ 2 files changed, 96 insertions(+), 16 deletions(-) diff --git a/checksums/tools/spar.json b/checksums/tools/spar.json index f8e03341..5a28b4d1 100644 --- a/checksums/tools/spar.json +++ b/checksums/tools/spar.json @@ -1,33 +1,57 @@ { "tool_name": "spar", - "github_repo": "pulseengine/spar", "description": "AADL v2.3 architecture toolchain — generates WIT interfaces from AADL models", - "latest_version": "0.10.0", - "last_checked": "2026-05-24T00:00:00Z", - "supported_platforms": ["darwin_amd64", "darwin_arm64", "linux_amd64", "linux_arm64", "windows_amd64"], + "github_repo": "pulseengine/spar", + "latest_version": "0.22.0", + "last_checked": "2026-07-02T05:45:27.380073Z", "versions": { - "0.10.0": { - "release_date": "2026-05-20", + "0.22.0": { + "release_date": "2026-06-30", "platforms": { "darwin_amd64": { - "sha256": "02fd1b321ce80955fe1f831e14a052ff16982548c0b0ef7ea78317ac36672f78", + "sha256": "3cb3c72cd1de090b9897d799d24f4bc0585b07a9ae2079dfbae0f555214d05dd", "url_suffix": "x86_64-apple-darwin.tar.gz" }, + "linux_arm64": { + "sha256": "2f07326c604b230c8fc5b8cdb4cb9bebbf7c12b6ec14a66236a33409971fe92a", + "url_suffix": "aarch64-unknown-linux-gnu.tar.gz" + }, + "windows_amd64": { + "sha256": "2348d971a346b637ee639a2255ad88d74545bd74acc8cb1591e0289bf4d8105d", + "url_suffix": "x86_64-pc-windows-msvc.zip" + }, + "linux_amd64": { + "sha256": "e8c9cad0fb27ed0ae1168af52210221c0412178cec86d18e37ff2e6f7b77a61a", + "url_suffix": "x86_64-unknown-linux-gnu.tar.gz" + }, + "darwin_arm64": { + "sha256": "279116508507026db215c4b638b7e4357c1009b4b05ccfbe993dbf64c276a3dc", + "url_suffix": "aarch64-apple-darwin.tar.gz" + } + } + }, + "0.10.0": { + "release_date": "2026-05-20", + "platforms": { "darwin_arm64": { "sha256": "848aac54ac68295ebefd99f2361f772043e633cf6b5aa3fd29c38c1fbe225533", "url_suffix": "aarch64-apple-darwin.tar.gz" }, + "darwin_amd64": { + "sha256": "02fd1b321ce80955fe1f831e14a052ff16982548c0b0ef7ea78317ac36672f78", + "url_suffix": "x86_64-apple-darwin.tar.gz" + }, "linux_amd64": { "sha256": "1661885ae315f8f54467a163658749e069b47ff55ecfa532c091aaf7949f95a4", "url_suffix": "x86_64-unknown-linux-gnu.tar.gz" }, - "linux_arm64": { - "sha256": "5a1ed3abbb9ae829e589c0f35d4baa3921d15b010e1f61e6077e89742f595b6b", - "url_suffix": "aarch64-unknown-linux-gnu.tar.gz" - }, "windows_amd64": { "sha256": "ab205f669b0b8f2d2b5920a32eb6c19e8a042a99beeba83addaaef14818cd144", "url_suffix": "x86_64-pc-windows-msvc.zip" + }, + "linux_arm64": { + "sha256": "5a1ed3abbb9ae829e589c0f35d4baa3921d15b010e1f61e6077e89742f595b6b", + "url_suffix": "aarch64-unknown-linux-gnu.tar.gz" } } }, @@ -38,6 +62,10 @@ "sha256": "8fae9cd2e049ded4f5a3ab6320459549983655ae19dad7509d787bdccbb3fbfb", "url_suffix": "x86_64-apple-darwin.tar.gz" }, + "windows_amd64": { + "sha256": "3cc2ba69b5d8a616aedc9a36c24ffa4ac91e04506db95b7961c1d4b1fefc2b83", + "url_suffix": "x86_64-pc-windows-msvc.zip" + }, "darwin_arm64": { "sha256": "cddd41e1397b336cbedf6aa8502fdbad3cda0cf06fe0f8068a5892846874bb87", "url_suffix": "aarch64-apple-darwin.tar.gz" @@ -49,12 +77,15 @@ "linux_arm64": { "sha256": "bf012f4644df19c6742d461d7d0d83611476f4a557ef53d55c8b5e129e9eac79", "url_suffix": "aarch64-unknown-linux-gnu.tar.gz" - }, - "windows_amd64": { - "sha256": "3cc2ba69b5d8a616aedc9a36c24ffa4ac91e04506db95b7961c1d4b1fefc2b83", - "url_suffix": "x86_64-pc-windows-msvc.zip" } } } - } + }, + "supported_platforms": [ + "darwin_amd64", + "darwin_arm64", + "linux_amd64", + "linux_arm64", + "windows_amd64" + ] } diff --git a/tools/checksum_updater/src/tool_config.rs b/tools/checksum_updater/src/tool_config.rs index 9e5df49d..d93b6634 100644 --- a/tools/checksum_updater/src/tool_config.rs +++ b/tools/checksum_updater/src/tool_config.rs @@ -451,6 +451,55 @@ impl ToolConfig { }, ); + // PulseEngine verification/synthesis toolchains, all per-OS native + // archives named `-v{version}-{triple}.{ext}` (mixed extension: + // .tar.gz on unix, .zip on Windows where a Windows build exists), so all + // fit PerPlatformAsset with the stored url_suffix being the triple. They + // were previously unmanaged and drifted far behind upstream (#539). + for (tool, repo, has_windows) in [ + ("spar", "pulseengine/spar", true), + ("synth", "pulseengine/synth", false), + ("witness", "pulseengine/witness", true), + ] { + let mut platform_mapping = HashMap::new(); + platform_mapping.insert("darwin_amd64".to_string(), "x86_64-apple-darwin.tar.gz".to_string()); + platform_mapping.insert("darwin_arm64".to_string(), "aarch64-apple-darwin.tar.gz".to_string()); + platform_mapping.insert("linux_amd64".to_string(), "x86_64-unknown-linux-gnu.tar.gz".to_string()); + platform_mapping.insert("linux_arm64".to_string(), "aarch64-unknown-linux-gnu.tar.gz".to_string()); + let mut platforms = vec![ + "darwin_amd64".to_string(), + "darwin_arm64".to_string(), + "linux_amd64".to_string(), + "linux_arm64".to_string(), + ]; + if has_windows { + platform_mapping.insert("windows_amd64".to_string(), "x86_64-pc-windows-msvc.zip".to_string()); + platforms.push("windows_amd64".to_string()); + } + tools.insert( + tool.to_string(), + ToolConfigEntry { + github_repo: repo.to_string(), + platforms: platforms, + url_pattern: UrlPattern::PerPlatformAsset { + pattern: format!( + "https://github.com/{}/releases/download/v{{version}}/{}-v{{version}}-{{asset}}", + repo, tool, + ), + platform_mapping: platform_mapping, + }, + tag_prefix: Some("v".to_string()), + version_filter: VersionFilter::Any, + }, + ); + } + + // meld is deliberately NOT wired in here yet: between the pinned v0.10.0 + // (standalone binaries `meld-{triple}`) and current v0.37.0 it migrated + // to versioned tarballs (`meld-v{version}-{triple}.tar.gz`). Adopting it + // needs a toolchain-side migration (extraction + versioned filename, like + // loom's #514), not just an updater entry. Tracked as a follow-up. + // wasmsign2-cli has no GitHub releases (tag/CI only). jco uses the npm // ecosystem, not GitHub release assets.