Files
glances/.github/workflows/test.yml
T
2026-09-05 19:01:36 +02:00

226 lines
7.2 KiB
YAML

# Run unitary test
name: test
on:
workflow_call:
jobs:
source-code-checks:
runs-on: ubuntu-24.04
timeout-minutes: 5
permissions:
contents: read
steps:
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
# - name: Check formatting with Ruff
# uses: chartboost/ruff-action@e18ae971ccee1b2d7bbef113930f00c670b78da4 # v1
# with:
# args: 'format --check'
- name: Check linting with Ruff
uses: chartboost/ruff-action@e18ae971ccee1b2d7bbef113930f00c670b78da4 # v1
with:
args: 'check'
# - name: Static type check
# run: |
# echo "Skipping static type check for the moment, too much error...";
# # pip install pyright
# # pyright glances
test-linux:
needs: source-code-checks
# https://github.com/actions/runner-images?tab=readme-ov-file#available-images
runs-on: ubuntu-24.04
timeout-minutes: 15
strategy:
matrix:
# Python EOL version are note tested
# Multiple Python version only tested for Linux
python-version: ["3.10", "3.11", "3.12", "3.13", "3.14"]
permissions:
contents: read
steps:
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
- name: Set up Python ${{ matrix.python-version }}
uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6
with:
python-version: ${{ matrix.python-version }}
cache: 'pip'
- name: Install dependencies
run: |
if [ -f dev-requirements.txt ]; then python -m pip install -r dev-requirements.txt; fi
if [ -f requirements.txt ]; then python -m pip install -r requirements.txt; fi
- name: Unitary tests
run: |
python -m pytest ./tests/test_core.py
test-v5-linux:
# The v5 suite, Linux-only and separate from `test-linux` on purpose.
#
# `test-linux` deliberately runs only tests/test_core.py: that file has no
# dependency beyond the runtime requirements, which is what lets the same
# command run on Windows, macOS and the FreeBSD VM. The v5 tests need the
# optional extras (fastapi, chevron, ...) plus pytest-asyncio, so they get
# their own job rather than weighing that portability down.
#
# Selection is by naming convention, not a hand-maintained list: every v5
# test file is `test_*_v5*.py` (91 of them today, and no v5-touching test
# file falls outside the convention). A new v5 test module is picked up
# with no change here.
#
# NOT included, on purpose: tests/test_mcp.py, tests/test_restful.py and
# tests/test_xmlrpc.py spawn a real server and wait a hard-coded
# `time.sleep(5)`, and the first two share port 61235; tests/test_perf.py
# asserts on 12 seconds of wall-clock. All four pass locally but are
# flaky by construction on a shared runner, and a CI that goes red at
# random is a CI people learn to ignore. Add them once the sleeps become
# poll-until-ready loops and the port collision is fixed.
needs: source-code-checks
runs-on: ubuntu-24.04
timeout-minutes: 15
strategy:
matrix:
python-version: ["3.10", "3.11", "3.12", "3.13", "3.14"]
permissions:
contents: read
steps:
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
- name: Set up Python ${{ matrix.python-version }}
uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6
with:
python-version: ${{ matrix.python-version }}
cache: 'pip'
- name: Install dependencies
run: |
python -m pip install ".[all]" pytest pytest-asyncio
- name: Unitary tests (v5)
run: |
python -m pytest tests/test_*_v5*.py
test-windows:
needs: source-code-checks
# https://github.com/actions/runner-images?tab=readme-ov-file#available-images
runs-on: windows-2025
timeout-minutes: 15
strategy:
matrix:
python-version: ["3.14"]
permissions:
contents: read
steps:
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
- name: Set up Python ${{ matrix.python-version }}
uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6
with:
python-version: ${{ matrix.python-version }}
cache: 'pip'
- name: Install dependencies
run: |
if (Test-Path -PathType Leaf "dev-requirements.txt") { python -m pip install -r dev-requirements.txt }
if (Test-Path -PathType Leaf "requirements.txt") { python -m pip install -r requirements.txt }
pip install pytest
pip install .
- name: Unitary tests
run: |
python -m pytest ./tests/test_core.py
test-macos:
needs: source-code-checks
# https://github.com/actions/runner-images?tab=readme-ov-file#available-images
runs-on: macos-15
timeout-minutes: 15
strategy:
matrix:
# Only test the latest stable version
python-version: ["3.14"]
permissions:
contents: read
steps:
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
- name: Set up Python ${{ matrix.python-version }}
uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6
with:
python-version: ${{ matrix.python-version }}
cache: 'pip'
- name: Install dependencies
run: |
if [ -f dev-requirements.txt ]; then python -m pip install -r dev-requirements.txt; fi
if [ -f requirements.txt ]; then python -m pip install -r requirements.txt; fi
- name: Unitary tests
run: |
python -m pytest ./tests/test_core.py
test-freebsd:
needs: source-code-checks
# FreeBSD is not offered by the GitHub-hosted runners, so the tests run in
# a FreeBSD VM booted under QEMU/KVM on a Linux runner. The whole job has
# to live in a single vmactions step: each step starts its own VM, so
# installing dependencies in one step and running pytest in another would
# run pytest in a VM that never saw the dependencies.
runs-on: ubuntu-latest
timeout-minutes: 30
permissions:
contents: read
steps:
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
- name: Unitary tests
uses: vmactions/freebsd-vm@77ed28d336d03fe19a3f4f7266c1d2c4714dd79d # v1.5.2
with:
usesh: true
cache-after-prepare: true
prepare: |
pkg install -y python3 gcc devel/py-pip devel/py-pytest sysutils/py-psutil
run: |
set -e
python3 --version
# Only the runtime requirements are installed here.
# dev-requirements.txt pulls in matplotlib's build chain (contourpy,
# cffi, ...), and FreeBSD has no wheels for those, so pip builds them
# from source and the job times out. tests/test_core.py does not need
# them.
python3 -m pip install --break-system-packages -r requirements.txt
# Request is needed for conftest.py
python3 -m pip install --break-system-packages requests
python3 -m pytest ./tests/test_core.py