chore(release): adopt shared forensic release pipeline - #181
Merged
Conversation
Replace MetaEdit's semantic-release flow with the shared forensic PR-to-release pipeline in chhoumann/obsidian-plugin-workflows, consumed via three thin caller stubs pinned at @v2 (workflows-ref: v2). - Add the release-prepare, release-trigger, and release caller stubs (plugin-name metaedit, package-manager pnpm, node 24, default-branch master, release-bot-app-slug metaedit-release-bot, assets main.js + manifest.json + styles.css). - Remove the old workflow_dispatch semantic-release release.yml, version-bump.mjs, the package.json semantic-release config block, the version + semantic-release scripts, and the semantic-release devDeps. - Add the repository field the shared planner requires to build release notes; keep the commitizen/cz config (drives commit style, not releases). - Update AGENTS.md release docs to the PR-to-release model.
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 2779f790ea
ℹ️ 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".
The shared release pipeline opens its standing PR titled `release(version): Release <version>`. The PR-title check's allowed Conventional Commit types did not include `release`, so every generated release PR would fail the check. Add `release` to the allowed types. Flagged by the Codex review bot on #181.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What and why
Migrates MetaEdit onto the shared forensic PR-to-release pipeline in
chhoumann/obsidian-plugin-workflows.MetaEdit had no machine-PR release pipeline: it released via a manual
workflow_dispatchsemantic-release job. This replaces that whole model with thesame standing-release-PR flow the other plugins now share, so a fix lands once in
the shared repo and MetaEdit picks it up by bumping a pin.
Christian's decision this encodes:
master, theper-repo App bot opens or refreshes exactly one standing release PR containing
only the synchronized version files and generated notes. Merging that PR is
the sole release act. No auto-release, no manual dispatch on the happy path.
adversarial until proven otherwise.
GitHub App bot the maintainer provisions and controls, replacing the ambient
github-actions[bot].The old
workflow_dispatchrelease.yml,version-bump.mjs, the package.jsonsemantic-release config block, and the
version/semantic-releasescripts areremoved; the
semantic-releasedependency tree is pruned. In their place arethree thin caller stubs (trigger +
uses:) with all logic in the sharedreusables pinned at
@v2(workflows-ref: v2).What MetaEdit gains
MetaEdit had no machine-PR release pipeline, so there is no parity table to
preserve - it gains the full guarantee set. Rather than re-tabulate it, see the
shared repo's Security model - what each forensic check defends
against:
standing-PR provenance, exact version-file diff, commit-message contract + parent,
squash-parent + tree-sha equality, prior-tag ancestry and history, a durable
release-run/<version>recovery branch, and attestation + post-publish assetre-hash.
Config specifics
plugin-name: metaedit,package-manager: pnpm,node-version: "24"(matchesCI),
default-branch: master,release-bot-app-slug: metaedit-release-bot.release-assets: '["main.js","manifest.json","styles.css"]';verify-commandsispnpm run lint/pnpm run typecheck/pnpm run test.workflow_runwatchesworkflows: ["CI"], matching thisrepo's
ci.ymlname:.uses: ...@v2ref and theworkflows-ref: v2input;
release-trigger.ymlhas noworkflows-ref(pure API forensics, notoolkit checkout).
repositoryfield topackage.json- the shared planner requires itto build the release-notes compare/commit/issue URLs (verified in the dry-run
below). Kept the commitizen/
czconfig, which drives commit style, notreleases.
Precondition check (tagged baseline)
The shared planner requires the current
package.jsonversion to be tagged with apublished GitHub release, bare tag format (no
vprefix). Satisfied:package.jsonversion1.10.1= git tag1.10.1= published GitHub release1.10.1. No pre-first-release action item.Dry-run plan evidence
Ran the shared repo's
release-plan.mjsagainst this repo's real git history(
node scripts/release-plan.mjs --cwd <metaedit> --package-manager pnpm). CurrentmasterHEAD (0c28dc2), six conventional commits since the1.10.1tag,correctly plans the next release and resolves the newly-added
repositoryfieldfor its notes URLs:
{ "baseSha": "0c28dc27e2b841f771cfec9d1acd619a11664f33", "previousVersion": "1.10.1", "nextVersion": "1.10.2", "releaseType": "patch", "release": true, "notes": "## [1.10.2](https://github.com/chhoumann/MetaEdit/compare/1.10.1...1.10.2) (2026-07-11)\n\n### Bug Fixes\n* **e2e:** call local obsidian-e2e bin directly in Orca archive hook (#178) (556efe7)\n", "schemaVersion": 1 }The
previousVersion: 1.10.1anchor confirms the planner reads the taggedbaseline;
release: true->1.10.2is the release the first merged standing PRwould cut.
Gates (all green locally)
pnpm run lint,pnpm run typecheck,pnpm run test(355 tests / 19 files),pnpm run build. All three caller stubs passactionlintand PyYAML parse.REQUIRED BEFORE MERGE - GitHub App setup
The pipeline fails closed without a per-repo release-bot App. Before the next
release, provision it (steps in the shared repo README, "Per-repo GitHub App
setup"):
MetaEdit Release Botwith slugmetaedit-release-bot(must matchrelease-bot-app-slug). Repositorypermissions: Contents R/W, Pull requests R/W. No account perms, no webhook.
RELEASE_APP_ID(numeric App id) and secretRELEASE_APP_PRIVATE_KEY(the full.pem).masteris protected, add the App as an allowed bypass/merge actor per theruleset (the maintainer still merges; the App only authors).
CI is unaffected meanwhile (Test, Build + Lint, CodeQL, etc. keep running).
This PR deletes the old release flow, so releases are blocked between merge and
App setup - nothing else breaks. After setup, smoke-test via Actions -> Prepare
release -> Run workflow with the
dry-run: trueline uncommented before the firstreal release.