agentleFS
Fu-JieFu-Jie/openwebui-extensions/.github/skills/release-prep/SKILL.md

release-prep

Skill326 starsChanged 8 months agoMITView on GitHub

Orchestrates the full release preparation flow for a plugin — version sync across 7+ files, bilingual release notes creation, and commit message drafting. Use before submitting a PR. Does NOT push or create a PR; that is handled by pr-submitter.

  • Commits and pushes

23 other projects use a version of this.

Adopted by

Most recently taken up by

The file

Show its rules and text

We split this skill into the rules it gives an agent

18 rules. 0 are common, 11 are distinctive, and 7 are very specific to this project.

  • 0

    Common

    Most of the 20 edited versions we read keep these.

  • 11

    Distinctive

    This author's own choices. Worth a look.

  • 7

    Very specific

    Tied to their project's names, files or tools. Probably skip.

  • Common
  • Distinctive
  • Very specific
  1. Very specific:

    Never be committed to git (add .temp/ to .gitignore)

    line 28
  2. Distinctive:

    Ask the user (or infer from current state) the following:

    line 36
  3. Very specific:

    If a What's New section already exists in README.md, extract it as the source of truth.

    line 41
  4. Distinctive:

    Verify AND update the version string in all of the following.

    line 45
  5. Very specific:

    Use today's date (YYYY-MM-DD) for the badge.

    line 61
  6. Very specific:

    Update these 4 files' What's New / 最新更新 block consistently:

    line 67
  7. Distinctive:

    Create two versioned release notes files:

    line 75
  8. Distinctive:

    If a release notes file already exists for this version, update it rather than creating a new one.

    line 90
  9. Distinctive:

    Before commit, cross-check release notes against git diff and ensure no meaningful update is omitted.

    line 102
  10. Distinctive:

    Run the consistency check script:

    line 106
  11. Distinctive:

    If issues are found, fix them before proceeding.

    line 112
  12. Very specific:

    Scope: use plugin folder name (e.g., github-copilot-sdk)

    line 119
  13. Distinctive:

    After user approval (or if user says "commit it"):

    line 127
  14. Very specific:

    When the release was triggered by merging a PR from an external contributor (someone other than Fu-Jie), additional steps are required to …

    line 155
  15. Very specific:

    Add a ## New Contributors section at the bottom of the release notes file, before the footer links:

    line 159
  16. Distinctive:

    If the contributor has prior merged PRs (not a first-timer), use:

    line 167
  17. Distinctive:

    If the contributor is missing, add them following this template (README.md):

    line 183
  18. Distinctive:

    Update the badge count in README.md line 3:

    line 195

“Common” is measured: kept by at least 6 in 10 of the 20 edited versions of this file we could read. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.

Keep what fits and drop the rest. Your version, ready for your agents.
Files
SKILL.md

Release Prep

Overview

This skill drives the complete pre-PR release pipeline. It enforces the repository rule that every release must synchronize the version number and changelog across at least 7 locations before a commit is created.

Scope

This skill covers:

  1. Version sync (delegates detail to version-bumper if needed)
  2. Bilingual release notes file creation
  3. 7-location consistency verification
  4. Conventional Commits message drafting
  5. git add -A && git commit execution

It stops before git push or gh pr create. Use the pr-submitter skill for those steps.

Temporary File Convention

Any temporary files created during release prep (e.g., draft changelogs) must:

  • Be written to the project's .temp/ directory, NOT system /tmp
  • Be cleaned up before commit using rm -f .temp/file_name
  • Never be committed to git (add .temp/ to .gitignore)

Workflow

Step 1 — Collect Release Info

Ask the user (or infer from current state) the following:

  • Plugin name and type (actions / filters / pipes / tools)
  • New version number (e.g., 0.8.0)
  • Key changes in English and Chinese (1-5 bullet points each)

If a What's New section already exists in README.md, extract it as the source of truth.

Step 2 — Sync Version Across 7 Locations

Verify AND update the version string in all of the following. Mark each as ✅ or ❌:

#FileLocation
1plugins/{type}/{name}/{name}.pyversion: in docstring
2plugins/{type}/{name}/README.md**Version:** x.x.x metadata line
3plugins/{type}/{name}/README_CN.md**Version:** x.x.x metadata line
4docs/plugins/{type}/{name}.md**Version:** x.x.x metadata line
5docs/plugins/{type}/{name}.zh.md**Version:** x.x.x metadata line
6docs/plugins/{type}/index.mdversion badge for this plugin
7docs/plugins/{type}/index.zh.mdversion badge for this plugin

