Skip to content

Commit 26db20b

Browse files
committed
Add Kitmaker integration
1 parent 73ee7ad commit 26db20b

File tree

1 file changed

+102
-2
lines changed

1 file changed

+102
-2
lines changed

.github/workflows/build-ubuntu.yml

Lines changed: 102 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -112,8 +112,8 @@ jobs:
112112

113113
strategy:
114114
matrix:
115-
python_version: ['3.10', '3.11', '3.12']
116-
arch: ['x64', 'arm64']
115+
python_version: ['3.10'] # fixme: revert before merging
116+
arch: ['arm64'] # fixme: revert before merging
117117

118118
steps:
119119
- name: Checkout code
@@ -190,6 +190,11 @@ jobs:
190190
exit 1
191191
fi
192192
193+
if [[ "${ARTIFACTORY_URL}" != https://* ]]; then
194+
echo "ARTIFACTORY_URL must use https://"
195+
exit 1
196+
fi
197+
193198
shopt -s nullglob
194199
wheels=(wheels/*.whl)
195200
if (( ${#wheels[@]} == 0 )); then
@@ -210,3 +215,98 @@ jobs:
210215
-u "${ARTIFACTORY_USERNAME}" \
211216
-p "${ARTIFACTORY_API_KEY}" \
212217
"${wheels[@]}"
218+
219+
kitmaker:
220+
runs-on: [self-hosted, linux]
221+
needs:
222+
- publish-wheel
223+
environment: release
224+
if: ${{ needs.publish-wheel.result == 'success' }}
225+
226+
steps:
227+
- name: Download wheel artifacts
228+
uses: actions/download-artifact@v7
229+
with:
230+
pattern: isaacteleop-wheels-*
231+
merge-multiple: true
232+
path: wheels
233+
234+
- name: Submit wheel release to Kitmaker
235+
env:
236+
KITMAKER_PROJECT_ID: ${{ secrets.KITMAKER_PROJECT_ID }}
237+
KITMAKER_TOKEN: ${{ secrets.KITMAKER_TOKEN }}
238+
KITMAKER_PIC_EMAIL: ${{ secrets.KITMAKER_PIC_EMAIL }}
239+
ARTIFACTORY_DOMAIN: ${{ secrets.ARTIFACTORY_DOMAIN }}
240+
ARTIFACTORY_REPO: ${{ secrets.ARTIFACTORY_REPO }}
241+
ARTIFACTORY_TOKEN: ${{ secrets.ARTIFACTORY_TOKEN }}
242+
ARTIFACTORY_USER: ${{ secrets.ARTIFACTORY_USER }}
243+
run: |
244+
set -euo pipefail
245+
246+
if [[ -z "${KITMAKER_TOKEN}" || -z "${KITMAKER_PIC_EMAIL}" ]]; then
247+
echo "Missing one or more required secrets: KITMAKER_TOKEN, KITMAKER_PIC_EMAIL"
248+
exit 1
249+
fi
250+
251+
if [[ -z "${ARTIFACTORY_DOMAIN}" || -z "${ARTIFACTORY_REPO}" || -z "${ARTIFACTORY_TOKEN}" ]]; then
252+
echo "Missing one or more required secrets: ARTIFACTORY_DOMAIN, ARTIFACTORY_REPO, ARTIFACTORY_TOKEN"
253+
exit 1
254+
fi
255+
256+
if [[ "${ARTIFACTORY_DOMAIN}" == http://* || "${ARTIFACTORY_DOMAIN}" == https://* ]]; then
257+
echo "ARTIFACTORY_DOMAIN must be hostname only (no scheme), e.g. artifactory.example.com"
258+
exit 1
259+
fi
260+
261+
if [[ "${ARTIFACTORY_DOMAIN}" == */* ]]; then
262+
echo "ARTIFACTORY_DOMAIN must not contain '/'"
263+
exit 1
264+
fi
265+
266+
shopt -s nullglob
267+
wheels=(wheels/*.whl)
268+
if (( ${#wheels[@]} == 0 )); then
269+
echo "No wheels found under wheels/*.whl"
270+
ls -la wheels || true
271+
exit 1
272+
fi
273+
274+
api_url="https://kitmaker-portal.nvidia.com/api/v0/projects/${KITMAKER_PROJECT_ID}/releases"
275+
wheel_url_base="https://${ARTIFACTORY_USER}:${ARTIFACTORY_TOKEN}@${ARTIFACTORY_DOMAIN}/artifactory/${ARTIFACTORY_REPO}/isaacteleop"
276+
277+
for wheel_path in "${wheels[@]}"; do
278+
wheel_name="$(basename "${wheel_path}")"
279+
if [[ "${wheel_name}" =~ ^isaacteleop-([^-]+)- ]]; then
280+
wheel_version="${BASH_REMATCH[1]}"
281+
else
282+
echo "Unable to parse version from wheel filename: ${wheel_name}"
283+
exit 1
284+
fi
285+
286+
wheel_url="${wheel_url_base}/${wheel_version}/${wheel_name}"
287+
288+
payload=$(cat <<EOF
289+
{
290+
"project_name": "isaacteleop",
291+
"payload": [
292+
{
293+
"pic": "${KITMAKER_PIC_EMAIL}",
294+
"job_type": "wheel-release-job",
295+
"publish_to": "both_devzone_pypi",
296+
"url": "${wheel_url}",
297+
"size": "small",
298+
"upload": false
299+
}
300+
]
301+
}
302+
EOF
303+
)
304+
305+
echo "Posting wheel to Kitmaker: ${wheel_name}"
306+
curl --fail-with-body --show-error --silent --location --include \
307+
-X POST "${api_url}" \
308+
-H "Authorization: Bearer ${KITMAKER_TOKEN}" \
309+
-H "Content-Type: application/json" \
310+
-d "${payload}"
311+
echo
312+
done

0 commit comments

Comments
 (0)