pre-release

Run a comprehensive pre-release validation checklist for bashdep

SKILL.md

GitHub

Pre-Release Validation

Run all checks before releasing a new bashdep version.

Checklist

1. Version Consistency

grep -n 'BASHDEP_VERSION="' bashdep
awk '/^## \[/{print; exit}' CHANGELOG.md
git tag --list --sort=-v:refname | head -3

bashdep's BASHDEP_VERSION is the source of truth. The release script bumps it; verify it matches the intended target version.

2. Full Test Suite

make test

Run 3-5 times to catch flaky tests. All must pass.

3. Static Analysis & Lint

make sa      # ShellCheck - zero warnings
make lint    # editorconfig-checker - clean

4. Documentation

  • CHANGELOG.md ## [Unreleased] section is complete and reflects every user-visible change since the last tag
  • docs/api.md reflects every public bashdep::* function
  • docs/behavior.md reflects current lockfile / dev-dep / error semantics
  • docs/releasing.md is current
  • README.md examples copy-paste cleanly
  • No remaining TODO / FIXME in docs

5. Bash 3.2+ Compatibility (must return no results)

grep -nE 'declare -A' bashdep
grep -nE '\$\{[A-Za-z_][A-Za-z0-9_]*,,\}'  bashdep
grep -nE '\$\{[A-Za-z_][A-Za-z0-9_]*\^\^\}' bashdep
grep -nE '\bmapfile\b|\breadarray\b' bashdep
grep -nE '&>>' bashdep
grep -nE '\$\{[A-Za-z_][A-Za-z0-9_]*\[-1\]\}' bashdep

6. Runtime Dependency Audit

grep -nwE 'jq|python|node|yq' bashdep || echo "OK"

Library code must only call curl / awk / mktemp / POSIX builtins.

7. Mode-Flag Coverage

Every public mutating command honors BASHDEP_DRY_RUN, BASHDEP_SILENT, BASHDEP_VERBOSE, BASHDEP_FORCE. Spot-check each in the test suite:

grep -nE 'BASHDEP_(DRY_RUN|SILENT|VERBOSE|FORCE)=true' tests/unit/bashdep_test.sh

8. Release Script Dry Run

./release.sh --dry-run

Verify:

  • Version bump target matches expectation
  • CHANGELOG roll preview is correct
  • Compare links at the bottom of CHANGELOG would update correctly

9. Breaking Changes

Review git log <last-tag>..HEAD for any breaking changes. Each must be called out in CHANGELOG.md under ### Changed or ### Removed with a brief migration note.

10. Git & CI Status

  • Working tree clean (git status --short empty)
  • On main
  • All CI checks green: gh run list --limit 5 --branch main
  • Target tag does not yet exist: git tag --list <X.Y.Z> returns empty

11. Smoke Test

( cd "$(mktemp -d)" \
  && cp /path/to/bashdep . \
  && source ./bashdep \
  && bashdep::version )

Output

Report each check as ✅ pass / ❌ fail / ⚠️ warning. Only proceed to /release when all checks are ✅.