release
Run pre-release validation and execute the release process via release.sh
SKILL.md.claude/skills/release/SKILL.md
GitHubRelease
Run pre-release checks then cut a new bashdep release via release.sh.
Arguments
$ARGUMENTS- Optional. Either an explicit version (0.5.0) or a bump flag (--major,--minor,--patch). Default:release.shauto-bumps the minor version.
Current State
- Current version: !
grep -o 'BASHDEP_VERSION="[^"]*"' bashdep | cut -d'"' -f2 - Branch: !
git branch --show-current - Working tree: !
git status --short - Unreleased changes: !
awk '/^## \[Unreleased\]$/,/^## \[/' CHANGELOG.md | head -40
Instructions
1. Pre-flight validation
Run /pre-release first, or replay the critical checks here:
make test
make sa
make lint
grep -nE 'declare -A|mapfile|\$\{[A-Za-z_][A-Za-z0-9_]*,,\}' bashdep || echo "Bash 3.2+: OK"
gh run list --limit 3 --branch main
git status --short
git branch --show-current
If ANY check fails, stop and report. Do NOT proceed to release.
2. Confirm with user
Show a summary:
- Current version → target version (resolved from
$ARGUMENTS) - Key entries from
CHANGELOG.md## [Unreleased](abbreviated) - All checks passed
Ask the user to confirm before running release.sh.
3. Dry-run the release
Always preview first - release.sh is idempotent in dry-run mode:
./release.sh $ARGUMENTS --dry-run
Show the user the proposed:
- Version bump
- CHANGELOG diff (renamed
[Unreleased]section + new compare links) - Tag name
Ask for explicit confirmation before the real run.
4. Execute release
./release.sh $ARGUMENTS
release.sh will:
- Validate the version is semver and greater than current
- Confirm clean
main, tag does not exist - Bump
BASHDEP_VERSIONinbashdep - Roll
CHANGELOG.md: rename[Unreleased]→[X.Y.Z] - YYYY-MM-DDand refresh compare links - Run
make test sa lintas a release gate - Commit
chore(release): X.Y.Zand tagX.Y.Z - Push commit + tag to the remote
- Create the GitHub release via
gh release createand attach thebashdepscript as the downloadable asset
The release URL is printed at the end.
5. Post-release verification
git log --oneline -1
git tag --list --sort=-v:refname | head -1
gh release view "$(git tag --list --sort=-v:refname | head -1)"
Verify:
- Latest commit is
chore(release): X.Y.Z - Latest tag matches the target version
- GitHub release page lists the
bashdepasset
Report the release URL to the user.
Useful flags
./release.sh --dry-run # preview, no changes
./release.sh --patch # auto-bump patch
./release.sh --major # auto-bump major
./release.sh 0.5.0 # explicit version
./release.sh --no-gh # skip GitHub release (still push tag)
./release.sh --force # skip "Release X.Y.Z?" prompt (CI)
Example Usage
/release
/release --patch
/release 0.5.0