Release process guidance
Pre-reqs
- Make sure you have enterprise remote configured
git remote add enterprise <url> - Make sure you have singing key configured
- Make sure you have github token with at least
read:org, repo, write:packagespermissions exported underGITHUB_TOKENenv variable. You can create token here - Make sure you're authorized for pushing docker images
For MacOS users
Make sure you have GNU version of utilities zip, tar, sha256sum. To install them run the following commands:
brew install coreutils
brew install gnu-tar
export PATH="/usr/local/opt/coreutils/libexec/gnubin:$PATH"
Docker may need additional configuration changes:
docker buildx create --use --name=qemu
docker buildx inspect --bootstrap
For ARM arch (M1/M2 processors) additionally configure docker with preferred platform:
export DOCKER_DEFAULT_PLATFORM=linux/amd64
By default, docker on MacOS has limited amount of resources (CPU, mem) to use. Bumping the limits may significantly improve build speed.
Release version and Docker images
- Make sure all the changes are documented in CHANGELOG.md. Ideally, every change must be documented in the commit with the change. Alternatively, the change must be documented immediately after the commit, which adds the change.
- Make sure all the changes are synced between
master,cluster,enterprise-single-nodeandenteprise-clusterbranches. Changes in these branches must be synced immediately after they are commited in at least a single branch. - Make sure that the release branches have no security issues.
- Update release versions if needed in SECURITY.md.
- Add
(available starting from v1.xx.y)line to feature docs introduced in the upcoming release. - Cut new version in CHANGELOG.md and make it merged. See example in this commit.
- Cherry-pick bug fixes relevant for LTS releases.
- Make sure you get all changes fetched
git fetch --all. - Create the following release tags:
git tag -s v1.xx.yinmasterbranchgit tag -s v1.xx.y-clusterinclusterbranchgit tag -s v1.xx.y-enterpriseinenterprise-single-nodebranchgit tag -s v1.xx.y-enterprise-clusterinenterprise-clusterbranch
- Run
TAG=v1.xx.y make publish-release. This command performs the following tasks: a) Build and package binaries in*.tar.gzrelease archives with the corresponding_checksums.txtfiles insidebindirectory. This step can be run manually with the commandmake releasefrom the needed git tag. b) Build and publish multi-platform Docker images for the givenTAG,TAG-cluster,TAG-enterpriseandTAG-enterprise-cluster. The multi-platform Docker image is built for the following platforms:- linux/amd64
- linux/arm64
- linux/arm
- linux/ppc64le
- linux/386 This step can be run manually with the command
make publishfrom the needed git tag.
- Push the tags
v1.xx.yandv1.xx.y-clustercreated at step 8 to public GitHub repository at https://github.com/VictoriaMetrics/VictoriaMetrics. Push the tagsv1.xx.y,v1.xx.y-cluster,v1.xx.y-enterpriseandv1.xx.y-enterprise-clusterto the corresponding branches in private repository. Important note: do not push enterprise tags to public GitHub repository - they must be pushed only to private repository. - Run
TAG=v1.xx.y make github-create-release github-upload-assets. This command performs the following tasks: a) Create draft GitHub release with the nameTAG. This step can be run manually with the commandTAG=v1.xx.y make github-create-release. The release id is stored at/tmp/vm-github-releasefile. b) Upload all the binaries and checksums created at step9ato that release. This step can be run manually with the commandmake github-upload-assets. It is expected that the needed release id is stored at/tmp/vm-github-releasefile, which must be created at the stepa. If the upload process is interrupted by any reason, then the following recovery steps must be performed:- To delete the created draft release by running the command
make github-delete-release. This command expects that the id of the release to delete is located at/tmp/vm-github-releasefile created at the stepa. - To run the command
TAG=v1.xx.y make github-create-release github-upload-assets, so new release is created and all the needed assets are re-uploaded to it.
- To delete the created draft release by running the command
- Go to https://github.com/VictoriaMetrics/VictoriaMetrics/releases and verify that draft release with the name
TAGhas been created and this release contains all the needed binaries and checksums. - Update the release description with the content of CHANGELOG for this release.
- Publish release by pressing "Publish release" green button in GitHub's UI.
- Bump version of the VictoriaMetrics cluster in the sandbox environment by opening and merging PR.
- Bump VictoriaMetrics version at
deployment/docker/docker-compose.ymland atdeployment/docker/docker-compose-cluster.yml. - Follow the instructions in release follow-up.
Building snap package
pre-requirements:
- snapcraft binary, can be installed with commands: for MacOS
brew install snapcraftand install multipass, for Ubuntu -sudo snap install snapcraft --classic - exported snapcraft login to
~/.snap/login.jsonwithsnapcraft export-login login.json && mkdir -p ~/.snap && mv login.json ~/.snap/ - already created release at github (it operates
git describeversion, so git tag must be annotated).
- checkout to the latest git tag for single-node version.
- execute
make release-snap- it must build and upload snap package. - promote release to current, if needed manually at release page snapcraft-releases
Public Announcement
- Publish message in Slack at https://victoriametrics.slack.com
- Post at Twitter at https://twitter.com/MetricsVictoria
- Post in Reddit at https://www.reddit.com/r/VictoriaMetrics/
- Post in LinkedIn at https://www.linkedin.com/company/victoriametrics/
- Publish message in Telegram at https://t.me/VictoriaMetrics_en and https://t.me/VictoriaMetrics_ru1
- Publish message in Google Groups at https://groups.google.com/forum/#!forum/victorametrics-users
Helm Charts
The helm chart repository https://github.com/VictoriaMetrics/helm-charts/
Bump the version of images
Bump tag field in values.yaml with new release version. Bump appVersion field in Chart.yaml with new release version. Bump version field in Chart.yaml with incremental semver version. Do these updates to the following charts:
- Update
vmagentchart version invalues.yamlandChart.yaml - Update
vmalertchart version invalues.yamlandChart.yaml - Update
vmauthchart version invalues.yamlandChart.yaml - Update
clusterchart versions invalues.yaml, bump version forvmselect,vminsertandvmstorageandChart.yaml - Update
k8s-stackchart versions invalues.yaml, bump version forvmselect,vminsert,vmstorage,vmsingle,vmalert,vmagentandChart.yaml - Update
single-nodechart version invalues.yamlandChart.yaml - Update
vmgatewaychart version invalues.yamlandChart.yaml
Once updated, run the following commands:
- Run
make gen-docs - Run
make packagethat creates or updates zip file with the packed chart - Run
make merge. It creates or updates metadata for charts in index.yaml - Push changes to master.
masteris a source of truth - Push the same changes to
gh-pagesbranch
Ansible Roles
Bump the version of images
Repository https://github.com/VictoriaMetrics/ansible-playbooks
- Update
vmagentversion inmain.yml - Update
vmalertversion inmain.yml - Update
clusterversion inmain.yml - Update
singleversion inmain.yml - Commit changes
- Create a new tag
- Create a new release. This automatically publishes the new versions to galaxy.ansible.com
RPM packages
Bump the version of components (for LTS releases only)
Repository https://github.com/VictoriaMetrics/victoriametrics-lts-rpm
- Update
vmagentversion invmagent.spec - Update
vmalertversion invmalert.spec - Update
vmauthversion invmauth.spec - Update
vmbackupversion invmbackup.spec - Update
vmctlversion invmctl.spec - Update
vmrestoreversion invmrestore.spec - Update
vminsertversion invminsert.spec - Update
vmselectversion invmselect.spec - Update
vmstorageversion invmstorage.spec - Update
vmsingleversion invmsingle.spec - Commit and push changes to the repository. This will automatically build and publish new versions of RPM packages.