Testing a Release
To build a test release without publishing (Ubuntu Linux only), first ensure that themusl-tools and snapcraft packages are installed:
Publishing a Release
Publish a new release by creating and pushing a tag:- Builds archives, packages, and snaps for all supported platforms
- Creates a new GitHub Release
- Publishes to package repositories
- Deploys the website
Distribution Channels
Snaps
Publishing Snaps requires aSNAPCRAFT_STORE_CREDENTIALS repository secret.
Credential Expiration
Snapcraft store credentials periodically expire. This is visible in the release GitHub Action reporting:Refreshing Credentials
Create new snapcraft store credentials by running:Homebrew
Homebrew automation automatically detects new releases of chezmoi within a few hours and opens a pull request in github.com/Homebrew/homebrew-core to bump the version. If needed, the pull request can be created manually:Scoop
chezmoi is in Scoop’s Main bucket. Scoop’s automation automatically detects new releases within a few hours.Signing
chezmoi uses GoReleaser’s support for signing to sign the checksums of its release assets with cosign.Security Details
Key Generation
Key Generation
- The cosign private key was generated with cosign v1.12.1
- Generated on a private recently-installed Ubuntu 22.04.1 system
- Single user system with all available updates applied
Key Protection
Key Protection
- The private key uses a long (more than 32 character) password
- Password generated locally by a password manager
- The password-protected private key is stored in chezmoi’s public GitHub repo
- The private key’s password is stored as a GitHub Actions secret
- Only available to the
releasestep ofreleasejob of themainworkflow
Public Key Distribution
Public Key Distribution
- The cosign public key is included in the release assets
- Also uploaded to https://chezmoi.io/cosign.pub
- Served by GitHub pages
- Has equivalent security to the GitHub Releases page
Verifying Releases
Users can verify release checksums using cosign:Release Checklist
Before creating a release:- All tests pass on main branch
- Documentation is up to date
- CHANGELOG is updated
- Version number follows semantic versioning
- No open critical issues
- GitHub Release is created successfully
- All distribution formats are available
- Checksums are signed
- Website is deployed
- Package repositories are updated
See Also
- Packaging - Guidelines for packaging chezmoi
- Install Script - Install script generation