Additionally update the root-level updated date badge in:

  • README.md — ![updated](https://img.shields.io/badge/YYYY--MM--DD-gray?style=flat)
  • README_CN.md — same badge format

Use today's date (YYYY-MM-DD) for the badge.

Step 3 — Update What's New (All 4 Doc Files)

The What's New / 最新更新 section must contain only the most recent release's changes. Previous entries should be removed from this section (they live in CHANGELOG or release notes files).

Update these 4 files' What's New / 最新更新 block consistently:

  • plugins/{type}/{name}/README.md
  • plugins/{type}/{name}/README_CN.md
  • docs/plugins/{type}/{name}.md
  • docs/plugins/{type}/{name}.zh.md

Step 4 — Create Bilingual Release Notes Files

Create two versioned release notes files:

Path: plugins/{type}/{name}/v{version}.md Path: plugins/{type}/{name}/v{version}_CN.md

Required Sections

Each file must include:

  1. Title: # v{version} Release Notes (EN) / # v{version} 版本发布说明 (CN)
  2. Overview: One paragraph summarizing this release
  3. New Features / 新功能: Bulleted list of features
  4. Bug Fixes / 问题修复: Bulleted list of fixes
  5. Migration Notes / 迁移说明: Breaking changes or Valve key renames (omit section if none)
  6. Companion Plugins / 配套插件 (optional): If a companion plugin was updated

If a release notes file already exists for this version, update it rather than creating a new one.

Full Coverage Rule (Mandatory)

Release notes must cover all updates in the current release scope and not only headline features.

Minimum required coverage in both EN/CN files:

  • New features and capability enhancements
  • Bug fixes and reliability fixes
  • Documentation/README/doc-mirror updates that affect user understanding or usage
  • Terminology/i18n/wording fixes that change visible behavior or messaging

Before commit, cross-check release notes against git diff and ensure no meaningful update is omitted.

Step 5 — Verify Consistency (Pre-Commit Check)

Run the consistency check script:

python3 scripts/check_version_consistency.py

If issues are found, fix them before proceeding. Do not commit with inconsistencies.

Step 6 — Draft Conventional Commits Message

Generate the commit message following commit-message.instructions.md rules:

  • Language: English ONLY
  • Format: type(scope): subject + blank line + body bullets
  • Scope: use plugin folder name (e.g., github-copilot-sdk)
  • Body: 1-3 bullets summarizing key changes
  • Explicitly mention "READMEs and docs synced" if version was bumped

Present the full commit message to the user for review before executing.

Step 7 — Stage and Commit

After user approval (or if user says "commit it"):

git add -A
git commit -m "<approved commit message>"

Confirm the commit hash and list the number of files changed.


Checklist (Auto-Verify Before Commit)

  • version: in .py docstring matches target version
  • **Version:** in all 4 README/docs files matches
  • Both index.md version badges updated
  • Root README.md and README_CN.md date badges updated to today
  • What's New / 最新更新 contains ONLY the latest release
  • Release notes include all meaningful updates from the current diff (feature + fix + docs/i18n)
  • v{version}.md and v{version}_CN.md created or updated
  • python3 scripts/check_version_consistency.py returns no errors
  • Commit message is English-only Conventional Commits format
  • If release originates from a contributor PR: Contributor attribution section added (see below)

Contributor PR Handling (External Contributor Releases)

When the release was triggered by merging a PR from an external contributor (someone other than Fu-Jie), additional steps are required to ensure proper attribution in both the release notes and the home README.

Step A — Update v{version}.md Release Notes File

Add a ## New Contributors section at the bottom of the release notes file, before the footer links:

## New Contributors

- @{github_username} made their first contribution in #{pr_number} 🎉

If the contributor has prior merged PRs (not a first-timer), use:

## New Contributors

- @{github_username} contributed in #{pr_number}

The workflow (release.yml) will detect and inject this automatically when triggered by push. However, if creating release notes manually (e.g., workflow_dispatch), this section must be added manually.

Step B — Update Home README Contributors Table

Before committing, verify that the contributor appears in both:

  1. README.md — <!-- ALL-CONTRIBUTORS-LIST:START --> table
  2. README_CN.md — corresponding 贡献者 ✨ table
  3. .all-contributorsrc — contributors array

If the contributor is missing, add them following this template (README.md):

<td align="center" valign="top" width="14.28%">
  <a href="https://github.com/{login}">
    <img src="https://avatars.githubusercontent.com/u/{uid}?v=4?s=100" width="100px;" alt="{login}"/>
    <br /><sub><b>{display_name}</b></sub>
  </a>
  <br />
  <a href="https://github.com/Fu-Jie/openwebui-extensions/commits?author={login}" title="Code">💻</a>
</td>

Update the badge count in README.md line 3:

[![All Contributors](https://img.shields.io/badge/all_contributors-N-orange.svg?style=flat-square)](#contributors-)

Also add the contributor to .all-contributorsrc:

{
  "login": "{login}",
  "name": "{display_name}",
  "avatar_url": "https://avatars.githubusercontent.com/u/{uid}?v=4",
  "profile": "https://github.com/{login}",
  "contributions": ["code"]
}

⚠️ Root cause of past incidents: When adding a contributor to an already-patched README, always count existing entries first and set the badge to existing + 1. Never assume the badge number is accurate; verify by counting <td align="center" occurrences.


Anti-Patterns to Avoid

  • ❌ Do NOT add extra features or refactor code during release prep — only version/doc updates
  • ❌ Do NOT push or create PR in this skill — use pr-submitter
  • ❌ Do NOT use today's date in commit messages; only in badge URLs
  • ❌ Do NOT leave stale What's New content from prior versions
  • ❌ Do NOT assume the current all_contributors badge count is correct — always re-count <td> entries before incrementing

Download now (ZIP)

Does it work?

Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.

No reviews yet

People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.

  • It worked
  • Partly
  • It didn't
What did you use it for? e.g. Reviewing pull requests in a Rails app

Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.

Your trail

Files you open will collect here, so you can find them again.

Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.

Now do this for your own.

Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.