-
Notifications
You must be signed in to change notification settings - Fork 1
114 lines (112 loc) · 4.2 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
name: Unit Test
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: astral-sh/ruff-action@v1
unit-test-postgres:
name: 'Unit tests (PostgreSQL)'
runs-on: ubuntu-latest
needs: build
strategy:
fail-fast: true
matrix:
test_target: [
'tests/app/',
'tests/batch/',
]
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-Prime/ibet-Prime/cov
sudo chmod 777 /home/runner/work/ibet-Prime/ibet-Prime/cov
- name: run unit test using postgres
run: docker compose run -e TEST_TARGET="${{ matrix.test_target }}" ibet-prime-postgres
- run: mv cov/.coverage cov/.coverage-${{ strategy.job-index }}
- uses: actions/upload-artifact@v4
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
with:
name: pytest-${{ strategy.job-index }}
path: cov/pytest-${{ strategy.job-index }}.xml
collect_coverage:
runs-on: ubuntu-latest
needs: unit-test-postgres
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-Prime/ibet-Prime/cov
sudo chmod 777 /home/runner/work/ibet-Prime/ibet-Prime/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-Prime/cov ibet-prime-postgres bash --login -c 'poetry run coverage combine .coverage-*'
- name: generate coverage xml file
run: docker compose run -w /app/ibet-Prime ibet-prime-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@v1
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-Prime ibet-prime-postgres bash --login -c 'poetry run pytest --collect-only | grep -e "<Function" -e "<Coroutine"' | wc -l)
echo "test_count=${RESULT}" >> $GITHUB_OUTPUT
- 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-postgres:
name: 'Migration tests (PostgreSQL)'
runs-on: ubuntu-latest
needs: build
steps:
- uses: actions/checkout@v4
- uses: ./.github/actions/setup-test-image
- name: run unit test using postgres
run: docker compose run ibet-prime-postgres bash --login -c "cd /app/ibet-Prime && pytest -vv --test-alembic -m 'alembic'"