@@ -2,17 +2,99 @@ name: Continuous Integration
22
33on : [pull_request, workflow_dispatch]
44
5+ concurrency :
6+ group : ${{ github.workflow }}-${{ github.ref }}
7+ cancel-in-progress : true
8+
59jobs :
610 unit-test :
711 runs-on : ubuntu-latest
12+ env :
13+ COVERAGE_FILE : coverage.xml
14+ COVERAGE_DIR : .coverage-reports
815 steps :
9- - name : Checkout
10- uses : actions/checkout@v3
11- - name : Test
12- run : >
13- DOCKER_BUILDKIT=1 docker build .
14- --progress=plain
15- --build-arg CONDUCTOR_AUTH_KEY=${{ secrets.CONDUCTOR_AUTH_KEY }}
16- --build-arg CONDUCTOR_AUTH_SECRET=${{ secrets.CONDUCTOR_AUTH_SECRET }}
17- --build-arg CONDUCTOR_SERVER_URL=${{ secrets.CONDUCTOR_SERVER_URL }}
18- --target=unit_test
16+ - name : Checkout code
17+ uses : actions/checkout@v4
18+
19+ - name : Build test image
20+ run : |
21+ DOCKER_BUILDKIT=1 docker build . \
22+ --target python_test_base \
23+ -t conductor-sdk-test:latest
24+
25+ - name : Prepare coverage directory
26+ run : |
27+ mkdir -p ${{ env.COVERAGE_DIR }}
28+ chmod 777 ${{ env.COVERAGE_DIR }}
29+ touch ${{ env.COVERAGE_FILE }}
30+ chmod 666 ${{ env.COVERAGE_FILE }}
31+
32+ - name : Run unit tests
33+ id : unit_tests
34+ continue-on-error : true
35+ run : |
36+ docker run --rm \
37+ -e CONDUCTOR_AUTH_KEY=${{ secrets.CONDUCTOR_AUTH_KEY }} \
38+ -e CONDUCTOR_AUTH_SECRET=${{ secrets.CONDUCTOR_AUTH_SECRET }} \
39+ -e CONDUCTOR_SERVER_URL=${{ secrets.CONDUCTOR_SERVER_URL }} \
40+ -v ${{ github.workspace }}/${{ env.COVERAGE_DIR }}:/package/${{ env.COVERAGE_DIR }}:rw \
41+ conductor-sdk-test:latest \
42+ /bin/sh -c "cd /package && COVERAGE_FILE=/package/${{ env.COVERAGE_DIR }}/.coverage.unit coverage run --source=src/conductor -m unittest discover --verbose --start-directory=./tests/unit"
43+
44+ - name : Run backward compatibility tests
45+ id : bc_tests
46+ continue-on-error : true
47+ run : |
48+ docker run --rm \
49+ -e CONDUCTOR_AUTH_KEY=${{ secrets.CONDUCTOR_AUTH_KEY }} \
50+ -e CONDUCTOR_AUTH_SECRET=${{ secrets.CONDUCTOR_AUTH_SECRET }} \
51+ -e CONDUCTOR_SERVER_URL=${{ secrets.CONDUCTOR_SERVER_URL }} \
52+ -v ${{ github.workspace }}/${{ env.COVERAGE_DIR }}:/package/${{ env.COVERAGE_DIR }}:rw \
53+ conductor-sdk-test:latest \
54+ /bin/sh -c "cd /package && COVERAGE_FILE=/package/${{ env.COVERAGE_DIR }}/.coverage.bc coverage run --source=src/conductor -m unittest discover --verbose --start-directory=./tests/backwardcompatibility"
55+
56+ - name : Run serdeser tests
57+ id : serdeser_tests
58+ continue-on-error : true
59+ run : |
60+ docker run --rm \
61+ -e CONDUCTOR_AUTH_KEY=${{ secrets.CONDUCTOR_AUTH_KEY }} \
62+ -e CONDUCTOR_AUTH_SECRET=${{ secrets.CONDUCTOR_AUTH_SECRET }} \
63+ -e CONDUCTOR_SERVER_URL=${{ secrets.CONDUCTOR_SERVER_URL }} \
64+ -v ${{ github.workspace }}/${{ env.COVERAGE_DIR }}:/package/${{ env.COVERAGE_DIR }}:rw \
65+ conductor-sdk-test:latest \
66+ /bin/sh -c "cd /package && COVERAGE_FILE=/package/${{ env.COVERAGE_DIR }}/.coverage.serdeser coverage run --source=src/conductor -m unittest discover --verbose --start-directory=./tests/serdesertest"
67+
68+ - name : Generate coverage report
69+ id : coverage_report
70+ continue-on-error : true
71+ run : |
72+ docker run --rm \
73+ -v ${{ github.workspace }}/${{ env.COVERAGE_DIR }}:/package/${{ env.COVERAGE_DIR }}:rw \
74+ -v ${{ github.workspace }}/${{ env.COVERAGE_FILE }}:/package/${{ env.COVERAGE_FILE }}:rw \
75+ conductor-sdk-test:latest \
76+ /bin/sh -c "cd /package && coverage combine /package/${{ env.COVERAGE_DIR }}/.coverage.* && coverage report && coverage xml"
77+
78+ - name : Verify coverage file
79+ id : verify_coverage
80+ if : always()
81+ continue-on-error : true
82+ run : |
83+ if [ ! -s "${{ env.COVERAGE_FILE }}" ]; then
84+ echo "Coverage file is empty or does not exist"
85+ ls -la ${{ env.COVERAGE_FILE }} ${{ env.COVERAGE_DIR }}
86+ exit 1
87+ fi
88+ echo "Coverage file exists and is not empty"
89+
90+ - name : Upload coverage to Codecov
91+ if : always() && steps.verify_coverage.outcome == 'success'
92+ continue-on-error : true
93+ uses : codecov/codecov-action@v3
94+ with :
95+ token : ${{ secrets.CODECOV_TOKEN }}
96+ file : ${{ env.COVERAGE_FILE }}
97+
98+ - name : Check test results
99+ if : steps.unit_tests.outcome == 'failure' || steps.bc_tests.outcome == 'failure' || steps.serdeser_tests.outcome == 'failure'
100+ run : exit 1
0 commit comments