feat(dev-workflow): PR E — real release pipeline (all defineFunction)#224
Conversation
Swaps 4 noop nodes in release.ts for defineFunction implementations: - bump: semver bump via package.json rewrite (patch/minor/major from labels) - changelog: append dated section to CHANGELOG.md at repo root - publish: npm publish in PUBLISH_ORDER (critical path); respects dryRun via plan:true mode that prints instead of executes - cleanup: git tag the release commit (no auto-push — operator pushes) No LLM agents — release mechanics are deterministic. Bumps @ageflow/dev-workflow 0.0.13 → 0.0.14 (private).
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 7d2bb9607c
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
| // TODO: parse affectedPackages from issue body. For now empty → no-op; | ||
| // operator fills via issue labels/body convention. | ||
| affectedPackages: [] as string[], |
There was a problem hiding this comment.
Derive affected packages before running bump
The release pipeline hardcodes affectedPackages to an empty array, and WorkflowInput does not provide any alternate source for this value, so bumpFn always produces an empty bumps list. In real runs that means no package versions are changed and publish has nothing to publish, yet the workflow still advances to changelog/tag steps as if a release happened.
Useful? React with 👍 / 👎.
| "@ageflow/runner-claude", | ||
| "@ageflow/runner-codex", | ||
| "@ageflow/runner-api", | ||
| "@ageflow/testing", | ||
| "@ageflow/server", |
There was a problem hiding this comment.
Include runner-anthropic in publish order
The publish order omits @ageflow/runner-anthropic (a non-private package under packages/runners/anthropic), so any release that bumps that package will never attempt npm publish for it. This can leave internal package versions out of sync by completing a release where one bumped package was silently never published.
Useful? React with 👍 / 👎.
| } catch (err) { | ||
| skipped.push({ | ||
| package: pkgName, | ||
| reason: (err as Error).message.slice(0, 200), | ||
| }); |
There was a problem hiding this comment.
Fail the workflow when npm publish errors occur
When npm publish fails for a package, the error is converted into a skipped entry and execution continues. In production this allows the workflow to proceed to cleanup/tagging after partial publish failures (for example, registry/auth/network errors), creating a release tag that incorrectly implies a complete successful release.
Useful? React with 👍 / 👎.
1. bump: parse affectedPackages from issue body (regex @ageflow/X); throw when list is empty to prevent silent no-op releases. 2. PUBLISH_ORDER: add @ageflow/runner-anthropic (non-private package, was omitted — would silently skip its publish on release). 3. publish: throw when any npm publish fails, instead of continuing to changelog+tag. Prevents misleading release tags on partial failure. Bumps @ageflow/dev-workflow 0.0.14 → 0.0.15 (private).
P1-3 fix (throw on publish failure) was too eager: it fired even in plan:true mode where package lookup failures are informational during dry-run. Restructured: skip directory lookup entirely in plan mode, treating it as a pure dry-run.
Summary
Fifth and final of the
dev-run.mdPR plan. Makes the release pipeline end-to-end real.All 4 nodes are
defineFunction— release mechanics don't need LLM judgment, and an LLM-drivennpm publishis a footgun.Changes
bump: semver bump from labelschangelog: datedCHANGELOG.mdentriespublish:npm publishin dep order (respects dryRun via plan:true)cleanup:git tagrelease commit (no auto-push)Safety
publishwithplan: trueprints commands without running them.dryRunflag on WorkflowInput gates this.Test plan
--dry-run 194worksRefs #194. Closes the main dev-run.md plan — only PR F (10-run retrospective) remains and that's a docs-only retro after real runs land.