flowing-abyss/obsidian-bases-structure/releasing-an-obsidian-plugin
Claude Code and agent skill by flowing-abyss/obsidian-bases-structure
- community
Checking that the SKILL.md file is still in the repository.
Cuts a release for this Obsidian plugin — bumps the version, runs the verify gate, tags, pushes, and confirms the release actually came out clean on GitHub. Use when the user asks to release, publish, ship, or cut a new version of the plugin.
Install
npx vskill@latest install flowing-abyss/obsidian-bases-structure/releasing-an-obsidian-pluginSKILL.md
Releasing an Obsidian Plugin
The one command
Confirm with the user before running this. It pushes a commit and a tag to the remote and (via .github/workflows/release.yml) creates a draft GitHub release — a one-way action, not a local dry run. (It's a draft — nothing is public until it's manually published; see "What's still manual" below.)
What it does, in order
- `preversion` runs the canonical verify gate and the release-ready metadata check:
pnpm run verify(format, lint, types, arch, dead code, coverage, build, artifact checks including README/LICENSE presence), thennode release-check.mjs --release-ready(fails on unfilled template placeholders —manifest.json'sid/name/author/description,package.json'sname). Aborts here, untouched, if anything fails — no partial release state. - `version` — bumps
manifest.json'sversion, syncsversions.json(viaversion-bump.mjs), stages both. - pnpm's own version step commits (
"<new-version>") and tags without a leading `v` (--tag-version-prefix '') — the tag must equalmanifest.json'sversionexactly; this is whatrelease.ymland Obsidian's community-plugin submission process both expect. - `postversion` —
git push --follow-tags, which pushes the version commit to the branch and pushes its tag. The branch update triggersci.yml(fast gate, redundant with whatpreversionalready ran). The tag update separately triggersrelease.yml(build, re-verify, generate a changelog from commit messages, open a draft GitHub release withmain.js/manifest.json/styles.cssattached). Both runs refer to the same release commit SHA —ci.ymltriggers on branch pushes, not tags, so this is a single push producing two runs, not duplicates.
The command finishing is not the release finishing — verify on GitHub
pnpm run release returning success only means the local steps and the push worked. The actual release isn't real until the CI it triggered has finished and produced a correct result. Do not tell the user the release shipped until you've checked this.
First, record exactly which commit and tag this release pushed — every check below filters on these, not on "whatever the latest run happens to be" (a concurrent push, a re-run, or stale cache could otherwise point you at the wrong run).
Bash:
PowerShell (the bash snippet above does not run as-is in PowerShell — command substitution, test -n, and line-continuation syntax all differ):
--commit filters server-side to runs for that exact commit, so --limit=1 is safe here — unlike an unfiltered gh run list --limit=1, which can return someone else's concurrent run or a stale one.
Then confirm the release exists at the exact tag, with a real changelog body — not an empty one (a broken changelog-builder step still exits 0):
If the workflow's conclusion isn't success, $run_id comes back empty (the push may not have triggered CI yet — wait and re-check, don't assume), or the release body is empty/missing, stop and report the specific failure. Diagnose from the failed run's logs (gh run view <id> --log-failed) and fix forward.
Do not rerun `pnpm run release patch` after the version commit and tag were pushed. It may create the next patch release rather than retrying the failed workflow for the existing tag. Diagnose and fix forward instead.
What's still manual
- Open the draft release on GitHub, skim the changelog you just confirmed is real, publish it.
- Obsidian now runs an automated review on every submitted version (security + code-quality scan, results in minutes) — see https://obsidian.md/blog/future-of-plugins/. Before a first submission, or if you want a pre-check beyond what this repo's own
eslint-plugin-obsidianmdrules already catch, use the developer dashboard's own preview-scan feature on the pushed tag (https://docs.obsidian.md/Plugins/Releasing/Submission+requirements+for+plugins) — it's the same scanner that gates review, and nothing local can fully replicate it. - First release only: submit the plugin to the community catalog per https://docs.obsidian.md/Plugins/Releasing/Submit+your+plugin.
If preversion fails
Nothing was tagged or pushed — fix the failure, rerun pnpm run release <bump>. Don't hand-bump manifest.json/versions.json to route around a failure; that's exactly the drift release-check.mjs and this whole chain exist to catch.
Security
- Security scanPassed, 90 of 100Pattern checks on the skill's files.
- Model reviewPassed
Quality evaluation
- Task evaluationNot runNo evaluation yet. Run one in Skill Studio.
Source
- SKILL.md in the repositoryChecking.ai/skills/releasing-an-obsidian-plugin/SKILL.md
Popularity
- 7-day trend score
- 0
Not refreshed yet.
Works with
Any agent vskill installs to: 56 targets in all. These 39 have a page on this site.
- Claude Code
- Cursor
- GitHub Copilot
- Windsurf
- Codex
- Gemini CLI
- Cline
- Amp
- Roo Code
- Goose
- Continue
- Kilo Code
- Junie
- Trae
- OpenHands
- Qwen Code
- AI Agent
- Tabnine Chat
- Sourcegraph Cody
- Amazon Q
- Firebase Genkit
- Sweep
- Devin
- Phind
- Mentat
- Claude Desktop
- Aider
- GPT Pilot
- Plandex
- bolt.new
- v0
- Replit Agent
- Anse
- TypingMind
- BetterChatGPT
- LibreChat
- Warp AI
- Pieces
- Fig AI
Embed badge
[](https://verified-skill.com/skills/flowing-abyss/obsidian-bases-structure/releasing-an-obsidian-plugin)