mirror of
https://github.com/wagtail/wagtail.git
synced 2024-11-29 09:33:54 +01:00
432 lines
13 KiB
YAML
432 lines
13 KiB
YAML
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 3.2, python 3.7, postgres
|
|
# - django 3.2, python 3.8, mysql
|
|
# - django 4.0, python 3.9, sqlite
|
|
# - django 4.1, python 3.10, mysql
|
|
# - django 4.0, python 3.10, postgres, USE_EMAIL_USER_MODEL=yes
|
|
# - django 4.1, python 3.11, postgres, DISABLE_TIMEZONE=yes
|
|
# - django stable/4.1.x, python 3.10, postgres (allow failures)
|
|
# - django stable/4.1.x, python 3.11, mysql (allow failures)
|
|
# - django main, python 3.10, postgres (allow failures)
|
|
# - elasticsearch 5, django 3.2, python 3.7, sqlite
|
|
# - elasticsearch 6, django 3.2, python 3.7, postgres
|
|
# - elasticsearch 7, django 4.0, python 3.8, postgres
|
|
# - elasticsearch 7, django 4.1, python 3.9, sqlite, USE_EMAIL_USER_MODEL=yes
|
|
|
|
permissions:
|
|
contents: read # to fetch code (actions/checkout)
|
|
|
|
jobs:
|
|
test-sqlite:
|
|
runs-on: ubuntu-latest
|
|
strategy:
|
|
matrix:
|
|
include:
|
|
- python: '3.9'
|
|
django: 'Django>=4.0,<4.1'
|
|
|
|
steps:
|
|
- uses: actions/checkout@v3
|
|
- name: Set up Python ${{ matrix.python }}
|
|
uses: actions/setup-python@v3
|
|
with:
|
|
python-version: ${{ matrix.python }}
|
|
- name: Install dependencies
|
|
run: |
|
|
python -m pip install --upgrade pip
|
|
pip install -e .[testing]
|
|
pip install "${{ matrix.django }}"
|
|
- name: Test
|
|
run: |
|
|
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.7'
|
|
django: 'Django>=3.2,<3.3'
|
|
experimental: false
|
|
- python: '3.11'
|
|
django: 'Django>=4.1,<4.2'
|
|
notz: notz
|
|
experimental: false
|
|
- python: '3.10'
|
|
django: 'Django>=4.0,<4.1'
|
|
experimental: false
|
|
emailuser: emailuser
|
|
- python: '3.10'
|
|
django: 'git+https://github.com/django/django.git@stable/4.1.x#egg=Django'
|
|
experimental: true
|
|
postgres: 'postgres:12'
|
|
- python: '3.10'
|
|
django: 'git+https://github.com/django/django.git@main#egg=Django'
|
|
experimental: true
|
|
postgres: 'postgres:12'
|
|
|
|
services:
|
|
postgres:
|
|
image: ${{ matrix.postgres || 'postgres:11' }}
|
|
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@v3
|
|
with:
|
|
python-version: ${{ matrix.python }}
|
|
- name: Install dependencies
|
|
run: |
|
|
python -m pip install --upgrade pip
|
|
pip install "psycopg2>=2.6"
|
|
pip install -e .[testing]
|
|
pip install "${{ matrix.django }}"
|
|
${{ matrix.install_extras }}
|
|
- name: Test
|
|
run: |
|
|
coverage run --parallel-mode --source wagtail runtests.py
|
|
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.8'
|
|
django: 'Django>=3.2,<3.3'
|
|
experimental: false
|
|
- python: '3.10'
|
|
django: 'Django>=4.1,<4.2'
|
|
experimental: false
|
|
- python: '3.11'
|
|
django: 'git+https://github.com/django/django.git@stable/4.1.x#egg=Django'
|
|
experimental: true
|
|
|
|
services:
|
|
mysql:
|
|
image: mysql:8.0.23
|
|
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
|
|
|
|
steps:
|
|
- uses: actions/checkout@v3
|
|
- name: Set up Python ${{ matrix.python }}
|
|
uses: actions/setup-python@v3
|
|
with:
|
|
python-version: ${{ matrix.python }}
|
|
- name: Install dependencies
|
|
run: |
|
|
python -m pip install --upgrade pip
|
|
pip install "mysqlclient>=1.4,<2"
|
|
pip install -e .[testing]
|
|
pip install "${{ matrix.django }}"
|
|
- name: Test
|
|
run: |
|
|
coverage run --parallel-mode --source wagtail runtests.py
|
|
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.*
|
|
|
|
# https://github.com/elastic/elastic-github-actions doesn't work for Elasticsearch 5,
|
|
# but https://github.com/getong/elasticsearch-action does
|
|
test-sqlite-elasticsearch5:
|
|
runs-on: ubuntu-latest
|
|
strategy:
|
|
matrix:
|
|
include:
|
|
- python: '3.7'
|
|
django: 'Django>=3.2,<3.3'
|
|
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/elasticsearch-action@v1.2
|
|
with:
|
|
elasticsearch version: 5.6.9
|
|
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@v3
|
|
with:
|
|
python-version: ${{ matrix.python }}
|
|
- name: Install dependencies
|
|
run: |
|
|
python -m pip install --upgrade pip
|
|
pip install -e .[testing]
|
|
pip install "${{ matrix.django }}"
|
|
pip install "elasticsearch>=5,<6"
|
|
pip install certifi
|
|
- name: Test
|
|
run: |
|
|
coverage run --parallel-mode --source wagtail runtests.py wagtail.search wagtail.documents wagtail.images --elasticsearch5
|
|
env:
|
|
DATABASE_ENGINE: django.db.backends.sqlite3
|
|
- name: Upload coverage data
|
|
uses: actions/upload-artifact@v3
|
|
with:
|
|
name: coverage-data
|
|
path: .coverage.*
|
|
|
|
test-sqlite-elasticsearch7:
|
|
runs-on: ubuntu-latest
|
|
strategy:
|
|
matrix:
|
|
include:
|
|
- python: '3.9'
|
|
django: 'Django>=4.1,<4.2'
|
|
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/elasticsearch-action@v1.2
|
|
with:
|
|
elasticsearch version: 7.6.1
|
|
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@v3
|
|
with:
|
|
python-version: ${{ matrix.python }}
|
|
- name: Install dependencies
|
|
run: |
|
|
python -m pip install --upgrade pip
|
|
pip install -e .[testing]
|
|
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.sqlite3
|
|
USE_EMAIL_USER_MODEL: ${{ matrix.emailuser }}
|
|
- name: Upload coverage data
|
|
uses: actions/upload-artifact@v3
|
|
with:
|
|
name: coverage-data
|
|
path: .coverage.*
|
|
|
|
# https://github.com/getong/elasticsearch-action doesn't work for Elasticsearch 6,
|
|
# but https://github.com/elastic/elastic-github-actions does
|
|
test-postgres-elasticsearch6:
|
|
runs-on: ubuntu-latest
|
|
strategy:
|
|
matrix:
|
|
include:
|
|
- python: '3.7'
|
|
django: 'Django>=3.2,<3.3'
|
|
|
|
services:
|
|
postgres:
|
|
image: postgres:11
|
|
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: 6.8.13
|
|
- uses: actions/checkout@v3
|
|
- name: Set up Python ${{ matrix.python }}
|
|
uses: actions/setup-python@v3
|
|
with:
|
|
python-version: ${{ matrix.python }}
|
|
- name: Install dependencies
|
|
run: |
|
|
python -m pip install --upgrade pip
|
|
pip install "psycopg2>=2.6"
|
|
pip install -e .[testing]
|
|
pip install "${{ matrix.django }}"
|
|
pip install "elasticsearch>=6,<7"
|
|
pip install certifi
|
|
- name: Test
|
|
run: |
|
|
coverage run --parallel-mode --source wagtail runtests.py wagtail.search wagtail.documents wagtail.images --elasticsearch6
|
|
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-postgres-elasticsearch7:
|
|
runs-on: ubuntu-latest
|
|
continue-on-error: ${{ matrix.experimental }}
|
|
strategy:
|
|
matrix:
|
|
include:
|
|
- python: '3.8'
|
|
django: 'Django>=4.0,<4.1'
|
|
experimental: false
|
|
|
|
services:
|
|
postgres:
|
|
image: postgres:11
|
|
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@v3
|
|
with:
|
|
python-version: ${{ matrix.python }}
|
|
- name: Install dependencies
|
|
run: |
|
|
python -m pip install --upgrade pip
|
|
pip install "psycopg2>=2.6"
|
|
pip install -e .[testing]
|
|
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.*
|
|
|
|
coverage:
|
|
needs:
|
|
- test-sqlite
|
|
- test-postgres
|
|
- test-mysql
|
|
- test-sqlite-elasticsearch5
|
|
- test-sqlite-elasticsearch7
|
|
- test-postgres-elasticsearch6
|
|
- test-postgres-elasticsearch7
|
|
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
|
|
coverage report -m --skip-covered
|
|
|
|
- name: Upload coverage to Codecov
|
|
uses: codecov/codecov-action@v3
|
|
with:
|
|
flags: backend
|