-
Notifications
You must be signed in to change notification settings - Fork 0
143 lines (141 loc) · 5.66 KB
/
pr.yml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
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/indexer_TransferApproval_*',
'tests/batch/processor_*',
]
steps:
- uses: actions/checkout@v4
- uses: ./.github/actions/setup-test-image
- name: build image on compose
run: docker compose build
- 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
- 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: build image on compose
run: docker compose build
- 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
- name: Count test cases in repository
id: countTest
run: |
RESULT=$(docker compose run -w /app/ibet-Wallet-API ibet-wallet-api-postgres bash --login -c 'poetry run pytest --collect-only | grep -e "<Function" -e "<Coroutine"' | wc -l)
echo "::set-output name=test_count::$RESULT"
- run: echo ${{ steps.coverageComment.outputs.tests }}
- run: echo ${{ steps.countTest.outputs.test_count }}
- name: Check the count of test cases in CI
if: steps.coverageComment.outputs.tests != steps.countTest.outputs.test_count
run: exit 1
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
- 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'"