name: Wagtail CI on: push: paths-ignore: - 'docs/**' pull_request: paths-ignore: - 'docs/**' # 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.0, python 3.6, sqlite # - django 3.1, python 3.7, postgres # - django 3.2, python 3.8, postgres # - django 3.2, python 3.9, mysql # - django 3.2, python 3.10, sqlite # - django 3.2, python 3.9, postgres, USE_EMAIL_USER_MODEL=yes # - django 3.2, python 3.10, postgres, DISABLE_TIMEZONE=yes # - django stable/3.2.x, python 3.9, postgres (allow failures) # - django main, python 3.10, postgres (allow failures) # - elasticsearch 5, django 3.0, python 3.6, sqlite # - elasticsearch 6, django 3.1, python 3.7, postgres # - elasticsearch 7, django 3.2, python 3.8, postgres # - elasticsearch 7, django 3.2, python 3.9, sqlite, USE_EMAIL_USER_MODEL=yes jobs: test-sqlite: runs-on: ubuntu-latest strategy: matrix: include: - python: "3.6" django: "Django>=3.0,<3.1" - python: "3.10" django: "Django>=3.1,<3.2" steps: - uses: actions/checkout@v2 - name: Set up Python ${{ matrix.python }} uses: actions/setup-python@v2 with: python-version: ${{ matrix.python }} - name: Install dependencies run: | python -m pip install --upgrade pip pip install "${{ matrix.django }}" pip install -e .[testing] - 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.1,<3.2" experimental: false - python: "3.8" django: "Django>=3.2,<3.3" experimental: false - python: "3.9" django: "Django>=3.2,<3.3" emailuser: emailuser experimental: false - python: "3.10" django: "Django>=3.2,<3.3" notz: notz experimental: false - python: "3.9" django: "git+https://github.com/django/django.git@stable/4.0.x#egg=Django" experimental: true - python: "3.10" django: "git+https://github.com/django/django.git@main#egg=Django" experimental: true services: postgres: image: postgres:10.8 ports: - 5432:5432 options: --health-cmd pg_isready --health-interval 10s --health-timeout 5s --health-retries 5 steps: - uses: actions/checkout@v2 - name: Set up Python ${{ matrix.python }} uses: actions/setup-python@v2 with: python-version: ${{ matrix.python }} - name: Install dependencies run: | python -m pip install --upgrade pip pip install "psycopg2>=2.6" pip install "${{ matrix.django }}" pip install -e .[testing] - name: Test run: | ./runtests.py env: DATABASE_ENGINE: django.db.backends.postgresql DATABASE_HOST: localhost DATABASE_USER: postgres DATABASE_PASS: postgres USE_EMAIL_USER_MODEL: ${{ matrix.emailuser }} DISABLE_TIMEZONE: ${{ matrix.notz }} test-mysql: runs-on: ubuntu-latest strategy: matrix: include: - python: "3.9" django: "Django>=3.2,<3.3" 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@v2 - name: Set up Python ${{ matrix.python }} uses: actions/setup-python@v2 with: python-version: ${{ matrix.python }} - name: Install dependencies run: | python -m pip install --upgrade pip pip install "mysqlclient>=1.4,<2" pip install "${{ matrix.django }}" pip install -e .[testing] - 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.6" django: "Django>=3.0,<3.1" 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@v2 - name: Set up Python ${{ matrix.python }} uses: actions/setup-python@v2 with: python-version: ${{ matrix.python }} - name: Install dependencies run: | python -m pip install --upgrade pip pip install "${{ matrix.django }}" pip install -e .[testing] 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>=3.2,<3.3" 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@v2 - name: Set up Python ${{ matrix.python }} uses: actions/setup-python@v2 with: python-version: ${{ matrix.python }} - name: Install dependencies run: | python -m pip install --upgrade pip pip install "${{ matrix.django }}" pip install -e .[testing] 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.1,<3.2" 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@v2 - name: Set up Python ${{ matrix.python }} uses: actions/setup-python@v2 with: python-version: ${{ matrix.python }} - name: Install dependencies run: | python -m pip install --upgrade pip pip install "psycopg2>=2.6" pip install "${{ matrix.django }}" pip install -e .[testing] 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_PASS: postgres USE_EMAIL_USER_MODEL: ${{ matrix.emailuser }} test-postgres-elasticsearch7: runs-on: ubuntu-latest strategy: matrix: include: - python: "3.8" 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: 7.6.1 - uses: actions/checkout@v2 - name: Set up Python ${{ matrix.python }} uses: actions/setup-python@v2 with: python-version: ${{ matrix.python }} - name: Install dependencies run: | python -m pip install --upgrade pip pip install "psycopg2>=2.6" pip install "${{ matrix.django }}" pip install -e .[testing] 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_PASS: postgres USE_EMAIL_USER_MODEL: ${{ matrix.emailuser }}