diff options
| author | Michelle Tilley <michelle@michelletilley.net> | 2026-04-23 13:43:01 -0700 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2026-04-23 13:43:01 -0700 |
| commit | 461ef4c43589c6ca68176c180fd04f2755c9f036 (patch) | |
| tree | c646ea272d6016533c4941592f9a22baa2a54488 /.atuin | |
| parent | feat: Send user-defined context with `TERMINAL.md` (#3443) (diff) | |
| download | atuin-461ef4c43589c6ca68176c180fd04f2755c9f036.zip | |
feat: Add skill discovery, loading, and invocation (#3444)
Adds a skills system that lets users define reusable LLM instructions as `SKILL.md` files with YAML frontmatter.
Diffstat (limited to '.atuin')
| -rw-r--r-- | .atuin/skills/release/SKILL.md | 210 |
1 files changed, 210 insertions, 0 deletions
diff --git a/.atuin/skills/release/SKILL.md b/.atuin/skills/release/SKILL.md new file mode 100644 index 00000000..e0172476 --- /dev/null +++ b/.atuin/skills/release/SKILL.md @@ -0,0 +1,210 @@ +--- +name: release +description: > + Orchestrate a multi-step Atuin CLI release — version bumping, changelog + generation, PR creation, tagging, and crates.io publishing. Invoke with + /release or /release <version>. +disable-model-invocation: true +argument-hint: [version] +--- + +# Atuin CLI Release + +You are orchestrating a release of the Atuin CLI. Follow the steps below +**in order**, pausing at each checkpoint for user confirmation. Do not skip +steps or combine them. + +## Current State + +- Workspace version: !`sed -n '/^\[workspace\.package\]/,/^\[/s/^version = "\(.*\)"/\1/p' Cargo.toml` +- Latest tag: !`git describe --tags --abbrev=0 2>/dev/null || echo "none"` +- Suggested next version: !`git-cliff --bumped-version 2>/dev/null | sed 's/^v//' || echo "(unknown)"` + +--- + +## Step 1 — Check Dependencies + +Verify these tools are installed: `git`, `gsed`, `cargo`, `gh`, `git-cliff`. + +Use `command -v` for each. If any are missing, report which ones and stop. + +--- + +## Step 2 — Determine Version + +The target version may be provided as `$ARGUMENTS`. If it's empty, use +AskUserQuestion to ask for the new version (show the current state above +for reference). + +After determining the version: +- If it contains a `-` (e.g. `18.15.0-beta.1`), it is a **prerelease**. + Note this — it affects changelog and publish behavior later. +- Show the user: `current → new` and whether it's a prerelease. +- **Checkpoint:** Ask the user to confirm before proceeding. + +--- + +## Step 3 — Set Up Working Directory + +Clone a fresh copy into a temp directory: + +```bash +WORKDIR=$(mktemp -d) +git clone git@github.com:atuinsh/atuin.git "$WORKDIR" +``` + +Print the working directory path so the user can find it if needed. + +NOTE: +ALL subsequent Bash commands run from `$WORKDIR`. + +--- + +## Step 4 — Create Branch & Update Versions + +1. Create a release branch named after the version (no `v` prefix): + `git checkout -b <VERSION>` + +2. Replace the old version with the new one in all `Cargo.toml` files. + **Escape dots** in the old version so sed treats them literally: + + ```bash + VERSION_PATTERN="${OLD_VERSION//./\\.}" + find . -type f -name 'Cargo.toml' -not -path './.git/*' \ + -exec gsed -i "s/$VERSION_PATTERN/$NEW_VERSION/g" {} \; + ``` + +3. Run `cargo check` to update `Cargo.lock`. + +4. Show `git diff --stat` and the version-related lines from the diff: + ```bash + git diff --unified=0 -- '*.toml' | grep -E '^\+.*version' | grep -v '^\+\+\+' + ``` + +5. Verify the workspace version was actually updated by re-reading it + from `Cargo.toml`. + +6. **Checkpoint:** Show the diff summary and ask the user to confirm the + version changes look correct. + +--- + +## Step 5 — Update Changelog + +The changelog strategy differs for prereleases vs stable releases: + +- **Prerelease:** Maintain a running `## [unreleased]` section containing + all changes since the last stable release. Use: + `git-cliff --unreleased --strip all` + (cliff.toml's `ignore_tags` already ignores beta/alpha tags, so + `--unreleased` spans back to the last stable release automatically.) + +- **Stable release:** Generate a versioned entry that replaces the + `[unreleased]` section. Use: + `git-cliff --unreleased --tag "v<VERSION>" --strip all` + +Then update `CHANGELOG.md`: + +1. If an existing `## [unreleased]` or `## [Unreleased]` section exists, + **remove it entirely** (the heading and all content up to the next + `## ` heading). + +2. Insert the new entry before the first existing `## ` version heading. + +3. **Checkpoint:** Read and display the new changelog entry to the user. + Ask if they want any edits. If so, make the requested changes using + the Edit tool. Repeat until they're satisfied. + +--- + +## Step 6 — Commit & Push + +Stage all changes and commit: + +``` +chore(release): prepare for release <VERSION> +``` + +Push the branch with `--set-upstream origin`. + +--- + +## Step 7 — Create PR & Wait for Merge + +### Create the PR + +Extract the changelog entry body (everything between the new `## ` heading +and the next one) for the PR description. + +For prereleases, the heading to match is `## [unreleased]`. +For stable releases, it's `## <VERSION>` (escape dots in the awk pattern). + +Create the PR: +```bash +gh pr create \ + --title "chore(release): prepare for release <VERSION>" \ + --body "<body with changelog>" \ + --repo atuinsh/atuin + --draft +``` + +Show the PR URL to the user. Tell the user to go review and merge the PR. + +When the user reports the PR is merged, proceed to the next step. + +--- + +## Step 8 — Tag Release + +Back in the working directory: + +```bash +git checkout main +git pull +git tag "v<VERSION>" +git push --tags +``` + +Tell the user the tag was pushed and the release CI workflow has been +triggered. + +--- + +## Step 9 — Publish to crates.io + +**If this is a prerelease**, skip this step entirely and tell the user. + +**If this is a stable release**, ask the user whether to publish. + +If yes, publish each crate **in dependency order** using `--no-verify` +(the code already passed CI, and verification fails when crates.io +hasn't indexed a freshly-published dependency yet): + +``` +atuin-common, atuin-client, atuin-ai, atuin-dotfiles, atuin-history, +atuin-nucleo/matcher, atuin-nucleo, atuin-daemon, atuin-kv, +atuin-scripts, atuin-server-database, atuin-server-postgres, +atuin-server-sqlite, atuin-server, atuin-hex, atuin +``` + +For each crate, run from `crates/<name>`: +```bash +cargo publish --no-verify 2>&1 +``` + +If it fails with "already uploaded", report it as a skip (not an error) — +some crates like `atuin-nucleo` are versioned independently and may +already be published at their current version. + +If it fails for any other reason, stop and report the error. + +--- + +## Completion + +Summarize what was done: +- Version released +- PR URL +- Tag name +- Which crates were published (if any) +- Working directory path and how to clean it up (`rm -rf`) |
