nodefony-release

Guides npm publication of version-locked Nodefony packages through guards, smoke tests, and failure diagnosis.

Updated Dec 19, 2023
One-click install
npx skills add https://github.com/nodefony/nodefony-core --skill nodefony-release-nodefony
Or copy as Structured Prompt for Agent
Please help me install this Agent Skill.
Skill: nodefony-release
Source: https://github.com/nodefony/nodefony-core/tree/main/.claude/skills/nodefony-release
Command: npx skills add https://github.com/nodefony/nodefony-core --skill nodefony-release-nodefony

SYSTEM DOCUMENTATION & REQUIREMENTS

💡 This Skill includes scripts (resource) components.

What problem does it solve? Publishing a lockstep set of npm packages is irreversible: a failed publish mid-sequence burns versions, npm has no transactions, and a repository cannot see its own published surface (e.g. exports.types pointing at source files absent from the tarball). This Skill gives an agent the reasoning to run the Nodefony release chain correctly: which command to launch, in what order, what each guard refuses, and how to read a failure. ## Core Features & Use Cases - Release orchestration guidance: Explains the authoritative npm commands (npm run release, release:pack, release:smoke, release:image-gate) and what each guard prevents, from semver validation to per-layer Docker image secret scanning. - Smoke test interpretation: Details the three clean-install scenarios (base, front, studio) run in containers, what each one alone can prove, and how named steps attribute a failure to the right stage. - Pitfall knowledge base: Documents hard-won lessons such as npm setting latest on first publish regardless of --tag, npm view --json wrapping results in arrays, and OIDC trusted publishing not covering deprecate or dist-tag. - Export surface comparison: Ships scripts/compare-exports.mjs, which diffs the exported surface of two builds via real imports in isolated Node processes. - Use Case: Before tagging v10.0.0, ask the agent to walk through the release: it will tell you to stamp the version with --write, review the Common Changelog draft, run --promouvoir, and wait for CI on the tagged commit before pushing the tag. ## Quick Start Ask the agent to prepare a Nodefony release for version 10.0.0-alpha.7 on the alpha npm tag and explain any guard that refuses.

Frequently Asked Questions about nodefony-release

High-intent search queries and answers about installing and using this skill.

FAQPage Schema
How do I publish a Nodefony release to npm?

Run `npm run release -- --version <v> --npm-tag <tag> --write` to stamp versions and draft the changelog, then `--promouvoir` to commit, push, and wait for CI on the tagged commit. The manually pushed `v*` tag triggers the actual publication workflow.

How do I test npm packages before publishing?

Use `npm run release:pack` to build tarballs, then `npm run release:smoke` to install them into a clean container and compile a witness application. The smoke test covers three scenarios: base, front, and studio.

Why does npm publish a prerelease under the latest tag?

npm sets `latest` at a package's first publication regardless of the `--tag` flag, and never moves it afterward. The `--dist-tags` mode detects and fixes this, but it never touches a stable `latest`.

Does npm trusted publishing cover deprecate and dist-tag commands?

No. OIDC trusted publishing only covers `publish`; `deprecate`, `dist-tag`, and `access` require their own authenticated session with a two-factor code. The release script's `--deprecate` and `--dist-tags` modes accept `--otp` for this.

Why does my published package have broken TypeScript types?

The repository points `exports.types` at source files that are absent from the published tarball, so everything works locally but breaks for installers. Verify by running `npm pack` and reading the unpacked manifest, never the repository's package.json.

How do I compare the exported surface of two JavaScript builds?

Run `node scripts/compare-exports.mjs <entryA.js> <entryB.js>`, which imports each build in an isolated Node process and diffs the exported keys. Isolation is required because global registries like entity registries crash when two builds load in one process.