Skip to content

Tests

Tests #5887

Workflow file for this run

name: Tests
on:
pull_request:
paths:
- src/**
- tests/**
- docker-compose*.yml
- noxfile.py
- poetry.lock
- pyproject.toml
- .github/workflows/tests.yml
- .github/workflows/constraints.txt
- trunk.yaml
push:
branches:
- 'main'
- 'trunk-merge/**'
paths:
- src/**
- tests/**
- noxfile.py
- poetry.lock
- pyproject.toml
- .github/workflows/tests.yml
- .github/workflows/constraints.txt
- trunk.yaml
schedule:
- cron: "44 */3 * * *"
workflow_dispatch:
inputs: {}
concurrency:
group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }}
cancel-in-progress: true
jobs:
tests:
name: "\
${{ matrix.session }}
${{ matrix.python-version }}\
${{ matrix.session == 'integration' && format(' / integration with {0}', matrix.image_tag || matrix.ref) || '' }}\
${{ matrix.session == 'integration' && format(' / {0}', matrix.database) || '' }}
/ ${{ matrix.os }}"
runs-on: ${{ matrix.os }}
continue-on-error: ${{ matrix.experimental || false }}
env:
FORCE_COLOR: "1"
LS_USER: "citric_ci"
LS_PASSWORD: "notverysecret"
LS_PORT: "8080"
NOXSESSION: "${{ matrix.session }}"
NOXFORCEPYTHON: "${{ matrix.python-version }}"
strategy:
fail-fast: false
matrix:
python-version:
- "3.7"
- "3.8"
- "3.9"
- "3.10"
- "3.11"
- "3.12"
- "pypy3.7"
- "pypy3.8"
- "pypy3.9"
- "pypy3.10"
os: ["ubuntu-latest"]
session: ["tests"]
include:
- python-version: "3.12"
os: "ubuntu-latest"
session: "tests"
experimental: true
nightly: true
- python-version: "3.13"
os: "ubuntu-latest"
session: "tests"
experimental: true
nightly: true
- python-version: "3.11"
os: "windows-latest"
session: "tests"
- python-version: "3.11"
os: "macos-latest"
session: "tests"
# Test on the LTS version of LimeSurvey
- python-version: "3.11"
os: "ubuntu-latest"
session: "integration"
image_tag: "5-apache"
limesurvey_version: "5-apache"
database: postgres
- python-version: "3.11"
os: "ubuntu-latest"
session: "integration"
image_tag: "6-apache"
limesurvey_version: "6-apache"
database: postgres
experimental: true
- python-version: "3.11"
os: "ubuntu-latest"
session: "integration"
image_tag: "6.2.1-230807-apache"
limesurvey_version: "6-apache"
database: postgres
- python-version: "3.11"
os: "ubuntu-latest"
session: "integration"
image_tag: "6-apache"
limesurvey_version: "6-apache"
database: mysql
experimental: true
- python-version: "3.11"
os: "ubuntu-latest"
session: "integration"
ref: develop
limesurvey_version: "develop"
database: postgres
experimental: true
- python-version: "3.11"
os: "ubuntu-latest"
session: "integration"
ref: master
limesurvey_version: "master"
database: postgres
experimental: true
- python-version: "pypy3.9"
os: "ubuntu-latest"
session: "integration"
image_tag: "6-apache"
limesurvey_version: "6-apache"
database: postgres
- python-version: "3.11"
os: "ubuntu-latest"
session: "xdoctest"
steps:
- name: Check out the repository
uses: actions/[email protected]
- name: Setup Python ${{ matrix.python-version }}
if: "${{ !matrix.nightly }}"
uses: actions/[email protected]
with:
python-version: ${{ matrix.python-version }}
architecture: x64
allow-prereleases: true
- name: Setup Python ${{ matrix.python-version }} (nightly)
if: "${{ matrix.nightly }}"
uses: deadsnakes/[email protected]
with:
python-version: "${{ matrix.python-version }}-dev"
- name: Upgrade pip
env:
PIP_CONSTRAINT: .github/workflows/constraints.txt
run: |
pip install pip
pip --version
- name: Upgrade pip in virtual environments
shell: python
run: |
import os
import pip
with open(os.environ["GITHUB_ENV"], mode="a") as io:
print(f"VIRTUALENV_PIP={pip.__version__}", file=io)
- name: Install Poetry
env:
PIP_CONSTRAINT: .github/workflows/constraints.txt
run: |
pipx install poetry --verbose
poetry --version
- name: Install Nox
env:
PIP_CONSTRAINT: .github/workflows/constraints.txt
run: |
pipx install nox
pipx inject nox nox-poetry
nox --version
- name: Download LimeSurvey archive
if: ${{ matrix.session == 'integration' && matrix.ref }}
run: |
wget https://github.com/LimeSurvey/LimeSurvey/archive/${{ matrix.ref }}.tar.gz -O ls.tar.gz -nv
echo "LS_CHECKSUM=$(sha256sum ls.tar.gz | cut -d' ' -f1)" >> $GITHUB_ENV
- name: Set up Docker Buildx
if: ${{ matrix.session == 'integration' }}
uses: docker/[email protected]
- name: Get Docker
if: ${{ matrix.session == 'integration' }}
uses: actions-hub/docker/[email protected]
env:
SKIP_LOGIN: true
- name: Start services
if: ${{ matrix.session == 'integration' }}
env:
LS_IMAGE_TAG: ${{ matrix.image_tag }}
LS_DOCKERFILE_CONTEXT: https://github.com/martialblog/docker-limesurvey.git#master:5.0/apache
LS_DOCKERFILE: Dockerfile
LS_VERSION: ${{ matrix.ref }}
COMPOSE_FILE: "\
docker-compose.yml\
${{ matrix.ref && ':docker-compose.ref.yml' }}\
${{ matrix.database == 'mysql' && ':docker-compose.mysql.yml' || '' }}"
run: |
docker compose up -d --wait --quiet-pull
docker compose ps -a
docker compose config
- name: Run Nox
id: nox
env:
BACKEND: ${{ matrix.database }}
LS_URL: http://localhost:${{ env.LS_PORT }}/index.php/admin/remotecontrol
LS_VERSION: ${{ matrix.limesurvey_version }}
run: |
nox
- name: Upload coverage data
if: always() && (matrix.session == 'tests' || matrix.session == 'integration')
uses: actions/[email protected]
with:
name: coverage-data
path: ".coverage.*"
- name: Update integration status badge
if: always() && matrix.session == 'integration'
id: badge
run: >
echo '{
"schemaVersion": 1,
"label": "${{ matrix.image_tag || matrix.ref }}, ${{ matrix.database }}",
"message": "${{ steps.nox.outcome }}",
"color": "${{ steps.nox.outcome == 'success' && 'green' || 'red' }}"
}' > badge-integration-${{ matrix.python-version }}-${{ matrix.image_tag || matrix.ref }}-${{ matrix.database }}.json
- name: Deploy integration status badge
uses: exuanbo/actions-deploy-gist@v1
if: always() && steps.badge.outcome == 'success'
with:
token: ${{ secrets.GIST_TOKEN }}
gist_id: 02f3c72747cc609788c75c3cd32b4e97
file_path: badge-integration-${{ matrix.python-version }}-${{ matrix.image_tag || matrix.ref }}-${{ matrix.database }}.json
types:
name: Type checking
runs-on: ubuntu-latest
env:
NOXSESSION: mypy
NOXFORCEPYTHON: ${{ matrix.python-version }}
strategy:
fail-fast: false
matrix:
python-version: ["3.7", "3.8", "3.9", "3.10", "3.11", "3.12"]
steps:
- name: Check out the repository
uses: actions/[email protected]
- name: Setup Python ${{ matrix.python-version }}
uses: actions/[email protected]
with:
python-version: ${{ matrix.python-version }}
architecture: x64
allow-prereleases: true
- name: Install tools
env:
PIP_CONSTRAINT: .github/workflows/constraints.txt
run: |
pip install pip
pipx install poetry
pipx install nox
pipx inject nox nox-poetry
pipx list
- name: Run Nox
run: |
nox
coverage:
name: Coverage
runs-on: ubuntu-latest
needs: tests
env:
NOXSESSION: coverage
steps:
- name: Check out the repository
uses: actions/[email protected]
- name: Set up Python
uses: actions/[email protected]
with:
python-version: "3.11"
- name: Upgrade pip
env:
PIP_CONSTRAINT: .github/workflows/constraints.txt
run: |
pip install pip
pip --version
- name: Install Poetry
env:
PIP_CONSTRAINT: .github/workflows/constraints.txt
run: |
pipx install poetry
poetry --version
- name: Install Nox
env:
PIP_CONSTRAINT: .github/workflows/constraints.txt
run: |
pipx install nox
pipx inject nox nox-poetry
nox --version
- name: Download coverage data
uses: actions/[email protected]
with:
name: coverage-data
- name: Combine coverage data and display human readable report
run: |
nox
- name: Create coverage report
run: |
nox -- xml
- name: Upload coverage report
uses: codecov/[email protected]
with:
token: ${{ secrets.CODECOV_TOKEN }}
fail_ci_if_error: true