Cuts the number of unit test checks from 64 down to 34 Also, we rename test contexts so that they're easier to read in GHA.
186 lines
5.8 KiB
YAML
186 lines
5.8 KiB
YAML
name: unit-tests
|
|
|
|
on:
|
|
pull_request:
|
|
push:
|
|
branches:
|
|
- master
|
|
|
|
jobs:
|
|
run-tests:
|
|
name: ${{ matrix.shard_name }}(py=${{ matrix.python-version }},dj=${{ matrix.django-version }},mongo=${{ matrix.mongo-version }})
|
|
if: (github.repository == 'edx/edx-platform-private') || (github.repository == 'openedx/edx-platform' && (startsWith(github.base_ref, 'open-release') == false))
|
|
runs-on: [ edx-platform-runner ]
|
|
strategy:
|
|
matrix:
|
|
python-version:
|
|
- "3.8"
|
|
- "3.11"
|
|
django-version:
|
|
- "pinned"
|
|
# When updating the shards, remember to make the same changes in
|
|
# .github/workflows/unit-tests-gh-hosted.yml
|
|
shard_name:
|
|
- "lms-1"
|
|
- "lms-2"
|
|
- "lms-3"
|
|
- "lms-4"
|
|
- "lms-5"
|
|
- "lms-6"
|
|
- "openedx-1-with-lms"
|
|
- "openedx-2-with-lms"
|
|
- "openedx-1-with-cms"
|
|
- "openedx-2-with-cms"
|
|
- "cms-1"
|
|
- "cms-2"
|
|
- "common-with-lms"
|
|
- "common-with-cms"
|
|
- "xmodule-with-lms"
|
|
- "xmodule-with-cms"
|
|
mongo-version:
|
|
- "4.4"
|
|
- "7.0"
|
|
|
|
# We only need to test Mongo 4.4 for modules that directly interface with Mongo (that is: xmodule.modulestore)
|
|
exclude:
|
|
- mongo-version: "4.4"
|
|
include:
|
|
- shard_name: "xmodule-with-cms"
|
|
python-version: "3.11"
|
|
django-version: "pinned"
|
|
mongo-version: "4.4"
|
|
- shard_name: "xmodule-with-lms"
|
|
python-version: "3.11"
|
|
django-version: "pinned"
|
|
mongo-version: "4.4"
|
|
|
|
steps:
|
|
- name: sync directory owner
|
|
run: sudo chown runner:runner -R .*
|
|
|
|
- name: install mongo version
|
|
run: |
|
|
if [[ "${{ matrix.mongo-version }}" != "4.4" ]]; then
|
|
sudo apt-get purge -y "mongodb-org*"
|
|
sudo apt-get remove -y mongodb-org
|
|
wget -qO - https://www.mongodb.org/static/pgp/server-${{ matrix.mongo-version }}.asc | sudo apt-key add -
|
|
echo "deb https://repo.mongodb.org/apt/ubuntu focal/mongodb-org/${{ matrix.mongo-version }} multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-${{ matrix.mongo-version }}.list
|
|
sudo apt-get update && sudo apt-get install -y mongodb-org="${{ matrix.mongo-version }}.*"
|
|
fi
|
|
|
|
- name: start mongod server for tests
|
|
run: |
|
|
sudo mkdir -p /data/db
|
|
sudo chmod -R a+rw /data/db
|
|
mongod &
|
|
|
|
- name: Setup Python
|
|
uses: actions/setup-python@v4
|
|
with:
|
|
python-version: ${{ matrix.python-version }}
|
|
|
|
- name: checkout repo
|
|
uses: actions/checkout@v3
|
|
|
|
- name: install requirements
|
|
run: |
|
|
sudo make test-requirements
|
|
if [[ "${{ matrix.django-version }}" != "pinned" ]]; then
|
|
sudo pip install "django~=${{ matrix.django-version }}.0"
|
|
sudo pip check # fail if this test-reqs/Django combination is broken
|
|
fi
|
|
|
|
- name: list installed package versions
|
|
run: |
|
|
sudo pip freeze
|
|
|
|
- name: Setup and run tests
|
|
uses: ./.github/actions/unit-tests
|
|
|
|
- name: Renaming coverage data file
|
|
run: |
|
|
mv reports/.coverage reports/${{ matrix.shard_name }}.coverage
|
|
|
|
- name: Upload coverage
|
|
uses: actions/upload-artifact@v3
|
|
with:
|
|
name: coverage
|
|
path: reports/${{matrix.shard_name}}.coverage
|
|
|
|
# This job aggregates test results. It's the required check for branch protection.
|
|
# https://github.com/marketplace/actions/alls-green#why
|
|
# https://github.com/orgs/community/discussions/33579
|
|
success:
|
|
name: Unit tests successful
|
|
if: (github.repository == 'edx/edx-platform-private') || (github.repository == 'openedx/edx-platform' && (startsWith(github.base_ref, 'open-release') == false))
|
|
needs:
|
|
- run-tests
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- name: Decide whether the needed jobs succeeded or failed
|
|
# uses: re-actors/alls-green@v1.2.1
|
|
uses: re-actors/alls-green@05ac9388f0aebcb5727afa17fcccfecd6f8ec5fe
|
|
with:
|
|
jobs: ${{ toJSON(needs) }}
|
|
|
|
compile-warnings-report:
|
|
runs-on: [ edx-platform-runner ]
|
|
needs: [ run-tests ]
|
|
steps:
|
|
- name: sync directory owner
|
|
run: sudo chown runner:runner -R .*
|
|
- uses: actions/checkout@v3
|
|
- name: collect pytest warnings files
|
|
uses: actions/download-artifact@v3
|
|
with:
|
|
name: pytest-warnings-json
|
|
path: test_root/log
|
|
|
|
- name: display structure of downloaded files
|
|
run: ls -la test_root/log
|
|
|
|
- name: compile warnings report
|
|
run: |
|
|
python openedx/core/process_warnings.py --dir-path test_root/log --html-path reports/pytest_warnings/warning_report_all.html
|
|
|
|
- name: save warning report
|
|
if: success()
|
|
uses: actions/upload-artifact@v3
|
|
with:
|
|
name: pytest-warning-report-html
|
|
path: |
|
|
reports/pytest_warnings/warning_report_all.html
|
|
|
|
# Combine and upload coverage reports.
|
|
coverage:
|
|
needs: run-tests
|
|
runs-on: ubuntu-latest
|
|
strategy:
|
|
matrix:
|
|
python-version: [ 3.8 ]
|
|
steps:
|
|
- name: Checkout repo
|
|
uses: actions/checkout@v3
|
|
|
|
- name: Setup Python ${{ matrix.python-version }}
|
|
uses: actions/setup-python@v4
|
|
with:
|
|
python-version: ${{ matrix.python-version }}
|
|
|
|
- name: Download all artifacts
|
|
uses: actions/download-artifact@v3
|
|
with:
|
|
name: coverage
|
|
path: reports
|
|
|
|
- name: Install Python dependencies
|
|
run: |
|
|
pip install -r requirements/edx/coverage.txt
|
|
|
|
- name: Run coverage
|
|
run: |
|
|
coverage combine reports/*
|
|
coverage report
|
|
coverage xml
|
|
- uses: codecov/codecov-action@v3
|