Skip to content

Commit da5c4b6

Browse files
author
Riccardo Gallina
committed
Chore: automate release process
1 parent 4e89cab commit da5c4b6

File tree

2 files changed

+160
-8
lines changed

2 files changed

+160
-8
lines changed

.github/create_release.sh

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
#!/bin/sh
2+
3+
repo=sertiscorp/oneML-bootcamp
4+
5+
upload_url=$(curl -s -H "Authorization: token $GITHUB_TOKEN" \
6+
-d '{"tag_name": "'"$BOOTCAMP_TAG"'", "name":"'"$BOOTCAMP_TAG"'","body":"'"$RELEASE_BODY"'","prerelease":'"$PRERELEASE"', "target_commitish":"'"$BOOTCAMP_REF"'"}' \
7+
"https://api.github.com/repos/$repo/releases" | jq -r '.upload_url')
8+
9+
upload_url="${upload_url%\{*}"
10+
11+
echo "uploading asset to release to url : $upload_url"
12+
count=0
13+
for BINARY in ${BINARIES};
14+
do
15+
count=$(($count+1));
16+
LABEL=$(echo ${LABELS} | cut -d' ' -f$count);
17+
curl -s -H "Authorization: token $GITHUB_TOKEN" \
18+
-H "Content-Type: application/zip" \
19+
--data-binary @build/$BINARY \
20+
"$upload_url?name=$LABEL&label=$LABEL"
21+
done

.gitlab-ci.yml

Lines changed: 139 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,23 @@ image:
22
name: alpine/git:v2.32.0
33
entrypoint: ["/bin/sh", "-c"]
44

5+
variables:
6+
ONEML_PATH: sertiscorp/mle/edge/oneml
7+
ONEML_REF: v3.9.0 # a tag or branch name to get oneML artifacts from
8+
ONEML_COMMIT_HASH: "" # needed only if ONEML_REF is not a tag
9+
BOOTCAMP_TAG: v0.10.0-rc.0 # set manually to the latest or new oneML-bootcamp tag
10+
RELEASE_BODY: "" # generated automatically
11+
PRERELEASE: "true" # set automatically
12+
BOOTCAMP_REF: develop # set automatically
13+
514
stages:
615
- setup
16+
- release
717
- docker-base
818
- docker
919
- env-check
1020
- build
11-
- release
21+
- pages
1222

1323
#-------------- Scripts --------------
1424

@@ -50,18 +60,30 @@ stages:
5060

5161
.base_ci: # Base CI
5262
rules:
53-
- if: '$CI_COMMIT_BRANCH == "main" || $CI_PIPELINE_SOURCE == "merge_request_event"'
63+
- if: '$CI_COMMIT_BRANCH == "main" || $CI_PIPELINE_SOURCE == "merge_request_event" || $CI_COMMIT_MESSAGE =~ /Creating release/'
5464
when: never
5565
- when: on_success
5666

67+
.base_artifacts: # Base CI for pulling artifacts
68+
stage: setup
69+
rules:
70+
- if: '($CI_COMMIT_TAG || $CI_COMMIT_MESSAGE =~ /Creating release/) && $CI_PIPELINE_SOURCE != "merge_request_event"'
71+
when: always
72+
- when: never
73+
script:
74+
- echo "Pulling from oneML..."
75+
artifacts:
76+
paths:
77+
- build/
78+
5779
.base_docker: # Base CI for docker stage
5880
stage: docker-base
5981
image: docker:19.03.11-git
6082
variables:
6183
DOCKER_DRIVER: overlay2
6284
DOCKER_FILES: docker/Dockerfile
6385
rules:
64-
- if: '$CI_COMMIT_BRANCH == "main" || $CI_PIPELINE_SOURCE == "merge_request_event"'
86+
- if: '$CI_COMMIT_BRANCH == "main" || $CI_PIPELINE_SOURCE == "merge_request_event" || $CI_COMMIT_MESSAGE =~ /Creating release/'
6587
when: never
6688
- changes:
6789
- docker/Dockerfile
@@ -89,6 +111,10 @@ stages:
89111
extends: .base_ci
90112
stage: build
91113
image: $BUILD_IMAGE
114+
rules:
115+
- if: '$CI_COMMIT_BRANCH == "main" || $CI_COMMIT_BRANCH =~ /^release\/+/ || $CI_PIPELINE_SOURCE == "merge_request_event" || $CI_COMMIT_MESSAGE =~ /Creating release/'
116+
when: never
117+
- when: on_success
92118
tags:
93119
- build
94120
needs:
@@ -104,9 +130,11 @@ stages:
104130
.base_release: # Base CI for release stage
105131
stage: release
106132
rules:
107-
- if: $CI_COMMIT_TAG
133+
- if: '($CI_COMMIT_TAG || $CI_COMMIT_MESSAGE =~ /Creating release/) && $CI_PIPELINE_SOURCE != "merge_request_event"'
108134
when: on_success
109135
- when: never
136+
tags:
137+
- build
110138

