Skip to content

Add Python 3.14 to the CI matrix #334

Add Python 3.14 to the CI matrix

Add Python 3.14 to the CI matrix #334

Workflow file for this run

# Required repository secrets:
# CONAN2_USER_SECRET - Conan remote login username
# CONAN2_PASSWORD_SECRET - Conan remote login password
# AQUAPI_USERNAME_SECRET - devpi username for wheel uploads
# AQUAPI_PASSWORD_SECRET - devpi password for wheel uploads
# AQUAPI_URL_DEV - devpi index URL for wheel uploads
# AQUAVEO_GITHUB_TOKEN - GitHub token for release asset uploads
#
# Third-party actions are pinned to a commit SHA with the tag in a trailing
# comment. A tag is a movable ref in someone else's repository: whoever owns
# it can retarget it at new code, which then runs here with this workflow's
# secrets in its environment. Update a pin by resolving the new tag
# (`gh api repos/<owner>/<repo>/commits/<tag> --jq .sha`) and editing the
# template -- not the generated file.
#
# Generated by xmsconan_ci — do not edit manually.
name: XmsInterp-CI
on:
push:
pull_request:
jobs:
# ----------------------------------------------------------------------------------------------
# FLAKE
# ----------------------------------------------------------------------------------------------
flake:
name: Flake Project
runs-on: ${{ matrix.platform }}
strategy:
fail-fast: false
matrix:
platform: [ubuntu-latest]
python-version: ['3.13']
steps:
# Checkout Sources
- name: Checkout Source
uses: actions/checkout@v4
# Setup Python
- name: Setup Python ${{ matrix.python-version }}
uses: actions/setup-python@v5
with:
python-version: ${{ matrix.python-version }}
# Install Python Dependencies
- name: Install Python Dependencies
run: |
python -m pip install --upgrade pip
# flake8-tidy-imports registers `banned-modules`, which the .flake8
# generated below sets. flake8 ignores config options no installed
# plugin claims, so without the plugin the osgeo ban was accepted
# and silently enforced nothing -- while this job reported the same
# green as a run that had checked it.
pip install flake8 flake8-docstrings flake8-bugbear flake8-import-order pep8-naming flake8-tidy-imports
pip install --upgrade "xmsconan>=2.23.0" -i https://public.aquapi.aquaveo.com/aquaveo/dev/+simple
# Generate .flake8 so CI lints with the same config developers use locally.
# Do not inline the flake8 settings here: that duplicates .flake8.jinja and
# the two copies drift apart silently.
- name: Generate Build Files
run: xmsconan_gen build.toml
# Flake Code
- name: Run Flake
run: flake8 _package
# ----------------------------------------------------------------------------------------------
# MAC
# ----------------------------------------------------------------------------------------------
mac:
name: Clang-Latest (${{ matrix.build_type }}, ${{ matrix.python-version }}, Macos)
runs-on: ${{ matrix.platform }}
strategy:
fail-fast: false
matrix:
platform: [macos-15]
python-version: ["3.13", "3.14"]
build_type: [Release, Debug]
env:
MATRIX_NAME: ${{ matrix.platform }}-Clang${{ matrix.compiler-version }}-${{ matrix.build_type }}-py${{ matrix.python-version }}
# Library Variables
LIBRARY_NAME: xmsinterp
XMS_VERSION: '0.0.0'
# Conan Variables
CONAN_REFERENCE: xmsinterp/0.0.0
CONAN_ARCHS: x86_64
CONAN_USERNAME: aquaveo
CONAN_CHANNEL: testing
CONAN_STABLE_BRANCH_PATTERN: 'we_should_never_use_this_string_for_a_branch_name'
CONAN_LOGIN_USERNAME: ${{ secrets.CONAN2_USER_SECRET }}
CONAN_PASSWORD: ${{ secrets.CONAN2_PASSWORD_SECRET }}
CONAN_REMOTE_URL: https://conan2.aquaveo.com/artifactory/api/conan/aquaveo-stable
# Aquapi Variables
AQUAPI_USERNAME: ${{ secrets.AQUAPI_USERNAME_SECRET }}
AQUAPI_PASSWORD: ${{ secrets.AQUAPI_PASSWORD_SECRET }}
AQUAPI_URL: ${{ secrets.AQUAPI_URL_DEV }}
# Python Variables
PYTHON_TARGET_VERSION: ${{ matrix.python-version }}
RELEASE_PYTHON: 'False'
CTEST_PARALLEL_LEVEL: '8'
steps:
# Get Correct Version of Xcode
- uses: maxim-lobanov/setup-xcode@ed7a3b1fda3918c0306d1b724322adc0b8cc0a90 # v1
with:
xcode-version: 16.4
- name: Setup Clang
run: |
clang --version
# Checkout Sources
- name: Checkout Source
uses: actions/checkout@v4
# Setup Python
- name: Set up Python ${{ matrix.python-version }}
uses: actions/setup-python@v5
with:
python-version: ${{ matrix.python-version }}
# Install Python Dependencies
- name: Install Python Dependencies
run: |
python -m pip install --upgrade pip
# conan is pinned to a patch series on purpose: a minor bump can change
# package_id computation and silently detach builds from the binaries
# already published to the remote. Bump this deliberately.
pip install "conan~=2.31.0" devpi-client wheel
python -m pip install --upgrade "xmsconan>=2.23.0" -i https://public.aquapi.aquaveo.com/aquaveo/dev/+simple
# Setup Conan
- name: Setup Conan
run: xmsconan_conan_setup --remote-url ${{ env.CONAN_REMOTE_URL }} --login --remove-conancenter
shell: bash
# Get Tag Name
- name: Get Tag
id: gitTag
uses: little-core-labs/get-git-tag@2c292ff564c1a61b989e29f0410d131317f89b03 # v3.0.2
if: startsWith(github.ref, 'refs/tags/')
# Set Conan Version
- name: Set Conan Version
uses: allenevans/set-env@b68e0a75c99b96b43963b54bc2be13e2f103ad87 # v2.0.0
with:
CONAN_REFERENCE: 'xmsinterp/${{ steps.gitTag.outputs.tag }}'
XMS_VERSION: ${{ steps.gitTag.outputs.tag }}
CONAN_UPLOAD: https://conan.aquaveo.com
RELEASE_PYTHON: 'True'
if: startsWith(github.ref, 'refs/tags/')
# Check for release branch
- name: Get Branch Name
id: gitBranch
uses: nelonoel/branch-name@1ea5c86cb559a8c4e623da7f188496208232e49f # v1.0.1
- name: Change Channel and URL if Release Branch
uses: allenevans/set-env@b68e0a75c99b96b43963b54bc2be13e2f103ad87 # v2.0.0
with:
CONAN_CHANNEL: stable
AQUAPI_URL: ${{ secrets.AQUAPI_URL_DEV}}
if: ${{ startsWith(github.ref, 'refs/tags/') && startsWith(env.BRANCH_NAME, env.XMS_VERSION) }}
# Generate XMS Conan
- name: Generate XMS Conan
run: xmsconan_gen --version ${{ env.XMS_VERSION }} build.toml
# Build the Conan Package
- name: Build the Conan Packages
run: "python build.py --filter=\"{\\\"build_type\\\": \\\"${{ matrix.build_type }}\\\"}\"${{ matrix.build_type == 'Release' && ' --wheel-dir wheelhouse' || '' }} --artifacts-dir test_artifacts"
shell: bash
- name: Upload test artifacts
uses: actions/upload-artifact@v4
with:
name: test-artifacts-${{ env.MATRIX_NAME }}
path: test_artifacts/
if-no-files-found: ignore
if: always()
# Repair wheel (Release only)
- name: Repair wheel
run: xmsconan_wheel_repair --wheel-dir wheelhouse --platform macos
shell: bash
if: matrix.build_type == 'Release'
- name: Upload wheel artifact
uses: actions/upload-artifact@v4
with:
name: wheel-${{ runner.os }}-py${{ matrix.python-version }}
path: wheelhouse/*.whl
if: matrix.build_type == 'Release'
# Upload wheel to Aquapi
- name: Upload wheel to Aquapi
run: xmsconan_wheel_deploy --wheel-dir wheelhouse
shell: bash
if: startsWith(github.ref, 'refs/tags/') && matrix.build_type == 'Release'
# Upload Release to Conan
- name: Upload Releases to Conan
run: "python build.py --skip-build --upload --filter=\"{\\\"build_type\\\": \\\"${{ matrix.build_type }}\\\"}\""
shell: bash
if: startsWith(github.ref, 'refs/tags/')
# Get the Release Data
- name: Get Release
id: git_release
uses: bruceadams/get-release@74c3d60f5a28f358ccf241a00c9021ea16f0569f # v1.3.2
env:
GITHUB_TOKEN: ${{ secrets.AQUAVEO_GITHUB_TOKEN }}
if: startsWith(github.ref, 'refs/tags/')
- name: Archive Conan Packages
run: |
conan cache save --file ${{ env.MATRIX_NAME }}.tar.gz xmsinterp/${{ env.XMS_VERSION }}:*
shell: bash
if: startsWith(github.ref, 'refs/tags/')
# Upload Zipped Conan Packages
- name: Upload Zipped Conan Packages
uses: actions/upload-release-asset@v1
env:
GITHUB_TOKEN: ${{ secrets.AQUAVEO_GITHUB_TOKEN }}
with:
upload_url: ${{ steps.git_release.outputs.upload_url }}
asset_path: ${{ github.workspace }}/${{ env.MATRIX_NAME }}.tar.gz
asset_name: ${{ env.MATRIX_NAME }}.tar.gz
asset_content_type: application/zip
if: startsWith(github.ref, 'refs/tags/')
# ----------------------------------------------------------------------------------------------
# LINUX
# ----------------------------------------------------------------------------------------------
linux:
name: GCC-13 (${{ matrix.build_type }}, ${{ matrix.python-version }}, Linux)
runs-on: ubuntu-latest
container:
image: ghcr.io/aquaveo/conan-gcc13-py${{ matrix.python-version }}:latest
strategy:
fail-fast: false
matrix:
build_type: [Release, Debug]
python-version: ["3.13", "3.14"]
env:
MATRIX_NAME: linux-GCC13-${{ matrix.build_type }}-py${{ matrix.python-version }}
# Library Variables
LIBRARY_NAME: xmsinterp
XMS_VERSION: '0.0.0'
# Conan Variables
CONAN_REFERENCE: xmsinterp/0.0.0
CONAN_ARCHS: x86_64
CONAN_USERNAME: aquaveo
CONAN_CHANNEL: testing
CONAN_STABLE_BRANCH_PATTERN: 'we_should_never_use_this_string_for_a_branch_name'
CONAN_LOGIN_USERNAME: ${{ secrets.CONAN2_USER_SECRET }}
CONAN_PASSWORD: ${{ secrets.CONAN2_PASSWORD_SECRET }}
CONAN_REMOTE_URL: https://conan2.aquaveo.com/artifactory/api/conan/aquaveo-stable
# Aquapi Variables
AQUAPI_USERNAME: ${{ secrets.AQUAPI_USERNAME_SECRET }}
AQUAPI_PASSWORD: ${{ secrets.AQUAPI_PASSWORD_SECRET }}
AQUAPI_URL: ${{ secrets.AQUAPI_URL_DEV }}
# Python Variables
PYTHON_TARGET_VERSION: ${{ matrix.python-version }}
RELEASE_PYTHON: 'False'
CTEST_PARALLEL_LEVEL: '8'
steps:
# Checkout Sources
- name: Checkout Source
uses: actions/checkout@v4
# Install Python Dependencies
- name: Install Python Dependencies
run: |
# conan is pinned to a patch series on purpose: a minor bump can change
# package_id computation and silently detach builds from the binaries
# already published to the remote. Bump this deliberately.
pip install "conan~=2.31.0" devpi-client wheel
pip install --upgrade "xmsconan>=2.23.0" -i https://public.aquapi.aquaveo.com/aquaveo/dev/+simple
# Setup Conan
- name: Setup Conan
run: xmsconan_conan_setup --remote-url ${{ env.CONAN_REMOTE_URL }} --login
shell: bash
# Get Tag Name
- name: Get Tag
id: gitTag
uses: little-core-labs/get-git-tag@2c292ff564c1a61b989e29f0410d131317f89b03 # v3.0.2
if: startsWith(github.ref, 'refs/tags/')
# Set Conan Version
- name: Set Conan Version
uses: allenevans/set-env@b68e0a75c99b96b43963b54bc2be13e2f103ad87 # v2.0.0
with:
CONAN_REFERENCE: 'xmsinterp/${{ steps.gitTag.outputs.tag }}'
XMS_VERSION: ${{ steps.gitTag.outputs.tag }}
CONAN_UPLOAD: https://conan.aquaveo.com
RELEASE_PYTHON: 'True'
if: startsWith(github.ref, 'refs/tags/')
# Check for release branch
- name: Get Branch Name
id: gitBranch
uses: nelonoel/branch-name@1ea5c86cb559a8c4e623da7f188496208232e49f # v1.0.1
- name: Change Channel and URL if Release Branch
uses: allenevans/set-env@b68e0a75c99b96b43963b54bc2be13e2f103ad87 # v2.0.0
with:
CONAN_CHANNEL: stable
AQUAPI_URL: ${{ secrets.AQUAPI_URL_DEV }}
if: ${{ startsWith(github.ref, 'refs/tags/') && startsWith(env.BRANCH_NAME, env.XMS_VERSION) }}
# Generate XMS Conan
- name: Generate XMS Conan
run: xmsconan_gen --version ${{ env.XMS_VERSION }} build.toml
# Build the Conan Package
- name: Build the Conan Packages
run: "python build.py --filter=\"{\\\"build_type\\\": \\\"${{ matrix.build_type }}\\\"}\"${{ matrix.build_type == 'Release' && ' --wheel-dir wheelhouse' || '' }} --artifacts-dir test_artifacts"
shell: bash
- name: Upload test artifacts
uses: actions/upload-artifact@v4
with:
name: test-artifacts-${{ env.MATRIX_NAME }}
path: test_artifacts/
if-no-files-found: ignore
if: always()
# Repair wheel (Release only)
- name: Repair wheel
run: xmsconan_wheel_repair --wheel-dir wheelhouse --platform linux
shell: bash
if: matrix.build_type == 'Release'
- name: Upload wheel artifact
uses: actions/upload-artifact@v4
with:
name: wheel-${{ runner.os }}-py${{ matrix.python-version }}
path: wheelhouse/*.whl
if: matrix.build_type == 'Release'
# Upload wheel to Aquapi
- name: Upload wheel to Aquapi
run: xmsconan_wheel_deploy --wheel-dir wheelhouse
shell: bash
if: startsWith(github.ref, 'refs/tags/') && matrix.build_type == 'Release'
# Upload Release to Conan
- name: Upload Releases to Conan
run: "python build.py --skip-build --upload --filter=\"{\\\"build_type\\\": \\\"${{ matrix.build_type }}\\\"}\""
shell: bash
if: startsWith(github.ref, 'refs/tags/')
# Get the Release Data
- name: Get Release
id: git_release
uses: bruceadams/get-release@74c3d60f5a28f358ccf241a00c9021ea16f0569f # v1.3.2
env:
GITHUB_TOKEN: ${{ secrets.AQUAVEO_GITHUB_TOKEN }}
if: startsWith(github.ref, 'refs/tags/')
- name: Archive Conan Packages
run: |
conan cache save --file ${{ env.MATRIX_NAME }}.tar.gz xmsinterp/${{ env.XMS_VERSION }}:*
shell: bash
if: startsWith(github.ref, 'refs/tags/')
# Upload Zipped Conan Packages
- name: Upload Zipped Conan Packages
uses: actions/upload-release-asset@v1
env:
GITHUB_TOKEN: ${{ secrets.AQUAVEO_GITHUB_TOKEN }}
with:
upload_url: ${{ steps.git_release.outputs.upload_url }}
asset_path: ${{ github.workspace }}/${{ env.MATRIX_NAME }}.tar.gz
asset_name: ${{ env.MATRIX_NAME }}.tar.gz
asset_content_type: application/zip
if: startsWith(github.ref, 'refs/tags/')
# ----------------------------------------------------------------------------------------------
# WINDOWS
# ----------------------------------------------------------------------------------------------
windows:
name: Visual Studio ${{ matrix.compiler-version }} (${{ matrix.build_type }}, ${{ matrix.python-version }}, Windows)
runs-on: ${{ matrix.platform }}
strategy:
fail-fast: false
matrix:
platform: [windows-2022]
python-version: ["3.10", "3.13", "3.14"]
compiler-version: [17]
build_type: [Release, Debug]
env:
MATRIX_NAME: ${{ matrix.platform }}-VS${{ matrix.compiler-version }}-${{ matrix.build_type }}-py${{ matrix.python-version }}
# Library Variables
LIBRARY_NAME: xmsinterp
XMS_VERSION: '0.0.0'
# Conan Variables
CONAN_REFERENCE: xmsinterp/0.0.0
CONAN_ARCHS: x86_64
CONAN_USERNAME: aquaveo
CONAN_CHANNEL: testing
CONAN_STABLE_BRANCH_PATTERN: 'we_should_never_use_this_string_for_a_branch_name'
CONAN_LOGIN_USERNAME: ${{ secrets.CONAN2_USER_SECRET }}
CONAN_PASSWORD: ${{ secrets.CONAN2_PASSWORD_SECRET }}
CONAN_REMOTE_URL: https://conan2.aquaveo.com/artifactory/api/conan/aquaveo-stable
# Aquapi Variables
AQUAPI_USERNAME: ${{ secrets.AQUAPI_USERNAME_SECRET }}
AQUAPI_PASSWORD: ${{ secrets.AQUAPI_PASSWORD_SECRET }}
AQUAPI_URL: ${{ secrets.AQUAPI_URL_DEV }}
# Python Variables
PYTHON_TARGET_VERSION: ${{ matrix.python-version }}
RELEASE_PYTHON: 'False'
CTEST_PARALLEL_LEVEL: '8'
steps:
# Checkout Sources
- name: Checkout Source
uses: actions/checkout@v4
# Setup Python
- name: Set up Python ${{ matrix.python-version }}
uses: actions/setup-python@v5
with:
python-version: ${{ matrix.python-version }}
# Setup Dev Command Prompt env for MSVC
- name: Setup MSVC env
uses: ilammy/msvc-dev-cmd@0b201ec74fa43914dc39ae48a89fd1d8cb592756 # v1
with:
arch: x64
# Install Python Dependencies
- name: Install Python Dependencies
run: |
python -m pip install --upgrade pip
# conan is pinned to a patch series on purpose: a minor bump can change
# package_id computation and silently detach builds from the binaries
# already published to the remote. Bump this deliberately.
pip install "conan~=2.31.0" devpi-client wheel
python -m pip install --upgrade "xmsconan>=2.23.0" -i https://public.aquapi.aquaveo.com/aquaveo/dev/+simple
# Setup Visual Studio
- name: Setup Visual Studio
uses: microsoft/setup-msbuild@6fb02220983dee41ce7ae257b6f4d8f9bf5ed4ce # v2
# Setup Conan
- name: Setup Conan
run: xmsconan_conan_setup --remote-url ${{ env.CONAN_REMOTE_URL }} --login
shell: cmd
# Get Tag Name
- name: Get Tag
id: gitTag
uses: little-core-labs/get-git-tag@2c292ff564c1a61b989e29f0410d131317f89b03 # v3.0.2
if: startsWith(github.ref, 'refs/tags/')
# Set Conan Version
- name: Set Conan Version
uses: allenevans/set-env@b68e0a75c99b96b43963b54bc2be13e2f103ad87 # v2.0.0
with:
CONAN_REFERENCE: 'xmsinterp/${{ steps.gitTag.outputs.tag }}'
XMS_VERSION: ${{ steps.gitTag.outputs.tag }}
CONAN_UPLOAD: https://conan.aquaveo.com
RELEASE_PYTHON: 'True'
if: startsWith(github.ref, 'refs/tags/')
# Check for release branch
- name: Get Branch Name
id: gitBranch
uses: nelonoel/branch-name@1ea5c86cb559a8c4e623da7f188496208232e49f # v1.0.1
- name: Change Channel and URL if Release Branch
uses: allenevans/set-env@b68e0a75c99b96b43963b54bc2be13e2f103ad87 # v2.0.0
with:
CONAN_CHANNEL: stable
AQUAPI_URL: ${{ secrets.AQUAPI_URL_DEV }}
if: ${{ startsWith(github.ref, 'refs/tags/') && startsWith(env.BRANCH_NAME, env.XMS_VERSION) }}
# Generate XMS Conan
- name: Generate XMS Conan
run: xmsconan_gen --version ${{ env.XMS_VERSION }} build.toml
# Build the Conan Package
- name: Build the Conan Packages
run: "python build.py --filter=\"{\\\"build_type\\\": \\\"${{ matrix.build_type }}\\\"}\"${{ matrix.build_type == 'Release' && ' --wheel-dir wheelhouse' || '' }} --artifacts-dir test_artifacts"
shell: cmd
- name: Upload test artifacts
uses: actions/upload-artifact@v4
with:
name: test-artifacts-${{ env.MATRIX_NAME }}
path: test_artifacts/
if-no-files-found: ignore
if: always()
# Repair wheel (Release only)
- name: Repair wheel
run: xmsconan_wheel_repair --wheel-dir wheelhouse --platform windows
shell: bash
if: matrix.build_type == 'Release'
- name: Upload wheel artifact
uses: actions/upload-artifact@v4
with:
name: wheel-${{ runner.os }}-py${{ matrix.python-version }}
path: wheelhouse/*.whl
if: matrix.build_type == 'Release'
# Upload wheel to Aquapi
- name: Upload wheel to Aquapi
run: xmsconan_wheel_deploy --wheel-dir wheelhouse
shell: bash
if: startsWith(github.ref, 'refs/tags/') && matrix.build_type == 'Release'
# Upload Release to Conan
- name: Upload Releases to Conan
run: "python build.py --skip-build --upload --filter=\"{\\\"build_type\\\": \\\"${{ matrix.build_type }}\\\"}\""
shell: cmd
if: startsWith(github.ref, 'refs/tags/')
# Get the Release Data
- name: Get Release
id: git_release
uses: bruceadams/get-release@74c3d60f5a28f358ccf241a00c9021ea16f0569f # v1.3.2
env:
GITHUB_TOKEN: ${{ secrets.AQUAVEO_GITHUB_TOKEN }}
if: startsWith(github.ref, 'refs/tags/')
- name: Archive Conan Packages
run: |
conan cache save --file ${{ env.MATRIX_NAME }}.tar.gz xmsinterp/${{ env.XMS_VERSION }}:*
shell: cmd
if: startsWith(github.ref, 'refs/tags/')
# Upload Zipped Conan Packages
- name: Upload Zipped Conan Packages
uses: actions/upload-release-asset@v1
env:
GITHUB_TOKEN: ${{ secrets.AQUAVEO_GITHUB_TOKEN }}
with:
upload_url: ${{ steps.git_release.outputs.upload_url }}
asset_path: ${{ github.workspace }}/${{ env.MATRIX_NAME }}.tar.gz
asset_name: ${{ env.MATRIX_NAME }}.tar.gz
asset_content_type: application/zip
if: startsWith(github.ref, 'refs/tags/')