Release
| This documentation was generated with the assistance of AI. Please report any inaccuracies. |
Convert the current development version into a final release: cut a release_x.y.z branch off develop,
update every place that names the current release/pre-release version, draft the "what’s new" notes, and open a
pull request. This mirrors the repository’s existing release history (release_1.0.0 … release_1.3.0, each a
PR into main) — it follows that gitflow convention rather than inventing its own.
Purpose
iru-release automates the mechanical parts of cutting a release so nothing gets missed or drifts out of sync,
and it is ecosystem-agnostic: it detects whether the repository is Java/Kotlin JVM (Maven or Gradle, including Spring
Boot and Quarkus), TypeScript/npm (including NestJS and Next.js), React Native (Expo or bare CLI/Metro), Android/Gradle, Kotlin
Multiplatform (Android + iOS), Swift/Apple (including macOS desktop apps), .NET (including Windows desktop apps), PHP/Composer
(including WordPress and PrestaShop), Python (FastAPI, Django, plain package), Rust/Cargo, or Go modules (command-line tools included — Rust, Go, Swift and .NET CLIs map to their ecosystem’s key), and delegates the actual version-file edit to that ecosystem’s own installed iru-<key>-bump-version
skill (iru-java-bump-version, iru-typescript-bump-version, iru-react-native-bump-version,
iru-android-bump-version, iru-kmp-bump-version, iru-swift-bump-version, iru-dotnet-bump-version, iru-php-bump-version,
iru-python-bump-version, iru-rust-bump-version, iru-go-bump-version) rather than editing build files directly. It still owns every other release step itself: the human-readable release
notes (whats-new.adoc and CHANGELOG.md), and the pull request — opened against whichever host the repository
actually uses (GitHub, Bitbucket, Azure DevOps, or TFS) — that carries the release branch into main/master. It
is strict about gitflow — it refuses to run from anywhere but develop — so the release branch always originates
from the same integration branch this repository’s history already shows it does.
Plugin
Shipped by the iru-core plugin of the ai-catalog marketplace (install with /plugin install iru-core@ai-catalog; see Plugins).
Inputs
| Argument | Required | Description | Default |
|---|---|---|---|
Release version |
Yes (asked interactively) |
The version to cut, chosen via |
Current pre-release value with its suffix stripped (e.g. Java/Android/KMP |
Upcoming pre-release version |
Yes (asked interactively) — skipped for a Swift library, which has no in-tree pre-release marker |
The next development version, chosen via |
Minor bump on the release version, with the ecosystem’s pre-release suffix appended (e.g. Java/Android/KMP release
|
Outputs
-
A pushed
release_<version>branch, branched fromdevelop. -
The version file(s) for the detected ecosystem bumped to the release version by the matching
iru-<key>-bump-versionskill (called withsync-files: yes), which also refreshesREADME.md,docs/antora.yml, and any Antora page with a dependency snippet to show the release version as "latest release". If no matching bump-version skill is installed, this happens by hand instead and the final report says so. -
docs/modules/ROOT/pages/whats-new.adocwith a new, newest-first section for the release, andCHANGELOG.mdwith[Unreleased]renamed to the release’s dated section (Keep a Changelog format) and a fresh empty[Unreleased]above it. -
A commit on the release branch, and a pull request opened against
main/master— using whichever host tooling matches this repository (GitHub, Bitbucket, Azure DevOps, or TFS) — titledRelease <version>, carrying areleaselabel/tag where the host supports one, and a description filled in from the actual diff. -
A final report naming the detected ecosystem and bump-version skill used, the versions chosen, the branch/PR and host, the files touched, and — whenever this repository has a
.github/workflows/sync.yml(everyiru-setup-<stack>-github-workflowsskill generates one, whatever the ecosystem) — a reminder that merging and publishing the release triggers that workflow’s automatic next-development-version bump back intodevelop; otherwise a plain statement that no such automation ran and the next-dev bump is a manual follow-up. -
If run from any branch other than
develop: no files are touched at all — the skill stops at Step 1.
Execution flow
Dependencies
Invokes
-
Java Bump Version, TypeScript Bump Version, React Native Bump Version, Android Bump Version, KMP Bump Version, Swift Bump Version, .NET Bump Version, PHP Bump Version, Python Bump Version, Rust Bump Version, Go Bump Version — Step 6, whichever one matches the ecosystem detected in Step 2 (Java/Kotlin JVM on Maven or Gradle, TypeScript/npm, React Native —
package.jsonwith areact-native/expodependency, whose bump skill also owns the store-facing version (app.jsonexpo.versionfor Expo,android/app/build.gradleplus the iOSMARKETING_VERSIONfor Metro) —, Android/Gradle, Kotlin Multiplatform (a Gradle build applying the multiplatform plugin with iOS targets; readsVERSION_NAMEin the rootgradle.properties), Swift/Apple (amacos-apptoo), .NET (windows-appanddotnet, or a.slnx/.sln,Directory.Build.propsor.csproj; its bump skill ownsDirectory.Build.props’ `<Version>plus the four-part MSIXIdentity VersioninPackage.appxmanifest/packaging/AppxManifest.xml), PHP/Composer/WordPress/PrestaShop, Python viapyproject.toml, Rust viaCargo.toml([package]or[workspace.package]version), or Go viago.mod(theVersionliteral ininternal/version/version.go); command-line tools resolve by their language —cli-tool (swift)uses the Swift bump skill and itsVersion.swiftliteral,cli-tool (dotnet)the .NET one). When the React Native or KMP bump skill isn’t installed, detection falls back totypescript/androidrespectively and the final report warns that the store-facing or iOSMARKETING_VERSIONmust be updated by hand. The installed candidates are read from the skills available in the session (names matchingiru--bump-version, which works for copied skills and for plugin installs where.claude/skillsdoes not exist), corroborated withfind .claude/skills -maxdepth 1 -type d -name "iru-*-bump-version"when that directory exists, rather than assumed, and the matching one is invoked withsync-files: yesso it also refreshesREADME.md/docs/antora.yml/Antora dependency-snippet pages itself —iru-releaseno longer does that work directly. If no matching skill is installed,iru-releasefalls back to bumping the version file(s) by hand and says so in the final report. -
PR Description — Step 11, passing the release PR’s target branch as a
base-branchargument so the description is drafted against the branch the PR actually targets, to draft and fill in the release pull request’s description once it has been opened in Step 10.
iru-release does not invoke Setup Changelog even though both skills touch CHANGELOG.md.
iru-setup-changelog is a one-time bootstrap for a repository that has no changelog yet; iru-release composes and
edits CHANGELOG.md directly itself on every run (Step 7), since by the time a repository is cutting releases
the changelog already exists and just needs its [Unreleased] section turned into a dated release entry.
Invoked by
None — iru-release is a top-level entry point, run directly by a person via /iru-release.
Related agents
-
iru-change-summarizer— Step 7, to summarize the commit/diff range since the previous release into user-facing changes forwhats-new.adoc/CHANGELOG.md, keeping the rawgit log/diff content out of this skill’s own context — the same agentiru-setup-changeloguses, applied here to a single range instead of a fan-out across many past releases.
Source
SKILL.md on GitHub — the file this page was generated from.