agentleFS
Microsoft AzureKnown publisherAzure/azure-sdk-for-rust/.github/skills/prepare-release/SKILL.md

prepare-release

Skill887 starsChanged 29 days agoMITView on GitHub

Prepare one or more crates for a stable or beta (preview) release

47 other projects use a version of this.

Adopted by

Most recently taken up by

Used with

Projects with it also use publish-release, sync-docs and 7 more.

Other files people use alongside this one.

Files found in the same public projects as a version of this one, more often than they turn up anywhere else. Each project counts once, large collections count for less, and this file's own repository is left out.
  • Model Context ProtocolSkill

    publish-release

    Publish a GitHub release for the C# MCP SDK after a prepare-release PR has been merged. Refreshes release notes to include any PRs merged since preparation, warns about version or breaking change impacts from late-arriving PRs, and creates a draft GitHub release. Use when asked to publish a release, finalize a release, create release notes, or complete a release after the prepare-release PR has been merged.

    Also in 3 projects that use this

  • Eipi-TongSkill

    sync-docs

    Update SPEC.md and docs/DECISIONS.md to reflect recent code changes. Use after completing a feature, or when the user says "sync docs", "update the spec", or "log this decision".

    Also in 4 projects that use this

  • thlaureSkill

    review-change

    Use this skill when the user asks for a code review, a correctness pass, a check before PR, or asks whether a Signalist change follows project conventions.

    Also in 3 projects that use this

  • DockerSkill

    fix-issue

    Fix a single GitHub issue end-to-end: triage, research, write the fix, review, and create a PR. Use when asked to fix an issue: "fix issue 1234", "resolve #500", "create a PR for issue 200".

    Also in 4 projects that use this

  • kiminmonacoSkill

    implement-feature

    Guide for implementing features in ClaudeBar following architecture-first design, TDD, rich domain models, and Swift 6.2 patterns. Use this skill when: (1) Adding new functionality to the app (2) Creating domain models that follow user's mental model (3) Building SwiftUI views that consume domain models directly (4) User asks "how do I implement X" or "add feature Y" (5) Implementing any feature that spans Domain, Infrastructure, and App layers

    Also in 3 projects that use this

  • SentrySkill

    write-docs

    Create or update documentation pages for the Abacus docs site. Use when adding new documentation, updating existing pages, or ensuring docs stay in sync with code changes. Ensures pages follow Starlight patterns and build correctly.

    Also in 3 projects that use this

The file

Show its rules and text

We split this skill into the rules it gives an agent

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

  • 0

    Common

    Most of the 46 edited versions we read keep these.

  • 7

    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. Distinctive:

    Use the bundled PowerShell helper for deterministic discovery and edits, then orchestrate the existing build, pack, and release scripts.

    line 8
  2. Distinctive:

    Stable releases must never depend on preview releases: When preparing a stable release, assess dependencies for substantive changes since …

    line 18
  3. Very specific:

    Use the current agent session's artifact directory for -SessionDirectory.

    line 30
  4. Distinctive:

    Keep that directory consistent across repeated calls, including one-crate calls.

    line 31
  5. Very specific:

    Read the resulting decision file.

    line 45
  6. Very specific:

    Keep changed crates' existing path + version dependency wiring.

    line 80
  7. Distinctive:

    Ask before expanding the release set to required unreleased dependencies outside the requested scope.

    line 95
  8. Distinctive:

    Do not fix it by increasing the version.

    line 100
  9. Very specific:

    If any selected crate is in sdk/core or sdk/identity, build the entire workspace, even when that selected crate is unchanged:

    line 120
  10. Very specific:

    Use normal verified packing, without -NoVerify or -Release.

    line 143
  11. Distinctive:

    Stop on build/pack failure, report its cause, and resolve it before preparation.

    line 148
  12. Very specific:

    Only after builds and packing succeed, prepare each candidate in ReleaseOrder (dependencies first), invoking the common script once per …

    line 152
  13. Very specific:

    Use -ServiceDirectory, not -ServiceName.

    line 160
  14. Distinctive:

    If the execution environment cannot expose interactive input, let the user run/confirm this invocation rather than hanging or guessing.

    line 167