111139
#-------------- Jobs --------------
112140

@@ -137,6 +165,104 @@ mirror-pull:
137165
tags:
138166
- build
139167

168+
artifacts-pull-aarch64-linux-android:
169+
extends: .base_artifacts
170+
needs:
171+
- project: $ONEML_PATH
172+
job: build-bootcamp-aarch64-linux-android
173+
ref: $ONEML_REF
174+
artifacts: true
175+
176+
artifacts-pull-arm-linux-android:
177+
extends: .base_artifacts
178+
needs:
179+
- project: $ONEML_PATH
180+
job: build-bootcamp-arm-linux-android
181+
ref: $ONEML_REF
182+
artifacts: true
183+
184+
artifacts-pull-aarch64-linux-gnu:
185+
extends: .base_artifacts
186+
needs:
187+
- project: $ONEML_PATH
188+
job: build-bootcamp-aarch64-linux-gnu
189+
ref: $ONEML_REF
190+
artifacts: true
191+
192+
artifacts-pull-arm-linux-gnueabihf:
193+
extends: .base_artifacts
194+
needs:
195+
- project: $ONEML_PATH
196+
job: build-bootcamp-arm-linux-gnueabihf
197+
ref: $ONEML_REF
198+
artifacts: true
199+
200+
artifacts-pull-msvc-x64:
201+
extends: .base_artifacts
202+
needs:
203+
- project: $ONEML_PATH
204+
job: build-bootcamp-msvc-x64
205+
ref: $ONEML_REF
206+
artifacts: true
207+
208+
artifacts-pull-x86_64:
209+
extends: .base_artifacts
210+
needs:
211+
- project: $ONEML_PATH
212+
job: build-bootcamp-x86_64
213+
ref: $ONEML_REF
214+
artifacts: true
215+
216+
artifacts-pull-x86_64-cuda:
217+
extends: .base_artifacts
218+
needs:
219+
- project: $ONEML_PATH
220+
job: build-bootcamp-x86_64-cuda-tvm
221+
ref: $ONEML_REF
222+
artifacts: true
223+
224+
create-release:
225+
extends: .base_release
226+
before_script:
227+
- apk update && apk add curl jq
228+
script:
229+
- if [[ $ONEML_REF == v* ]]; then ONEML_POSTFIX=${ONEML_REF}; else ONEML_POSTFIX=${ONEML_COMMIT_HASH:0:7}; fi
230+
- >
231+
BINARIES="";
232+
BINARIES="${BINARIES} oneml-bootcamp-x86_64-$ONEML_POSTFIX.tar.gz";
233+
BINARIES="${BINARIES} oneml-bootcamp_tvm-x86_64-$ONEML_POSTFIX.tar.gz";
234+
BINARIES="${BINARIES} oneml-bootcamp-msvc-x64-$ONEML_POSTFIX.tar.gz";
235+
BINARIES="${BINARIES} oneml-bootcamp_android-aarch64-linux-android-$ONEML_POSTFIX.tar.gz";
236+
BINARIES="${BINARIES} oneml-bootcamp_android-arm-linux-android-$ONEML_POSTFIX.tar.gz";
237+
BINARIES="${BINARIES} oneml-bootcamp-aarch64-linux-gnu-$ONEML_POSTFIX.tar.gz";
238+
BINARIES="${BINARIES} oneml-bootcamp-arm-linux-gnueabihf-$ONEML_POSTFIX.tar.gz";
239+
export BINARIES=${BINARIES};
240+
LABELS="";
241+
LABELS="${LABELS} oneml-bootcamp-x86_64.tar.gz";
242+
LABELS="${LABELS} oneml-bootcamp-x86_64-cuda.tar.gz";
243+
LABELS="${LABELS} oneml-bootcamp-msvc-x64.tar.gz";
244+
LABELS="${LABELS} oneml-bootcamp-aarch64-linux-android.tar.gz";
245+
LABELS="${LABELS} oneml-bootcamp-arm-linux-android.tar.gz";
246+
LABELS="${LABELS} oneml-bootcamp-aarch64-linux-gnu.tar.gz";
247+
LABELS="${LABELS} oneml-bootcamp-arm-linux-gnueabihf.tar.gz";
248+
export LABELS=${LABELS};
249+
- >
250+
if [[ -n "$CI_COMMIT_TAG" ]]; then
251+
export RELEASE_BODY="$(sed '1,6d' CHANGELOG.md | awk -v n=2 '/## \[/{n--}; n > 0' | sed '$ d' | awk '{printf "%s\\n", $0}')";
252+
export PRERELEASE=false;
253+
export BOOTCAMP_REF=main;
254+
export BOOTCAMP_TAG=$CI_COMMIT_TAG;
255+
fi
256+
- sh .github/create_release.sh
257+
needs:
258+
- artifacts-pull-aarch64-linux-android
259+
- artifacts-pull-arm-linux-android
260+
- artifacts-pull-aarch64-linux-gnu
261+
- artifacts-pull-arm-linux-gnueabihf
262+
- artifacts-pull-msvc-x64
263+
- artifacts-pull-x86_64
264+
- artifacts-pull-x86_64-cuda
265+
140266
docker-build-cpu-base:
141267
extends: .base_docker
142268
script:
@@ -155,7 +281,7 @@ docker-build-gpu-base:
155281
- docker build -t $CI_REGISTRY_IMAGE:$CI_COMMIT_REF_SLUG-gpu-base -f docker/Dockerfile --build-arg base_image=nvidia/cuda:11.5.1-cudnn8-runtime-ubuntu20.04 .
156282
- docker push $CI_REGISTRY_IMAGE:$CI_COMMIT_REF_SLUG-gpu-base
157283
rules:
158-
- if: '$CI_COMMIT_BRANCH == "main" || $CI_PIPELINE_SOURCE == "merge_request_event"'
284+
- if: '$CI_COMMIT_BRANCH == "main" || $CI_PIPELINE_SOURCE == "merge_request_event" || $CI_COMMIT_MESSAGE =~ /Creating release/'
159285
when: never
160286
- changes:
161287
- docker/Dockerfile
@@ -189,7 +315,7 @@ docker-build-gpu:
189315
IMAGE: $CI_REGISTRY_IMAGE:$CI_COMMIT_REF_SLUG-gpu-base
190316
DEVELOP_IMAGE: $CI_REGISTRY_IMAGE:develop-gpu-base
191317
rules:
192-
- if: '$CI_COMMIT_BRANCH == "main" || $CI_PIPELINE_SOURCE == "merge_request_event"'
318+
- if: '$CI_COMMIT_BRANCH == "main" || $CI_PIPELINE_SOURCE == "merge_request_event" || $CI_COMMIT_MESSAGE =~ /Creating release/'
193319
when: never
194320
- changes:
195321
- docker/Dockerfile.gpu
@@ -214,7 +340,7 @@ docker-build-android:
214340
IMAGE: $CI_REGISTRY_IMAGE:$CI_COMMIT_REF_SLUG-cpu-base
215341
DEVELOP_IMAGE: $CI_REGISTRY_IMAGE:develop-cpu-base
216342
rules:
217-
- if: '$CI_COMMIT_BRANCH == "main" || $CI_PIPELINE_SOURCE == "merge_request_event"'
343+
- if: '$CI_COMMIT_BRANCH == "main" || $CI_PIPELINE_SOURCE == "merge_request_event" || $CI_COMMIT_MESSAGE =~ /Creating release/'
218344
when: never
219345
- changes:
220346
- docker/Dockerfile.android
@@ -340,6 +466,7 @@ build-csharp-x86_64-cuda:
340466
update-github-pages:
341467
# NOTE: We publish the API doc to GitHub Pages by mirroring `gh-pages` branch from GitLab to GitHub.
342468
extends: .base_release
469+
stage: pages
343470
variables:
344471
TARGET_ARCH: x86_64
345472
script:
@@ -372,4 +499,8 @@ update-github-pages:
372499
git push origin gh-pages;
373500
else
374501
echo "Not found any changes API in docs. Skipped";
375-
fi
502+
fi
503+
rules:
504+
- if: '$CI_COMMIT_TAG && $CI_PIPELINE_SOURCE != "merge_request_event"'
505+
when: on_success
506+
- when: never

0 commit comments

Comments
 (0)