Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
27 commits
Select commit Hold shift + click to select a range
80955de
Releng: move release preparation to scripts/release
fressi-elastic Mar 23, 2026
a5f58db
Apply suggestion from @Copilot
fressi-elastic Mar 23, 2026
696dd22
Apply suggestion from @Copilot
fressi-elastic Mar 23, 2026
65eb6b5
Use scripts/githooks/pre-commit and scripts/githooks/post-commit as G…
fressi-elastic Mar 23, 2026
f99b746
Remove sentence from contributing guide.
fressi-elastic Mar 23, 2026
6fbe035
Call `make pre-commit` in pre-commit hook.
fressi-elastic Mar 23, 2026
b7f8c18
Address pending comments from PR
fressi-elastic Mar 23, 2026
e1e0b64
docs: point release prep at Codex runbook, drop duplicated steps
fressi-elastic Mar 23, 2026
cef8a3c
Remove updated procudures from public documentation.
fressi-elastic Mar 23, 2026
b24e379
Remove references to Java 17 from changed documents.
fressi-elastic Mar 23, 2026
ca3f756
Rename RALLY_CHANGELOG_TOKEN to RALLY_CHANGELOG_TOKEN_FILE
fressi-elastic Mar 23, 2026
d348682
Remove stale Preparing a release doc references
fressi-elastic Mar 23, 2026
8fdedc4
Remove internal Codex links; restore public maintainer and doc pointers
fressi-elastic Mar 24, 2026
082057e
Remove docker based script and git hooks changes as being unrelated. …
fressi-elastic Mar 26, 2026
fa83363
Fix follow-ups from release tooling cleanup
fressi-elastic Mar 26, 2026
ad669f6
Fix makefile after prepare-docker.sh has been removed.
fressi-elastic Mar 26, 2026
56e27a8
Bump version to 2.14.0
fressi-elastic Mar 26, 2026
056be98
Workaround connection errors downloading licences from GitHub
fressi-elastic Mar 26, 2026
1cf1c6f
Fix regressions of Makefile
fressi-elastic Mar 27, 2026
aad1035
Merge branch 'master' of github.com:elastic/rally into chore/release-…
fressi-elastic Mar 27, 2026
e5cbac4
Revert esrally/_version.py
fressi-elastic Mar 27, 2026
34fd5e6
Fix broken script.
fressi-elastic Mar 27, 2026
4b6bf33
Release dry-run, drop tracked NOTICE.txt, fix tar on Python 3.10/3.11
fressi-elastic Mar 27, 2026
0d13a40
Harden release changelog: stderr messages, prepare.sh propagates fail…
fressi-elastic Mar 27, 2026
0ad1602
Merge branch 'master' of github.com:elastic/rally into chore/release-…
fressi-elastic Mar 28, 2026
56da168
Use pylint on changelog.py
fressi-elastic Mar 28, 2026
0a5e196
Merge branch 'master' of github.com:elastic/rally into chore/release-…
fressi-elastic Mar 30, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 11 additions & 1 deletion .pre-commit-config.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -49,5 +49,15 @@ repos:
"-j0",
"--rcfile=.pylintrc",
]
exclude: ^(docs/|changelog.py)
exclude: ^(docs/)
require_serial: true

# Shell scripts: release tooling and repo githooks. Widen to all *.sh once legacy
# scripts under .buildkite/, recipes/, repo root, etc. pass shellcheck.
- repo: https://github.com/shellcheck-py/shellcheck-py
rev: v0.11.0.1
hooks:
- id: shellcheck
name: shellcheck
args: [-x]
files: (^scripts/release/.*\.sh$)
6 changes: 5 additions & 1 deletion CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -60,7 +60,7 @@ Once your changes and tests are ready to submit for review:

Ensure that all tests pass by running `make check-all`. This runs sequentially lint checks, unit tests and integration tests. These can be executed in isolation using `make lint`, `make test` and `make it` respectively, in case you need to iterate over a subset of tests.

Note: Integration tests are much slower than unit tests and require `docker-compose`.
Note: Integration tests are much slower than unit tests and require `docker compose`. They also require **Java 21**; set `JAVA_HOME` (or `JAVA21_HOME`) to match.

3. Sign the Contributor License Agreement

Expand All @@ -79,6 +79,10 @@ Then sit back and wait. There will probably be discussion about the pull request

Note: Contributors belonging to the "Elastic" organization on Github can merge PRs themselves after getting a "LGTM" (Looks good to me); this workflow is similar to the established one in the Elasticsearch project.

## Release process (maintainers)

Release preparation is automated via `make release` and scripts under `scripts/release/`; see the Makefile and script headers for details.

# Contributing to the Rally codebase

