-
Notifications
You must be signed in to change notification settings - Fork 0
235 lines (206 loc) Β· 7.92 KB
/
cicd-pr-dev-master.yaml
File metadata and controls
235 lines (206 loc) Β· 7.92 KB
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
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
name: "CI/CD Pipeline (PR: to master)"
on:
pull_request:
branches:
- master
permissions:
contents: write
actions: read
env:
PYTHON_VERSION: "3.12"
jobs:
check-commit:
runs-on: ubuntu-latest
outputs:
commit-message: ${{ steps.check.outputs.commit-message }}
steps:
- name: Checkout repository
uses: actions/checkout@v4
with:
ref: ${{ github.head_ref }}
- name: Get latest commit message
id: check
run: |
COMMIT_MESSAGE=$(git log -1 --pretty=format:'%s')
echo "commit-message=$COMMIT_MESSAGE" >> $GITHUB_OUTPUT
merge-from-docs:
runs-on: ubuntu-latest
needs: [check-commit]
# [`master` PR] "Merge pull request*/docs"
# [`master` PR] "Merge pull request*[Docs] Build Example Images & GitHub Release Note"
steps:
- name: Check commit message and set status
run: |
COMMIT_MESSAGE="${{ needs.check-commit.outputs.commit-message }}"
if [[ "$COMMIT_MESSAGE" == Merge\ pull\ request* && ( "$COMMIT_MESSAGE" == *docs* || "$COMMIT_MESSAGE" == *'[Docs] Build Example Images & GitHub Release Note'* ) ]]; then
echo "Commit message meets the criteria."
else
echo "Commit message does not meet the criteria."
exit 1
fi
build:
runs-on: ubuntu-latest
needs: [check-commit]
strategy:
matrix:
python-version: ["3.10", "3.11", "3.12", "3.13"]
# [`master` PR] (Except "Merge pull request*/docs" && "Merge pull request*[Docs] Build Example Images & GitHub Release Note")
if: |
!(startsWith(needs.check-commit.outputs.commit-message, 'Merge pull request') &&
(contains(needs.check-commit.outputs.commit-message, 'docs') ||
contains(needs.check-commit.outputs.commit-message, '[Docs] Build Example Images & GitHub Release Note')))
steps:
- name: Checkout repository
uses: actions/checkout@v4
with:
ref: ${{ github.head_ref }}
- name: Install uv
uses: astral-sh/setup-uv@v6
with:
version: "latest"
enable-cache: true
- name: Set up Python
run: uv python install ${{ matrix.python-version }}
- name: Install dependencies
run: |
uv sync --extra all
lint:
runs-on: ubuntu-latest
needs: [build]
steps:
- name: Checkout repository
uses: actions/checkout@v4
with:
ref: ${{ github.head_ref }}
- name: Install uv
uses: astral-sh/setup-uv@v6
with:
version: "latest"
enable-cache: true
- name: Set up Python
run: uv python install ${{ env.PYTHON_VERSION }}
- name: Install dependencies and lint
run: |
uvx ruff check .
uvx ruff format --check .
test:
runs-on: ubuntu-latest
needs: [build]
strategy:
matrix:
python-version: ["3.10", "3.11", "3.12", "3.13"]
steps:
- name: Checkout repository
uses: actions/checkout@v4
with:
ref: ${{ github.head_ref }}
- name: Install uv
uses: astral-sh/setup-uv@v6
with:
version: "latest"
enable-cache: true
- name: Set up Python
run: uv python install ${{ matrix.python-version }}
- name: Start Triton Inference Server
run: |
docker run -d --name triton-inference-server \
-p 8000:8000 -p 8001:8001 \
-v ${{ github.workspace }}:/mnt/zerohertzLib \
-v ${{ github.workspace }}/test/data/triton-inference-server:/models \
nvcr.io/nvidia/tritonserver:25.08-py3 \
bash -c "cp -r /mnt/zerohertzLib /tmp/zerohertzLib && echo hi && pip install /tmp/zerohertzLib[mlops] && tritonserver --model-repository /models --model-control-mode=explicit"
- name: Wait for Triton Inference Server to be ready
run: |
echo "Waiting for Triton Inference Server to be ready..."
timeout 60 bash -c 'until curl -f http://localhost:8000/v2/health/ready; do sleep 2; done'
echo "Triton Inference Server is ready!"
- name: Run tests
env:
DISCORD_WEBHOOK_URL: ${{ secrets.DISCORD_WEBHOOK_URL }}
DISCORD_BOT_TOKEN: ${{ secrets.DISCORD_BOT_TOKEN }}
DISCORD_BOT_CHANNEL: ${{ secrets.DISCORD_BOT_CHANNEL }}
SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK_URL }}
SLACK_BOT_TOKEN: ${{ secrets.SLACK_BOT_TOKEN }}
GH_TOKEN: ${{ secrets.GH_TOKEN }}
run: |
sudo apt update
sudo apt install python3-opencv -y
uv sync --extra all
uv pip install pytest pytest-xdist pytest-cov
uv run pytest --durations=0 -vv -n auto --dist=loadfile --cov=zerohertzLib --cov-report=xml --junitxml=junit.xml -o junit_family=legacy
- name: Upload test results to Codecov
uses: codecov/test-results-action@v1
with:
flags: python${{ matrix.python-version }}
token: ${{ secrets.CODECOV_TOKEN }}
if: always()
- name: Upload results to Codecov
uses: codecov/codecov-action@v4
with:
flags: python${{ matrix.python-version }}
token: ${{ secrets.CODECOV_TOKEN }}
if: always()
docs:
runs-on: ubuntu-latest
needs: [lint, test]
steps:
- name: Checkout repository
uses: actions/checkout@v4
with:
ref: ${{ github.head_ref }}
- name: Install uv
uses: astral-sh/setup-uv@v6
with:
version: "latest"
enable-cache: true
- name: Set up Python
run: uv python install ${{ env.PYTHON_VERSION }}
- name: Align with latest branch
run: |
git fetch origin
git checkout ${{ github.head_ref }}
git reset --hard origin/${{ github.head_ref }}
- name: Update version
if: startsWith(github.head_ref, 'dev-')
run: |
HEAD_REF=${{ github.head_ref }}
VERSION=${HEAD_REF#dev-}
sed -i "s/^__version__ = .*/__version__ = \"$VERSION\"/" zerohertzLib/__init__.py
- name: Build example images
env:
GH_TOKEN: ${{ secrets.GH_TOKEN }}
run: |
uv sync --extra all
uv run docs/mkdocs/scripts/release_note.py --token ${GH_TOKEN}
uv run docs/mkdocs/scripts/example_images.py
- name: Commit and push on docs branch
env:
GH_USERNAME: ${{ secrets.GH_USERNAME }}
GH_TOKEN: ${{ secrets.GH_TOKEN }}
run: |
git config --global user.email "ohg3417@gmail.com"
git config --global user.name "${GH_USERNAME}"
git config --global credential.helper "!f() { echo username=${GH_USERNAME}; echo password=${GH_TOKEN}; }; f"
if git ls-remote --heads origin docs | grep 'refs/heads/docs'; then git push origin --delete docs; fi
git checkout -b docs
if git diff --exit-code zerohertzLib/__init__.py > /dev/null; then
echo "No changes in version, skipping commit."
else
git add zerohertzLib/__init__.py
git commit -m ":hammer: update: version (#${{ github.event.pull_request.number }})"
fi
git add docs/assets
git commit -m ':memo: docs: example images (#${{ github.event.pull_request.number }})'
git add docs/release
git commit -m ':memo: docs: release note (#${{ github.event.pull_request.number }})'
git push origin docs
echo '{
"title": "[Docs] Build Example Images & GitHub Release Note",
"head": "docs",
"base": "${{ github.head_ref }}",
"body": "#${{ github.event.pull_request.number }} (Build: ${{ github.sha }})"
}' > payload.json
curl -X POST -H "Authorization: token ${GH_TOKEN}" \
-H "Accept: application/vnd.github.v3+json" \
https://api.github.com/repos/Zerohertz/zerohertzLib/pulls \
-d @payload.json