How to Release Fast-LLM: A Step-by-Step Guide¶
This document walks you through the process of creating a new release of Fast-LLM. We follow these steps to keep releasing smooth, consistent, and hassle-free.
Release Policy¶
-
Who's in Charge? Only the maintainer is authorized to create and publish releases. This ensures consistency, quality, and accountability.
-
Teamwork Makes the Dream Work: Contributors with write access can propose changes and prep the repository for a release (steps 1 and 2 below in the "Release Process" section). But tagging and publishing the release? That's the maintainer's job.
-
Versioning Made Simple: Fast-LLM sticks to Semantic Versioning (aka semver). Here's the gist:
- MAJOR versions (like
1.0.0) are for big, stable, feature-complete milestones. Since we're still in pre-1.0 territory, we don't have these yet. - MINOR versions (e.g.,
0.2.0) introduce new features and may include breaking changes, as we are in the pre-1.0 phase of development. While we strive for backward compatibility where feasible, breaking changes are acceptable until we reach 1.0.0. MINOR releases are the main focus of our current development efforts. They're tied to milestones and are released on a regular schedule. - PATCH versions (e.g.,
0.2.1) squash bugs and include small, critical fixes without introducing new functionality. These releases are based on stablemaincommits and are the recommended choice for production-like use cases and important experiments. While we encourage internal and adventurous users to testmain, PATCH releases ensure stability for users who need reliability.
- MAJOR versions (like
-
Milestones are for MINOR Releases: Each milestone corresponds to a MINOR version (
0.2.0,0.3.0, etc.) and includes all issues and pull requests targeted for that release. Milestones have due dates and are used to track progress toward the next MINOR release. PATCH releases? Handled as individual issues or small groups of issues. -
All Roads Lead to
main: Active development happens on themainbranch, which may include breaking changes. For production experiments or stability-critical use cases, use the latest PATCH or MINOR release. Internally, we encourage testingmainto identify issues early, but important experiments should always use tagged releases to ensure reproducibility and compatibility.
Release Process¶
1. Get Ready to Release¶
Before tagging anything, make sure the repository is in tip-top shape:
- Close or defer all issues in the current milestone (where applicable).
- Verify that all targeted pull requests are merged.
-
Double-check the repo:
- All tests should pass.
- The documentation should be up to date.
- Pull requests should have appropriate labels for release notes.
-
Decide if unresolved bugs need fixing before the release.
2. Update the Version¶
-
Update the version in
__init__.pyandsetup.cfg: -
Commit the version bump:
3. Tag It¶
-
Create a new Git tag:
-
Push the tag to GitHub:
4. Draft a Release on GitHub¶
- Head to the Releases section in the Fast-LLM GitHub repository.
- Click Create a new release.
- Under Choose a tag, select the tag you just pushed (e.g.,
v0.2.0). - Use GitHub's automatic release note generation feature by clicking Generate release notes to create release notes based on merged pull requests and commits since the last release.
- Customize the release notes as needed by highlighting key changes and features.
- Activate the Create a discussion for this release option to allow users to ask questions and provide feedback.
- Click Publish release to make the release public.
5. Check the CI/CD Pipeline¶
- Confirm all CI workflows for the tagged version are green (including tests, docker builds, documentation).
- Verify that the release artifacts (e.g., Docker images) are available.
- Ensure updated documentation is live.
6. Post-Release Checklist¶
- Spread the Word: Announce the release across Fast-LLM's communication channels, which includes the GitHub Discussions forum and the discussion thread for the release created in step 4.
-
After the release is before the release: Prep for the next version:
-
Update the
__version__string andsetup.cfgto reflect the next development version (e.g.,0.2.1-dev): -
Commit and push the changes:
-
-
Update milestones:
- Close the milestone for the release (e.g.,
0.2.0). - Create a new milestone for the next MINOR release (e.g.,
0.3.0).
- Close the milestone for the release (e.g.,