This document describes the automatic semantic versioning and release process for the zigeth library.
The zigeth library uses semantic versioning (SemVer) and automatic releases triggered on merges to the master branch.
Versions follow the format: vMAJOR.MINOR.PATCH
- MAJOR: Breaking changes or significant new features
- MINOR: New features, backward compatible
- PATCH: Bug fixes, documentation updates
Examples: v0.1.0, v1.2.3, v2.0.0
- Merge to Master: When a PR is merged to
master, the workflow checks if a release should be created - Version Determination: Automatically determines version bump based on commit messages
- Tag Creation: Creates a git tag with the new version
- Build: Builds release artifacts for all platforms (Linux, macOS, Windows)
- Release: Creates a GitHub release with artifacts and changelog
- Version Update: Updates
build.zig.zonwith the new version
A release is automatically triggered when:
- β
A pull request is merged to
master(merge commit detected) - β
Commit message contains
[release],[major],[minor], or[patch] - β
Conventional commit prefixes are used:
feat:,fix: - β Manual workflow dispatch
To skip automatic release on merge:
- Add
[skip release],[no release], or[skip ci]to commit message
Example:
git commit -m "docs: update README [skip release]"
The type of version bump is determined from the commit message:
[major] Complete API redesign
BREAKING CHANGE: Removed deprecated functions
[minor] Add WebSocket provider
feat: Implement middleware layer
feature: Add hardware wallet support
[patch] Fix memory leak in RLP decoder
fix: Correct gas estimation calculation
bugfix: Handle edge case in signature verification
The workflow supports conventional commit prefixes:
feat:orfeature:β MINOR bumpfix:orbugfix:β PATCH bumpBREAKING CHANGE:β MAJOR bump[major],[minor],[patch]β Explicit bump
You can manually trigger a release from the GitHub Actions UI:
- Go to Actions β Automatic Release on Master
- Click Run workflow
- Select branch:
master - Choose version bump:
major,minor, orpatch - Click Run workflow
Each release includes:
- Linux x86_64:
zigeth-linux-x86_64.tar.gz - Linux ARM64:
zigeth-linux-aarch64.tar.gz - macOS x86_64:
zigeth-macos-x86_64.tar.gz - macOS ARM64:
zigeth-macos-aarch64.tar.gz - Windows x86_64:
zigeth-windows-x86_64.zip
Automatically generated including:
- Changelog of commits since last release
- Project status and statistics
- Module completion status
- Quick start guide
- Installation instructions
The current version is stored in:
- VERSION file:
VERSION(plain text:0.1.0) - build.zig.zon:
.version = "0.1.0" - Git tags:
v0.1.0
The workflow automatically:
- Reads the latest git tag
- Determines the version bump
- Calculates the new version
- Updates
build.zig.zon - Commits the update with
[skip ci] - Creates and pushes the new tag
- Triggers the release build
Main workflow that:
- Determines if release should happen
- Calculates new version
- Creates git tag
- Builds artifacts
- Creates GitHub release
- Updates version in code
Called when tags are pushed:
- Builds release artifacts
- Creates GitHub release
- Can also be triggered manually
Runs on every PR:
- Linting
- Testing
- Build verification
- Documentation generation
Before merging to master:
- All tests passing
- Code formatted (
zig build fmt) - Linting clean (
zig build lint) - Documentation updated
- CHANGELOG updated (optional)
- Commit message follows conventions
git commit -m "feat: Add WebSocket subscription support"
git push origin feature-branch
# After PR merge to master:
# β Automatically releases v0.2.0 (if current is v0.1.0)git commit -m "fix: Correct nonce calculation in pending transactions"
git push origin bugfix-branch
# After PR merge to master:
# β Automatically releases v0.1.1 (if current is v0.1.0)git commit -m "refactor: Redesign wallet API
BREAKING CHANGE: Wallet.init() now requires SignerConfig parameter"
git push origin breaking-change
# After PR merge to master:
# β Automatically releases v1.0.0 (if current is v0.1.0)git commit -m "docs: Fix typo in README [skip release]"
git push origin docs-update
# After PR merge to master:
# β No release createdView release status at:
- Actions: https://github.com/ch4r10t33r/zigeth/actions
- Releases: https://github.com/ch4r10t33r/zigeth/releases
- Tags: https://github.com/ch4r10t33r/zigeth/tags
GitHub will:
- Create a release on the Releases page
- Send notifications to watchers
- Update the latest release badge
- Make artifacts available for download
Check if:
- Commit message contains skip keywords
- Workflow has correct permissions
- Branch protection rules are configured
- GitHub Actions are enabled
- Check Actions logs for errors
- Verify Zig version compatibility
- Ensure all tests pass in CI
- Check for platform-specific issues
If a version already exists:
- The workflow will fail
- Manually delete the tag:
git push --delete origin vX.Y.Z - Re-run the workflow
- Semantic Versioning: https://semver.org/
- Conventional Commits: https://www.conventionalcommits.org/
- GitHub Actions: https://docs.github.com/en/actions
- Zig Build System: https://ziglang.org/learn/build-system/
The library is currently at v0.1.0 (initial development release) with:
- β 334 tests passing
- β 12/12 modules complete
- β 100% feature complete
- β Production-ready
Ready for the Ethereum ecosystem! π