Repository navigation
Migrate selftests to pytest #118
Workflow file for this run
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| name: Test | |
| on: [push, pull_request] | |
| concurrency: | |
| group: test-${{ github.ref }} | |
| cancel-in-progress: true | |
| jobs: | |
| test: | |
| name: Test (Python ${{ matrix.target.python }}, ${{ matrix.target.os }}) | |
| runs-on: ${{ matrix.target.builder }} | |
| defaults: | |
| run: | |
| shell: bash | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| # NOTE: Windows runs only selftests + headless tests (no kernel tree). | |
| # Linux/macOS run selftests, compatibility tests, and example scripts. | |
| target: | |
| # Python 3.12 | |
| - python: '3.12' | |
| os: Linux | |
| builder: ubuntu-24.04 | |
| - python: '3.12' | |
| os: macOS | |
| builder: macos-15 | |
| - python: '3.12' | |
| os: Windows | |
| builder: windows-2022 | |
| headless-only: true | |
| steps: | |
| - name: Set up environment | |
| run: | | |
| if [ "${{ runner.os }}" == "Windows" ]; then | |
| # Disable file name validation on Windows because Linux source tree | |
| # contains potentially problematic file names. | |
| git config --global core.protectNTFS false | |
| fi | |
| - name: Set up Python | |
| uses: actions/setup-python@v6 | |
| with: | |
| python-version: ${{ matrix.target.python }} | |
| - name: Check Python version | |
| run: | | |
| set -x | |
| python --version | |
| pip --version | |
| python -c "import platform; print(platform.architecture())" | |
| - name: Install Python dependencies | |
| run: | | |
| python -m pip install --user setuptools wheel pytest | |
| - name: Check out Linux source code | |
| # Skip for Windows (headless-only mode) | |
| if: ${{ matrix.target.headless-only != true }} | |
| uses: actions/checkout@v6 | |
| # On Windows, checkout of 'aux.c' is expected to fail because ... Windows. | |
| continue-on-error: true | |
| with: | |
| repository: torvalds/linux | |
| ref: v5.4 | |
| - name: Check out Kconfiglib source code | |
| uses: actions/checkout@v6 | |
| with: | |
| # Windows (headless-only): checkout to root directory | |
| # Linux/macOS (full test): checkout to Kconfiglib subdirectory | |
| path: ${{ matrix.target.headless-only && '.' || 'Kconfiglib' }} | |
| - name: Run pytest selftests | |
| working-directory: ${{ matrix.target.headless-only && '.' || 'Kconfiglib' }} | |
| run: | | |
| python -m pytest tests/ -v --tb=short --ignore=tests/test_compat.py | |
| - name: Apply Linux Kconfig Makefile patch | |
| # Skip for Windows (headless-only mode) | |
| if: ${{ matrix.target.headless-only != true }} | |
| run: | | |
| git apply Kconfiglib/makefile.patch | |
| - name: Run compatibility tests and example scripts | |
| # Skip for Windows (headless-only mode) | |
| if: ${{ matrix.target.headless-only != true }} | |
| run: | | |
| Kconfiglib/tests/reltest python | |
| - name: Install windows-curses (Windows only) | |
| if: matrix.target.os == 'Windows' | |
| run: | | |
| python -m pip install windows-curses | |
| - name: Test headless mode | |
| # Use root dir for Windows, Kconfiglib subdir for Linux/macOS | |
| working-directory: ${{ matrix.target.headless-only && '.' || 'Kconfiglib' }} | |
| run: | | |
| python << 'EOF' | |
| from kconfiglib import Kconfig | |
| import menuconfig | |
| print('Testing headless mode...') | |
| kconf = Kconfig('examples/Kmenuconfig') | |
| menuconfig.menuconfig(kconf, headless=True) | |
| print('Headless mode test passed') | |
| EOF | |
| - name: Test menuconfig import (Windows Python 3.12) | |
| if: matrix.target.os == 'Windows' | |
| # Use root dir for Windows (headless-only mode) | |
| working-directory: ${{ matrix.target.headless-only && '.' || 'Kconfiglib' }} | |
| run: | | |
| python -c "import menuconfig; print('menuconfig import successful')" |