-
-
Notifications
You must be signed in to change notification settings - Fork 2
100 lines (96 loc) · 4.06 KB
/
ci.yaml
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
name: Continuous Test
on:
push:
branches:
- 'main'
pull_request: {}
jobs:
lint:
environment: continuous_test
strategy:
matrix:
# Run for Python 3.8 only for now
python-version: ['3.8']
os: [ubuntu-latest]
runs-on: ${{ matrix.os }}
steps:
- uses: actions/checkout@v4
- name: Install dependencies
run: |
pip install isort flake8 interrogate
echo "## CI/CD Summary :rocket:" >> $GITHUB_STEP_SUMMARY
echo "-------------------------" >> $GITHUB_STEP_SUMMARY
- name: Check imports with isort
run: |
# Show the diffs for debugging
isort -c dasf/
if [[ $? -ne 0 ]] ; then
echo "* **isort results:**" >> $GITHUB_STEP_SUMMARY
echo "```diff" >> $GITHUB_STEP_SUMMARY
isort -c --df dasf/ >> $GITHUB_STEP_SUMMARY
echo "```" >> $GITHUB_STEP_SUMMARY
exit 1
else
echo "* **isort results:** :white_check_mark:" >> $GITHUB_STEP_SUMMARY
exit 0
fi
- name: Lint with flake8
run: |
# stop the build if there are Python syntax errors or undefined names
flake8 dasf/ --count --select=E9,F63,F7,F82 --show-source --statistics
# exit-zero treats all errors as warnings. The GitHub editor is 127 chars wide
flake8 dasf/ --count --exit-zero --max-complexity=10 --max-line-length=127 --statistics
if [[ $? -ne 0 ]] ; then
echo "* **flake8 results:**" >> $GITHUB_STEP_SUMMARY
echo "```python" >> $GITHUB_STEP_SUMMARY
flake8 dasf/ --count --exit-zero --max-complexity=10 --max-line-length=127 --statistics >> $GITHUB_STEP_SUMMARY
echo "```" >> $GITHUB_STEP_SUMMARY
exit 1
else
echo "* **flake8 results:** :white_check_mark:" >> $GITHUB_STEP_SUMMARY
exit 0
fi
- name: Doc lint with interrogate
run: |
echo "* **interrogate results:** $(interrogate -i --fail-under=15 dasf/ | cut -d: -d" " -f4)" >> $GITHUB_STEP_SUMMARY
# We should have at least 80% of docs covered
interrogate -vv -i --fail-under=45 --badge-format svg -g /tmp/ -e build/ -e tests/
test_cpu:
runs-on: ubuntu-latest
environment: continuous_test
needs: [lint]
container:
image: docker.io/jcfaracco/dasf:cpu_ci
steps:
- uses: actions/checkout@v4
- name: Install dependencies
run: |
pip install pytest-coverage
- name: Run test cases
run: |
pytest tests/
test_gpu:
runs-on: ubuntu-latest
environment: continuous_test
needs: [lint]
# Skip this test for PRs due to dangerous code submitted.
if: ${{ github.event_name != 'pull_request' }}
steps:
- name: Checkout 🛎
uses: actions/checkout@master
- name: Setup SSH
run: |
mkdir -p ~/.ssh/
sudo apt-get update
sudo apt-get install sshpass -y
ssh-keyscan -H ${{ secrets.CLUSTER_ADDRESS }} >> ~/.ssh/known_hosts
- name: Test SSH connection
id: test_connection
run: |
sshpass -p ${{ secrets.CLUSTER_SSH_PASSWORD }} ssh -T ${{ secrets.CLUSTER_USER }}@${{ secrets.CLUSTER_ADDRESS }} -p 8686 > /dev/null
- name: Pull latest docker image
run: |
sshpass -p ${{ secrets.CLUSTER_SSH_PASSWORD }} ssh ${{ secrets.CLUSTER_USER }}@${{ secrets.CLUSTER_ADDRESS }} -p 8686 "ssh ${{ secrets.CLUSTER_GPU_ID }} \"docker pull jcfaracco/dasf:gpu\""
- name: Run test cases remotely
run: |
sshpass -p ${{ secrets.CLUSTER_SSH_PASSWORD }} ssh ${{ secrets.CLUSTER_USER }}@${{ secrets.CLUSTER_ADDRESS }} -p 8686 "ssh ${{ secrets.CLUSTER_GPU_ID }} \"docker run --rm --gpus all jcfaracco/dasf:gpu sh -c 'pip3 install pytest parameterized pytest-cov pip --upgrade && rm -rf dasf-core && git clone https://github.com/discovery-unicamp/dasf-core.git && cd dasf-core/ && pip3 uninstall dasf -y && pip3 install . && pytest --cov dasf/ tests/ && cd -'\""