Workflow change to run only specific suite of E2E tests #81
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: Backend tests | |
on: | |
merge_group: | |
types: [checks_requested] | |
push: | |
branches: | |
- develop | |
- release-* | |
pull_request: | |
branches: | |
- develop | |
- release-* | |
jobs: | |
run_tests: | |
name: Run backend tests | |
runs-on: ${{ matrix.os }} | |
strategy: | |
matrix: | |
os: [ubuntu-22.04] | |
shard: [1, 2, 3, 4, 5] | |
steps: | |
- uses: actions/checkout@v3 | |
- uses: actions/setup-python@v4 | |
with: | |
python-version: '3.8.15' | |
architecture: 'x64' | |
- name: Cache node modules and third_party/static | |
uses: actions/cache@v3 | |
env: | |
cache-name: cache-node-modules | |
with: | |
path: | | |
/home/runner/work/oppia/yarn_cache | |
/home/runner/work/oppia/oppia/third_party/static | |
key: ${{ runner.os }}-build-${{ env.cache-name }}-${{ hashFiles('yarn.lock', 'dependencies.json') }} | |
restore-keys: | | |
${{ runner.os }}-build-${{ env.cache-name }}- | |
${{ runner.os }}-build- | |
${{ runner.os }}- | |
- uses: ./.github/actions/install-oppia-dependencies | |
if: startsWith(github.head_ref, 'update-changelog-for-release') == false | |
- name: Install packages for optimized coverage | |
if: startsWith(github.head_ref, 'update-changelog-for-release') == false | |
run: sudo apt-get install -y python-dev-is-python3 gcc | |
- name: Install coverage and configparser | |
if: startsWith(github.head_ref, 'update-changelog-for-release') == false | |
run: pip install coverage configparser | |
- name: Run backend test shard | |
if: startsWith(github.head_ref, 'update-changelog-for-release') == false | |
run: PYTHONIOENCODING=utf-8 python -m scripts.run_backend_tests --generate_coverage_report --generate_time_report --ignore_coverage --exclude_load_tests --test_shard ${{ matrix.shard }} | |
- name: Report failure if failed on oppia/oppia develop branch | |
if: ${{ failure() && github.event_name == 'push' && github.repository == 'oppia/oppia' && github.ref == 'refs/heads/develop'}} | |
uses: ./.github/actions/send-webhook-notification | |
with: | |
message: "A backend test failed on the upstream develop branch." | |
webhook-url: ${{ secrets.BUILD_FAILURE_ROOM_WEBHOOK_URL }} | |
- name: Upload time report | |
uses: actions/upload-artifact@v3 | |
with: | |
name: ${{ format('backend_test_time_shard_{0}', matrix.shard) }} | |
path: backend_test_time_report.json | |
retention-days: 1 | |
- name: Upload coverage report | |
if: startsWith(github.head_ref, 'update-changelog-for-release') == false | |
uses: actions/upload-artifact@v3 | |
with: | |
name: ${{ format('backend_test_coverage_shard_{0}', matrix.shard) }} | |
path: .coverage | |
retention-days: 1 | |
check_combined_coverage: | |
name: Check combined backend test coverage | |
needs: run_tests | |
runs-on: ubuntu-22.04 | |
steps: | |
- uses: actions/checkout@v3 | |
- uses: actions/setup-python@v4 | |
with: | |
python-version: '3.8.15' | |
architecture: 'x64' | |
- name: Cache node modules | |
uses: actions/cache@v3 | |
env: | |
cache-name: cache-node-modules | |
with: | |
path: /home/runner/work/oppia/yarn_cache | |
key: ${{ runner.os }}-build-${{ env.cache-name }}-${{ hashFiles('yarn.lock') }} | |
restore-keys: | | |
${{ runner.os }}-build-${{ env.cache-name }}- | |
${{ runner.os }}-build- | |
${{ runner.os }}- | |
# We need this so that we can check coverage of autogenerated code | |
- uses: ./.github/actions/install-oppia-dependencies | |
if: startsWith(github.head_ref, 'update-changelog-for-release') == false | |
- name: Install coverage | |
if: startsWith(github.head_ref, 'update-changelog-for-release') == false | |
run: pip install coverage | |
- name: Download coverage report for shard 1 | |
if: startsWith(github.head_ref, 'update-changelog-for-release') == false | |
uses: actions/download-artifact@v3 | |
with: | |
name: backend_test_coverage_shard_1 | |
path: coverage/coverage_1 | |
- name: Download coverage report for shard 2 | |
if: startsWith(github.head_ref, 'update-changelog-for-release') == false | |
uses: actions/download-artifact@v3 | |
with: | |
name: backend_test_coverage_shard_2 | |
path: coverage/coverage_2 | |
- name: Download coverage report for shard 3 | |
if: startsWith(github.head_ref, 'update-changelog-for-release') == false | |
uses: actions/download-artifact@v3 | |
with: | |
name: backend_test_coverage_shard_3 | |
path: coverage/coverage_3 | |
- name: Download coverage report for shard 4 | |
if: startsWith(github.head_ref, 'update-changelog-for-release') == false | |
uses: actions/download-artifact@v3 | |
with: | |
name: backend_test_coverage_shard_4 | |
path: coverage/coverage_4 | |
- name: Download coverage report for shard 5 | |
if: startsWith(github.head_ref, 'update-changelog-for-release') == false | |
uses: actions/download-artifact@v3 | |
with: | |
name: backend_test_coverage_shard_5 | |
path: coverage/coverage_5 | |
- name: Move coverage reports from artifact folders to coverage folder | |
if: startsWith(github.head_ref, 'update-changelog-for-release') == false | |
shell: bash | |
run: | | |
for i in {1..5}; do cp coverage/coverage_$i/.coverage coverage/.coverage.$i; done | |
- name: Combine coverage reports | |
if: startsWith(github.head_ref, 'update-changelog-for-release') == false | |
shell: bash | |
run: coverage combine coverage/.coverage.* | |
- name: Check coverage | |
if: startsWith(github.head_ref, 'update-changelog-for-release') == false | |
shell: bash | |
run: PYTHONIOENCODING=utf-8 python -m scripts.check_overall_backend_test_coverage | |
- name: Report failure if failed on oppia/oppia develop branch | |
if: ${{ failure() && github.event_name == 'push' && github.repository == 'oppia/oppia' && github.ref == 'refs/heads/develop'}} | |
uses: ./.github/actions/send-webhook-notification | |
with: | |
message: "Backend coverage checks failed on the upstream develop branch." | |
webhook-url: ${{ secrets.BUILD_FAILURE_ROOM_WEBHOOK_URL }} | |
check_backend_test_times: | |
name: Check backend test times | |
needs: run_tests | |
runs-on: ubuntu-22.04 | |
steps: | |
- uses: actions/checkout@v3 | |
- uses: actions/setup-python@v4 | |
with: | |
python-version: '3.8.15' | |
architecture: 'x64' | |
- name: Download time report for shard 1 | |
uses: actions/download-artifact@v3 | |
with: | |
name: backend_test_time_shard_1 | |
path: backend_test_time_reports_artifacts/backend_test_time_1 | |
- name: Download time report for shard 2 | |
uses: actions/download-artifact@v3 | |
with: | |
name: backend_test_time_shard_2 | |
path: backend_test_time_reports_artifacts/backend_test_time_2 | |
- name: Download time report for shard 3 | |
uses: actions/download-artifact@v3 | |
with: | |
name: backend_test_time_shard_3 | |
path: backend_test_time_reports_artifacts/backend_test_time_3 | |
- name: Download time report for shard 4 | |
uses: actions/download-artifact@v3 | |
with: | |
name: backend_test_time_shard_4 | |
path: backend_test_time_reports_artifacts/backend_test_time_4 | |
- name: Download time report for shard 5 | |
uses: actions/download-artifact@v3 | |
with: | |
name: backend_test_time_shard_5 | |
path: backend_test_time_reports_artifacts/backend_test_time_5 | |
- name: Move time reports from artifact folders to backend_test_time_reports folder | |
shell: bash | |
run: | | |
mkdir -p backend_test_time_reports | |
for i in {1..5}; do cp backend_test_time_reports_artifacts/backend_test_time_$i/backend_test_time_report.json backend_test_time_reports/backend_test_time_report_$i.json; done | |
- name: Check test times | |
run: python -m scripts.check_backend_test_times | |
shell: bash | |
- name: Upload test times artifact | |
if: ${{ github.event_name == 'push' && github.repository == 'oppia/oppia' && github.ref == 'refs/heads/develop' }} | |
uses: actions/upload-artifact@v3 | |
with: | |
name: backend_test_times | |
path: backend_test_times.txt | |
retention-days: 7 |