“Common” is measured: kept by at least 6 in 10 of the 46 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

Prepare a release

Use the bundled PowerShell helper for deterministic discovery and edits, then orchestrate the existing build, pack, and release scripts. Run from the repository root. Do not publish, create tags, commit, push, or switch branches.

Manifest package versions already represent the next release. Versions are bumped after every release. Never automatically increase a version, strip a beta suffix, or calculate a new release version. Only lower dependency requirements for substantively unchanged crates to their last applicable released versions; leave their own package versions unchanged.

Stable releases must never depend on preview releases. When preparing a stable release, assess dependencies for substantive changes since their last stable release, not their latest preview. A dependency unchanged since a preview may still contain changes that have never shipped in a stable release.

Analyze

  1. Collect one or more service directories (such as core and identity), or explicit package names across services. Ask whether this is a stable or beta release if unspecified. Use the supplied release date, otherwise today's local date in yyyy-MM-dd format. Normalize service paths such as sdk/core to their directory names before passing them to the helper.
  2. Use the current agent session's artifact directory for -SessionDirectory. Keep that directory consistent across repeated calls, including one-crate calls. Run the helper through PowerShell:

    pwsh -File ./eng/scripts/Prepare-Release.Helpers.ps1 -FromSkill `
      -ServiceDirectory core,identity -ReleaseType Stable `
      -SessionDirectory <session-artifact-directory>

    Alternatively, pass -PackageName azure_core,azure_identity instead of -ServiceDirectory. Pass -ReleaseDate yyyy-MM-dd if supplied. Optionally use -PlanPath <session-artifact-directory>/release-core.json to keep multiple analyses. The helper is deliberately non-executable, has no shebang, and refuses to run without -FromSkill: this is an accidental-execution guard.

  3. Read the resulting decision file. The helper enumerates sdk/<service>/*/Cargo.toml or finds package names under sdk/*/*/Cargo.toml, excludes publish = false, and checks package names against directory names. Cargo metadata is isolated behind Get-ReleaseInventory so manifest discovery can replace it later.

The helper fetches tags directly from https://github.com/Azure/azure-sdk-for-rust.git once per successful session and repository combination, regardless of remote names. Repeated calls reuse a session marker; failures do not mark the fetch complete. Never force-overwrite conflicting tags or fall back to stale tags after a failed fetch.

Stable analysis uses the latest stable tag; beta analysis uses the latest stable or prerelease tag. Versions are ordered semantically across all major versions. An unlabeled 0.x tag is a stable SemVer baseline even though Azure release policy treats 0.x as preview. No applicable tag means a first release.

Decide and apply

Compare each baseline to HEAD. Ignore only the crate's own version and empty/re-dated changelog scaffolding. Substantive changelog entries, dependency changes (including inherited workspace dependencies), and other directory changes count. The helper supplies changed paths and dependency relationships; read focused diffs when their significance is ambiguous:

git diff '<baseline-tag>..HEAD' -- sdk/<service>/<crate>

Resolve decision-affecting local edits before applying a HEAD-based analysis; never discard user changes. Preserve unrelated edits.

  • Set Release to false for substantively unchanged crates. Their dependents should use the released baseline, not the next local version. First releases cannot be skipped this way.
  • Keep changed crates' existing path + version dependency wiring. Do not upgrade unrelated registry consumers. Preserve features, default-feature opt-outs, optional flags, and workspace inheritance.
  • Retain dev-only local wiring. When the same package is also a normal/build dependency in a manifest, keep all entries on the same source.
  • Review local dependency relationships before excluding a crate. An otherwise unchanged crate may need to ship a changed dependency. Record a concise DecisionReason for overrides. For core, follow sdk/core/AGENTS.md semver and changelog propagation rules without automatically increasing versions.
  • For a stable release, analyze required dependency crates with -ReleaseType Stable too. Use their last stable versions only when substantively unchanged since those stable tags; otherwise they need a stable release as well. Check all shipped normal/build dependencies, including registry and target-specific entries, for preview requirements. Dev-only dependencies do not affect the published dependency graph.
  • Ask before expanding the release set to required unreleased dependencies outside the requested scope. Re-analyze the expanded selection only after agreement. Do not let packing silently choose additional release candidates.
  • A manifest version inconsistent with the release channel, already released, or not newer than existing releases is a blocker for the user to resolve. Do not fix it by increasing the version.

