Skip to content

Tests

Tests #6116

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
- .limesurvey-docker-tags.json
push:
branches:
- 'main'
- 'trunk-merge/**'
paths:
- src/**
- tests/**
- docker-compose*.yml
- noxfile.py
- poetry.lock
- pyproject.toml
- .github/workflows/tests.yml
- .github/workflows/constraints.txt
- trunk.yaml
- .limesurvey-docker-tags.json
schedule:
- cron: "44 */3 * * *"
workflow_dispatch:
inputs: {}
concurrency:
group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }}
cancel-in-progress: true
env:
FORCE_COLOR: "1"
jobs:
tests:
name: "${{ matrix.session }} ${{ matrix.python-version }} / ${{ matrix.os }}"
runs-on: ${{ matrix.os }}
continue-on-error: ${{ matrix.experimental || false }}
env:
NOXSESSION: "${{ matrix.session }}"
NOXFORCEPYTHON: "${{ matrix.python-version }}"
strategy:
fail-fast: false
matrix:
python-version:
- "3.8"
- "3.9"
- "3.10"
- "3.11"
- "3.12"
- "pypy3.9"
- "pypy3.10"
os: ["ubuntu-latest"]
session: ["tests"]
include:
- python-version: "3.11"
os: "ubuntu-latest"
session: "xdoctest"
- 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"
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: Run Nox
id: nox
run: |
nox
- name: Upload coverage data
if: always() && matrix.session == 'tests'
uses: actions/[email protected]
with:
name: coverage-data
path: ".coverage.*"
docker_tags:
name: Get Docker tags from file
runs-on: ubuntu-latest
outputs:
tags: ${{ steps.tags.outputs.tags }}
steps:
- name: Check out the repository
uses: actions/[email protected]
- name: Output tags
id: tags
run: |
echo "tags=$(cat .limesurvey-docker-tags.json)" >> $GITHUB_OUTPUT
integration:
name: "integration ${{ matrix.python-version }} / ${{ matrix.image_tag || matrix.ref }} / ${{ matrix.database }}"
runs-on: ubuntu-latest
continue-on-error: true
needs: docker_tags
env:
LS_USER: citric_ci
LS_PASSWORD: notverysecret
LS_PORT: "8080"
NOXSESSION: integration
NOXPYTHON: "${{ matrix.python-version }}"
strategy:
fail-fast: false
matrix:
python-version: ["3.11"]
database: [postgres]
ref: [""]
context: [""]
image_tag: ${{ fromJson(needs.docker_tags.outputs.tags) }}
include:
# Test on other Python versions and database engines
- python-version: "3.11"
image_tag: "6-apache"
database: mysql
- python-version: "pypy3.9"
image_tag: "6-apache"
database: postgres
# Test Limesurvey/LimeSurvey branches
- python-version: "3.11"
ref: 5.x
context: https://github.com/martialblog/docker-limesurvey.git#master:5.0/apache
database: postgres
- python-version: "3.11"
ref: develop
context: https://github.com/martialblog/docker-limesurvey.git#master:6.0/apache
database: postgres
- python-version: "3.11"
ref: master
context: https://github.com/martialblog/docker-limesurvey.git#master:6.0/apache
database: postgres
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
- 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.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
uses: docker/[email protected]
- name: Get Docker
uses: actions-hub/docker/[email protected]
env:
SKIP_LOGIN: true
- name: Start services
env:
LS_IMAGE_TAG: ${{ matrix.image_tag }}
LS_DOCKERFILE_CONTEXT: ${{ matrix.context }}
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-integration
env:
BACKEND: ${{ matrix.database }}
LS_URL: http://localhost:${{ env.LS_PORT }}/index.php/admin/remotecontrol
run: |
nox
- name: Upload coverage data
if: always()
uses: actions/[email protected]
with:
name: coverage-data
path: ".coverage.*"
- name: Update integration status badge
if: always()
id: badge
run: >
echo '{
"schemaVersion": 1,
"label": "${{ matrix.image_tag || matrix.ref }}, ${{ matrix.database }}",
"message": "${{ steps.nox-integration.outcome }}",
"color": "${{ steps.nox-integration.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.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, integration]
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