Bumps [pytest](https://github.com/pytest-dev/pytest) from 9.0.2 to 9.0.3. <details> <summary>Release notes</summary> <p><em>Sourced from <a href="https://github.com/pytest-dev/pytest/releases">pytest's releases</a>.</em></p> <blockquote> <h2>9.0.3</h2> <h1>pytest 9.0.3 (2026-04-07)</h1> <h2>Bug fixes</h2> <ul> <li> <p><a href="https://redirect.github.com/pytest-dev/pytest/issues/12444">#12444</a>: Fixed <code>pytest.approx</code> which now correctly takes into account <code>~collections.abc.Mapping</code> keys order to compare them.</p> </li> <li> <p><a href="https://redirect.github.com/pytest-dev/pytest/issues/13634">#13634</a>: Blocking a <code>conftest.py</code> file using the <code>-p no:</code> option is now explicitly disallowed.</p> <p>Previously this resulted in an internal assertion failure during plugin loading.</p> <p>Pytest now raises a clear <code>UsageError</code> explaining that conftest files are not plugins and cannot be disabled via <code>-p</code>.</p> </li> <li> <p><a href="https://redirect.github.com/pytest-dev/pytest/issues/13734">#13734</a>: Fixed crash when a test raises an exceptiongroup with <code>__tracebackhide__ = True</code>.</p> </li> <li> <p><a href="https://redirect.github.com/pytest-dev/pytest/issues/14195">#14195</a>: Fixed an issue where non-string messages passed to <!-- raw HTML omitted -->unittest.TestCase.subTest()<!-- raw HTML omitted --> were not printed.</p> </li> <li> <p><a href="https://redirect.github.com/pytest-dev/pytest/issues/14343">#14343</a>: Fixed use of insecure temporary directory (CVE-2025-71176).</p> </li> </ul> <h2>Improved documentation</h2> <ul> <li><a href="https://redirect.github.com/pytest-dev/pytest/issues/13388">#13388</a>: Clarified documentation for <code>-p</code> vs <code>PYTEST_PLUGINS</code> plugin loading and fixed an incorrect <code>-p</code> example.</li> <li><a href="https://redirect.github.com/pytest-dev/pytest/issues/13731">#13731</a>: Clarified that capture fixtures (e.g. <code>capsys</code> and <code>capfd</code>) take precedence over the <code>-s</code> / <code>--capture=no</code> command-line options in <code>Accessing captured output from a test function <accessing-captured-output></code>.</li> <li><a href="https://redirect.github.com/pytest-dev/pytest/issues/14088">#14088</a>: Clarified that the default <code>pytest_collection</code> hook sets <code>session.items</code> before it calls <code>pytest_collection_finish</code>, not after.</li> <li><a href="https://redirect.github.com/pytest-dev/pytest/issues/14255">#14255</a>: TOML integer log levels must be quoted: Updating reference documentation.</li> </ul> <h2>Contributor-facing changes</h2> <ul> <li> <p><a href="https://redirect.github.com/pytest-dev/pytest/issues/12689">#12689</a>: The test reports are now published to Codecov from GitHub Actions. The test statistics is visible <a href="https://app.codecov.io/gh/pytest-dev/pytest/tests">on the web interface</a>.</p> <p>-- by <code>aleguy02</code></p> </li> </ul> </blockquote> </details> <details> <summary>Commits</summary> <ul> <li><a href="a7d58d7a21"><code>a7d58d7</code></a> Prepare release version 9.0.3</li> <li><a href="089d98199c"><code>089d981</code></a> Merge pull request <a href="https://redirect.github.com/pytest-dev/pytest/issues/14366">#14366</a> from bluetech/revert-14193-backport</li> <li><a href="8127eaf4ab"><code>8127eaf</code></a> Revert "Fix: assertrepr_compare respects dict insertion order (<a href="https://redirect.github.com/pytest-dev/pytest/issues/14050">#14050</a>) (<a href="https://redirect.github.com/pytest-dev/pytest/issues/14193">#14193</a>)"</li> <li><a href="99a7e6029e"><code>99a7e60</code></a> Merge pull request <a href="https://redirect.github.com/pytest-dev/pytest/issues/14363">#14363</a> from pytest-dev/patchback/backports/9.0.x/95d8423bd...</li> <li><a href="ddee02a578"><code>ddee02a</code></a> Merge pull request <a href="https://redirect.github.com/pytest-dev/pytest/issues/14343">#14343</a> from bluetech/cve-2025-71176-simple</li> <li><a href="74eac6916f"><code>74eac69</code></a> doc: Update training info (<a href="https://redirect.github.com/pytest-dev/pytest/issues/14298">#14298</a>) (<a href="https://redirect.github.com/pytest-dev/pytest/issues/14301">#14301</a>)</li> <li><a href="f92dee777c"><code>f92dee7</code></a> Merge pull request <a href="https://redirect.github.com/pytest-dev/pytest/issues/14267">#14267</a> from pytest-dev/patchback/backports/9.0.x/d6fa26c62...</li> <li><a href="7ee58acc87"><code>7ee58ac</code></a> Merge pull request <a href="https://redirect.github.com/pytest-dev/pytest/issues/12378">#12378</a> from Pierre-Sassoulas/fix-implicit-str-concat-and-d...</li> <li><a href="37da870d37"><code>37da870</code></a> Merge pull request <a href="https://redirect.github.com/pytest-dev/pytest/issues/14259">#14259</a> from mitre88/patch-4 (<a href="https://redirect.github.com/pytest-dev/pytest/issues/14268">#14268</a>)</li> <li><a href="c34bfa3b7a"><code>c34bfa3</code></a> Add explanation for string context diffs (<a href="https://redirect.github.com/pytest-dev/pytest/issues/14257">#14257</a>) (<a href="https://redirect.github.com/pytest-dev/pytest/issues/14266">#14266</a>)</li> <li>Additional commits viewable in <a href="https://github.com/pytest-dev/pytest/compare/9.0.2...9.0.3">compare view</a></li> </ul> </details> <br /> [](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores) Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`. [//]: # (dependabot-automerge-start) [//]: # (dependabot-automerge-end) --- <details> <summary>Dependabot commands and options</summary> <br /> You can trigger Dependabot actions by commenting on this PR: - `@dependabot rebase` will rebase this PR - `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it - `@dependabot show <dependency name> ignore conditions` will show all of the ignore conditions of the specified dependency - `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself) You can disable automated security fix PRs for this repo from the [Security Alerts page](https://github.com/compiler-explorer/compiler-explorer/network/alerts). </details> Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
CE Properties Wizard
An interactive command-line tool for adding custom compilers to your local Compiler Explorer installation.
Features
- Automatic Detection: Detects compiler type and language from the executable path
- Auto-Discovery: Automatically finds and adds all compilers in your PATH
- Interactive Mode: Guided prompts for configuration
- Automation Support: Command-line flags for scripting
- Group Management: Automatically adds compilers to appropriate groups
- Validation: Validates generated properties
- Safe Updates: Only adds/updates, never removes existing configurations
Requirements
The wizard requires Python 3.10+ and uv. The run scripts handle all setup automatically.
Usage
Interactive Mode
Run without arguments for a fully interactive experience:
Linux/macOS:
./run.sh
Windows:
.\run.ps1
Path-First Mode
Provide a compiler path to skip the first prompt:
Linux/macOS:
./run.sh /usr/local/bin/g++-13
Windows:
.\run.ps1 "C:\MinGW\bin\g++.exe"
Automated Mode
Use command-line flags to automate the process:
Linux/macOS:
./run.sh /usr/local/bin/g++-13 --yes
Windows:
.\run.ps1 "C:\MinGW\bin\g++.exe" --yes
Full Automation Example
Linux/macOS:
./run.sh /path/to/compiler \
--id custom-gcc-13 \
--name "GCC 13.2.0" \
--group gcc \
--options "-std=c++20" \
--language c++ \
--yes
Windows:
.\run.ps1 "C:\path\to\compiler.exe" `
--id custom-gcc-13 `
--name "GCC 13.2.0" `
--group gcc `
--options "-std=c++20" `
--language c++ `
--yes
Auto-Discovery
Automatically discover and add all compilers in your PATH:
./auto_discover_compilers.py --dry-run # Preview what would be found
./auto_discover_compilers.py --languages c++,rust # Add only C++ and Rust compilers
./auto_discover_compilers.py --yes # Add all found compilers automatically
Batch Processing
Add multiple compilers with a simple loop:
Linux/macOS:
for compiler in /opt/compilers/*/bin/*; do
./run.sh "$compiler" --yes
done
Windows:
Get-ChildItem "C:\Compilers\*\bin\*.exe" | ForEach-Object {
.\run.ps1 $_.FullName --yes
}
Command-Line Options
COMPILER_PATH: Path to the compiler executable (optional in interactive mode)--id: Compiler ID (auto-generated if not specified)--name: Display name for the compiler--group: Compiler group to add to (e.g., gcc, clang)--options: Default compiler options--language: Programming language (auto-detected if not specified)--yes, -y: Skip confirmation prompts--non-interactive: Run in non-interactive mode with auto-detected values--config-dir: Path to etc/config directory (auto-detected if not specified)--verify-only: Only detect and display compiler information without making changes--list-types: List all supported compiler types and exit--reorganize LANGUAGE: Reorganize an existing properties file for the specified language--validate-discovery: Run discovery validation to verify the compiler is detected (default for local environment)--env ENV: Environment to target (local, amazon, etc.) - defaults to 'local'--sdk-path: Windows SDK base path for MSVC compilers (e.g., D:/efs/compilers/windows-kits-10)
Supported Languages
The wizard currently supports:
Systems Languages:
- C++, C, CUDA
- Rust, Zig, V, Odin
- Carbon, Mojo
Popular Compiled Languages:
- D (DMD, LDC, GDC)
- Swift, Nim, Crystal
- Go, Kotlin, Java
Functional Languages:
- Haskell (GHC)
- OCaml, Scala
.NET Languages:
- C#, F#
Scripting/Dynamic Languages:
- Python, Ruby, Julia
- Dart, Elixir, Erlang
Other Languages:
- Fortran, Pascal, Ada
- COBOL, Assembly (NASM, GAS, YASM)
Compiler Detection
The wizard attempts to detect compiler type by running version commands:
- GCC:
--version - Clang:
--version - Intel:
--version - MSVC:
/help - NVCC:
--version - Rust:
--version - Go:
version - Python:
--version
If detection fails, you can manually specify the compiler type.
MSVC Auto-Configuration
When adding MSVC compilers, the wizard automatically configures additional tools:
Demangler Configuration
- Automatic Detection: Detects
undname.exefrom the MSVC installation path - Architecture Matching: Uses the same architecture as the compiler (x64, x86, arm64)
- Auto-Configuration: Sets
demanglerType=win32anddemangler=<path-to-undname.exe>
Objdumper Configuration
- LLVM Detection: Automatically detects
llvm-objdump.exeif available in the MSVC installation - Conditional Setup: Only adds objdumper configuration when
llvm-objdump.exeis found - Auto-Configuration: Sets
objdumperType=llvmandobjdumper=<path-to-llvm-objdump.exe>
Windows SDK Integration
- Interactive Prompt: Prompts for Windows SDK path if auto-detection fails
- Command-Line Option: Use
--sdk-pathto specify SDK path non-interactively - Include/Library Paths: Automatically configures MSVC include and library paths
Example MSVC Usage
Windows (Interactive):
.\run.ps1 "D:\efs\compilers\msvc-2022-ce\VC\Tools\MSVC\14.34.31933\bin\Hostx64\x64\cl.exe"
Windows (Non-Interactive):
.\run.ps1 "D:\efs\compilers\msvc-2022-ce\VC\Tools\MSVC\14.34.31933\bin\Hostx64\x64\cl.exe" `
--sdk-path "D:\efs\compilers\windows-kits-10" `
--non-interactive
The wizard will automatically configure:
- Demangler:
D:/efs/compilers/msvc-2022-ce/VC/Tools/MSVC/14.34.31933/bin/Hostx64/x64/undname.exe - Objdumper:
D:/efs/compilers/msvc-2022-ce/VC/Tools/Llvm/x64/bin/llvm-objdump.exe(if available) - Windows SDK include and library paths
Configuration Files
The wizard modifies <language>.local.properties files in etc/config/. It:
- Preserves existing content and formatting
- Creates backup files before modification
- Adds compilers to groups by default
- Ensures unique compiler IDs
Examples
Add a custom GCC installation
Linux/macOS:
./run.sh /opt/gcc-13.2.0/bin/g++
Windows:
.\run.ps1 "C:\TDM-GCC-64\bin\g++.exe"
Add a cross-compiler
Linux/macOS:
./run.sh /usr/bin/arm-linux-gnueabihf-g++ \
--name "ARM GCC 11.2" \
--group arm-gcc \
--yes
Windows:
.\run.ps1 "C:\arm-toolchain\bin\arm-none-eabi-g++.exe" `
--name "ARM GCC 11.2" `
--group arm-gcc `
--yes
Add a Python interpreter
Linux/macOS:
./run.sh /usr/local/bin/python3.12 --yes
Windows:
.\run.ps1 "C:\Python312\python.exe" --yes
Verify compiler detection only
Linux/macOS:
./run.sh /usr/bin/g++-13 --verify-only
Windows:
.\run.ps1 "C:\MinGW\bin\g++.exe" --verify-only
List all supported compiler types
Linux/macOS:
./run.sh --list-types
Windows:
.\run.ps1 --list-types
This will output something like:
Detected compiler information:
Path: /usr/bin/g++-13
Language: C++
Compiler Type: gcc
Version: 13.2.0
Semver: 13.2.0
Suggested ID: custom-gcc-13-2-0
Suggested Name: GCC 13.2.0
Suggested Group: gcc
Troubleshooting
Compiler not detected
If the wizard can't detect your compiler type, it will prompt you to select one manually.
Permission errors
Ensure you have write permissions to the etc/config directory.
Validation failures
If validation reports errors, check the generated properties file for syntax issues. You can run npm run test:props to validate all property files.
Development
To contribute to the wizard:
- Format code:
./run.sh --format - Check formatting:
./run.sh --format --check - Run tests:
uv run pytest(afteruv sync --all-extras)
The --format flag runs black, ruff, and pytype formatters on the codebase.