Parallelize pytest execution jobs #329
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: Pull Request Check | |
on: [pull_request] | |
jobs: | |
build: | |
name: 'Build docker image' | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v4 | |
- uses: ./.github/actions/setup-test-image | |
lint-ruff: | |
name: 'Lint check (ruff)' | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v4 | |
- uses: chartboost/ruff-action@v1 | |
unit-test: | |
name: 'Unit tests' | |
runs-on: ubuntu-latest | |
needs: build | |
strategy: | |
fail-fast: true | |
matrix: | |
db: [postgres, mysql] | |
test_target: [ | |
'tests/app/admin_* tests/app/company_* tests/app/config_* tests/app/contract_*', | |
'tests/app/dex_*', | |
'tests/app/e2e_* tests/app/eth_*', | |
'tests/app/events_*', | |
'tests/app/messaging_* tests/app/node_info_* tests/app/notification_* tests/app/openapi_*', | |
'tests/app/position_ListAllCouponConsumptions_*', | |
'tests/app/position_Position_*', | |
'tests/app/position_PositionCoupon* tests/app/position_PositionMembership*', | |
'tests/app/position_PositionShare*', | |
'tests/app/position_PositionStraightBond*', | |
'tests/app/token_*', | |
'tests/app/userinfo_*', | |
'tests/batch/indexer_Block_* tests/batch/indexer_CompanyList_* tests/batch/indexer_Consume_*', | |
'tests/batch/indexer_DEX_*', | |
'tests/batch/indexer_Position_Bond_*', | |
'tests/batch/indexer_Position_Coupon_*', | |
'tests/batch/indexer_Position_Membership_*', | |
'tests/batch/indexer_Position_Share_*', | |
'tests/batch/indexer_Token_Detail_*', | |
'tests/batch/indexer_Token_Holders_*', | |
'tests/batch/indexer_Token_List_*', | |
'tests/batch/indexer_Transfer_*', | |
'tests/batch/processor_*', | |
] | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Change owner of output directory | |
run: | | |
sudo chown runner:docker /home/runner/work/ibet-Wallet-API/ibet-Wallet-API/cov | |
sudo chmod 777 /home/runner/work/ibet-Wallet-API/ibet-Wallet-API/cov | |
- uses: ./.github/actions/setup-test-image | |
- run: ls -al | |
- name: run unit test using ${{ matrix.db }} | |
run: docker compose run -e TEST_TARGET="${{ matrix.test_target }}" ibet-wallet-api-${{ matrix.db }} | |
- run: mv cov/.coverage cov/.coverage-${{ strategy.job-index }} | |
- uses: actions/upload-artifact@v4 | |
if: matrix.db == 'postgres' | |
with: | |
name: .coverage-${{ strategy.job-index }} | |
path: cov/.coverage-${{ strategy.job-index }} | |
include-hidden-files: true | |
- run: mv cov/pytest.xml cov/pytest-${{ strategy.job-index }}.xml | |
- uses: actions/upload-artifact@v4 | |
if: matrix.db == 'postgres' | |
with: | |
name: pytest-${{ strategy.job-index }} | |
path: cov/pytest-${{ strategy.job-index }}.xml | |
collect_coverage: | |
runs-on: ubuntu-latest | |
needs: unit-test | |
permissions: | |
actions: read | |
contents: read | |
packages: read | |
pull-requests: write | |
steps: | |
- uses: actions/checkout@v4 | |
- uses: ./.github/actions/setup-test-image | |
- name: Change owner of output directory | |
run: | | |
sudo chown runner:docker /home/runner/work/ibet-Wallet-API/ibet-Wallet-API/cov | |
sudo chmod 777 /home/runner/work/ibet-Wallet-API/ibet-Wallet-API/cov | |
- uses: actions/download-artifact@v4 | |
with: | |
pattern: '.coverage-*' | |
path: cov/ | |
merge-multiple: true | |
- name: combine coverage files | |
run: docker compose run -w /app/ibet-Wallet-API/cov ibet-wallet-api-postgres bash --login -c 'poetry run coverage combine .coverage-*' | |
- name: generate coverage xml file | |
run: docker compose run -w /app/ibet-Wallet-API ibet-wallet-api-postgres bash --login -c 'poetry run coverage xml --data-file=cov/.coverage -o cov/coverage.xml' | |
- uses: actions/download-artifact@v4 | |
with: | |
pattern: 'pytest-*' | |
path: cov/ | |
merge-multiple: true | |
- uses: actions/setup-node@v4 | |
with: | |
node-version: 20 | |
- name: Install junit-report-merger | |
run: npm install -g junit-report-merger | |
- name: Merge reports | |
run: jrm cov/pytest.xml "cov/pytest-*.xml" | |
- name: Pytest coverage comment | |
id: coverageComment | |
uses: MishaKav/pytest-coverage-comment@main | |
with: | |
report-only-changed-files: true | |
pytest-xml-coverage-path: cov/coverage.xml | |
junitxml-path: cov/pytest.xml | |
migration-test: | |
name: 'Migration tests' | |
runs-on: ubuntu-latest | |
needs: build | |
strategy: | |
fail-fast: true | |
matrix: | |
db: [postgres, mysql] | |
steps: | |
- uses: actions/checkout@v4 | |
- uses: ./.github/actions/setup-test-image | |
- run: ls -al | |
- name: run unit test using ${{ matrix.db }} | |
run: docker compose run ibet-wallet-api-${{ matrix.db }} bash --login -c "cd /app/ibet-Wallet-API && poetry run pytest -vv --test-alembic -m 'alembic'" |