5.2 KiB
Meilisearch release process
This guide is to describe how to make releases for the current repository.
📅 Weekly Meilisearch release
- A weekly meeting is done every Monday to define the release and to ensure minimal checks before the release.
Check out the TODO 👇👇👇
- [ ] Define the version of the release (`vX.Y.Z`) - [ ] Manually test `--experimental-dumpless-upgrade` on a DB of the previous Meilisearch minor version- [ ] Check recent automated tests on `main`
- [ ] Scheduled test suite
- [ ] Scheduled SDK tests
- [ ] Scheduled flaky tests
- [ ] Scheduled fuzzer tests
- [ ] Scheduled Docker CI (dry run)
- [ ] Scheduled GitHub binary release (dry run)
- [ ] Create the PR updating the versionand merge it.
-
Go to the GitHub interface, in the
Release
section. -
Select the already drafted release or click on the
Draft a new release
button if you want to start a blank one, and fill the form with the appropriate information. ⚠️ Publish onmain
⚙️ The CIs will be triggered to:
- Upload binaries to the associated GitHub release.
- Publish the Docker images (
latest
,vX
,vX.Y
andvX.Y.Z
) to DockerHub -> check the "Docker meta" steps in the CI to check the right tags are created - Publish binaries for Homebrew and APT
- Move the
latest
git tag to the release commit.
🔥 How to do a patch release for an hotfix
It happens some releases come with impactful bugs in production (e.g. indexation or search issues): we obviously don't wait for the next cycle to fix them and we release a patched version of Meilisearch.
- Create a new release branch starting from the latest stable Meilisearch release (
latest
git tag or the correspondingvX.Y.Z
tag).
# Ensure you get all the current tags of the repository
git fetch origin --tags --force
# Create the branch
git checkout vX.Y.Z # The latest release you want to patch
git checkout -b release-vX.Y.Z+1 # Increase the Z here
git push -u origin release-vX.Y.Z+1
-
Change the version in
Cargo.toml
file. You can use our automation -> click onRun workflow
-> Fill the appropriate version and run it on the newly created branchrelease-vX.Y.Z
-> Click on "Run workflow". A PR updating the version in theCargo.toml
andCargo.lock
files will be created. -
Open and merge the PRs (fixing your bugs): they should point to
release-vX.Y.Z+1
branch. -
Go to the GitHub interface, in the
Release
section and click onDraft a new release
⚠️⚠️⚠️ Publish onrelease-vX.Y.Z+1
branch, not onmain
!
⚠️ If doing a patch release that should NOT be the latest
release:
- Do NOT check
Set as the latest release
when creating the GitHub release. If you did, quickly interrupt all CIs and delete the GitHub release! - Once the release is created, you don't have to care about Homebrew, APT and Docker CIs: they will not consider this new release as the latest; the CIs are already adapted for this situation.
- However, the CI updating the
latest
git tag is not working for this situation currently and will attach thelatest
git tag to the just-created release, which is something we don't want! If you don't succeed in stopping the CI on time, don't worry, you just have to re-run the old CI corresponding to the real latest release, and thelatest
git tag will be attached back to the right commit.
- Bring the new commits back from
release-vX.Y.Z+1
tomain
by merging a PR originatingrelease-vX.Y.Z+1
and pointing tomain
.
⚠️ If you encounter any merge conflicts, please do NOT fix the git conflicts directly on the release-vX.Y.Z
branch. It would bring the changes present in main
into release-vX.Y.Z
, which would break a potential future patched release.
Instead:
- Create a new branch originating
release-vX.Y.Z+1
, liketmp-release-vX.Y.Z+1
- Create a PR from the
tmp-release-vX.Y.Z+1
branch and pointing tomain
- Fix the git conflicts on this new branch
- By either fixing the git conflict via the GitHub interface
- By pulling the
main
branch intotmp-release-vX.Y.Z+1
and fixing them on your machine.
- Merge this new PR into
main