Modify regex, clean code, add tests #140
This file contains 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
name: Wagtail CI | |
on: | |
push: | |
paths-ignore: | |
- 'docs/**' | |
pull_request: | |
paths-ignore: | |
- 'docs/**' | |
concurrency: | |
group: ${{ github.workflow }}-${{ github.ref }} | |
cancel-in-progress: true | |
# Our test suite should cover: | |
# - all supported databases against current Python and Django | |
# - at least one test run for each older supported version of Python and Django | |
# - at least one test run for each supported Elasticsearch version | |
# - a test run against Django's git main and active stable branch (allowing failures) | |
# - test runs with USE_EMAIL_USER_MODEL=yes and DISABLE_TIMEZONE=yes | |
# Current configuration: | |
# - django 4.2, python 3.8, postgres:12, parallel | |
# - django 4.2, python 3.9, mysql:8.0 | |
# - django 4.2, python 3.10, sqlite | |
# - django 5.0, python 3.12, mysql:8.1, parallel | |
# - django 5.0, python 3.11, postgres:12, parallel, USE_EMAIL_USER_MODEL=yes | |
# - django 5.0, python 3.12, postgres:15, parallel, DISABLE_TIMEZONE=yes | |
# - django stable/5.0.x, python 3.10, postgres (allow failures) | |
# - django main, python 3.10, postgres:latest, parallel (allow failures) | |
# - elasticsearch 7, django 4.2, python 3.8, postgres:latest | |
# - opensearch 2, django 4.2, python 3.9, sqlite | |
# - elasticsearch 8, django 5.0, python 3.10, sqlite, USE_EMAIL_USER_MODEL=yes | |
# Some tests are run in parallel by passing --parallel to runtests.py. | |
# When running tests in parallel, some errors cannot be pickled and result in | |
# non-helpful tracebacks (see https://code.djangoproject.com/ticket/29023). | |
# Thus, we keep one test run without --parallel for each supported database. | |
# ElasticSearch tests are not run in parallel as the test suite is not thread-safe. | |
permissions: | |
contents: read # to fetch code (actions/checkout) | |
jobs: | |
test-sqlite: | |
runs-on: ubuntu-latest | |
strategy: | |
matrix: | |
include: | |
- python: '3.10' | |
django: 'Django>=4.2,<4.3' | |
steps: | |
- uses: actions/checkout@v3 | |
- name: Set up Python ${{ matrix.python }} | |
uses: actions/setup-python@v4 | |
with: | |
python-version: ${{ matrix.python }} | |
cache: 'pip' | |
- name: Install dependencies | |
run: | | |
python -m pip install --upgrade pip | |
pip install -e '.[testing]' --config-settings editable_mode=strict | |
pip install "${{ matrix.django }}" | |
- name: Test | |
run: | | |
WAGTAIL_FAIL_ON_VERSIONED_STATIC=1 DJANGO_SETTINGS_MODULE=wagtail.test.settings django-admin check | |
coverage run --parallel-mode --source wagtail runtests.py | |
env: | |
DATABASE_ENGINE: django.db.backends.sqlite3 | |
- name: Upload coverage data | |
uses: actions/upload-artifact@v3 | |
with: | |
name: coverage-data | |
path: .coverage.* | |
test-postgres: | |
runs-on: ubuntu-latest | |
continue-on-error: ${{ matrix.experimental }} | |
strategy: | |
matrix: | |
include: | |
- python: '3.8' | |
django: 'Django>=4.2,<4.3' | |
experimental: false | |
parallel: '--parallel' | |
- python: '3.11' | |
django: 'Django>=5.0,<5.1' | |
experimental: false | |
emailuser: emailuser | |
parallel: '--parallel' | |
- python: '3.12' | |
django: 'Django>=5.0,<5.1' | |
postgres: 'postgres:15' | |
notz: notz | |
experimental: false | |
parallel: '--parallel' | |
- python: '3.10' | |
django: 'git+https://github.com/django/django.git@stable/5.0.x#egg=Django' | |
experimental: true | |
- python: '3.10' | |
django: 'git+https://github.com/django/django.git@main#egg=Django' | |
experimental: true | |
postgres: 'postgres:latest' | |
parallel: '--parallel' | |
install_extras: | | |
pip uninstall -y django-taggit | |
pip install \ | |
git+https://github.com/laymonage/[email protected]#egg=django-taggit | |
services: | |
postgres: | |
image: ${{ matrix.postgres || 'postgres:12' }} | |
env: | |
POSTGRES_PASSWORD: postgres | |
ports: | |
- 5432:5432 | |
options: --health-cmd pg_isready --health-interval 10s --health-timeout 5s --health-retries 5 | |
steps: | |
- uses: actions/checkout@v3 | |
- name: Set up Python ${{ matrix.python }} | |
uses: actions/setup-python@v4 | |
with: | |
python-version: ${{ matrix.python }} | |
cache: 'pip' | |
- name: Install dependencies | |
run: | | |
python -m pip install --upgrade pip | |
pip install "psycopg2>=2.6" | |
pip install -e '.[testing]' --config-settings editable_mode=strict | |
pip install "${{ matrix.django }}" | |
${{ matrix.install_extras }} | |
- name: Test | |
run: | | |
WAGTAIL_FAIL_ON_VERSIONED_STATIC=1 DJANGO_SETTINGS_MODULE=wagtail.test.settings django-admin check | |
coverage run --parallel-mode --source wagtail runtests.py ${{ matrix.parallel }} | |
env: | |
DATABASE_ENGINE: django.db.backends.postgresql | |
DATABASE_HOST: localhost | |
DATABASE_USER: postgres | |
DATABASE_PASSWORD: postgres | |
USE_EMAIL_USER_MODEL: ${{ matrix.emailuser }} | |
DISABLE_TIMEZONE: ${{ matrix.notz }} | |
- name: Upload coverage data | |
uses: actions/upload-artifact@v3 | |
with: | |
name: coverage-data | |
path: .coverage.* | |
test-mysql: | |
runs-on: ubuntu-latest | |
continue-on-error: ${{ matrix.experimental }} | |
strategy: | |
matrix: | |
include: | |
- python: '3.9' | |
django: 'Django>=4.2,<4.3' | |
experimental: false | |
- python: '3.12' | |
django: 'Django>=5.0,<5.1' | |
experimental: false | |
parallel: '--parallel' | |
mysql: 'mysql:8.1' | |
services: | |
mysql: | |
image: ${{ matrix.mysql || 'mysql:8.0' }} | |
env: | |
MYSQL_ALLOW_EMPTY_PASSWORD: yes | |
MYSQL_DATABASE: wagtail | |
ports: | |
- 3306:3306 | |
options: --health-cmd="mysqladmin ping" --health-interval=10s --health-timeout=5s --health-retries=3 --cap-add=sys_nice | |
steps: | |
- uses: actions/checkout@v3 | |
- name: Set up Python ${{ matrix.python }} | |
uses: actions/setup-python@v4 | |
with: | |
python-version: ${{ matrix.python }} | |
cache: 'pip' | |
- name: Install dependencies | |
run: | | |
python -m pip install --upgrade pip | |
pip install "mysqlclient>=1.4,<2" | |
pip install -e '.[testing]' --config-settings editable_mode=strict | |
pip install "${{ matrix.django }}" | |
- name: Test | |
run: | | |
WAGTAIL_FAIL_ON_VERSIONED_STATIC=1 DJANGO_SETTINGS_MODULE=wagtail.test.settings django-admin check | |
coverage run --parallel-mode --source wagtail runtests.py ${{ matrix.parallel }} | |
env: | |
DATABASE_ENGINE: django.db.backends.mysql | |
DATABASE_HOST: '127.0.0.1' | |
DATABASE_USER: root | |
- name: Upload coverage data | |
uses: actions/upload-artifact@v3 | |
with: | |
name: coverage-data | |
path: .coverage.* | |
test-sqlite-elasticsearch8: | |
runs-on: ubuntu-latest | |
strategy: | |
matrix: | |
include: | |
- python: '3.10' | |
django: 'Django>=5.0,<5.1' | |
emailuser: emailuser | |
steps: | |
- name: Configure sysctl limits | |
run: | | |
sudo swapoff -a | |
sudo sysctl -w vm.swappiness=1 | |
sudo sysctl -w fs.file-max=262144 | |
sudo sysctl -w vm.max_map_count=262144 | |
- uses: getong/[email protected] | |
with: | |
elasticsearch version: 8.8.0 | |
host port: 9200 | |
container port: 9200 | |
host node port: 9300 | |
node port: 9300 | |
discovery type: 'single-node' | |
- uses: actions/checkout@v3 | |
- name: Set up Python ${{ matrix.python }} | |
uses: actions/setup-python@v4 | |
with: | |
python-version: ${{ matrix.python }} | |
cache: 'pip' | |
- name: Install dependencies | |
run: | | |
python -m pip install --upgrade pip | |
pip install -e '.[testing]' --config-settings editable_mode=strict | |
pip install "${{ matrix.django }}" | |
pip install "elasticsearch>=8,<9" | |
pip install certifi | |
- name: Test | |
run: | | |
coverage run --parallel-mode --source wagtail runtests.py wagtail.search wagtail.documents wagtail.images --elasticsearch8 | |
env: | |
DATABASE_ENGINE: django.db.backends.sqlite3 | |
USE_EMAIL_USER_MODEL: ${{ matrix.emailuser }} | |
- name: Upload coverage data | |
uses: actions/upload-artifact@v3 | |
with: | |
name: coverage-data | |
path: .coverage.* | |
test-postgres-elasticsearch7: | |
runs-on: ubuntu-latest | |
continue-on-error: ${{ matrix.experimental }} | |
strategy: | |
matrix: | |
include: | |
- python: '3.8' | |
django: 'Django>=4.2,<4.3' | |
experimental: false | |
services: | |
postgres: | |
image: postgres:latest | |
env: | |
POSTGRES_PASSWORD: postgres | |
ports: | |
- 5432:5432 | |
options: --health-cmd pg_isready --health-interval 10s --health-timeout 5s --health-retries 5 | |
steps: | |
- name: Configure sysctl limits | |
run: | | |
sudo swapoff -a | |
sudo sysctl -w vm.swappiness=1 | |
sudo sysctl -w fs.file-max=262144 | |
sudo sysctl -w vm.max_map_count=262144 | |
- uses: elastic/elastic-github-actions/elasticsearch@master | |
with: | |
stack-version: 7.6.1 | |
- uses: actions/checkout@v3 | |
- name: Set up Python ${{ matrix.python }} | |
uses: actions/setup-python@v4 | |
with: | |
python-version: ${{ matrix.python }} | |
cache: 'pip' | |
- name: Install dependencies | |
run: | | |
python -m pip install --upgrade pip | |
pip install "psycopg2>=2.6" | |
pip install -e '.[testing]' --config-settings editable_mode=strict | |
pip install "${{ matrix.django }}" | |
pip install "elasticsearch>=7,<8" | |
pip install certifi | |
- name: Test | |
run: | | |
coverage run --parallel-mode --source wagtail runtests.py wagtail.search wagtail.documents wagtail.images --elasticsearch7 | |
env: | |
DATABASE_ENGINE: django.db.backends.postgresql | |
DATABASE_HOST: localhost | |
DATABASE_USER: postgres | |
DATABASE_PASSWORD: postgres | |
USE_EMAIL_USER_MODEL: ${{ matrix.emailuser }} | |
- name: Upload coverage data | |
uses: actions/upload-artifact@v3 | |
with: | |
name: coverage-data | |
path: .coverage.* | |
test-sqlite-opensearch2: | |
runs-on: ubuntu-latest | |
continue-on-error: ${{ matrix.experimental }} | |
strategy: | |
matrix: | |
include: | |
- python: '3.9' | |
django: 'Django>=4.2,<4.3' | |
experimental: false | |
steps: | |
- name: Configure sysctl limits | |
run: | | |
sudo swapoff -a | |
sudo sysctl -w vm.swappiness=1 | |
sudo sysctl -w fs.file-max=262144 | |
sudo sysctl -w vm.max_map_count=262144 | |
- uses: ankane/setup-opensearch@v1 | |
with: | |
opensearch-version: 2 | |
- uses: actions/checkout@v3 | |
- name: Set up Python ${{ matrix.python }} | |
uses: actions/setup-python@v4 | |
with: | |
python-version: ${{ matrix.python }} | |
cache: 'pip' | |
- name: Install dependencies | |
run: | | |
python -m pip install --upgrade pip | |
pip install -e '.[testing]' --config-settings editable_mode=strict | |
pip install "${{ matrix.django }}" | |
pip install "elasticsearch==7.13.4" | |
pip install certifi | |
- name: Test | |
run: | | |
coverage run --parallel-mode --source wagtail runtests.py wagtail.search wagtail.documents wagtail.images --elasticsearch7 | |
env: | |
DATABASE_ENGINE: django.db.backends.sqlite3 | |
USE_EMAIL_USER_MODEL: ${{ matrix.emailuser }} | |
- name: Upload coverage data | |
uses: actions/upload-artifact@v3 | |
with: | |
name: coverage-data | |
path: .coverage.* | |
coverage: | |
needs: | |
- test-sqlite | |
- test-postgres | |
- test-mysql | |
- test-sqlite-elasticsearch8 | |
- test-postgres-elasticsearch7 | |
- test-sqlite-opensearch2 | |
runs-on: ubuntu-latest | |
steps: | |
- name: Check out the repo | |
uses: actions/checkout@v3 | |
- name: Set up Python | |
uses: actions/setup-python@v4 | |
with: | |
python-version: '3.10' | |
- name: Install dependencies | |
run: | | |
python -m pip install --upgrade pip | |
pip install coverage | |
- name: Download coverage data | |
uses: actions/download-artifact@v3 | |
with: | |
name: coverage-data | |
- name: Combine coverage data | |
run: | | |
coverage combine | |
- name: Generate coverage report | |
run: | | |
coverage report -m --skip-covered --skip-empty | sed 's/^/ /' >> $GITHUB_STEP_SUMMARY | |
coverage html --skip-covered --skip-empty | |
- name: Upload HTML report as artifact | |
uses: actions/upload-artifact@v3 | |
with: | |
name: coverage-report | |
path: coverage_html_report | |
- name: Upload coverage to Codecov | |
uses: codecov/codecov-action@v3 | |
with: | |
flags: backend |