Releases: jarimustonen/ossctl
Release list
0.4.0 - 2026-08-11
Release Notes
Added
ossctl skill installdual-homes into pi.dev. A newpiruntime writes each bundled
SKILL.mdinto~/.pi/agent/skills/<name>/(discovered by the pi.dev harness as/skill:<name>),
and--agentgainspi(narrow to pi.dev only) and folds pi.dev intoall
(pidev-dual-home-skills).
Changed
- BEHAVIOR:
ossctl skill installnow dual-homes by default. With--agentomitted the installer
writes each skill into both~/.claude/skills(Claude Code) and~/.pi/agent/skills
(pi.dev) — previously it wrote Claude only. Pass--agent claudeto restore the old single-home
behavior;--agent pi/codexnarrow to one runtime;--agent alltargets every known runtime. The
--jsoninstalled[]object shape is unchanged (additive), but the default now emits two rows and
writes two targets where it emitted/wrote one — automation that assumed Claude-only or a fixed row
count should pin--agent claude(pidev-dual-home-skills).
Install ossctl 0.4.0
Install prebuilt binaries via shell script
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/jarimustonen/ossctl/releases/download/v0.4.0/ossctl-installer.sh | shInstall prebuilt binaries via powershell script
powershell -ExecutionPolicy Bypass -c "irm https://github.com/jarimustonen/ossctl/releases/download/v0.4.0/ossctl-installer.ps1 | iex"Download ossctl 0.4.0
| File | Platform | Checksum |
|---|---|---|
| ossctl-aarch64-apple-darwin.tar.xz | Apple Silicon macOS | checksum |
| ossctl-x86_64-pc-windows-msvc.zip | x64 Windows | checksum |
| ossctl-aarch64-unknown-linux-musl.tar.xz | ARM64 MUSL Linux | checksum |
| ossctl-x86_64-unknown-linux-musl.tar.xz | x64 MUSL Linux | checksum |
Verifying GitHub Artifact Attestations
The artifacts in this release have attestations generated with GitHub Artifact Attestations. These can be verified by using the GitHub CLI:
gh attestation verify <file-path of downloaded artifact> --repo jarimustonen/ossctlYou can also download the attestation from GitHub and verify against that directly:
gh attestation verify <file-path of downloaded artifact> --bundle <file-path of downloaded attestation>0.3.0 - 2026-08-11
Release Notes
Removed
- BREAKING (CLI):
--versionis removed fromossctl release plan/release cut. The release
version now derives solely from the workspace manifest (Cargo.toml) — the single source of
truth. A stray--versionis a hardunexpected argumenterror rather than a silently-ignored (or
drift-guarded) flag. To release a new version, bump the manifest (and finalize the CHANGELOG) in a
release commit first, thenplan/cut(release-drop-version-flag; completes the 0.2.5
single-source work).
Added
- Version-source capability model — non-Rust ecosystems no longer fail open. The version-drift and
self-visibility guards now key on a per-ecosystem version-source: manifest-versioned ecosystems
(rust/node/python) fail closed when a target's version can't be read, while distribution-only
targets (homebrew / raw binary / cargo-dist) are legitimately skipped. Previously any target without
a readable manifest version was silently skipped, so the guards were no-ops for npm/PyPI packages
(version-source-fail-closed-nonrust).
Changed
release cut/resumepublish from a clean checkout of the sealed commit. The engine now
materializes a fresh git-worktree checkout of the sealed plan'shead_shaand runs build/publish/dist
from there, instead of the live (mutable) working tree — a cut is reproducible and immune to mid-cut
edits. It fails closed if the sealed commit isn't available locally; the journal and tag still land in
the real repository (release-cut-clean-checkout).- The resume idempotency skip is digest-authenticated. When a resumed cut finds a crate already
published, it now repackages the target.crate, hashes it, and compares against the registry's
published checksum (crates.io sparse-indexcksum) before trusting the skip: a match records the
digest, a mismatch fails closed (DigestMismatch), and an outage/malformed response fails closed
(RegistryUnavailable) — closing the last "receipt without a verified artifact" path. (The definitive
cross-toolchain-safe form — journaling the intended digest at original-publish time — is tracked in
cargo-publish-receipt-provenance-resume-safety.) (is-published-digest-authenticate)
Install ossctl 0.3.0
Install prebuilt binaries via shell script
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/jarimustonen/ossctl/releases/download/v0.3.0/ossctl-installer.sh | shInstall prebuilt binaries via powershell script
powershell -ExecutionPolicy Bypass -c "irm https://github.com/jarimustonen/ossctl/releases/download/v0.3.0/ossctl-installer.ps1 | iex"Download ossctl 0.3.0
| File | Platform | Checksum |
|---|---|---|
| ossctl-aarch64-apple-darwin.tar.xz | Apple Silicon macOS | checksum |
| ossctl-x86_64-pc-windows-msvc.zip | x64 Windows | checksum |
| ossctl-aarch64-unknown-linux-musl.tar.xz | ARM64 MUSL Linux | checksum |
| ossctl-x86_64-unknown-linux-musl.tar.xz | x64 MUSL Linux | checksum |
Verifying GitHub Artifact Attestations
The artifacts in this release have attestations generated with GitHub Artifact Attestations. These can be verified by using the GitHub CLI:
gh attestation verify <file-path of downloaded artifact> --repo jarimustonen/ossctlYou can also download the attestation from GitHub and verify against that directly:
gh attestation verify <file-path of downloaded artifact> --bundle <file-path of downloaded attestation>0.2.5 - 2026-08-10
Release Notes
Fixed
- A
release cutcan no longer report success while publishing nothing. After the irreversible
cargo publish, the cargo adapter now confirms the target's own{name, version}is actually
visible on the crates.io index (reusing the bounded index-wait, so normal sparse-index propagation
lag is tolerated) before journaling a publish receipt. A silent no-op upload now fails the cut
closed with no fabricated receipt; a registry outage fails closed distinctly from "reached the
registry, version absent". This closes the real-world failure mode where a downstream cut reported
build ok → publishyet the crate never reached crates.io (cut-noop-self-visibility-check,
surfaced by the first real downstream cut).
Changed
- The release version now has a single source of truth: the workspace manifest.
ossctl release cutpublishes the version already in the tree and derives it fromCargo.toml;--versionis now
an optional confirmation that must equal the manifest version (a mismatch refuses the plan/cut),
subsuming the earlier drift guard. The documented recipe (release plan --version X.Y.Z) keeps
working unchanged (release-version-single-source,release-cut-publish-noop).
CI
- Generated/own
publish-crates.ymlis now idempotent. Bothcargo publishinvocations in the
dep-order step tolerate cargo's exact per-package "already exists on crates.io index" diagnostic as
success (anchored match; genuine failures still fail), so a successful engine cut no longer produces
a spurious red CI run when the tag-push publish races the engine's own publish (publish-crates-yml).
Install ossctl 0.2.5
Install prebuilt binaries via shell script
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/jarimustonen/ossctl/releases/download/v0.2.5/ossctl-installer.sh | shInstall prebuilt binaries via powershell script
powershell -ExecutionPolicy Bypass -c "irm https://github.com/jarimustonen/ossctl/releases/download/v0.2.5/ossctl-installer.ps1 | iex"Download ossctl 0.2.5
| File | Platform | Checksum |
|---|---|---|
| ossctl-aarch64-apple-darwin.tar.xz | Apple Silicon macOS | checksum |
| ossctl-x86_64-pc-windows-msvc.zip | x64 Windows | checksum |
| ossctl-aarch64-unknown-linux-musl.tar.xz | ARM64 MUSL Linux | checksum |
| ossctl-x86_64-unknown-linux-musl.tar.xz | x64 MUSL Linux | checksum |
Verifying GitHub Artifact Attestations
The artifacts in this release have attestations generated with GitHub Artifact Attestations. These can be verified by using the GitHub CLI:
gh attestation verify <file-path of downloaded artifact> --repo jarimustonen/ossctlYou can also download the attestation from GitHub and verify against that directly:
gh attestation verify <file-path of downloaded artifact> --bundle <file-path of downloaded attestation>0.2.4 - 2026-08-10
Release Notes
Added
- The contract can now express "version-tracked but never published". An explicitly-set empty
targets: []is honored as authoritative — the normalizer no longer force-expands it into a default
crates.io/cargo-publishtarget. An omittedtargetskey still expands to the ecosystem default
as before (the distinction is explicit-empty vs absent). This lets a private/internal project be
version-tracked and changelogged without any registry publish target. - Multi-distribution (monorepo) support.
Contractnow carriesdistributions: Vec<Distribution>
with a per-packagepackageassociation key, so a monorepo can declare several independently
distributed binaries (each with its own gh-releases/installers/tap). A single baredistribution:
block still parses unchanged (deserialized as a one-element list); a pluraldistributions:list is
also accepted. The release engine remains single-distribution and fails loud on adistributions
length > 1 (per-distribution engine support tracked inper-distribution-release).
Changed
- BREAKING (canonical wire shape):
schema_versionbumped1→2. The canonical-JSON key
distributionwas renamed todistributions(now always an array), and every distribution carries a
packagefield. ossctl still reads v1 documents (a singulardistribution:mapping) and
translates them into the v2 canonical shape. Downstream/oss-*members that read the normalized
contract should key ondistributions. - The normalizer now hard-errors on inconsistent Homebrew configuration (previously silent). A
homebrew-registry target or ahomebrewinstaller with nohomebrew_tapdestination, a
double-publish collision (installer and target both producing a formula), and a
registry/adapter mismatch (registry: homebrewrequires thehomebrew-tapadapter) are now rejected
at validate time with a clear error, instead of failing later at release time. This can reject some
previously-accepted contracts — intended. - The engine's Homebrew tap-write preserves hand-maintained formulas. A formula is fully
regenerated only when it carries anossctl-generated ownership marker; a hand-maintained formula
(no marker) is updated surgically (only theurl/sha256lines) or refused, never clobbered. ossctl's
own generated formula carries the marker, so its own tap keeps the simple full-render path. - An empty
extra_fieldsmap is now omitted from canonical JSON (not emitted as"extra_fields": {}),
symmetrically for the top-levelContractand the nestedDistribution(skip_serializing_if). A
populatedextra_fieldsserializes exactly as before. Noschema_versionchange from this alone, but
the release-planSEAL_VERSIONbumped4→5(the sealed pre-image of an empty-extra_fields
contract changed). Combined with the monorepo change above,SEAL_VERSIONis5andschema_version
is2in this release.
Fixed
- The generated crates-publish CI workflow now auto-fires. It triggers on the version-tag
push
instead ofrelease: published— GitHub does not emit areleaseevent for a Release created by the
defaultGITHUB_TOKEN(as cargo-dist does), so the old trigger never ran and crates.io was published
only via manual dispatch.workflow_dispatchis retained as a manual fallback. release resumeno longer demands--allow-unverifiedwhen the publish phase was never reached.
A run that failed in the build phase (before any publish could have happened) now resumes directly;
the genuinely-unsafe cases (publish reached but no receipt;Published × Unknown) still require the
flag.release abandon --reasonaccepts a reason that starts with--(previously rejected as an
unknown flag by the argument parser).- Normalizer diagnostics JSON-encode user-controlled keys, so a contract key containing quotes,
newlines, or control characters can no longer forge or corrupt diagnostic/JSONL log lines.
Install ossctl 0.2.4
Install prebuilt binaries via shell script
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/jarimustonen/ossctl/releases/download/v0.2.4/ossctl-installer.sh | shInstall prebuilt binaries via powershell script
powershell -ExecutionPolicy Bypass -c "irm https://github.com/jarimustonen/ossctl/releases/download/v0.2.4/ossctl-installer.ps1 | iex"Download ossctl 0.2.4
| File | Platform | Checksum |
|---|---|---|
| ossctl-aarch64-apple-darwin.tar.xz | Apple Silicon macOS | checksum |
| ossctl-x86_64-pc-windows-msvc.zip | x64 Windows | checksum |
| ossctl-aarch64-unknown-linux-musl.tar.xz | ARM64 MUSL Linux | checksum |
| ossctl-x86_64-unknown-linux-musl.tar.xz | x64 MUSL Linux | checksum |
Verifying GitHub Artifact Attestations
The artifacts in this release have attestations generated with GitHub Artifact Attestations. These can be verified by using the GitHub CLI:
gh attestation verify <file-path of downloaded artifact> --repo jarimustonen/ossctlYou can also download the attestation from GitHub and verify against that directly:
gh attestation verify <file-path of downloaded artifact> --bundle <file-path of downloaded attestation>0.2.3 - 2026-08-07
Release Notes
Fixed
- The engine's Homebrew release leg is now self-sufficient — no local
brewtoolchain required.
For a configured tap with an existing formula, thedistphase rendersFormula/<name>.rbfrom the
verified sha256 and pushes it directly to the tap (git/API write), instead of shelling to
brew bump-formula-pr(which ranbrew auditinternally and could abort a cut on an unrelated
audit/lint error, as it did on the 0.2.2 cut). The write verifies the sha against the fetched
archive, guards formula existence/symlinks, and is idempotent (a byte-identical formula is a no-op).
brew bump-formula-pris retained only for the homebrew-core path. This makes an engine cut's
Homebrew leg deterministic and hands-off. - False-positive
homebrew_tapcontract warning removed. The normalizer no longer warns
"homebrew_tap is set but no homebrew installer" when the contract declares ahomebrew-registry
target — that target IS the tap consumer, so the tap is updated. The warning now fires only when
a tap has neither a homebrew installer nor a homebrew target (the genuinely-orphaned case).
Added
- Forward-compat capture on the nested
distributionblock. TheDistributionstruct and its
sub-structs now preserve unknown sub-keys inextra_fields(mirroring the top-levelContract), so
an older ossctl reading a newer contract round-trips distribution keys instead of dropping them. - Installer↔platform coherence warning. The normalizer now warns when
distribution.installers
targets an OS absent fromdistribution.platforms(e.g.msiwithout a Windows triple,homebrew
without a macOS or Linux triple), catching dead installer config;npm/shell/powershellare
OS-agnostic and ungated.
Install ossctl 0.2.3
Install prebuilt binaries via shell script
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/jarimustonen/ossctl/releases/download/v0.2.3/ossctl-installer.sh | shInstall prebuilt binaries via powershell script
powershell -ExecutionPolicy Bypass -c "irm https://github.com/jarimustonen/ossctl/releases/download/v0.2.3/ossctl-installer.ps1 | iex"Download ossctl 0.2.3
| File | Platform | Checksum |
|---|---|---|
| ossctl-aarch64-apple-darwin.tar.xz | Apple Silicon macOS | checksum |
| ossctl-x86_64-pc-windows-msvc.zip | x64 Windows | checksum |
| ossctl-aarch64-unknown-linux-musl.tar.xz | ARM64 MUSL Linux | checksum |
| ossctl-x86_64-unknown-linux-musl.tar.xz | x64 MUSL Linux | checksum |
Verifying GitHub Artifact Attestations
The artifacts in this release have attestations generated with GitHub Artifact Attestations. These can be verified by using the GitHub CLI:
gh attestation verify <file-path of downloaded artifact> --repo jarimustonen/ossctlYou can also download the attestation from GitHub and verify against that directly:
gh attestation verify <file-path of downloaded artifact> --bundle <file-path of downloaded attestation>0.2.2 - 2026-08-06
Release Notes
Added
- crates.io
RegistryQueryfor ecosystemrust— the release engine's publish/reconcile
path can now determine a crate@version's already-published state by querying the crates.io
sparse index (index.crates.io, viacurlwith a bounded--max-time; no new HTTP
dependency). Previously onlynode(npm) was wired, so arustcut's publish phase failed
closed with "no registry query wired for ecosystem 'rust' yet" — the last blocker
before the engine could cut ossctl itself. The query is defensively fail-closed: a genuine
registry-unreachable (network error, unexpected HTTP status, malformed index line) returns an
error rather than a false "not published"; a404/410is the legitimate "not yet published"
signal (empty result); yanked versions count as published (their version slot is occupied).
This completes the engine's registry-aware defer/idempotency predicate for crates.io — the
cut of ossctl itself now runs end-to-end through its own engine (dogfood).
Install ossctl 0.2.2
Install prebuilt binaries via shell script
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/jarimustonen/ossctl/releases/download/v0.2.2/ossctl-installer.sh | shInstall prebuilt binaries via powershell script
powershell -ExecutionPolicy Bypass -c "irm https://github.com/jarimustonen/ossctl/releases/download/v0.2.2/ossctl-installer.ps1 | iex"Download ossctl 0.2.2
| File | Platform | Checksum |
|---|---|---|
| ossctl-aarch64-apple-darwin.tar.xz | Apple Silicon macOS | checksum |
| ossctl-x86_64-pc-windows-msvc.zip | x64 Windows | checksum |
| ossctl-aarch64-unknown-linux-musl.tar.xz | ARM64 MUSL Linux | checksum |
| ossctl-x86_64-unknown-linux-musl.tar.xz | x64 MUSL Linux | checksum |
Verifying GitHub Artifact Attestations
The artifacts in this release have attestations generated with GitHub Artifact Attestations. These can be verified by using the GitHub CLI:
gh attestation verify <file-path of downloaded artifact> --repo jarimustonen/ossctlYou can also download the attestation from GitHub and verify against that directly:
gh attestation verify <file-path of downloaded artifact> --bundle <file-path of downloaded attestation>0.2.1 - 2026-08-06
Release Notes
Fixed
- Multi-crate cuts with
=-pinned internal deps now cut through the engine. For a workspace
whose dependent crate pins its workspace dep by exact version (ossctl→ossctl-core = "=X.Y.Z"),
ossctl release cutno longer fails in the build phase trying to package the dependent before its
dep exists on the crates.io index. The cargo adapter now defers packaging a dependent whose
=-pinned dep is not yet published into that target's dep-orderedcargo publish— so the dep
is published and index-visible first, then the dependent packages and publishes against it. The
decision is registry-aware and fail-closed (deferral applies only to a not-yet-published internal
dep). The outer phase barrier, coordinator-only tagging, and post-tag Homebrew phase are preserved
(ADR-0002 amendment; ADR-0004 one-target-one-publish-unit intact). This is the fix that lets ossctl
cut itself through its own engine.
Install ossctl 0.2.1
Install prebuilt binaries via shell script
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/jarimustonen/ossctl/releases/download/v0.2.1/ossctl-installer.sh | shInstall prebuilt binaries via powershell script
powershell -ExecutionPolicy Bypass -c "irm https://github.com/jarimustonen/ossctl/releases/download/v0.2.1/ossctl-installer.ps1 | iex"Download ossctl 0.2.1
| File | Platform | Checksum |
|---|---|---|
| ossctl-aarch64-apple-darwin.tar.xz | Apple Silicon macOS | checksum |
| ossctl-x86_64-pc-windows-msvc.zip | x64 Windows | checksum |
| ossctl-aarch64-unknown-linux-musl.tar.xz | ARM64 MUSL Linux | checksum |
| ossctl-x86_64-unknown-linux-musl.tar.xz | x64 MUSL Linux | checksum |
Verifying GitHub Artifact Attestations
The artifacts in this release have attestations generated with GitHub Artifact Attestations. These can be verified by using the GitHub CLI:
gh attestation verify <file-path of downloaded artifact> --repo jarimustonen/ossctlYou can also download the attestation from GitHub and verify against that directly:
gh attestation verify <file-path of downloaded artifact> --bundle <file-path of downloaded attestation>0.2.0 - 2026-08-06
Release Notes
The release engine can now cut a multi-target, cross-channel release end to end — including
ossctl's own (two crates.io crates + cargo-dist binaries + a Homebrew tap).
Added
ossctl release listandossctl release abandon— inspect release runs (active and
past) and terminally mark an interrupted run un-resumable, over the event-sourced journal.
These back the "is a cut already in flight?" gate and interrupted-run recovery.
Changed
ossctl release cutnow drives a multi-target, cross-channel release end to end. A
contract with several publish targets across crates.io, cargo-dist binaries, and a Homebrew
tap cuts in one run:- Multiple targets in one ecosystem are published in dependency order (e.g.
ossctl-core
beforeossctl) instead of being rejected. - One plan target = one publish unit (ADR-0004): the cargo adapter publishes exactly its
own crate and waits for that crate's workspace dependencies to be index-visible first, so a
multi-crate cut never double-publishes a shared dependency during the crates.io index lag. - CI-delegated targets are skipped, not failed — a cargo-dist / gh-releases target whose
binaries are built by the tag-triggered CI workflow no longer traps the publish phase. - The GitHub Release is left to CI when a CI-delegated target is present, so the engine and
cargo-dist's workflow don't both try to create it. - Post-tag Homebrew phase fetches the tag archive, computes its real
sha256, and finalizes
the formula — no hand-filled hash.
- Multiple targets in one ecosystem are published in dependency order (e.g.
Fixed
- Cargo publishes are pinned to crates.io (
--registry crates-io) and reject any other
registry, preventing a silently misconfigured host from publishing to the wrong destination
while ossctl records a crates.io receipt.
Install ossctl 0.2.0
Install prebuilt binaries via shell script
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/jarimustonen/ossctl/releases/download/v0.2.0/ossctl-installer.sh | shInstall prebuilt binaries via powershell script
powershell -ExecutionPolicy Bypass -c "irm https://github.com/jarimustonen/ossctl/releases/download/v0.2.0/ossctl-installer.ps1 | iex"Download ossctl 0.2.0
| File | Platform | Checksum |
|---|---|---|
| ossctl-aarch64-apple-darwin.tar.xz | Apple Silicon macOS | checksum |
| ossctl-x86_64-pc-windows-msvc.zip | x64 Windows | checksum |
| ossctl-aarch64-unknown-linux-musl.tar.xz | ARM64 MUSL Linux | checksum |
| ossctl-x86_64-unknown-linux-musl.tar.xz | x64 MUSL Linux | checksum |
Verifying GitHub Artifact Attestations
The artifacts in this release have attestations generated with GitHub Artifact Attestations. These can be verified by using the GitHub CLI:
gh attestation verify <file-path of downloaded artifact> --repo jarimustonen/ossctlYou can also download the attestation from GitHub and verify against that directly:
gh attestation verify <file-path of downloaded artifact> --bundle <file-path of downloaded attestation>0.1.2 - 2026-08-05
Release Notes
Added
ossctl dist generate— the release engine now generates a downstream project's
cross-platform binary-release infrastructure from itsOSS-RELEASE.mdcontract: a
dist-workspace.toml(cargo-dist) whose targets come fromdistribution.platforms
(defaulting to macOS + Linux musl, arm64 + x86_64 — never single-OS) and installers
fromdistribution.installers, plus the tag-triggered.github/workflows/release.yml
produced viadist generate(never hand-templated). This is the piece that makes
"release through ossctl" real.
Install ossctl 0.1.2
Install prebuilt binaries via shell script
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/jarimustonen/ossctl/releases/download/v0.1.2/ossctl-installer.sh | shInstall prebuilt binaries via powershell script
powershell -ExecutionPolicy Bypass -c "irm https://github.com/jarimustonen/ossctl/releases/download/v0.1.2/ossctl-installer.ps1 | iex"Download ossctl 0.1.2
| File | Platform | Checksum |
|---|---|---|
| ossctl-aarch64-apple-darwin.tar.xz | Apple Silicon macOS | checksum |
| ossctl-x86_64-pc-windows-msvc.zip | x64 Windows | checksum |
| ossctl-aarch64-unknown-linux-musl.tar.xz | ARM64 MUSL Linux | checksum |
| ossctl-x86_64-unknown-linux-musl.tar.xz | x64 MUSL Linux | checksum |
Verifying GitHub Artifact Attestations
The artifacts in this release have attestations generated with GitHub Artifact Attestations. These can be verified by using the GitHub CLI:
gh attestation verify <file-path of downloaded artifact> --repo jarimustonen/ossctlYou can also download the attestation from GitHub and verify against that directly:
gh attestation verify <file-path of downloaded artifact> --bundle <file-path of downloaded attestation>0.1.1 - 2026-08-05
Release Notes
Cross-platform release: ossctl now installs on Linux as well as macOS.
Added
- Cross-platform release artifacts — prebuilt binaries for macOS (arm64 + x86_64)
and Linux (arm64 + x86_64, statically linked viamuslso they run on any distro
regardless of glibc vintage), plus acurl … | shshell installer, built by cargo-dist
on tag push. distribution.platformsin theOSS-RELEASE.mdcontract — a cross-platform binary
target set that defaults to macOS + Linux, so every project the/oss-*family sets up
produces Linux builds by default.ossctl auditnow flags adistributionwhose targets omit Linux as a cross-platform
readiness gap.
Changed
- The cargo release adapter publishes a multi-crate workspace in dependency order, waiting
for each crate to appear on the crates.io index before publishing its dependents. - The Homebrew adapter bootstraps a first formula on an empty tap (create vs. bump).
- Maturity inference no longer conflates version number with release maturity: a
production-grade pre-1.0 (ZeroVer) repository can reach theproductiontier. /oss-readmeemits cross-platform install instructions (shell installer + prebuilt
binaries); the contract can model a cargo-dist distribution alongside registry publishes.
Fixed
- All six ecosystem release adapters now either perform a real publish or return an explicit
Unsupported, instead of a placeholder receipt.
Install ossctl 0.1.1
Install prebuilt binaries via shell script
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/jarimustonen/ossctl/releases/download/v0.1.1/ossctl-installer.sh | shInstall prebuilt binaries via powershell script
powershell -ExecutionPolicy Bypass -c "irm https://github.com/jarimustonen/ossctl/releases/download/v0.1.1/ossctl-installer.ps1 | iex"Download ossctl 0.1.1
| File | Platform | Checksum |
|---|---|---|
| ossctl-aarch64-apple-darwin.tar.xz | Apple Silicon macOS | checksum |
| ossctl-x86_64-pc-windows-msvc.zip | x64 Windows | checksum |
| ossctl-aarch64-unknown-linux-musl.tar.xz | ARM64 MUSL Linux | checksum |
| ossctl-x86_64-unknown-linux-musl.tar.xz | x64 MUSL Linux | checksum |
Verifying GitHub Artifact Attestations
The artifacts in this release have attestations generated with GitHub Artifact Attestations. These can be verified by using the GitHub CLI:
gh attestation verify <file-path of downloaded artifact> --repo jarimustonen/ossctlYou can also download the attestation from GitHub and verify against that directly:
gh attestation verify <file-path of downloaded artifact> --bundle <file-path of downloaded attestation>