Repository navigation
feat: downloadable multi-platform runtimes for Pinable Desktop - #3
Conversation
Add a six-platform Windows/macOS/Linux amd64/arm64 workflow, pinned source/toolchain builds, strict archive and executable verification, separate binary/archive SHA256 metadata, native host-contract smoke checks, and complete-set downloads. Publish a dedicated prerelease only by explicit main-branch manual input; default builds are read-only. Preserve Desktop lock enforcement and the existing single-target asset override. Distribution metadata does not pretend to implement the unavailable Desktop component-lock schema. Document CGO=0 dynamic-library-plugin limitation and signing boundaries. No application code, upstream release workflow, dependency, model catalog or Desktop lock changes.
Native package smoke caught a pre-existing Windows/Linux file-watch loss on config replacement. Also watch the config directory without removing the original file watch or changing filters; require consecutive replacements and subsequent writes in real filesystem regressions. Keep the packaged-binary atomic-rotation assertion intact. Correct platform-specific DLL-loader capability metadata, normalize Windows license line endings, and expand packaging/publication-policy tests. Preserve source/hash lock enforcement and main-only manual prerelease publication.
Load real defaults instead of serializing zero-valued options that violate configuration validation. Preserve both atomic replacements, subsequent write, hash completion and unrelated-file assertions.
Runtime now published as LatestFollowing the user's explicit request to publish a latest version on the Releases page, the already-verified main artifact is now a full, non-draft, non-prerelease Release: The All 15 release attachments (six platform archives, six matching manifests, runtime-index.json, SHA256SUMS and validation.json) were validated from the original pinned Actions artifact. Publication checked both original main CI runs, all six native jobs, the artifact ZIP digest, archive/executable hashes and native reports. Every uploaded attachment's server-side SHA256 and size matched before the draft was published as Latest. Publication run: https://github.com/PinableAgents/CLIProxyAPI/actions/runs/35717908936 No binaries were rebuilt, source changes were not merged into main, and Desktop locks were not modified. The one-time publication entry was removed from its separate publication branch after success. Ordinary main builds retain their existing non-publishing default; this explicitly requested full release does not silently enable future automatic stable releases. Existing signing and plugin limitations remain as documented. |
Completed: merged and downloadable from main
Merged as
2eb057869ca11301edf1768e6ff68d8f95521e10. Main's code tree exactly matches validated PR head2ade69507108d76e93359083aac1061aaedf3bb0.Main runtime version:
20260922102929-2eb057869ca1.Main complete download (all six platforms, 15 files, about 130 MB):
https://github.com/PinableAgents/CLIProxyAPI/actions/runs/35716265457/artifacts/10689356410
Main six-platform packaging and validation: SUCCESS
https://github.com/PinableAgents/CLIProxyAPI/actions/runs/35716265457
Main existing regression/build checks: SUCCESS
https://github.com/PinableAgents/CLIProxyAPI/actions/runs/35716265484
The main artifact was downloaded and independently checked: GitHub artifact SHA256
0a3974fd5acfb5982ae29c4f676eba4d8f4d1928de5649a3865420cfe3786165, all six archives/binaries/manifests, index, validation reports and SHA256SUMS match. The main Linux amd64 packaged executable also passed independent smoke validation outside Actions.Implementation
Dedicated Pinable desktop runtime pipeline: native Windows/macOS/Linux, both amd64 and arm64; exact go.mod toolchain; CGO=0 portable profile; baseline CPU settings; full source SHA/version/source timestamp metadata; real PE/Mach-O/ELF checks; deterministic archive metadata and canonical license text. Downloads contain separate binary/archive SHA256 and sizes, embedded runtime.json, runtime-index.json, SHA256SUMS and validation.json.
macOS is ad-hoc signed before hashing, not Developer ID signed/notarized. Windows binaries are unsigned. CGO=0 removes the Unix dynamic-library loader; Windows retains the existing DLL loader. Third-party plugin execution is explicitly untested and no plugins are bundled.
Every main push, including an upstream-sync merge, generates Actions downloads. Single-platform retention is 30 days and complete-set retention is 90 days. Only explicit manual main-only
publish_release=truecan publish an immutable dedicated prerelease without replacing latest. No Release, tag or deployment has been performed. The optional publish job was correctly skipped on both PR and main push.Desktop handoff boundary
Uses the attached Desktop build document's absolute
CLIPROXYAPI_COMPONENT_ASSEToverride and preserves source/hash lock enforcement. Desktop source and lock schema were not retrieved: runtime-index.json is not component-lock.json, no Desktop lock is modified, CodeGraph is unchanged, and Wails end-to-end packaging is not claimed. A reviewed Desktop lock alignment is still required before consuming a different source/hash. Seedocs/pinable/desktop-runtime.md.Native finding and production fix
Initial Windows/Linux smoke exposed loss of config-file notifications after atomic replacement. The only production change is eight lines additionally watching the config directory, preserving the original file watch and existing filters. New real-filesystem regressions require two consecutive replacements and a subsequent in-place write; unrelated siblings must remain ignored. Actual packaged binaries now pass atomic key rotation on all six platforms. No authentication/reload assertions were removed or weakened.
Verified before and after merge
go test ./...: passed.Earlier PR packaging: https://github.com/PinableAgents/CLIProxyAPI/actions/runs/35715593205
PR regression: https://github.com/PinableAgents/CLIProxyAPI/actions/runs/35715593236
PR build: https://github.com/PinableAgents/CLIProxyAPI/actions/runs/35715593217
Candidate Linux runtime independently passed smoke plus three repetitions; the distinct main runtime was separately downloaded and passed smoke again. No live provider accounts or historical API keys were used. Optional publication-policy tests use mocks, not an actual Release. Upstream release workflows, dependencies, model catalogs, credentials and Desktop locks remain unchanged.