Skip to content

Latest commit

 

History

History
73 lines (49 loc) · 1.77 KB

File metadata and controls

73 lines (49 loc) · 1.77 KB

Contributing

Commits

Use conventional commits:

<type>(<scope>): <subject>

Types: feat, fix, perf, refactor, docs, test, chore, style, ci

Subject: imperative mood, 50 chars max, no period.

AI-authored commits should be prefixed with claude: before the type (e.g. claude: feat(parser): add range expressions). The changelog tooling strips this prefix automatically.

Releasing

Releases are managed by scripts/release.sh and a GitHub Actions workflow.

Prerequisites

  • On the main branch with a clean working tree
  • All CI checks passing

Steps

cd specl

# 1. Run the release script with the new version
./scripts/release.sh 0.2.0

# This will:
#   - Validate semver format (X.Y.Z)
#   - Update version in workspace Cargo.toml (workspace.package.version + dependency versions)
#   - Run cargo check --workspace
#   - Create commit: chore(release): v0.2.0
#   - Create annotated tag: v0.2.0

# 2. Review the commit
git log -1
git diff HEAD~1

# 3. Push to trigger the release workflow
git push && git push --tags

Pushing the tag triggers .github/workflows/release.yml which:

  1. Runs the full CI suite (fmt, clippy, tests)
  2. Cross-compiles specl for 4 targets (x86_64/aarch64 Linux and macOS)
  3. Generates release notes from the changelog (git-cliff --latest)
  4. Creates a GitHub Release with the binaries as tarballs

Changelog

The changelog is generated by git-cliff from conventional commits. Configuration is in specl/cliff.toml.

To preview the changelog locally:

cd specl
git cliff          # print to stdout
git cliff --latest # only the latest tag range

To regenerate the full CHANGELOG.md:

cd specl
git cliff --output CHANGELOG.md