Publishing
Build a fresh publish plan from versioned manifests and changelogs, then release packages in dependency order.
smif publish handles packages whose version and changelog edits are already present. It does not depend on the changesets consumed by version.
smif publish --dry-run
smif publishWhen generated GitHub Actions are enabled, merging the prepared release pull request triggers the recommended publish path through smif ci. Do not run a duplicate local publish for that release.
Planning and preflight
Semifold inspects current manifests and changelogs, orders packages through the workspace graph, expands configured commands, and performs every available registry pre-check before starting publish commands. Missing changelogs, versions already present, and package policy become explicit skip reasons.
A private package skips registry preflight and publish commands only. Effective private status uses package-level publish first and falls back to manifest or plugin discovery when it is omitted. A private package does not create a GitHub Release by default; with explicit github-release = true and --github-release, Semifold still creates its Release and uploads assets. The final status is a private-package skip only when no Forge work remains.
HTTP checks treat 200 as existing and 404 as missing; unexpected status codes fail safely. Command checks use the configured JSON Lines contract.
Execution
For each eligible package, Semifold runs configured pre-publish and publish commands in dependency order. The final report separates succeeded, skipped, failed, and not-started packages so a partial failure can be retried without guessing.
| Option | Behavior |
|---|---|
--dry-run | Runs read-only preflight and skips registry and Forge mutations. Commands run only when explicitly allowed for dry run. |
--allow-dirty | Accepts the current worktree diff as intentional publish input. |
--github-release | Creates configured GitHub Releases and uploads assets; only accepted in CI. |
If a registry version already exists, its registry command is skipped. With GitHub Releases enabled, Semifold can still create a missing Release; an already existing Release does not re-upload missing assets.