feat: add CIBUILDWHEEL_BUILD_IDENTIFIER environment variable (#2872)
* feat: add CIBUILDWHEEL_BUILD_IDENTIFIER environment variable
Set `CIBUILDWHEEL_BUILD_IDENTIFIER` to the current build identifier
(e.g. `cp311-manylinux_x86_64`) in the environment for all per-build
steps: `before_build`, the build itself, `repair_command`,
`before_test`, and `test_command`.
This allows scripts and commands to inspect which build is currently
running, which is useful for e.g. writing per-build output files:
CIBW_TEST_COMMAND='pytest --junit-xml=results-$CIBUILDWHEEL_BUILD_IDENTIFIER.xml'
The variable is set after the user's environment overrides are applied
and is only available for per-build steps (not `before_all`, where no
single identifier applies). All six platforms are covered: linux, macOS,
Windows, pyodide, Android, and iOS.
Closes #944, closes #2750
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Assisted-by: OpenCode:claude-sonnet-4.6
* fix: address review comment moving this for Android
Assisted-by: OpenCode:glm-5.1
Signed-off-by: Henry Schreiner <henryfs@princeton.edu>
---------
Signed-off-by: Henry Schreiner <henryfs@princeton.edu>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
This commit is contained in:
co-authored by
Copilot
parent
1cf64d0d3c
commit
80d5810e2a
@@ -140,6 +140,7 @@ def build(options: Options, tmp_path: Path) -> None:
|
||||
build_path.mkdir()
|
||||
python_dir = setup_target_python(config, build_path)
|
||||
build_env, android_env = setup_env(config, build_options, build_path, python_dir)
|
||||
|
||||
state = BuildState(
|
||||
config, build_options, build_path, python_dir, build_env, android_env
|
||||
)
|
||||
@@ -228,6 +229,7 @@ def setup_env(
|
||||
|
||||
# Apply custom environment variables, and check environment is still valid
|
||||
build_env = build_options.environment.as_dictionary(build_env)
|
||||
build_env["CIBUILDWHEEL_BUILD_IDENTIFIER"] = config.identifier
|
||||
build_env["PIP_DISABLE_PIP_VERSION_CHECK"] = "1"
|
||||
for command in ["python"] if use_uv else ["python", "pip"]:
|
||||
command_path = call("which", command, env=build_env, capture_stdout=True).strip()
|
||||
|
||||
@@ -482,6 +482,7 @@ def build(options: Options, tmp_path: Path) -> None:
|
||||
build_frontend=build_frontend.name,
|
||||
xbuild_tools=build_options.xbuild_tools,
|
||||
)
|
||||
env["CIBUILDWHEEL_BUILD_IDENTIFIER"] = config.identifier
|
||||
|
||||
compatible_wheel = find_compatible_wheel(built_wheels, config.identifier)
|
||||
if compatible_wheel:
|
||||
|
||||
@@ -237,6 +237,7 @@ def build_in_container(
|
||||
env["PATH"] = f"{python_bin}:{env['PATH']}"
|
||||
|
||||
env = build_options.environment.as_dictionary(env, executor=container.environment_executor)
|
||||
env["CIBUILDWHEEL_BUILD_IDENTIFIER"] = config.identifier
|
||||
|
||||
# check config python is still on PATH
|
||||
which_python = container.call(["which", "python"], env=env, capture_output=True).strip()
|
||||
|
||||
@@ -466,6 +466,7 @@ def build(options: Options, tmp_path: Path) -> None:
|
||||
build_options.environment,
|
||||
build_frontend.name,
|
||||
)
|
||||
env["CIBUILDWHEEL_BUILD_IDENTIFIER"] = config.identifier
|
||||
pip_version = None if use_uv else get_pip_version(env)
|
||||
|
||||
compatible_wheel = find_compatible_wheel(built_wheels, config.identifier)
|
||||
|
||||
@@ -391,6 +391,7 @@ def build(options: Options, tmp_path: Path) -> None:
|
||||
environment=build_options.environment,
|
||||
user_pyodide_version=build_options.pyodide_version,
|
||||
)
|
||||
env["CIBUILDWHEEL_BUILD_IDENTIFIER"] = config.identifier
|
||||
pip_version = get_pip_version(env)
|
||||
# The Pyodide command line runner mounts all directories in the host
|
||||
# filesystem into the Pyodide file system, except for the custom
|
||||
|
||||
@@ -466,6 +466,7 @@ def build(options: Options, tmp_path: Path) -> None:
|
||||
build_options.environment,
|
||||
build_frontend.name,
|
||||
)
|
||||
env["CIBUILDWHEEL_BUILD_IDENTIFIER"] = config.identifier
|
||||
pip_version = None if use_uv else get_pip_version(env)
|
||||
|
||||
compatible_wheel = find_compatible_wheel(built_wheels, config.identifier)
|
||||
|
||||
@@ -669,6 +669,9 @@ Platform-specific environment variables are also available:<br/>
|
||||
!!! note
|
||||
cibuildwheel always defines the environment variable `CIBUILDWHEEL=1`. This can be useful for [building wheels with optional extensions](faq.md#optional-extensions).
|
||||
|
||||
!!! note
|
||||
For each per-build step (`before_build`, the build itself, `repair_command`, `before_test`, `test_command`), cibuildwheel also sets `CIBUILDWHEEL_BUILD_IDENTIFIER` to the current build identifier (e.g. `cp311-manylinux_x86_64`). This can be used in scripts to distinguish different builds.
|
||||
|
||||
!!! note
|
||||
To do its work, cibuildwheel sets the variables `VIRTUALENV_PIP`, `DIST_EXTRA_CONFIG`, `SETUPTOOLS_EXT_SUFFIX`, `PIP_DISABLE_PIP_VERSION_CHECK`, `PIP_ROOT_USER_ACTION`, and it extends the variables `PATH` and `PIP_CONSTRAINT`. Your assignments to these options might be replaced or extended.
|
||||
|
||||
|
||||
Reference in New Issue
Block a user