Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
17 commits
Select commit Hold shift + click to select a range
dc6db45
chore(protect-ffi): mark the crate publish = false
tobyhede Aug 10, 2026
6ce8481
chore(protect-ffi): point the manifests at cipherstash/stack
tobyhede Aug 10, 2026
a9210f6
feat(release): gate publishing on registry state
tobyhede Aug 10, 2026
3f6ca3e
ci: add the reusable FFI artifact build workflow
tobyhede Aug 11, 2026
c1a4029
ci(release): publish FFI tarballs, tagged, before changeset publish
tobyhede Aug 11, 2026
37c89ec
ci: gate the release machinery on actionlint and script tests
tobyhede Aug 11, 2026
54fd265
ci: add the FFI pack-and-install pre-flight
tobyhede Aug 11, 2026
872f6f9
ci: retire the deposited upstream workflows
tobyhede Aug 11, 2026
cf08c3b
docs(release): record the FFI publish path in the plan and the supply…
tobyhede Aug 11, 2026
599fafd
fix(release): close the review findings on caching, checksums and tag…
tobyhede Aug 11, 2026
80f3cd5
docs(supply-chain): name each action's cache input and its real default
tobyhede Aug 11, 2026
52e39ad
docs(supply-chain): correct how npm validates a trusted publish throu…
tobyhede Aug 11, 2026
84eef2c
refactor(release): cut wasted CI work and collapse the duplicated guards
tobyhede Aug 11, 2026
81d0943
fix(supply-chain): split shell separators before checking an install …
tobyhede Aug 11, 2026
f7bd395
refactor(release): drop the gate's install, and stop three checks re-…
tobyhede Aug 11, 2026
40c9503
fix(ci): drop the backtick shellcheck now reads as command substitution
tobyhede Aug 12, 2026
71a2436
fix(release): grant the publish credential per job, not to the whole …
tobyhede Aug 12, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
19 changes: 19 additions & 0 deletions .changeset/protect-ffi-repository-url.md.deferred
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
---
'@cipherstash/protect-ffi': patch
---

Point the published metadata at `cipherstash/stack`, the repository these
packages are now built and published from. The wrapper's `repository.url`,
`bugs.url` and `homepage`, and each platform package's `repository.url`, all
named `cipherstash/protectjs-ffi`; each platform package's
`repository.directory` also named `platforms/<platform>`, which resolves from
the root of the repository named above and so addressed nothing here.

npm requires `repository.url` to match the publishing repository exactly for a
trusted publish, and rejects a mismatch rather than warning about it. A stale
`repository.directory` fails more quietly: the publish succeeds and the source
link on the package page 404s.

The one repository URL that reaches an end user at runtime moves too — the Rust
core's `InvariantViolation` error asks the reader to file an issue, and the
repository it pointed at is archived at the end of the publishing cutover.
39 changes: 39 additions & 0 deletions .changeset/supply-chain-skill-ffi-release-path.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
---
'stash': patch
---

Document the native-binding publish path in the bundled
`stash-supply-chain-security` skill, and correct what it claims about
frozen-lockfile coverage.

`@cipherstash/protect-ffi` and its six platform packages ship compiled binaries,
which `changeset publish` cannot produce — it packs from the workspace, where
`index.node` is a build output. The skill now describes the pipeline that does:
a registry-state gate, a target-explicit build matrix in a reusable workflow,
and a publish step that ships the six platform packages before the wrapper and
tags all seven itself, because changesets tags only what it published. It also
records two npm requirements that fail late and quietly — `repository.url` must
match the publishing repository exactly (and `repository.directory` resolves
from that repository's root), and trusted-publisher configurations created after
2026-05-20 need an explicit "Allowed actions" selection.

It also now states, per action, which input disables that action's built-in
caching and what that input defaults to. Two of the three default to caching
ON — `actions/setup-node`'s `package-manager-cache` and `jdx/mise-action`'s
`cache` — so omitting the key is not "no caching", it is caching spelled
invisibly, and the gate's generic rule only sees a *truthy* value rather than a
missing one.

The OIDC section said `permissions: id-token: write` is what mints the token and
left it there. It now says where that grant belongs: on the publishing jobs, not
at the workflow level. A trusted publisher is registered against a repository
*and a workflow filename*, so npm accepts a token minted by any job in the
registered file — declaring the scope at the top hands the publish credential to
every job that does not override it, including ones added later.

The frozen-lockfile section said the rule was enforced in `tests.yml`, which was
true and misleading: that is where it was *checked*, and `release.yml` ran a
bare `pnpm install` from the day it was written — so the single install permitted
to resolve outside the lockfile was the one whose output goes to the registry.
The install is fixed and the check now scans every workflow and every local
composite action.
12 changes: 12 additions & 0 deletions .github/actionlint.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
# actionlint validates every `runs-on:` against the list of GitHub-hosted runner
# labels it ships with. Blacksmith runners are self-hosted from its perspective,
# so without this file each of the fourteen jobs using one is reported as an
# unknown label — and the release lint gate (.github/workflows/lint-release.yml)
# would be red on the day it lands, for reasons that have nothing to do with the
# release machinery it exists to check.
#
# Nothing complained before because actionlint has never run in this repository;
# lint-release.yml is what introduces it.
self-hosted-runner:
labels:
- blacksmith-4vcpu-ubuntu-2404
Loading
Loading