**Repository:** [https://github.com/elastic/rally](https://github.com/elastic/rally)
Expand Down
19 changes: 13 additions & 6 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -67,6 +67,7 @@ check-all: all
test-3.11 \
test-3.12 \
test-3.13 \
test-release \
it \
it_serverless \
it_tracks_compat \
Expand Down Expand Up @@ -143,7 +144,7 @@ lint: venv
precommit pre-commit: venv
uv run -- pre-commit run

# It install a pre-commit hook in the project .git dir so modified files are checked before creating every commit.
# It installs a pre-commit hook in the project .git dir so modified files are checked before creating every commit.
install-pre-commit: $(PRE_COMMIT_HOOK_PATH)

$(PRE_COMMIT_HOOK_PATH):
Expand Down Expand Up @@ -216,12 +217,18 @@ benchmark: venv

# --- Release goals ---

release-checks: venv
$(VENV_ACTIVATE); ./release-checks.sh $(release_version) $(next_version)
# usage: e.g. make release-checks RELEASE_VERSION=X.Y.Z
release-checks test-release: venv
@if [ -z "$(RELEASE_VERSION)" ]; then echo "error: set RELEASE_VERSION (e.g. make release-checks RELEASE_VERSION=X.Y.Z)" >&2; exit 1; fi
$(MAKE) clean lint test-all docs

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I found make release-checks a bit lenghty. Can we use test instead of test-all to reduce the time it takes to run the check?

Suggested change
$(MAKE) clean lint test-all docs
$(MAKE) clean lint test docs

uv run -- ./scripts/release/prepare.sh --dry "$(RELEASE_VERSION)"

# usage: e.g. make release release_version=0.9.2 next_version=0.9.3
release: venv release-checks clean docs lint test it
$(VENV_ACTIVATE); ./release.sh $(release_version) $(next_version)
# usage: e.g. make release RELEASE_VERSION=X.Y.Z
release:
@if [ -z "$(RELEASE_VERSION)" ]; then echo "error: set RELEASE_VERSION (e.g. make release RELEASE_VERSION=X.Y.Z)" >&2; exit 1; fi
uv run -- ./scripts/release/prepare.sh "$(RELEASE_VERSION)"

# --- Other goals ---

# This is a shortcut for creating a shell running inside the project virtual environment.
sh:
Expand Down
3 changes: 2 additions & 1 deletion docs/developing.rst
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ Install the following software packages:

* `uv <https://docs.astral.sh/uv/getting-started/installation/>`_
* JDK version required to build Elasticsearch. Please refer to the `build setup requirements <https://github.com/elastic/elasticsearch/blob/main/CONTRIBUTING.md#contributing-to-the-elasticsearch-codebase>`_.
For running Rally's integration tests (e.g. ``make it`` or ``make it_tracks_compat``), ensure your environment uses **Java 21** (recent Rally versions use Java 21 in CI). Set ``JAVA_HOME`` or ``JAVA21_HOME`` accordingly.
* `Docker <https://docs.docker.com/install/>`_ and on Linux additionally `docker-compose <https://docs.docker.com/compose/install/>`_.
* `jq <https://stedolan.github.io/jq/download/>`_
* git
Expand Down Expand Up @@ -36,7 +37,7 @@ Rally uses automatic code formatters. You can apply them by running ``make forma

However, consider using editor integrations to do it automatically: you'll need to configure `black <https://black.readthedocs.io/en/stable/integrations/editors.html>`_ and `isort <https://github.com/PyCQA/isort/wiki/isort-Plugins>`_.

Also consider running `pre-commit install` to run lint as part of your git commits.
Also consider running ``make install-pre-commit`` to ensure quick verifications are being performed just before new Git commits are created.

Automatic Updates
~~~~~~~~~~~~~~~~~
Expand Down
6 changes: 5 additions & 1 deletion esrally/utils/io.py
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@
import os
import shutil
import subprocess
import sys
import tarfile
import zipfile
from collections.abc import Collection, Mapping, Sequence
Expand Down Expand Up @@ -397,7 +398,10 @@ def _do_decompress_manually_with_lib(target_directory: str, filename: str, compr

def _do_tar_decompress(target_directory: str, compressed_file: tarfile.TarFile) -> None:
try:
compressed_file.extractall(path=target_directory, filter="tar")
if sys.version_info >= (3, 12):
compressed_file.extractall(path=target_directory, filter="tar")
else:
compressed_file.extractall(path=target_directory)
except Exception:
raise RuntimeError(f"Could not decompress provided archive [{compressed_file.name!r}]. Please check if it is a valid tar file.")
finally:
Expand Down
64 changes: 0 additions & 64 deletions prepare-release.sh

This file was deleted.

4 changes: 2 additions & 2 deletions pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@ classifiers = [
]
################################################################################################
#
# Adapt `create-notice.sh` whenever changing dependencies here.
# Adapt `scripts/release/create-notice.sh` whenever changing dependencies here.
#
# That script grabs all license files so we include them in the notice file.
#
Expand Down Expand Up @@ -93,7 +93,7 @@ dependencies = [
"hatchling==1.6.0",
"wheel==0.46.2",
# License: MIT — Rally runs `python -m pip install` to install track dependencies (see esrally.track.loader).
"pip>=24.0",
"pip==26.0.1",
]

[project.optional-dependencies]
Expand Down
70 changes: 0 additions & 70 deletions release-checks.sh

This file was deleted.

2 changes: 1 addition & 1 deletion scripts/offline-install.sh
Original file line number Diff line number Diff line change
Expand Up @@ -70,7 +70,7 @@ function main {

echo "Preparing NOTICE file"
__NOTICE_OUTPUT_FILE="${ABSOLUTE_DOWNLOAD_BIN_DIR}/NOTICE.txt"
source "${SCRIPT_SRC_HOME}/../create-notice.sh"
source "${SCRIPT_SRC_HOME}/release/create-notice.sh"

# create an offline install script
cat >"${install_script}" <<EOL
Expand Down
Loading
Loading