CI: run the suite on every platform the README now advertises
Build PCM package / build (push) Successful in 5s
tests / ubuntu-latest · py3.11 (push) Successful in 1m32s
tests / ubuntu-latest · py3.13 (push) Successful in 1m25s
tests / archlinux:latest (push) Failing after 14s
tests / debian:12 (push) Failing after 7s
tests / fedora:latest (push) Failing after 8s
tests / ubuntu:24.04 (push) Failing after 9s
tests / NixOS (FHS wrapper from docs/NIXOS.md) (push) Has been skipped
tests / macos-latest · py3.11 (push) Has been cancelled
tests / macos-latest · py3.13 (push) Has been cancelled
tests / windows-latest · py3.11 (push) Has been cancelled
tests / windows-latest · py3.13 (push) Has been cancelled
Build PCM package / build (push) Successful in 5s
tests / ubuntu-latest · py3.11 (push) Successful in 1m32s
tests / ubuntu-latest · py3.13 (push) Successful in 1m25s
tests / archlinux:latest (push) Failing after 14s
tests / debian:12 (push) Failing after 7s
tests / fedora:latest (push) Failing after 8s
tests / ubuntu:24.04 (push) Failing after 9s
tests / NixOS (FHS wrapper from docs/NIXOS.md) (push) Has been skipped
tests / macos-latest · py3.11 (push) Has been cancelled
tests / macos-latest · py3.13 (push) Has been cancelled
tests / windows-latest · py3.11 (push) Has been cancelled
tests / windows-latest · py3.13 (push) Has been cancelled
Gitea Actions matrix: ubuntu-latest (py3.11/3.13) plus Debian 12, Ubuntu 24.04, Fedora and Arch containers, each installing the system libraries PySide6 wheels dlopen - all four validated locally in Docker (Debian 141/141, QtWidgets import probe green everywhere). Windows/macOS and a NixOS-FHS job (tools/ci-fhs.nix, the library set from docs/NIXOS.md) are gated to github.com runners so they skip instead of queueing forever here. README gets a Platform support table with the workflow badge; KiCad-in-the-loop stays field-tested, CI covers the solver and fallback suite.
This commit is contained in:
@@ -0,0 +1,143 @@
|
||||
# Runs the full pytest suite (solver, raster, platform fallbacks)
|
||||
# against real pip wheels on every platform row advertised in the
|
||||
# README's "Platform support" table. What it cannot do is launch KiCad
|
||||
# itself — the plugin-inside-KiCad integration stays field-tested.
|
||||
#
|
||||
# Gitea/Forgejo Actions syntax is GitHub-Actions-compatible; if the
|
||||
# repo is ever mirrored to github.com, copy this file to
|
||||
# .github/workflows/ (GitHub does not read .gitea/). The
|
||||
# windows/macos and NixOS jobs need runners that only github.com
|
||||
# provides for free, so they are gated on the server URL instead of
|
||||
# queueing forever on a self-hosted instance; drop the `if:` lines if
|
||||
# you register your own runners with those labels.
|
||||
# Third-party actions pinned to commit SHAs, matching build-pcm.yml:
|
||||
# mutable tags could be repointed at malicious code.
|
||||
name: tests
|
||||
|
||||
on:
|
||||
push:
|
||||
branches: [main]
|
||||
pull_request:
|
||||
workflow_dispatch:
|
||||
|
||||
env:
|
||||
UV_PYTHON: "3.12"
|
||||
# No test opens a window, but if one ever creates a figure the Qt
|
||||
# backend must not try to reach a display on a headless runner.
|
||||
QT_QPA_PLATFORM: offscreen
|
||||
|
||||
jobs:
|
||||
linux:
|
||||
name: ubuntu-latest · py${{ matrix.python }}
|
||||
runs-on: ubuntu-latest
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
python: ["3.11", "3.13"]
|
||||
env:
|
||||
UV_PYTHON: ${{ matrix.python }}
|
||||
steps:
|
||||
- uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4
|
||||
- name: Qt runtime libraries (PySide6 wheels dlopen these)
|
||||
run: >
|
||||
sudo apt-get update -qq && sudo apt-get install -y -qq
|
||||
libglib2.0-0 libgl1 libegl1 libopengl0 libfontconfig1
|
||||
libfreetype6 libdbus-1-3 libxkbcommon0 libzstd1 libxcb1
|
||||
libx11-6 libxext6 libxrender1 libsm6 libice6
|
||||
- uses: astral-sh/setup-uv@d4b2f3b6ecc6e67c4457f6d3e41ec42d3d0fcb86 # v5.4.2
|
||||
- run: uv sync --frozen
|
||||
- run: uv run python -c "import PySide6.QtWidgets"
|
||||
- run: uv run pytest -q
|
||||
|
||||
distros:
|
||||
name: ${{ matrix.distro }}
|
||||
runs-on: ubuntu-latest
|
||||
container: ${{ matrix.distro }}
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
include:
|
||||
- distro: debian:12
|
||||
setup: >
|
||||
apt-get update -qq && apt-get install -y -qq
|
||||
curl ca-certificates
|
||||
libglib2.0-0 libgl1 libegl1 libopengl0 libfontconfig1
|
||||
libfreetype6 libdbus-1-3 libxkbcommon0 libzstd1 libxcb1
|
||||
libx11-6 libxext6 libxrender1 libsm6 libice6
|
||||
- distro: ubuntu:24.04
|
||||
setup: >
|
||||
apt-get update -qq && apt-get install -y -qq
|
||||
curl ca-certificates
|
||||
libglib2.0-0 libgl1 libegl1 libopengl0 libfontconfig1
|
||||
libfreetype6 libdbus-1-3 libxkbcommon0 libzstd1 libxcb1
|
||||
libx11-6 libxext6 libxrender1 libsm6 libice6
|
||||
- distro: fedora:latest
|
||||
setup: >
|
||||
dnf install -y -q
|
||||
glib2 mesa-libGL mesa-libEGL libglvnd-opengl fontconfig
|
||||
freetype dbus-libs libxkbcommon libzstd libxcb libX11
|
||||
libXext libXrender libSM libICE
|
||||
- distro: archlinux:latest
|
||||
setup: >
|
||||
pacman -Syu --noconfirm --needed
|
||||
curl glib2 libglvnd fontconfig freetype2 dbus
|
||||
libxkbcommon zstd libxcb libx11 libxext libxrender
|
||||
libsm libice
|
||||
steps:
|
||||
- uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4
|
||||
- name: Distro Qt runtime libraries
|
||||
run: ${{ matrix.setup }}
|
||||
- name: Install uv
|
||||
run: |
|
||||
curl -LsSf https://astral.sh/uv/install.sh | sh
|
||||
echo "$HOME/.local/bin" >> "$GITHUB_PATH"
|
||||
- run: uv sync --frozen
|
||||
- run: uv run python -c "import PySide6.QtWidgets"
|
||||
- run: uv run pytest -q
|
||||
|
||||
desktop:
|
||||
name: ${{ matrix.os }} · py${{ matrix.python }}
|
||||
# github.com only: no free Windows/macOS runners on self-hosted
|
||||
# Gitea/Forgejo. Skipped (not queued) elsewhere.
|
||||
if: github.server_url == 'https://github.com'
|
||||
runs-on: ${{ matrix.os }}
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
os: [windows-latest, macos-latest]
|
||||
python: ["3.11", "3.13"]
|
||||
env:
|
||||
UV_PYTHON: ${{ matrix.python }}
|
||||
steps:
|
||||
- uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4
|
||||
- uses: astral-sh/setup-uv@d4b2f3b6ecc6e67c4457f6d3e41ec42d3d0fcb86 # v5.4.2
|
||||
- run: uv sync --frozen
|
||||
- run: uv run python -c "import PySide6.QtWidgets"
|
||||
- run: uv run pytest -q
|
||||
|
||||
nixos:
|
||||
name: NixOS (FHS wrapper from docs/NIXOS.md)
|
||||
# Needs unprivileged user namespaces for bubblewrap, which the
|
||||
# GitHub ubuntu VM allows but a docker-based act_runner does not.
|
||||
if: github.server_url == 'https://github.com'
|
||||
runs-on: ubuntu-latest
|
||||
continue-on-error: true
|
||||
steps:
|
||||
- uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4
|
||||
- uses: DeterminateSystems/nix-installer-action@e50d5f73bfe71c2dd0aa4218de8f4afa59f8f81d # v16
|
||||
- name: Build the FHS environment (docs/NIXOS.md library set)
|
||||
run: nix-build tools/ci-fhs.nix -o ci-fhs
|
||||
- name: Run the suite inside the FHS env
|
||||
# shellcheck disable=SC2016 -- $HOME/$PATH expand inside the
|
||||
# FHS bash, not the runner shell; single quotes are the point.
|
||||
run: |
|
||||
# shellcheck disable=SC2016
|
||||
./ci-fhs/bin/fill-resistance-ci -c '
|
||||
set -e
|
||||
curl -LsSf https://astral.sh/uv/install.sh | sh
|
||||
export PATH="$HOME/.local/bin:$PATH"
|
||||
export UV_PROJECT_ENVIRONMENT=/tmp/venv
|
||||
uv sync --frozen
|
||||
uv run python -c "import PySide6.QtWidgets"
|
||||
uv run pytest -q
|
||||
'
|
||||
@@ -28,6 +28,27 @@ happens around the notch on F.Cu.*
|
||||
Uses the KiCad **IPC API** (`kicad-python` / `kipy`), not the deprecated
|
||||
SWIG API. Requires KiCad **10.0.1+**.
|
||||
|
||||
## Platform support
|
||||
|
||||
[](https://git.b4l.co.th/B4L/kicad-zone-resistance/actions)
|
||||
|
||||
| Platform | Status | Verified by |
|
||||
|-----------------------------|:------:|-------------|
|
||||
| Windows | ✅ | development platform; CI test suite |
|
||||
| macOS | ✅ | field-tested in KiCad 10; CI test suite |
|
||||
| NixOS | ✅ | field-tested in KiCad 10 ([setup](docs/NIXOS.md)); CI runs the suite inside the documented FHS env |
|
||||
| Debian 12 | ✅ | CI test suite in container |
|
||||
| Ubuntu 24.04 | ✅ | CI test suite in container |
|
||||
| Fedora (latest) | ✅ | CI test suite in container |
|
||||
| Arch (latest) | ✅ | CI test suite in container |
|
||||
|
||||
CI (`.gitea/workflows/ci.yml`) runs the full pytest suite — solver,
|
||||
rasterizer, and the platform-fallback regressions — headless against
|
||||
the real pip wheels of each row, including the `PySide6.QtWidgets`
|
||||
import probe that decides the matplotlib backend. What CI *cannot* do
|
||||
is launch KiCad itself, so "runs inside KiCad" remains field-tested
|
||||
(Windows continuously, macOS and NixOS per release).
|
||||
|
||||
## Setup (one-time)
|
||||
|
||||
The plugin is developed and tested on **Windows**; **macOS works**
|
||||
|
||||
@@ -0,0 +1,25 @@
|
||||
# CI-only: the FHS environment from docs/NIXOS.md minus KiCad itself.
|
||||
# The suite runs against pip wheels exactly as the plugin's venv does
|
||||
# inside the wrapped KiCad: PySide6 dlopens these libraries at FHS
|
||||
# paths. Keep this library list in sync with the buildFHSEnv recipe in
|
||||
# docs/NIXOS.md — CI failing here means the documented recipe broke.
|
||||
{ pkgs ? import <nixpkgs> { } }:
|
||||
|
||||
pkgs.buildFHSEnv {
|
||||
name = "fill-resistance-ci";
|
||||
targetPkgs = p: with p; [
|
||||
bashInteractive curl cacert
|
||||
glib fontconfig freetype dbus libGL libxkbcommon
|
||||
xcb-util-cursor wayland zlib zstd.out
|
||||
xorg.libX11 xorg.libxcb xorg.libXext xorg.libXrender
|
||||
xorg.libSM xorg.libICE xorg.libXrandr xorg.libXi
|
||||
xorg.libXcursor xorg.libXfixes
|
||||
# xcb-util family needed by PySide6's bundled xcb platform plugin
|
||||
xorg.xcbutil xorg.xcbutilwm xorg.xcbutilimage
|
||||
xorg.xcbutilkeysyms xorg.xcbutilrenderutil
|
||||
];
|
||||
# See docs/NIXOS.md failure layer 3: the desktop's QT_PLUGIN_PATH
|
||||
# must not leak into the wheel's bundled Qt.
|
||||
profile = "unset QT_PLUGIN_PATH";
|
||||
runScript = "bash";
|
||||
}
|
||||
Reference in New Issue
Block a user