Project: VictoriaMetrics (Observability and Analysis / Observability)
File: Release-Guide.md

sort: 30 weight: 30 title: Release process guidance menu: docs: parent: 'victoriametrics' weight: 30 aliases: /Release-Guide.html 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:packages` permissions exported under `GITHUB_TOKEN` env variable. You can create token Make sure you're for pushing docker images Make sure you have GNU version of utilities `zip`, `tar`, `sha256sum`. To install them run the following commands: ```sh brew install coreutils brew install gnu-tar export PATH="/usr/local/opt/coreutils/libexec/gnubin:$PATH" ``` Docker may need additional configuration changes: ```sh docker buildx create --use --name=qemu docker buildx inspect --bootstrap ``` By default, docker on MacOS has limited amount of resources (CPU, mem) to use. Bumping the limits may significantly improve build speed. Make sure all the changes are documented in . 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-node` and `enteprise-cluster` branches. Changes in these branches must be synced immediately after they are committed in at least a single branch. Make sure that the release branches have no security issues. Update release versions if needed in . Add `(available starting from v1.xx.y)` line to feature docs introduced in the upcoming release. Cut new version in and make it merged. See example in this . Cherry-pick bug fixes relevant for . Make sure you get all changes fetched `git fetch --all`. Create the following release tags: `git tag -s v1.xx.y` in `master` branch `git tag -s v1.xx.y-cluster` in `cluster` branch `git tag -s v1.xx.y-enterprise` in `enterprise-single-node` branch `git tag -s v1.xx.y-enterprise-cluster` in `enterprise-cluster` branch Run `TAG=v1.xx.y make publish-release`. This command performs the following tasks: a) Build and package binaries in `*.tar.gz` release archives with the corresponding `_checksums.txt` files inside `bin` directory. This step can be run manually with the command `make release` from the needed git tag. b) Build and publish for the given `TAG`, `TAG-cluster`, `TAG-enterprise` and `TAG-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 publish` from the needed git tag. Push the tags `v1.xx.y` and `v1.xx.y-cluster` created at step 8 to public GitHub repository at https://github.com/VictoriaMetrics/VictoriaMetrics. Push the tags `v1.xx.y`, `v1.xx.y-cluster`, `v1.xx.y-enterprise` and `v1.xx.y-enterprise-cluster` to 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 name `TAG`. This step can be run manually with the command `TAG=v1.xx.y make github-create-release`. The release id is stored at `/tmp/vm-github-release` file. b) Upload all the binaries and checksums created at step `9a` to that release. This step can be run manually with the command `make github-upload-assets`. It is expected that the needed release id is stored at `/tmp/vm-github-release` file, which must be created at the step `a`. 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-release` file created at the step

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. Go to <https://github.com/VictoriaMetrics/VictoriaMetrics/releases> and verify that draft release with the name `TAG` has been created and this release contains all the needed binaries and checksums. Update the release description with the content of for this release. Publish release by pressing "Publish release" green button in GitHub's UI. Bump version of the VictoriaMetrics cluster in the by . Bump VictoriaMetrics version at `deployment/docker/docker-compose.yml` and at `deployment/docker/docker-compose-cluster.yml`. Follow the instructions in . pre-requirements: snapcraft binary, can be installed with commands: for MacOS `brew install snapcraft` and , for Ubuntu - `sudo snap install snapcraft --classic` exported snapcraft login to `~/.snap/login.json` with `snapcraft export-login login.json && mkdir -p ~/.snap && mv login.json ~/.snap/` already created release at github (it operates `git describe` version, 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 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/VictoriaMetricsen> and <https://t.me/VictoriaMetricsru1> Publish message in Google Groups at <https://groups.google.com/forum/#!forum/victorametrics-users> The operator repository Bump `Version` field in with new release version for: `vmalert` in `BaseOperatorConf.VMAlertDefault.Version`, `vmagent` in `BaseOperatorConf.VMAgentDefault.Version`, `vmsingle` in `BaseOperatorConf.VMSingleDefault.Version`, `vmselect` in `BaseOperatorConf.VMClusterDefault.VMSelectDefault.Version`, `vmstorage` in `BaseOperatorConf.VMClusterDefault.VMStorageDefault.Version`, `vminsert` in `BaseOperatorConf.VMClusterDefault.VMInsertDefault.Version`, `vmbackupmanager` in `BaseOperatorConf.VMBackup.Version` (should be enterprise version), `vmauth` in `BaseOperatorConf.VMAuthDefault.Version`. Run `make operator-conf`. Rename "Next release" section in `docs/CHANGELOG.md` to the new release version and create new empty "Next release" section. Commit and push changes to `master`. Create and push a new tag with the new release version. Create github release from this tag with "Release notes" from `docs/CHANGELOG.md` for this version in description. The helm chart repository Bump `tag` field in `values.yaml` with new release version. Bump `appVersion` field in `Chart.yaml` with new release version. Add new line to "Next release" section in `CHANGELOG.md` about version update (the line must always start with "`-`"). Do NOT change headers in `CHANGELOG.md`. Bump `version` field in `Chart.yaml` with incremental semver version (based on the `CHANGELOG.md` analysis). Do these updates to the following charts: Update `vmagent` chart version in and Update `vmalert` chart version in and Update `vmauth` chart version in and Update `cluster` chart versions in , bump version for `vmselect`, `vminsert` and `vmstorage` and Update `k8s-stack` chart versions in , bump version for `vmselect`, `vminsert`, `vmstorage`, `vmsingle`, `vmalert`, `vmagent` and Update `single-node` chart version in and Update `vmgateway` chart version in and Once updated, run the following commands: Commit and push changes to `master`. Run "Release" action on Github: <img src="Release-Guide_helm-release.webp" alt="release helm charts"> Merge new PRs "Automatic update CHANGELOGs and READMEs" and "Synchronize docs" after pipelines are complete. Repository Update `vmagent` version in Update `vmalert` version in Update `cluster` version in Update `single` version in Commit changes Create a new tag Create a new release. This automatically publishes the new versions to galaxy.ansible.com Repository Update `vmagent` version in Update `vmalert` version in Update `vmauth` version in Update `vmbackup` version in Update `vmctl` version in Update `vmrestore` version in Update `vminsert` version in Update `vmselect` version in Update `vmstorage` version in Update `vmsingle` version in Commit and push changes to the repository. This will automatically build and publish new versions of RPM packages.