Skip to content

CI: Test Python 3.15 as a normal job, fail on style errors, add macOS - #758

Open
bashtage wants to merge 1 commit into
mainfrom
lm71-ci1-release-ci
Open

bashtage wants to merge 1 commit into
mainfrom
lm71-ci1-release-ci

Conversation

@bashtage

Copy link
Copy Markdown
Owner

Python 3.15.0 was released on 2026-10-09 and 7.1 supports Python 3.10-3.15, so 3.15 is tested like the other versions. Two checks that could not fail a build now can.

Azure, ci/azure_template_posix.yml

  • python315_latest uses python.version '3.15' instead of '3.15-dev' and is no longer experimental. Its tests run in "Run tests (editable)", so a failure fails the build, and coverage is published and uploaded to Codecov as in the other jobs. The job passed on 3.15.0rc3 on 2026-10-09 (12,975 passed, 2,461 skipped, 47 xfailed). The other nine jobs are unchanged, including python310_minimums and python310_win_numpy126.
  • The style step starts with set -e. Azure runs a script step with bash --noprofile --norc, which does not stop at an error, so only the last command decided the result and a failure of black --check, isort --check or ruff check passed CI. flake8 was run twice, first and last; now it runs once. On main all four tools pass with the newest versions that pip installs today (flake8 7.4.1, black 26.5.1, isort 9.0.2 and ruff 0.17.0, which is newer than the 0.16.10 of the last run), so the step stays green.
  • The python.version comment no longer mentions 3.15-dev. allowUnstable: true was only needed to download a release candidate. It does no harm and is left alone.

GitHub Actions

  • cron-test.yml, the "Build wheels" workflow:
    • pypa/cibuildwheel v4.2.1 -> v4.3.1, the first release with CPython 3.15.0 final.
    • cp315 is added to the matrix. "cp315-*" does not match the free-threaded cp315t, so no free-threaded wheel is built.
    • macos-latest (arm64) is added. macOS is otherwise only exercised on release day, when bashtage/linearmodels-wheels builds the release.
    • OPENLAS_NUM_THREADS -> OPENBLAS_NUM_THREADS. With the typo OpenBLAS was not limited to one thread. cibuildwheel does not pass variables into the Linux container, so this applies to the Windows and macOS jobs.
  • generate-documentation.yml: Python 3.13 -> 3.14. The packages in requirements.txt and requirements-dev.txt resolve to the same 177 versions on 3.13 and 3.14 on Linux, all as wheels, and python314_latest installs the same files (plus requirements-test.txt). The documentation has not been built on 3.14 yet. If the Generate Documentation run on main fails, revert this line.

azure-pipelines.yml needs no change: experimental and style default to false there, which is what python315_latest now uses.

Checked locally, without running Azure or Actions:

  • Every YAML file in ci/, azure-pipelines.yml and .github/ parses with yaml.safe_load.
  • The style script from the YAML, run with bash as Azure does, exits 0 on main. On a copy with one single-quoted string, black and ruff fail: the old script exits 0 and the new one exits 1.
  • Evaluating the step conditions reproduces the steps that ran in Azure build 919 for all eight Linux jobs. After this change only python315_latest differs: "Run tests (experimental)" is replaced by "Run tests (editable)", and PublishCodeCoverageResults and the Codecov upload now run.
  • The build requirements, dependencies and CIBW_TEST_REQUIRES of cron-test.yml resolve against PyPI, with uv, to wheels only for cp314 and cp315 on Linux, Windows and macOS arm64, and the newest version of every package has one.

Python 3.15.0 was released on 2026-10-09 and 7.1 supports Python 3.10-3.15,
so 3.15 is tested like the other versions. Two checks that could not fail a
build now can.

Azure, ci/azure_template_posix.yml
- python315_latest uses python.version '3.15' instead of '3.15-dev' and is no
  longer experimental. Its tests run in "Run tests (editable)", so a failure
  fails the build, and coverage is published and uploaded to Codecov as in the
  other jobs. The job passed on 3.15.0rc3 on 2026-10-09 (12,975 passed, 2,461
  skipped, 47 xfailed). The other nine jobs are unchanged, including
  python310_minimums and python310_win_numpy126.
- The style step starts with set -e. Azure runs a script step with
  bash --noprofile --norc, which does not stop at an error, so only the last
  command decided the result and a failure of black --check, isort --check or
  ruff check passed CI. flake8 was run twice, first and last; now it runs
  once. On main all four tools pass with the newest versions that pip installs
  today (flake8 7.4.1, black 26.5.1, isort 9.0.2 and ruff 0.17.0, which is
  newer than the 0.16.10 of the last run), so the step stays green.
- The python.version comment no longer mentions 3.15-dev. allowUnstable: true
  was only needed to download a release candidate. It does no harm and is
  left alone.

GitHub Actions
- cron-test.yml, the "Build wheels" workflow:
  - pypa/cibuildwheel v4.2.1 -> v4.3.1, the first release with CPython 3.15.0
    final.
  - cp315 is added to the matrix. "cp315-*" does not match the free-threaded
    cp315t, so no free-threaded wheel is built.
  - macos-latest (arm64) is added. macOS is otherwise only exercised on
    release day, when bashtage/linearmodels-wheels builds the release.
  - OPENLAS_NUM_THREADS -> OPENBLAS_NUM_THREADS. With the typo OpenBLAS was not
    limited to one thread. cibuildwheel does not pass variables into the Linux
    container, so this applies to the Windows and macOS jobs.
- generate-documentation.yml: Python 3.13 -> 3.14. The packages in
  requirements.txt and requirements-dev.txt resolve to the same 177 versions on
  3.13 and 3.14 on Linux, all as wheels, and python314_latest installs the
  same files (plus requirements-test.txt). The documentation has not been
  built on 3.14 yet. If the Generate Documentation run on main fails, revert
  this line.

azure-pipelines.yml needs no change: experimental and style default to false
there, which is what python315_latest now uses.

Checked locally, without running Azure or Actions:
- Every YAML file in ci/, azure-pipelines.yml and .github/ parses with
  yaml.safe_load.
- The style script from the YAML, run with bash as Azure does, exits 0 on main.
  On a copy with one single-quoted string, black and ruff fail: the old script
  exits 0 and the new one exits 1.
- Evaluating the step conditions reproduces the steps that ran in Azure build
  919 for all eight Linux jobs. After this change only python315_latest
  differs: "Run tests (experimental)" is replaced by "Run tests (editable)",
  and PublishCodeCoverageResults and the Codecov upload now run.
- The build requirements, dependencies and CIBW_TEST_REQUIRES of cron-test.yml
  resolve against PyPI, with uv, to wheels only for cp314 and cp315 on Linux,
  Windows and macOS arm64, and the newest version of every package has one.
@codecov

codecov Bot commented Oct 11, 2026 •

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 99.58%. Comparing base (208845b) to head (495dec8).
⚠️ Report is 11 commits behind head on main.

Additional details and impacted files
@@           Coverage Diff           @@
##             main     #758   +/-   ##
=======================================
  Coverage   99.58%   99.58%           
=======================================
  Files         110      110           
  Lines       20328    20328           
  Branches     1600     1600           
=======================================
  Hits        20244    20244           
  Misses         31       31           
  Partials       53       53           
Flag Coverage Δ
adder 99.57% <ø> (ø)
subtractor 99.57% <ø> (ø)

Flags with carried forward coverage won't be shown. Click here to find out more.

☔ View full report in Codecov by Harness.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant