Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
20 changes: 20 additions & 0 deletions .github/workflows/documentation.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -54,6 +54,16 @@ jobs:
version: ${{ steps.uv.outputs.version }}
python-version-file: .py-version

- name: Install Python package build dependencies (Python 3.14)
run: |
sudo apt-get update
# Pillow dependencies
sudo apt-get install -y libjpeg-dev zlib1g-dev libtiff-dev libfreetype6-dev liblcms2-dev libwebp-dev libopenjp2-7-dev
# scipy dependencies
sudo apt-get install -y g++ gfortran libopenblas-dev liblapack-dev pkg-config
# cffi dependencies
sudo apt-get install -y libffi-dev

- name: Setup Pages
id: pages
uses: actions/configure-pages@45bfe0192ca1faeb007ade9deae92b16b8254a0d # v6
Expand Down Expand Up @@ -93,6 +103,16 @@ jobs:
version: ${{ steps.uv.outputs.version }}
python-version-file: .py-version

- name: Install Python package build dependencies (Python 3.14)
run: |
sudo apt-get update
# Pillow dependencies
sudo apt-get install -y libjpeg-dev zlib1g-dev libtiff-dev libfreetype6-dev liblcms2-dev libwebp-dev libopenjp2-7-dev
# scipy dependencies
sudo apt-get install -y g++ gfortran libopenblas-dev liblapack-dev pkg-config
# cffi dependencies
sudo apt-get install -y libffi-dev

- name: Verify generated gRPC docs are up to date
run: make docs-check-grpc

Expand Down
24 changes: 24 additions & 0 deletions .github/workflows/e2e.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -194,6 +194,14 @@ jobs:
version: ${{ steps.uv.outputs.version }}
python-version-file: .py-version

- name: Install Python package build dependencies (Python 3.14)
run: |
sudo apt-get update
# Pillow dependencies
sudo apt-get install -y libjpeg-dev zlib1g-dev libtiff-dev libfreetype6-dev liblcms2-dev libwebp-dev libopenjp2-7-dev
# scipy dependencies
sudo apt-get install -y gfortran libopenblas-dev liblapack-dev pkg-config

- name: Install Go
uses: actions/setup-go@924ae3a1cded613372ab5595356fb5720e22ba16 # v6
with:
Expand Down Expand Up @@ -258,6 +266,14 @@ jobs:
version: ${{ steps.uv.outputs.version }}
python-version-file: .py-version

- name: Install Python package build dependencies (Python 3.14)
run: |
sudo apt-get update
# Pillow dependencies
sudo apt-get install -y libjpeg-dev zlib1g-dev libtiff-dev libfreetype6-dev liblcms2-dev libwebp-dev libopenjp2-7-dev
# scipy dependencies
sudo apt-get install -y gfortran libopenblas-dev liblapack-dev pkg-config

- name: Install Go
uses: actions/setup-go@924ae3a1cded613372ab5595356fb5720e22ba16 # v6
with:
Expand Down Expand Up @@ -300,6 +316,14 @@ jobs:
version: ${{ steps.uv.outputs.version }}
python-version-file: .py-version

- name: Install Python package build dependencies (Python 3.14)
run: |
sudo apt-get update
# Pillow dependencies
sudo apt-get install -y libjpeg-dev zlib1g-dev libtiff-dev libfreetype6-dev liblcms2-dev libwebp-dev libopenjp2-7-dev
# scipy dependencies
sudo apt-get install -y gfortran libopenblas-dev liblapack-dev pkg-config

- name: Install Go
uses: actions/setup-go@924ae3a1cded613372ab5595356fb5720e22ba16 # v6
with:
Expand Down
10 changes: 10 additions & 0 deletions .github/workflows/lint.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -98,6 +98,16 @@ jobs:
version: ${{ steps.uv.outputs.version }}
python-version-file: .py-version

- name: Install Python package build dependencies (Python 3.14)
run: |
sudo apt-get update
# Pillow dependencies
sudo apt-get install -y libjpeg-dev zlib1g-dev libtiff-dev libfreetype6-dev liblcms2-dev libwebp-dev libopenjp2-7-dev
# scipy dependencies
sudo apt-get install -y g++ gfortran libopenblas-dev liblapack-dev pkg-config
# cffi dependencies
sudo apt-get install -y libffi-dev

- name: Run ty
working-directory: python
run: make ty
Expand Down
35 changes: 31 additions & 4 deletions .github/workflows/python-tests.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -37,28 +37,33 @@ jobs:
- name: Compute test matrix
id: matrix
run: |
# PRs: test only Python 3.12 on Linux to save CI time.
# PRs: test only Python 3.14 on Linux to save CI time.
# Merge queue and workflow_dispatch run the full matrix
# (all Python versions on both Linux and macOS).
if [[ "${{ github.event_name }}" == "pull_request" ]]; then
echo 'python-versions=["3.12"]' >> "$GITHUB_OUTPUT"
echo 'python-versions=["3.14"]' >> "$GITHUB_OUTPUT"
echo 'runners=["ubuntu-24.04"]' >> "$GITHUB_OUTPUT"
else
echo 'python-versions=["3.11", "3.12", "3.13"]' >> "$GITHUB_OUTPUT"
echo 'python-versions=["3.14"]' >> "$GITHUB_OUTPUT"
echo 'runners=["ubuntu-24.04", "macos-15"]' >> "$GITHUB_OUTPUT"
fi

pytest-matrix:
needs: changes
if: needs.changes.outputs.should_run == 'true' || github.event_name == 'workflow_dispatch'
runs-on: ${{ matrix.runs-on }}
env:
# Building packages like grpcio and scipy from source (required for
# Python 3.14 until upstream ships wheels) can exceed the default 300s
# uv lock timeout. 30 minutes gives enough headroom.
UV_LOCK_TIMEOUT: 1800
strategy:
matrix:
runs-on: ${{ fromJson(needs.changes.outputs.runners) }}
# Floor: oldest Python in supported platforms (RHEL 9 appstream)
# Ceiling: newest Python in latest Fedora
# Review on each RHEL/Fedora release
# PRs run only 3.12 on Linux; merge queue runs all versions
# PRs run only 3.14 on Linux; merge queue runs all versions
# on both Linux and macOS.
python-version: ${{ fromJson(needs.changes.outputs.python-versions) }}
steps:
Expand Down Expand Up @@ -104,6 +109,17 @@ jobs:
sudo apt-get update
sudo apt-get install -y libgpiod-dev liblgpio-dev

- name: Install Python package build dependencies (Linux, Python 3.14)
if: runner.os == 'Linux' && matrix.python-version == '3.14'
run: |
sudo apt-get update
# Pillow dependencies
sudo apt-get install -y libjpeg-dev zlib1g-dev libtiff-dev libfreetype6-dev liblcms2-dev libwebp-dev libopenjp2-7-dev
# scipy dependencies
sudo apt-get install -y g++ gfortran libopenblas-dev liblapack-dev pkg-config
# cffi dependencies
sudo apt-get install -y libffi-dev

- name: Install nftables and dnsmasq (Linux)
if: runner.os == 'Linux'
run: |
Expand All @@ -128,6 +144,17 @@ jobs:
run: |
brew install qemu

- name: Install Python package build dependencies (macOS, Python 3.14)
if: runner.os == 'macOS' && matrix.python-version == '3.14'
run: |
# Pillow dependencies
brew install libjpeg libtiff little-cms2 webp
# scipy dependencies
brew install gcc openblas
# Link gfortran so scipy's meson build can find it
# Homebrew's gcc provides gfortran-14, create a gfortran symlink
ln -sf "$(brew --prefix gcc)/bin/gfortran-$(brew list --versions gcc | sed 's/gcc //' | cut -d. -f1)" /usr/local/bin/gfortran

