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.9, mysql # - django 4.0, python 3.10, postgres, USE_EMAIL_USER_MODEL=yes # - django 4.1, python 3.10, postgres, DISABLE_TIMEZONE=yes # - django stable/4.1.x, python 3.10, postgres (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 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: | ./runtests.py env: DATABASE_ENGINE: django.db.backends.sqlite3 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.10' 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' install_extras: 'pip uninstall -y djangorestframework ; pip install git+https://github.com/encode/django-rest-framework.git@master#egg=djangorestframework' experimental: true postgres: 'postgres:12' services: postgres: image: ${{ matrix.postgres || 'postgres:10.8' }} 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: | ./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 }} 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.9' django: 'Django>=4.1,<4.2' experimental: false 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: | ./runtests.py env: DATABASE_ENGINE: django.db.backends.mysql DATABASE_HOST: '127.0.0.1' DATABASE_USER: root # 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: | ./runtests.py wagtail.search wagtail.documents wagtail.images --elasticsearch5 env: DATABASE_ENGINE: django.db.backends.sqlite3 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: | ./runtests.py wagtail.search wagtail.documents wagtail.images --elasticsearch7 env: DATABASE_ENGINE: django.db.backends.sqlite3 USE_EMAIL_USER_MODEL: ${{ matrix.emailuser }} # 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:10.8 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: | ./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 }} 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:10.8 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: | ./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 }}