Repository navigation
Signal auto downsampling: apply the configured maximum to all curves #1153
Workflow file for this run
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| # 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 |