# Homebrew Renode is slow (~5+ minutes per job). Install on macOS only when this run
# touches the Renode driver, or on workflow_dispatch (full manual run). Linux still
# installs Renode from the .deb in all jobs (fast).
Expand Down
2 changes: 1 addition & 1 deletion .py-version
Original file line number Diff line number Diff line change
@@ -1 +1 @@
3.12.11
3.14.6
2 changes: 1 addition & 1 deletion python/__templates__/driver/pyproject.toml.tmpl
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ license = "Apache-2.0"
authors = [
{ name = "${AUTHOR_NAME}", email = "${AUTHOR_EMAIL}" }
]
requires-python = ">=3.11"
requires-python = ">=3.12"
dependencies = [
"anyio>=4.10.0",
"jumpstarter",
Expand Down
2 changes: 1 addition & 1 deletion python/examples/android-emulator/pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ version = "0.1.0"
description = "Android emulator testing example using Jumpstarter ADB tunneling"
authors = [{ name = "Kirk Brauer", email = "kbrauer@hatci.com" }]
license = "Apache-2.0"
requires-python = ">=3.11"
requires-python = ">=3.14"
dependencies = [
"pytest>=8.3.2",
"jumpstarter",
Expand Down
2 changes: 1 addition & 1 deletion python/examples/automotive/pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ authors = [
]
readme = "README.md"
license = "Apache-2.0"
requires-python = ">=3.11"
requires-python = ">=3.14"
dependencies = [
"pytest>=8.3.2",
"jumpstarter",
Expand Down
2 changes: 1 addition & 1 deletion python/examples/soc-pytest/pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ authors = [
]
readme = "README.md"
license = "Apache-2.0"
requires-python = ">=3.11"
requires-python = ">=3.14"
dependencies = [
"pytest>=8.3.2",
"jumpstarter",
Expand Down
2 changes: 1 addition & 1 deletion python/examples/xcp-ecu/pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ authors = [
]
readme = "README.md"
license = "Apache-2.0"
requires-python = ">=3.11"
requires-python = ">=3.14"
dependencies = [
"pytest>=8.3.2",
"jumpstarter",
Expand Down
2 changes: 1 addition & 1 deletion python/packages/hatch-pin-jumpstarter/pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ readme = "README.md"
authors = [
{ name = "Nick Cao", email = "nickcao@nichi.co" }
]
requires-python = ">=3.11"
requires-python = ">=3.14"
dependencies = [
"hatchling>=1.27.0",
"packaging>=24.2",
Expand Down
2 changes: 1 addition & 1 deletion python/packages/jumpstarter-all/pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ description = "Jumpstarter meta-package which will install all packages"
authors = [{ name = "Miguel Angel Ajo", email = "majopela@redhat.com" }]
readme = "README.md"
license = "Apache-2.0"
requires-python = ">=3.11"
requires-python = ">=3.14"
dependencies = [
"jumpstarter",
"jumpstarter-cli",
Expand Down
2 changes: 1 addition & 1 deletion python/packages/jumpstarter-cli-admin/pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ description = ""
authors = [{ name = "Kirk Brauer", email = "kbrauer@hatci.com" }]
readme = "README.md"
license = "Apache-2.0"
requires-python = ">=3.11"
requires-python = ">=3.14"
dependencies = [
"grpcio-reflection>=1.60.0",
"jumpstarter-cli-common",
Expand Down
2 changes: 1 addition & 1 deletion python/packages/jumpstarter-cli-common/pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ description = ""
authors = [{ name = "Kirk Brauer", email = "kbrauer@hatci.com" }]
readme = "README.md"
license = "Apache-2.0"
requires-python = ">=3.11"
requires-python = ">=3.14"
dependencies = [
"jumpstarter",
"pydantic>=2.8.2",
Expand Down
2 changes: 1 addition & 1 deletion python/packages/jumpstarter-cli-driver/pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ authors = [
]
readme = "README.md"
license = "Apache-2.0"
requires-python = ">=3.11"
requires-python = ">=3.14"
dependencies = ["jumpstarter-cli-common", "click>=8.1.7.2"]

[dependency-groups]
Expand Down
2 changes: 1 addition & 1 deletion python/packages/jumpstarter-cli/pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ authors = [
]
readme = "README.md"
license = "Apache-2.0"
requires-python = ">=3.11"
requires-python = ">=3.14"
dependencies = [
"jumpstarter-cli-admin",
"jumpstarter-cli-driver",
Expand Down
2 changes: 1 addition & 1 deletion python/packages/jumpstarter-driver-adb/pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ license = "Apache-2.0"
authors = [
{ name = "Kirk Brauer", email = "kbrauer@hatci.com" }
]
requires-python = ">=3.11"
requires-python = ">=3.14"
dependencies = [
"click>=8.0.0",
"jumpstarter",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ license = "Apache-2.0"
authors = [
{ name = "Kirk Brauer", email = "kbrauer@hatci.com" }
]
requires-python = ">=3.11"
requires-python = ">=3.14"
dependencies = [
"jumpstarter",
"jumpstarter-driver-adb",
Expand Down
2 changes: 1 addition & 1 deletion python/packages/jumpstarter-driver-ble/pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ description = "Bluetooth Low Energy (BLE) driver"
readme = "README.md"
license = "Apache-2.0"
authors = [{ name = "Andreas Karner", email = "andreas.karner@outlook.com" }]
requires-python = ">=3.11"
requires-python = ">=3.14"
dependencies = [
"anyio>=4.10.0",
"click>=8.1.8",
Expand Down
2 changes: 1 addition & 1 deletion python/packages/jumpstarter-driver-can/pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ authors = [
]
readme = "README.md"
license = "Apache-2.0"
requires-python = ">=3.11"
requires-python = ">=3.14"
dependencies = ["jumpstarter", "python-can>=4.5.0", "can-isotp>=2.0.6"]

[project.entry-points."jumpstarter.drivers"]
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ authors = [
]
readme = "README.md"
license = "Apache-2.0"
requires-python = ">=3.11"
requires-python = ">=3.14"
dependencies = ["jumpstarter", "click>=8.1.7.2"]

[project.entry-points."jumpstarter.drivers"]
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ description = ""
authors = [{ name = "Leonardo Rossetti", email = "lrossett@redhat.com" }]
readme = "README.md"
license = "Apache-2.0"
requires-python = ">=3.11"
requires-python = ">=3.14"
dependencies = [
"jumpstarter",
"jumpstarter-driver-composite",
Expand Down
2 changes: 1 addition & 1 deletion python/packages/jumpstarter-driver-doip/pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ license = "Apache-2.0"
authors = [
{ name = "Vinicius Zein", email = "vtzein@gmail.com" },
]
requires-python = ">=3.11"
requires-python = ">=3.14"
dependencies = [
"jumpstarter",
"doipclient>=1.1.0",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ license = "Apache-2.0"
authors = [
{ name = "Miguel Angel Ajo Pelayo", email = "miguelangel@ajo.es" }
]
requires-python = ">=3.11"
requires-python = ">=3.14"
dependencies = [
"jumpstarter",
"click>=8.1.7",
Expand Down
2 changes: 1 addition & 1 deletion python/packages/jumpstarter-driver-dutlink/pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ authors = [
]
readme = "README.md"
license = "Apache-2.0"
requires-python = ">=3.11"
requires-python = ">=3.14"
dependencies = [
"jumpstarter",
"jumpstarter-driver-composite",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ license = { text = "Apache-2.0" }
authors = [
{ name = "Enric Balletbo i Serra", email = "eballetbo@redhat.com" }
]
requires-python = ">=3.11"
requires-python = ">=3.14"
dependencies = [
"anyio>=4.10.0",
"jumpstarter",
Expand Down
2 changes: 1 addition & 1 deletion python/packages/jumpstarter-driver-esp32/pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ license = "Apache-2.0"
authors = [
{ name = "Benny Zlotnik", email = "bzlotnik@redhat.com" }
]
requires-python = ">=3.11"
requires-python = ">=3.14"
dependencies = [
"anyio>=4.10.0",
"click>=8.3.1",
Expand Down
2 changes: 1 addition & 1 deletion python/packages/jumpstarter-driver-flashers/pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ authors = [
{ name = "Benny Zlotnik", email = "bzlotnik@redhat.com" },
{ name = "Miguel Angel Ajo", email = "majopela@redhat.com" },
]
requires-python = ">=3.11"
requires-python = ">=3.14"
dependencies = [
"oras>=0.2.25",
"anyio>=4.10.0",
Expand Down
2 changes: 1 addition & 1 deletion python/packages/jumpstarter-driver-gpiod/pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ authors = [
]
readme = "README.md"
license = "Apache-2.0"
requires-python = ">=3.11"
requires-python = ">=3.14"
dependencies = ["jumpstarter", "jumpstarter-driver-power", "click>=8.1.7.2", "gpiod; platform_system == 'Linux'"]

[project.entry-points."jumpstarter.drivers"]
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ license = "Apache-2.0"
authors = [
{ name = "Miguel Angel Ajo", email = "majopela@redhat.com" }
]
requires-python = ">=3.11"
requires-python = ">=3.14"
dependencies = [
"anyio>=4.10.0",
"jumpstarter",
Expand Down
Loading
Loading