Files
edx-platform/.github/workflows/unit-tests.yml
Tim McCormack 2edbdcf7f4 build: Clear out stale dependencies when installing requirements (#31080)
We've been seeing some cross-version caching issues in the
edx-platform-runner unit tests, which apparently run on a "dirty"
environment—the virtualenv does not get cleared out between runs,
which probably improves performance but allows installed dependencies
to "leak" between runs. This results in errors between master and older
open-releases but could also prevent us from noticing missing deps.

By using pip-sync in the new CI Make targets (as we already do for
the regular `make requirements` target) we can ensure that any stale
dependencies from runs by other branches (or older versions of the
code) are removed.

Calling `make local-requirements` at the end of each `*-requirements`
target rather than making it a prerequisite is necessary for using sync,
since otherwise the local reqs would be wiped out.

The `requirements` target is also deduplicated into the newer
`dev-requirements` (aliased to it, with both installing private deps now.)

Adding a prerequisite of `pre-requirements` allows us to simplify some
workflow calls slightly. This ends up being the bulk of the commit by
line count. The pip lockfile also wasn't being used in the Makefile, so
I added that to pre-requirements as well.

Also fix leading whitespace issue in Makefile.
2022-10-03 20:26:40 +00:00

116 lines
3.3 KiB
YAML

name: unit-tests
on:
pull_request:
push:
branches:
- master
jobs:
run-tests:
name: python-${{ matrix.python-version }},django-${{ matrix.django-version }},${{ matrix.shard_name }}
if: github.repository == 'openedx/edx-platform' || github.repository == 'edx/edx-platform-private'
runs-on: [ edx-platform-runner ]
strategy:
matrix:
python-version:
- "3.8"
django-version:
- "pinned"
#- "4.0"
shard_name:
- "lms-1"
- "lms-2"
- "lms-3"
- "lms-4"
- "lms-5"
- "lms-6"
- "openedx-1"
- "openedx-2"
- "openedx-3"
- "openedx-4"
- "cms-1"
- "cms-2"
- "common-1"
- "common-2"
- "xmodule-1"
# We expect Django 4.0 to fail, so don't stop when it fails.
continue-on-error: ${{ matrix.django-version == '4.0' }}
steps:
- name: sync directory owner
run: sudo chown runner:runner -R .*
- name: checkout repo
uses: actions/checkout@v2
# This gives Mongo several chances to start. We started getting flakiness
# around 2022-02-15 wherein the start command would sometimes exit with:
#
# * Starting database mongodb
# ...fail!
#
# ...not having produced any logs or other output. We couldn't figure out
# what was causing Mongo to fail, so this is a (temporary?) hack to get
# PRs unblocked.
- name: start mongod server for tests
run: |
sudo mkdir -p /data/db
sudo chmod -R a+rw /data/db
mongod &
- name: install requirements
run: |
sudo make test-requirements
if [[ "${{ matrix.django-version }}" == "pinned" ]]; then
sudo pip install -r requirements/edx/django.txt
else
sudo pip install "django~=${{ matrix.django-version }}.0"
fi
- name: list installed package versions
run: |
sudo pip freeze
- name: Setup and run tests
uses: ./.github/actions/unit-tests
success:
name: Tests successful
# A collection step to give a simple name for required status checks.
# https://github.com/orgs/community/discussions/33579
needs: run-tests
runs-on: ubuntu-latest
steps:
- name: "Success"
run: |
echo Tests successful
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@v2
- name: collect pytest warnings files
uses: actions/download-artifact@v2
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@v2
with:
name: pytest-warning-report-html
path: |
reports/pytest_warnings/warning_report_all.html