agentleFS
d-oitd-oit/rust-2026-template/.agents/skills/release-rust/SKILL.md

release-rust

Skill15 starsChanged 5 months agoMITView on GitHub

Create and publish a new release of the Rust project. Handles version bumping, changelog, tagging, and GitHub Release creation via CI. Use when preparing a release, tagging a version, or publishing to crates.io. Triggers: "release", "publish crate", "new version", "bump version".

  • Commits and pushes

The file

We split this skill into the rules it gives an agent

3 rules. About 0 are common, 3 are distinctive, and 0 are very specific to this project.

  • ≈0

    Common · estimate

    Many files like this have a rule of this kind.

  • ≈3

    Distinctive · estimate

    This author's own choices. Worth a look.

  • 0

    Very specific

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

  • Common
  • Distinctive
  • Very specific
  1. Distinctive:

    Create and publish a new release of the Rust project.

    line 21
  2. Distinctive:

    All CI checks pass on main

    line 25
  3. Distinctive:

    Before the very first publish, confirm the crate name is not already taken:

    line 33

≈ “Common” is an estimate: at least 1 in 5 of the 350,495 skill files we read have a rule of the same kind, not the same words. “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

Skill: release-rust

Purpose

Create and publish a new release of the Rust project.

Prerequisites

  • All CI checks pass on main
  • CHANGELOG.md updated
  • cargo-dist installed

Steps

0. Verify crate name availability on crates.io (FIRST TIME PUBLISH ONLY)

Before the very first publish, confirm the crate name is not already taken:

# Check via cargo search
cargo search <your-crate-name>

# Or via API (404 = available, 200 = taken)
curl -s https://crates.io/api/v1/crates/<your-crate-name> | python3 -m json.tool | grep '"name"'

# Or open in browser: https://crates.io/crates/<your-crate-name>

See .agents/skills/crates-io-name-check/SKILL.md for full naming guidance and best practices.

Do not proceed with publishing if the name is taken — choose a unique name first.

1. Pre-release checks

cargo fmt --all -- --check
cargo clippy --workspace --all-targets --all-features -- -D warnings
cargo nextest run --all-features
cargo audit && cargo deny check

2. Bump version in Cargo.toml

cargo update --workspace

3. Commit and tag

git add Cargo.toml Cargo.lock CHANGELOG.md
git commit -m "chore: release vX.Y.Z"
git tag -a vX.Y.Z -m "Release vX.Y.Z"
git push origin main --tags

4. GitHub Release via CI

Pushing a tag triggers .github/workflows/release.yml:

  • Release Preflight: Verifies that the tag matches v$(cat VERSION), checks that the release does not already exist, and asserts manifest consistency.
  • Release Gates: Runs release-tier quality checks.
  • Changelog: Generated using git-cliff as the canonical source of truth for release notes.
  • Dist Build: Builds binaries for all targets via cargo-dist with CycloneDX SBOM and cargo-auditable.
  • Attestations: Generates signed GitHub build provenance attestations for all release artifacts.
  • Creates GitHub Release: Publishes the release with assets.
  • Optionally publishes to crates.io.

5. Verifying Release Attestations

Consumers can verify artifact integrity and build provenance using the GitHub CLI:

gh attestation verify <binary-archive-or-file> --owner d-oit

Version Scheme

  • MAJOR.MINOR.PATCH (Semantic Versioning)
  • Breaking = MAJOR, features = MINOR, fixes = PATCH

Success Criteria

  • Tag on GitHub
  • Release with binaries created
  • CHANGELOG updated
  • Crate name verified unique on crates.io (first publish)

Rationalizations

RationalizationReality
"I'll skip the pre-release checks to save time."Publishing broken code breaks downstream users. Always run the full check suite.
"The changelog can be updated after release."Users read the changelog to understand what changed. Update it before tagging.
"I'll just push the tag directly."Use git tag -a with a message. Tags without messages are unhelpful in history.

Red Flags

  • Pushing a tag without running pre-release checks
  • Bumping the version without updating CHANGELOG.md
  • Publishing to crates.io without verifying crate name availability

References

GH CLI Usage

Post-release failure tracking uses gh issue create directly:

# Create a DORA FDRT tracking issue on release failure
gh issue create \
  --title "🚨 Release vX.Y.Z failed post-release health check" \
  --label "hotfix,release-failure" \
  --body-file .github/ISSUE_TEMPLATE/release-failure.md

This is preferred over actions/github-script for single-purpose issue creation.

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.