Skip to content

Signal auto downsampling: apply the configured maximum to all curves #1153

Signal auto downsampling: apply the configured maximum to all curves

Signal auto downsampling: apply the configured maximum to all curves #1153

Workflow file for this run

# This workflow will install Python dependencies, run tests and lint with a variety of Python versions
# For more information see: https://docs.github.com/en/actions/automating-builds-and-tests/building-and-testing-python
# Inspired from https://pytest-qt.readthedocs.io/en/latest/troubleshooting.html#github-actions
name: Install and Test on Ubuntu (latest) with PyQt5
on:
push:
branches: [ "main", "develop", "release" ]
pull_request:
branches: [ "main", "develop", "release" ]
workflow_dispatch:
inputs:
job_to_run:
description: 'Which job to run'
required: true
type: choice
options:
- 'all'
- 'build'
- 'build_latest'
default: 'all'
schedule:
# Only the "build_latest" job runs on schedule (see execution conditions below)
- cron: "0 5 * * 1"
jobs:
build:
if: ${{ (github.event_name == 'push' || github.event_name == 'pull_request') || (github.event_name == 'workflow_dispatch' && (github.event.inputs.job_to_run == 'all' || github.event.inputs.job_to_run == 'build')) }}
env:
DISPLAY: ':99.0'
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
python-version: ["3.10", "3.14"]
steps:
- uses: actions/checkout@v7
- name: Set up Python ${{ matrix.python-version }}
uses: actions/setup-python@v7
with:
python-version: ${{ matrix.python-version }}
- name: Install dependencies
run: |
sudo apt-get update
sudo apt-get install -y libxkbcommon-x11-0 libxcb-icccm4 libxcb-image0 libxcb-keysyms1 libxcb-randr0 libxcb-render-util0 libxcb-xinerama0 libxcb-xfixes0 x11-utils
/sbin/start-stop-daemon --start --quiet --pidfile /tmp/custom_xvfb_99.pid --make-pidfile --background --exec /usr/bin/Xvfb -- :99 -screen 0 1920x1200x24 -ac +extension GLX
python -m pip install --upgrade pip
python -m pip install ruff pytest httpx
pip install PyQt5
# PRs select by target branch; pushes and manual runs by their own branch.
case "${{ github.base_ref || github.ref_name }}" in
develop|feature/*|fix/*) DEPENDENCIES=development ;;
release) DEPENDENCIES=release ;;
*) DEPENDENCIES=published ;;
esac
if [ "$DEPENDENCIES" = "development" ]; then
# Clone and install development versions of key dependencies with editable install
cd ..
git clone --depth 1 https://github.com/PlotPyStack/PythonQwt.git
git clone --depth 1 --branch develop https://github.com/PlotPyStack/guidata.git
git clone --depth 1 --branch develop https://github.com/PlotPyStack/plotpy.git
DEPENDENCY_BRANCH="${{ github.head_ref || github.ref_name }}"
git clone --depth 1 --branch "$DEPENDENCY_BRANCH" https://github.com/DataLab-Platform/sigima.git || git clone --depth 1 --branch develop https://github.com/DataLab-Platform/sigima.git
git clone --depth 1 --branch "$DEPENDENCY_BRANCH" https://github.com/DataLab-Platform/SigimaX.git || git clone --depth 1 --branch develop https://github.com/DataLab-Platform/SigimaX.git
git clone --depth 1 --branch "$DEPENDENCY_BRANCH" https://github.com/DataLab-Platform/DataLab-Capsule.git || git clone --depth 1 --branch develop https://github.com/DataLab-Platform/DataLab-Capsule.git
cd DataLab
pip install -e ../guidata
pip install -e ../PythonQwt
pip install -e ../plotpy
pip install -e ../sigima
pip install -e ../SigimaX --no-deps
pip install -e ../DataLab-Capsule
# Install tomli for TOML parsing (safe if already present)
pip install tomli
# Extract dependencies of DataLab and SigimaX (installed with --no-deps
# above), save them to file, then install
python -c "import tomli; deps=[d for p in ('pyproject.toml', '../SigimaX/pyproject.toml') for d in tomli.load(open(p,'rb'))['project']['dependencies'] if not any(n in d for n in ['guidata','PlotPy','Sigima', 'SigimaX', 'datalab-capsule'])]; open('deps.txt','w').write('\n'.join(deps))"
pip install -r deps.txt
# Install DataLab without dependencies
pip install --no-deps .
elif [ "$DEPENDENCIES" = "release" ]; then
# Clone dependencies from release branches (with fallback to main/master)
cd ..
# Try cloning PythonQwt from main or master
git clone --depth 1 https://github.com/PlotPyStack/PythonQwt.git || git clone --depth 1 --branch master https://github.com/PlotPyStack/PythonQwt.git
# Try cloning guidata from release, fallback to main or master
git clone --depth 1 --branch release https://github.com/PlotPyStack/guidata.git || git clone --depth 1 https://github.com/PlotPyStack/guidata.git || git clone --depth 1 --branch master https://github.com/PlotPyStack/guidata.git
# Try cloning plotpy from release, fallback to main or master
git clone --depth 1 --branch release https://github.com/PlotPyStack/plotpy.git || git clone --depth 1 https://github.com/PlotPyStack/plotpy.git || git clone --depth 1 --branch master https://github.com/PlotPyStack/plotpy.git
# Try cloning sigima from release, fallback to main
git clone --depth 1 --branch release https://github.com/DataLab-Platform/sigima.git || git clone --depth 1 https://github.com/DataLab-Platform/sigima.git
# Try cloning SigimaX from release, fallback to main
git clone --depth 1 --branch release https://github.com/DataLab-Platform/SigimaX.git || git clone --depth 1 https://github.com/DataLab-Platform/SigimaX.git
git clone --depth 1 --branch release https://github.com/DataLab-Platform/DataLab-Capsule.git || git clone --depth 1 https://github.com/DataLab-Platform/DataLab-Capsule.git
cd DataLab
pip install -e ../guidata
pip install -e ../PythonQwt
pip install -e ../plotpy
pip install -e ../sigima
pip install -e ../SigimaX --no-deps
pip install -e ../DataLab-Capsule
# Install tomli for TOML parsing (safe if already present)
pip install tomli
# Extract dependencies of DataLab and SigimaX (installed with --no-deps
# above), save them to file, then install
python -c "import tomli; deps=[d for p in ('pyproject.toml', '../SigimaX/pyproject.toml') for d in tomli.load(open(p,'rb'))['project']['dependencies'] if not any(n in d for n in ['guidata','PlotPy','Sigima', 'SigimaX', 'datalab-capsule'])]; open('deps.txt','w').write('\n'.join(deps))"
pip install -r deps.txt
# Install DataLab without dependencies
pip install --no-deps .
else
# Install from PyPI normally for main branch
pip install .
fi
- name: Lint with Ruff
run: ruff check --output-format=github datalab
- name: Test with pytest
run: |
# Keep the core dump of a crashed test process, for the backtrace step below
sudo mkdir -p /tmp/cores && sudo chmod 1777 /tmp/cores || true
sudo sysctl -q -w kernel.core_pattern=/tmp/cores/core.%p || true
ulimit -c unlimited || true
pytest -v --tb=long
- name: Native backtrace of crashed test process
if: failure()
run: |
shopt -s nullglob
cores=(/tmp/cores/core.*)
if [ ${#cores[@]} -eq 0 ]; then
echo "No core dump found"
exit 0
fi
sudo apt-get install -y gdb
python_exe="$(python -c 'import sys; print(sys.executable)')"
for core in "${cores[@]}"; do
echo "===== Backtrace of $core"
gdb -batch -ex "thread apply all bt 50" "$python_exe" "$core"
done
build_latest:
if: ${{ github.event_name == 'schedule' || (github.event_name == 'workflow_dispatch' && (github.event.inputs.job_to_run == 'all' || github.event.inputs.job_to_run == 'build_latest')) }}
env:
DISPLAY: ':99.0'
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v7
- name: Set up Python 3.14
uses: actions/setup-python@v7
with:
python-version: "3.14"
- name: Install dependencies (latest)
run: |
set -euxo pipefail
sudo apt-get update
sudo apt-get install -y \
libxkbcommon-x11-0 libxcb-icccm4 libxcb-image0 libxcb-keysyms1 \
libxcb-randr0 libxcb-render-util0 libxcb-xinerama0 libxcb-xfixes0 x11-utils
/sbin/start-stop-daemon --start --quiet \
--pidfile /tmp/custom_xvfb_99.pid --make-pidfile --background \
--exec /usr/bin/Xvfb -- :99 -screen 0 1920x1200x24 -ac +extension GLX
python -m pip install --upgrade pip
python -m pip install ruff pytest httpx
python -m pip install PyQt5
# Clone and install Sigima and SigimaX from the same branch as DataLab
cd ..
git clone --depth 1 --branch ${{ github.ref_name }} https://github.com/DataLab-Platform/sigima.git || git clone --depth 1 https://github.com/DataLab-Platform/sigima.git
git clone --depth 1 --branch ${{ github.ref_name }} https://github.com/DataLab-Platform/SigimaX.git || git clone --depth 1 https://github.com/DataLab-Platform/SigimaX.git
git clone --depth 1 --branch ${{ github.ref_name }} https://github.com/DataLab-Platform/DataLab-Capsule.git || git clone --depth 1 https://github.com/DataLab-Platform/DataLab-Capsule.git
cd DataLab
# Install DataLab itself, but do NOT install its pinned deps
python -m pip install -e . --no-deps
# Install Sigima and SigimaX from local clones. `--no-deps` for SigimaX
# only: it requires Sigima, which pip would otherwise resolve from PyPI,
# overwriting the editable clone installed just above.
python -m pip install -e ../sigima
python -m pip install -e ../SigimaX --no-deps
python -m pip install -e ../DataLab-Capsule
# Extract dependency names from the pyproject.toml of DataLab and SigimaX
# (excluding Sigima and SigimaX, installed from local clones above) and
# install latest versions
python -m pip install -U --upgrade-strategy eager $(python -c "import tomllib, re; print(' '.join(sorted({re.sub(r'[\[\]<>=!~,.\s].*$', '', d).strip() for p in ('pyproject.toml', '../SigimaX/pyproject.toml') for d in tomllib.loads(open(p, 'rb').read().decode())['project']['dependencies'] if not any(n in d for n in ['Sigima', 'SigimaX', 'datalab-capsule'])})))")
- name: Lint with Ruff (latest)
run: ruff check --output-format=github datalab
- name: Test with pytest (latest)
run: pytest -v --tb=long