Skip to content

feat(release): publish npm packages validated by CI - #562

Merged
neilime merged 5 commits into
mainfrom
feat/release-orchestration
Nov 4, 2026
Merged

neilime merged 5 commits into
mainfrom
feat/release-orchestration

Conversation

@neilime

@neilime neilime commented Oct 29, 2026 •

Copy link
Copy Markdown
Member

Add manual and scheduled releases for one public npm package, with separate version preparation, CI validation and publication. CI builds, packs and tests the tarball; release publishes the validated artifact without rebuilding, repacking or running consumer commands.

  • prepare-package-release.yml uses HoverKraft Conventional Commit planning, updates the manifest and lockfile, creates a signed version commit, pushes the commit/tag atomically, and dispatches the caller at that tag. Optional GitHub App credentials are explicit inputs/secrets.
  • The existing CI workflow supports opt-in package: true and optional package-tests. Its package job has read-only repository permissions and runs consumer checks plus an npm publication dry run. Other projects keep packaging disabled.
  • release.yml accepts package-tarball-artifact-id from any successful validation job in the same run and prepared commit. It verifies artifact source and expected package identity, publishes through npm trusted publishing, then finalizes the GitHub release.
  • Use ci-github-publish for planning, release notes and optional provider-independent summaries. There is no required AI provider or source CHANGELOG.md.
  • Retries preserve existing npm versions, recover their original tarballs and verify GitHub asset integrity. Each action owns its implementation and colocated tests.
  • Keep the existing pull-request CI entry point unchanged. Release usage lives in .github/workflows/release.md, with one consolidated ADR.

General action/tooling changes were merged in #564. This PR targets main; #563 adds workspaces and fixed/independent Lerna support on top of it.

Validation:

  • All 30 common release/recovery unit tests passed.
  • Executed the actual packing, package-test and publication scripts locally: fresh consumer installation, automatic package identity, failing/mutating smoke commands, unexpected release identity rejection and a publication dry run all passed. The tarball bytes remained unchanged.
  • The actual Reactionable CLI package passed its moved CI checks for help, exact version and compiled templates, plus a publication dry run.
  • Workflow/action contracts, inline scripts, documentation links, generated references and repository lint passed. GitHub CI exercises optional packaging and consumption from another job.
  • No release tags, live npm publication, AI generation or release dispatch were performed.

Scope: stable releases of one public npm package with its own npm lockfile on GitHub.com and npmjs.org. The optional shared CI packaging job supports the default non-container Ubuntu artifact layout; custom validation jobs can supply a finished tarball.

@github-actions github-actions Bot added the type: feature Introduces a new feature label Oct 29, 2026
@github-actions

github-actions Bot commented Oct 29, 2026 •

Copy link
Copy Markdown
Contributor

Super-linter summary

Language Validation result
BASH Pass ✅
BASH_EXEC Pass ✅
BIOME_FORMAT Pass ✅
BIOME_LINT Pass ✅
CHECKOV Pass ✅
GITHUB_ACTIONS Pass ✅
GITHUB_ACTIONS_ZIZMOR Pass ✅
GITLEAKS Pass ✅
GIT_COMMITLINT Pass ✅
GIT_MERGE_CONFLICT_MARKERS Pass ✅
JSCPD Pass ✅
MARKDOWN Pass ✅
MARKDOWN_PRETTIER Pass ✅
NATURAL_LANGUAGE Pass ✅
PRE_COMMIT Pass ✅
SHELL_SHFMT Pass ✅
SPELL_CODESPELL Pass ✅
TRIVY Pass ✅
YAML Pass ✅
YAML_PRETTIER Pass ✅

All files and directories linted successfully

For more information, see the GitHub Actions workflow run

Powered by Super-linter
Super-linter revision: 2da136927bd4a73596db63044b504547c62cb854
Super-linter version: 9.0.0

@github-actions

Copy link
Copy Markdown
Contributor

Code Coverage Report

Coverage Results

Coverage

Metric Covered Total Percentage
Lines 2 2 100.00%
Functions 1 1 100.00%

Overall: 100.00% 🟢
🟩🟩🟩🟩🟩🟩🟩🟩🟩🟩🟩🟩🟩🟩🟩🟩🟩🟩🟩🟩

@codecov

codecov Bot commented Oct 29, 2026 •

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 100.00%. Comparing base (0cc60c3) to head (8082c28).
⚠️ Report is 1 commits behind head on main.

Additional details and impacted files
@@            Coverage Diff            @@
##              main      #562   +/-   ##
=========================================
  Coverage   100.00%   100.00%           
=========================================
  Files            1         1           
  Lines            3         3           
=========================================
  Hits             3         3           

☔ View full report in Codecov by Harness.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

@neilime neilime changed the title feat(release): add shared single-package and Lerna release workflow feat(release): publish CI artifacts with shared npm and Lerna workflows Oct 31, 2026
@neilime neilime changed the title feat(release): publish CI artifacts with shared npm and Lerna workflows feat(release): package CI builds with shared npm and Lerna workflows Nov 2, 2026
@neilime neilime changed the title feat(release): package CI builds with shared npm and Lerna workflows feat(release): orchestrate npm and Lerna releases from CI builds Nov 2, 2026
@neilime neilime changed the title feat(release): orchestrate npm and Lerna releases from CI builds feat(release): automate single-package npm releases with HoverKraft Nov 3, 2026
@neilime
neilime force-pushed the feat/release-orchestration branch from 65ffd4f to 05023e6 Compare November 3, 2026 12:40
@neilime neilime changed the title feat(release): automate single-package npm releases with HoverKraft feat(release)!: automate single-package npm releases with HoverKraft Nov 4, 2026
@github-actions github-actions Bot added the type: breaking Introduces a breaking change label Nov 4, 2026
@neilime
neilime force-pushed the feat/release-orchestration branch from 74481c1 to 438fb1f Compare November 4, 2026 10:40
Comment thread actions/release/prepare/index.js Fixed
Comment thread actions/release/verify/index.js Fixed
@neilime
neilime force-pushed the feat/release-orchestration branch 2 times, most recently from 4c4a26a to dfd1662 Compare November 4, 2026 14:30
@neilime neilime changed the title feat(release)!: automate single-package npm releases with HoverKraft feat(release): automate single-package npm releases with HoverKraft Nov 4, 2026
@neilime
neilime changed the base branch from main to feat/nodejs-action-foundation November 4, 2026 14:32
@neilime
neilime force-pushed the feat/release-orchestration branch from dfd1662 to a737d06 Compare November 4, 2026 14:34
Base automatically changed from feat/nodejs-action-foundation to main November 4, 2026 15:12
Prepare committed versions, consume an existing build, publish npm packages
and GitHub release notes, and recover partial publication. Keep release
validation and the consolidated decision record with the release workflow.
@neilime
neilime force-pushed the feat/release-orchestration branch from add4b89 to 7e9524c Compare November 4, 2026 15:15
@neilime neilime changed the title feat(release): automate single-package npm releases with HoverKraft feat(release): publish npm packages validated by CI Nov 4, 2026
@neilime
neilime merged commit 31cd29b into main Nov 4, 2026
132 checks passed
@neilime
neilime deleted the feat/release-orchestration branch November 4, 2026 21:05
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

type: breaking Introduces a breaking change type: feature Introduces a new feature

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants