[WIP] feat: call python methods from forum v2 #29620
Workflow file for this run
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: unit-tests | |
on: | |
pull_request: | |
push: | |
branches: | |
- master | |
concurrency: | |
# We only need to be running tests for the latest commit on each PR | |
# (however, we fully test every commit on master, even as new ones land). | |
group: ${{ github.workflow }}-${{ github.ref }} | |
cancel-in-progress: ${{ github.ref != 'refs/heads/master' }} | |
jobs: | |
run-tests: | |
name: ${{ matrix.shard_name }}(py=${{ matrix.python-version }},dj=${{ matrix.django-version }},mongo=${{ matrix.mongo-version }}) | |
runs-on: ubuntu-latest | |
strategy: | |
matrix: | |
python-version: | |
- "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: | |
- "7.0" | |
# We only need to test older versions of Mongo with modules that directly interface with Mongo (that is: xmodule.modulestore) | |
# This code is left here as an example for future refernce in case we need to reduce the number of shards we're | |
# testing but still have good confidence with older versions of mongo. We use Mongo 4.4 in the example. | |
# | |
# 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: checkout repo | |
uses: actions/checkout@v4 | |
- name: install system requirements | |
run: | | |
sudo apt-get update && sudo apt-get install libmysqlclient-dev libxmlsec1-dev lynx openssl | |
# This is needed until the ENABLE_BLAKE2B_HASHING can be removed and we | |
# can stop using MD4 by default. | |
- name: enable md4 hashing in libssl | |
run: | | |
cat <<EOF | sudo tee /etc/ssl/openssl.cnf | |
# Use this in order to automatically load providers. | |
openssl_conf = openssl_init | |
[openssl_init] | |
providers = provider_sect | |
[provider_sect] | |
default = default_sect | |
legacy = legacy_sect | |
[default_sect] | |
activate = 1 | |
[legacy_sect] | |
activate = 1 | |
EOF | |
- name: install mongo version | |
run: | | |
if [[ "${{ matrix.mongo-version }}" != "4.4" ]]; then | |
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@v5 | |
with: | |
python-version: ${{ matrix.python-version }} | |
- name: install requirements | |
run: | | |
make test-requirements | |
if [[ "${{ matrix.django-version }}" != "pinned" ]]; then | |
pip install "django~=${{ matrix.django-version }}.0" | |
pip check # fail if this test-reqs/Django combination is broken | |
fi | |
- name: list installed package versions | |
run: | | |
pip freeze | |
- name: set settings path | |
shell: bash | |
run: | | |
echo "settings_path=$(python scripts/unit_test_shards_parser.py --shard-name=${{ matrix.shard_name }} --output settings )" >> $GITHUB_ENV | |
- name: get unit tests for shard | |
shell: bash | |
run: | | |
echo "unit_test_paths=$(python scripts/unit_test_shards_parser.py --shard-name=${{ matrix.shard_name }} )" >> $GITHUB_ENV | |
- name: run tests | |
shell: bash | |
run: | | |
python -Wd -m pytest -p no:randomly --ds=${{ env.settings_path }} ${{ env.unit_test_paths }} --cov=. | |
- name: rename warnings json file | |
if: success() | |
shell: bash | |
run: | | |
cd test_root/log | |
mv pytest_warnings.json pytest_warnings_${{ matrix.shard_name }}.json | |
- name: save pytest warnings json file | |
if: success() | |
uses: actions/upload-artifact@v4 | |
with: | |
name: pytest-warnings-json-${{ matrix.shard_name }} | |
path: | | |
test_root/log/pytest_warnings*.json | |
overwrite: true | |
- name: Renaming coverage data file | |
run: | | |
mv reports/.coverage reports/${{ matrix.shard_name }}.coverage | |
- name: Upload coverage | |
uses: actions/upload-artifact@v4 | |
with: | |
name: coverage-${{ matrix.shard_name }} | |
path: reports/${{ matrix.shard_name }}.coverage | |
overwrite: true | |
collect-and-verify: | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Setup Python | |
uses: actions/setup-python@v5 | |
with: | |
python-version: 3.11 | |
- name: install system requirements | |
run: | | |
sudo apt-get update && sudo apt-get install libxmlsec1-dev | |
- name: install requirements | |
run: | | |
make test-requirements | |
- name: collect tests from all modules | |
shell: bash | |
run: | | |
echo "root_cms_unit_tests_count=$(pytest --disable-warnings --collect-only --ds=cms.envs.test cms/ -q | head -n -2 | wc -l)" >> $GITHUB_ENV | |
echo "root_lms_unit_tests_count=$(pytest --disable-warnings --collect-only --ds=lms.envs.test lms/ openedx/ common/djangoapps/ xmodule/ pavelib/ -q | head -n -2 | wc -l)" >> $GITHUB_ENV | |
- name: get GHA unit test paths | |
shell: bash | |
run: | | |
echo "cms_unit_test_paths=$(python scripts/gha_unit_tests_collector.py --cms-only)" >> $GITHUB_ENV | |
echo "lms_unit_test_paths=$(python scripts/gha_unit_tests_collector.py --lms-only)" >> $GITHUB_ENV | |
- name: collect tests from GHA unit test shards | |
shell: bash | |
run: | | |
echo "cms_unit_tests_count=$(pytest --disable-warnings --collect-only --ds=cms.envs.test ${{ env.cms_unit_test_paths }} -q | head -n -2 | wc -l)" >> $GITHUB_ENV | |
echo "lms_unit_tests_count=$(pytest --disable-warnings --collect-only --ds=lms.envs.test ${{ env.lms_unit_test_paths }} -q | head -n -2 | wc -l)" >> $GITHUB_ENV | |
- name: add unit tests count | |
shell: bash | |
run: | | |
echo "root_all_unit_tests_count=$((${{ env.root_cms_unit_tests_count }}+${{ env.root_lms_unit_tests_count }}))" >> $GITHUB_ENV | |
echo "shards_all_unit_tests_count=$((${{ env.cms_unit_tests_count }}+${{ env.lms_unit_tests_count }}))" >> $GITHUB_ENV | |
- name: print unit tests count | |
shell: bash | |
run: | | |
echo CMS unit tests from root: ${{ env.root_cms_unit_tests_count }} | |
echo LMS unit tests from root: ${{ env.root_lms_unit_tests_count }} | |
echo CMS unit tests from shards: ${{ env.cms_unit_tests_count }} | |
echo LMS unit tests from shards: ${{ env.lms_unit_tests_count }} | |
echo All root unit tests count: ${{ env.root_all_unit_tests_count }} | |
echo All shards unit tests count: ${{ env.shards_all_unit_tests_count }} | |
- name: fail the check | |
shell: bash | |
if: ${{ env.root_all_unit_tests_count != env.shards_all_unit_tests_count }} | |
run: | | |
echo "::error title='Unit test modules in unit-test-shards.json (unit-tests.yml workflow) are outdated'::unit tests running in unit-tests | |
workflow don't match the count for unit tests for entire edx-platform suite, please update the unit-test-shards.json under .github/workflows | |
to add any missing apps and match the count. for more details please take a look at scripts/gha-shards-readme.md" | |
exit 1 | |
# 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 | |
runs-on: ubuntu-latest | |
if: always() | |
needs: [run-tests] | |
steps: | |
- name: Decide whether the needed jobs succeeded or failed | |
# uses: re-actors/[email protected] | |
uses: re-actors/alls-green@05ac9388f0aebcb5727afa17fcccfecd6f8ec5fe | |
with: | |
jobs: ${{ toJSON(needs) }} | |
compile-warnings-report: | |
runs-on: ubuntu-latest | |
needs: [run-tests] | |
steps: | |
- uses: actions/checkout@v4 | |
- name: collect pytest warnings files | |
uses: actions/download-artifact@v4 | |
with: | |
pattern: pytest-warnings-json-* | |
merge-multiple: true | |
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@v4 | |
with: | |
name: pytest-warning-report-html | |
path: | | |
reports/pytest_warnings/warning_report_all.html | |
overwrite: true | |
merge-artifacts: | |
runs-on: ubuntu-latest | |
needs: [compile-warnings-report] | |
steps: | |
- name: Merge Pytest Warnings JSON Artifacts | |
uses: actions/upload-artifact/merge@v4 | |
with: | |
name: pytest-warnings-json | |
pattern: pytest-warnings-json-* | |
delete-merged: true | |
- name: Merge Coverage Artifacts | |
uses: actions/upload-artifact/merge@v4 | |
with: | |
name: coverage | |
pattern: coverage-* | |
delete-merged: true | |
# Combine and upload coverage reports. | |
coverage: | |
if: (github.repository == 'edx/edx-platform-private') || (github.repository == 'openedx/edx-platform' && (startsWith(github.base_ref, 'open-release') == false)) | |
runs-on: ubuntu-latest | |
needs: [run-tests] | |
strategy: | |
matrix: | |
python-version: | |
- 3.11 | |
steps: | |
- name: Checkout repo | |
uses: actions/checkout@v4 | |
- name: Setup Python ${{ matrix.python-version }} | |
uses: actions/setup-python@v5 | |
with: | |
python-version: ${{ matrix.python-version }} | |
- name: Download all artifacts | |
uses: actions/download-artifact@v4 | |
with: | |
pattern: coverage-* | |
merge-multiple: true | |
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@v4 |