Skip to content

ci: retire a version the way npm actually allows — deprecate, from CI - #47

Merged
akf66 merged 1 commit into
mainfrom
akf66/deprecate-1x
Aug 26, 2026
Merged

ci: retire a version the way npm actually allows — deprecate, from CI#47
akf66 merged 1 commit into
mainfrom
akf66/deprecate-1x

Conversation

@akf66

@akf66 akf66 commented Aug 26, 2026

Copy link
Copy Markdown
Contributor

The 1.x line has to stop being installed, and unpublishing it from CI turned out to be impossible — npm refuses a granular token that bypasses 2FA (#46). This is the half of that job the registry does allow.

npm deprecate is also the better instrument for the goal: it leaves the tarball in place, so anyone pinned keeps working, and prints a warning on every install — the outcome an unpublish only approximates, by breaking them instead. RELEASE.md already named it the default; there was simply no way to run it, since the only credential this project has is a repository secret.

Reversible, which is why this one is safe to keep where the unpublish workflow was not: dispatching with an empty message clears the flag, per npm's own convention. A mistake is one more dispatch, not a burned version number.

  • Guard: the version in package.json is refused. Deprecating whatever dist-tags.latest points at warns on every install of the package and reads as an outage.
  • Verify: reads the anonymous packument and asserts each version landed in the requested state, and that the live release is not flagged. npm deprecate exiting 0 is not evidence — same reason publish.yml has a gate 6.
  • A version that refuses warns and the loop continues, then the job fails at the end; one refusal must not leave the rest of the line unmarked.

Dispatched after merge against 1.0.2 1.1.0 1.2.0 1.2.1 1.3.0 1.3.1 1.3.2 1.4.0 1.5.0. The hard withdrawal of those versions still needs an interactive npm login from a maintainer's machine before the 72-hour window closes at 2026-08-28T09:23Z.

The 1.x line has to stop being installed, and unpublishing it from CI turned out
to be impossible: npm refuses a granular token that bypasses 2FA (#46). This is
the half of that job the registry does allow.

`npm deprecate` is also the better instrument for the goal. It leaves the
tarball in place, so anyone pinned keeps working, and prints a warning on every
install — which is the outcome an unpublish only approximates, by breaking them
instead. RELEASE.md already named it the default; there was just no way to run
it, because the only credential this project has is a repository secret.

Reversible, which is why this one is safe to keep where the unpublish workflow
was not: dispatching with an empty `message` clears the flag, per npm's own
convention. A mistake here is one more dispatch, not a burned version number.

One guard, for the one-click mistake that matters: the version in package.json
is refused. Deprecating whatever dist-tags.latest points at puts a warning on
every install of the package and reads as an outage.

Verification reads the ANONYMOUS packument and asserts each version landed in
the requested state, plus that the live release is not flagged. `npm deprecate`
exiting 0 is not evidence, for the same reason publish.yml has a gate 6.

A version that refuses warns and the loop continues, then the job fails at the
end — one refusal must not leave the rest of the line unmarked.
@akf66
akf66 merged commit c55db39 into main Aug 26, 2026
2 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant