Skip to content

Restore python 3.6 and update CI to import module after installing #475

Restore python 3.6 and update CI to import module after installing

Restore python 3.6 and update CI to import module after installing #475

Workflow file for this run

name: recceiver
on:
push:
branches: [ "*" ]
paths:
- server/**
pull_request:
branches: [ "master" ]
paths:
- server/**
jobs:
build-server:
runs-on: ubuntu-latest
container: ${{ matrix.container }}
strategy:
matrix:
include:
- python-version: "3.6"
container: "python:3.6"
- python-version: "3.7"
container: "python:3.7"
- python-version: "3.8"
- python-version: "3.9"
- python-version: "3.10"
- python-version: "3.11"
- python-version: "3.12"
- python-version: "3.13"
- python-version: "3.14"
defaults:
run:
working-directory: server
steps:
- uses: actions/checkout@v6
- name: Set up Python ${{ matrix.python-version }}
if: ${{ !matrix.container }}
uses: actions/setup-python@v6
with:
python-version: ${{ matrix.python-version }}
- name: Install
run: |
minor=$(python3 --version | cut -d. -f2)
if [ "$minor" -ge 7 ]; then
python -m pip install --upgrade "pip==24.0" --only-binary=:all:
else
python -m pip install --upgrade "pip==21.3.1" --only-binary=:all:
fi
python -m pip install .
# On Python 3.6, no compatible setuptools reads pyproject.toml's
# [project] table, so the install above is an empty no-op package.
# Install deps explicitly (no-op on 3.7+); keep in sync with
# [project.dependencies] in pyproject.toml.
python -m pip install \
"channelfinder @ https://github.com/ChannelFinder/pyCFClient/archive/refs/tags/v3.2.0.zip#sha256=ec89537f336c4cb8db18909c4b02176dd5fbd03f5872a6527129879cbf3f7c85" \
"dataclasses; python_version<'3.7'" \
"requests>=2.27.1,<2.28; python_version<'3.7'" \
"requests>=2.31,<2.32; python_version>='3.7' and python_version<'3.8'" \
"requests>=2.32.3,<2.33; python_version>='3.8'" \
"twisted>=21.7,<22; python_version<'3.7'" \
"twisted>=22.10,<23; python_version>='3.7' and python_version<'3.8'" \
"twisted>=24.11,<24.12; python_version>='3.8'"
- name: Import smoke test
run: |
# PYTHONPATH=. since nothing may be installed on Python 3.6.
PYTHONPATH=. python -c "from twisted.plugins import recceiver_plugin"
test-unit:
runs-on: ubuntu-latest
needs: build-server
defaults:
run:
working-directory: server
steps:
- uses: actions/checkout@v6
- name: Set up Python
uses: actions/setup-python@v6
with:
python-version: 3.9
- name: Install dependencies
run: |
python -m pip install --upgrade "pip==24.0" --only-binary=:all:
python -m pip install --only-binary=:all: -r requirements-ci-py39.txt
python -m pip install --no-deps .
- name: Test unit tests
run: |
set -o pipefail
pytest tests/unit -v --cov=recceiver --cov-report=xml:coverage.xml 2>&1 | tee pytest-unit.log
- name: Upload test log
if: always()
uses: actions/upload-artifact@v4
with:
name: pytest-unit-log
path: server/pytest-unit.log
retention-days: 14
- name: Upload coverage report
if: always()
uses: actions/upload-artifact@v4
with:
name: coverage-xml
path: server/coverage.xml
retention-days: 14
test-integration:
runs-on: ubuntu-latest
needs: build-server
defaults:
run:
working-directory: server
steps:
- uses: actions/checkout@v6
- name: Set up Python
uses: actions/setup-python@v6
with:
python-version: 3.9
- name: Install dependencies
run: |
python -m pip install --upgrade pip
python -m pip install '.[test]'
python -m pip install .
- name: Test integration tests
run: |
set -o pipefail
pytest tests/integration -v 2>&1 | tee pytest-integration.log
- name: Upload test log
if: always()
uses: actions/upload-artifact@v4
with:
name: pytest-integration-log
path: server/pytest-integration.log
retention-days: 14
test-container:
runs-on: ubuntu-latest
needs: build-server
defaults:
run:
working-directory: server
steps:
- uses: actions/checkout@v6
- name: Set up Python
uses: actions/setup-python@v6
with:
python-version: 3.9
- name: Install dependencies
run: |
python -m pip install --upgrade pip
python -m pip install '.[test]'
python -m pip install .
- name: Test container tests
run: |
set -o pipefail
pytest tests/container -v 2>&1 | tee pytest-container.log
- name: Upload test log
if: always()
uses: actions/upload-artifact@v4
with:
name: pytest-container-log
path: server/pytest-container.log
retention-days: 14