<commit_before>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.7, 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.7, 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.7"
            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: <PASSWORD>
          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.7"
            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: <PASSWORD>
          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: <PASSWORD>
          USE_EMAIL_USER_MODEL: ${{ matrix.emailuser }}<commit_msg>Fix Github Actions setup to install Django after Wagtail<commit_after>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.7, 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/4.0.x, python 3.9, postgres (allow failures)
# - django main, python 3.10, postgres (allow failures)
# - elasticsearch 5, django 3.0, python 3.7, 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.7"
            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 -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.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 -e .[testing]
          pip install "${{ matrix.django }}"
      - 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 -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.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 -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>=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 -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.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 -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_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 -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_PASS: <PASSWORD>
          USE_EMAIL_USER_MODEL: ${{ matrix.emailuser }}
{'fraction_non_alphanumeric': 0.10930630755703642, 'fraction_numerical': 0.03211624785968809, 'mean_word_length': 1.7880273513095084, 'pattern_counts': {'":': 0, '<': 39, '<?xml version=': 0, '>': 45, 'https://': 12, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 2, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '6243009', 'n_tokens_mistral': 7092, 'n_tokens_neox': 6647, 'n_words': 1648}