The agent makes these judgments; do not build a release-decision engine or scripted dialogue. Update only Release and DecisionReason in the session decision file, then apply:

pwsh -File ./eng/scripts/Prepare-Release.Helpers.ps1 -FromSkill `
  -Operation Apply -PlanPath <session-artifact-directory>/prepare-release.json

The helper rejects stale analysis, validates dependency scope, and uses the existing Rust TOML editor to make formatting-preserving edits. It reports ReleaseOrder, WorkspaceBuild, ChangedManifests, and BuildPackages. If dependency decisions need revision, repeat analysis rather than bypassing a blocker. Refresh Cargo.lock if needed using targeted Cargo resolution; do not perform a blanket dependency upgrade.

Build and pack

If any selected crate is in sdk/core or sdk/identity, build the entire workspace, even when that selected crate is unchanged:

cargo build --workspace --all-features --keep-going
cargo build --workspace --all-features --examples --tests --keep-going

Otherwise use BuildPackages to build release candidates and dependent crates whose effective dependency declarations changed, including inherited changes:

./eng/scripts/Build-Crates.ps1 -ManifestDir @('sdk/<service>/<crate>', 'sdk/<service>/<dependent>')
cargo build --package <crate> --package <dependent> --all-features --examples --tests --keep-going

Compile examples and test targets for the same build scope, but do not run SDK tests. Then pack all release candidates together:

./eng/scripts/Pack-Crates.ps1 -PackageName @('<crate>', '<dependency>')

Use normal verified packing, without -NoVerify or -Release. This validates co-released unpublished dependencies using cargo package; -Release instead uses cargo publish --dry-run against registry availability. Confirm the expanded packed set contains no unapproved unpublished dependencies. An empty release set skips packing and preparation, but dependency edits must still build. Stop on build/pack failure, report its cause, and resolve it before preparation.

Prepare and confirm

Only after builds and packing succeed, prepare each candidate in ReleaseOrder (dependencies first), invoking the common script once per crate:

./eng/common/scripts/Prepare-Release.ps1 -ServiceDirectory <service> `
  -PackageName <crate> -ReleaseDate yyyy-MM-dd

Use -ServiceDirectory, not -ServiceName. Always pass the date explicitly so the common script does not choose a scheduled shipping date.

Accept the existing manifest version at the version prompt. Answer predictable prompts only when the evidence settles them. Ask the user before replacing an already-dated changelog entry or answering uncertain prompts, and relay their answer. Never feed an endless stream of defaults or implement a prompt adapter. If the execution environment cannot expose interactive input, let the user run/confirm this invocation rather than hanging or guessing. Track completed crates in the conversation to avoid repeating preparation.

The common script sanitizes changelogs but can merely warn on invalid content. Explicitly check prepared versions, dates, and changelogs:

pwsh -File ./eng/scripts/Prepare-Release.Helpers.ps1 -FromSkill `
  -Operation Validate -PlanPath <session-artifact-directory>/prepare-release.json

Inspect the final diff to confirm dependency edits survived, no package version increased, and no unrelated files changed. If preparation altered manifest or dependency inputs, repeat the affected build and pack checks; otherwise reuse successful results. Report candidates, skipped crates and baselines, dependency changes, release date, and unresolved blockers. Preparation does not publish.

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.