@@ -10,6 +10,10 @@ executors:
1010 machine :
1111 image : ubuntu-2004:current
1212 resource_class : medium
13+ ubuntu2004arm64large :
14+ machine :
15+ image : ubuntu-2004:current
16+ resource_class : arm-large
1317
1418jobs :
1519 build-multi-arch :
@@ -181,6 +185,129 @@ jobs:
181185 export GITHUB_TOKEN=$(sh get-access-token.sh | tail -n 1)
182186 github-release release --tag $RELEASE_TAG --name $RELEASE_TAG --description "`cat release_notes.md`"
183187
188+ deploy-multi-arch-full-grid :
189+ parameters :
190+ platforms :
191+ type : string
192+ build-args :
193+ type : string
194+ machine-type :
195+ type : executor
196+ circle-job :
197+ type : env_var_name
198+ default : CIRCLE_JOB
199+ make-targets :
200+ type : string
201+ executor : << parameters.machine-type >>
202+ environment :
203+ NAMESPACE : seleniarm
204+ PLATFORMS : << parameters.platforms >>
205+ BUILD_ARGS : << parameters.build-args >>
206+ MAKE_TARGETS : << parameters.make-targets >>
207+ DEPLOY_BRANCH : full-grid
208+ GITHUB_USER : seleniumhq-community
209+ GITHUB_REPO : docker-seleniarm
210+ steps :
211+ - checkout
212+ - run :
213+ name : Debug
214+ command : |
215+ echo $CIRCLE_JOB
216+ echo ${<< parameters.circle-job >>}
217+ - when :
218+ condition :
219+ equal : [ base_multi, << parameters.make-targets >> ]
220+ steps :
221+ - run : echo "CIRCLE_JOB name is deploy-multi-arch-base"
222+ - when :
223+ condition :
224+ equal : [ tag_and_push_multi_arch_browser_images, << parameters.make-targets >> ]
225+ steps :
226+ - run : echo "CIRCLE_JOB name is release notes, so we proceed"
227+ - run :
228+ name : " Prepare workflow environment variables"
229+ command : |
230+ export SELENIUM_VERSION=$(grep selenium-server Base/Dockerfile | sed 's/.*-\([^-]*\)\.jar \\/\1/' | head -n 1)
231+ echo "Prepare workflow environment variables"
232+ echo 'export BRANCH='$SELENIUM_VERSION >> $BASH_ENV
233+ echo 'export BUILD_DATE=$(date '+%Y%m%d')' >> $BASH_ENV
234+ #echo 'export BUILD_DATE=20230110' >> $BASH_ENV
235+ echo 'export RELEASE_TAG="seleniarm-v`echo $BRANCH`-`echo $BUILD_DATE`"' >> $BASH_ENV
236+ source $BASH_ENV
237+ echo "Workflow environment variables:"
238+ echo BRANCH="$BRANCH"
239+ echo BUILD_DATE="$BUILD_DATE"
240+ echo RELEASE_TAG="$RELEASE_TAG"
241+ echo NAMESPACE="$NAMESPACE"
242+ echo PLATFORMS="$PLATFORMS"
243+ echo BUILD_ARGS="$BUILD_ARGS"
244+ echo DEPLOY_BRANCH="$DEPLOY_BRANCH"
245+ echo GITHUB_USER="$GITHUB_USER"
246+ echo GITHUB_REPO="$GITHUB_REPO"
247+ - run : uname -a
248+ - run : docker info
249+ - run :
250+ name : " Check if branch is deployable (contains [deploy] in commit msg on $DEPLOY_BRANCH"
251+ command : |
252+ echo BRANCH="$BRANCH"
253+ echo BUILD_DATE="$BUILD_DATE"
254+ echo RELEASE_TAG="$RELEASE_TAG"
255+ export CI_DEPLOY=`git log --format=oneline -n 1 | grep '\[deploy\]'` && echo "$CI_DEPLOY"
256+ if [ -z "$CI_DEPLOY" ] || [ "$CIRCLE_BRANCH" != "$DEPLOY_BRANCH" ]; then
257+ echo "Cancelling run. Pass [deploy] in commit message on $DEPLOY_BRANCH to deploy"
258+ circleci-agent step halt
259+ else
260+ echo "[deploy] is present in commit message to $DEPLOY_BRANCH. Running workflow to deploy container images"
261+ fi
262+ - run :
263+ name : " Build and Push Docker images"
264+ command : |
265+ echo "Login to Docker, and setup to use a buildx builder and push built multi-arch images"
266+ docker buildx use `docker buildx create`
267+ docker buildx ls
268+ # For release notes, we'll pull images anonymously without login.
269+ # if [ "$MAKE_TARGETS" != "tag_and_push_multi_arch_browser_images" ]; then
270+ docker login -u="$DOCKER_USERNAME" -p="$DOCKER_PASSWORD"
271+ # fi
272+ echo BRANCH="$BRANCH"
273+ echo BUILD_DATE="$BUILD_DATE"
274+ echo RELEASE_TAG="$RELEASE_TAG"
275+ export CI_DEPLOY=`git log --format=oneline -n 1 | grep '\[deploy\]'` && echo "$CI_DEPLOY"
276+ #NAME=${NAMESPACE} VERSION=${BRANCH} BUILD_DATE=${BUILD_DATE} PLATFORMS=${PLATFORMS} BUILD_ARGS=${BUILD_ARGS} sh build-and-push.sh $MAKE_TARGETS
277+
278+ export NAME=${NAMESPACE}
279+ export VERSION=${BRANCH}
280+ export BUILD_DATE=${BUILD_DATE}
281+ export PLATFORMS=${PLATFORMS}
282+ export BUILD_ARGS=${BUILD_ARGS}
283+ # If there are build errors, let's retry
284+ max=5; until sh build-and-push.sh $MAKE_TARGETS; do if [ $((--max)) = 0 ]; then echo Giving up; break; fi; done
285+
286+ - when :
287+ condition :
288+ equal : [ tag_and_push_multi_arch_browser_images, << parameters.make-targets >> ]
289+ steps :
290+ - run :
291+ name : " Push major/minor and browser tags to Docker Hub and update latest tag"
292+ command : |
293+ NAME=${NAMESPACE} VERSION=${BRANCH} BUILD_DATE=${BUILD_DATE} PUSH_IMAGE=true make tag_and_push_multi_arch_browser_images
294+ NAME=${NAMESPACE} VERSION=${BRANCH} BUILD_DATE=${BUILD_DATE} make tag_multi_arch_latest
295+ - run :
296+ name : " Push major/minor tags to Docker Hub for non-browser images"
297+ command : |
298+ NAME=${NAMESPACE} VERSION=${BRANCH} BUILD_DATE=${BUILD_DATE} PUSH_IMAGE=true make tag_major_minor_multi_arch
299+ - run :
300+ name : " Generate release notes"
301+ command : |
302+ docker logout
303+ export LATEST_TAG=$(git describe --tags --abbrev=0)
304+ sh generate_multi-arch-release_notes.sh $LATEST_TAG $CIRCLE_BRANCH $BRANCH $BUILD_DATE
305+ sudo apt-get update -y && sudo apt-get install python3-venv
306+ go install github.com/github-release/[email protected] 307+ cat release_notes.md
308+ export GITHUB_TOKEN=$(sh get-access-token.sh | tail -n 1)
309+ github-release release --tag $RELEASE_TAG --name $RELEASE_TAG --description "`cat release_notes.md`"
310+
184311workflows :
185312 build-and-test-multi-arch :
186313 jobs :
@@ -203,15 +330,82 @@ workflows:
203330 platforms : linux/amd64
204331 machine-type : ubuntu2004amd64
205332
206- deploy-multi-arch :
333+ # deploy-multi-arch:
334+ # jobs:
335+ # - deploy-multi-arch:
336+ # name: deploy-multi-arch
337+ # platforms: linux/arm64,linux/amd64,linux/arm/v7
338+ # build-args: --push
339+ # machine-type: ubuntu2004arm64
340+ # filters:
341+ # branches:
342+ # only:
343+ # - trunk
344+
345+ deploy-multi-arch-full-grid :
207346 jobs :
208- - deploy-multi-arch :
209- name : deploy-multi-arch
347+ - deploy-multi-arch-full-grid :
348+ name : deploy-multi-arch-base
349+ platforms : linux/arm64,linux/amd64,linux/arm/v7
350+ build-args : --push
351+ make-targets : base_multi
352+ machine-type : ubuntu2004arm64large
353+ filters :
354+ branches :
355+ only :
356+ - full-grid
357+ - deploy-multi-arch-full-grid :
358+ name : deploy-multi-arch-full-grid
359+ requires : [deploy-multi-arch-base]
210360 platforms : linux/arm64,linux/amd64,linux/arm/v7
211361 build-args : --push
362+ make-targets : grid_multi
212363 machine-type : ubuntu2004arm64
213364 filters :
214365 branches :
215366 only :
216- - trunk
217-
367+ - full-grid
368+ - deploy-multi-arch-full-grid :
369+ name : deploy-multi-arch-node-base
370+ requires : [deploy-multi-arch-base]
371+ platforms : linux/arm64,linux/amd64,linux/arm/v7
372+ build-args : --push
373+ make-targets : node_base_multi
374+ machine-type : ubuntu2004arm64large
375+ filters :
376+ branches :
377+ only :
378+ - full-grid
379+ - deploy-multi-arch-full-grid :
380+ name : deploy-multi-arch-firefox
381+ requires : [deploy-multi-arch-node-base]
382+ platforms : linux/arm64,linux/amd64,linux/arm/v7
383+ build-args : --push
384+ make-targets : firefox_multi
385+ machine-type : ubuntu2004arm64large
386+ filters :
387+ branches :
388+ only :
389+ - full-grid
390+ - deploy-multi-arch-full-grid :
391+ name : deploy-multi-arch-chromium
392+ requires : [deploy-multi-arch-node-base]
393+ platforms : linux/arm64,linux/amd64,linux/arm/v7
394+ build-args : --push
395+ make-targets : chromium_multi
396+ machine-type : ubuntu2004arm64large
397+ filters :
398+ branches :
399+ only :
400+ - full-grid
401+ - deploy-multi-arch-full-grid :
402+ name : deploy-multi-arch-release-notes
403+ requires : [deploy-multi-arch-firefox,deploy-multi-arch-chromium]
404+ platforms : linux/arm64,linux/amd64,linux/arm/v7
405+ build-args : --push
406+ make-targets : tag_and_push_multi_arch_browser_images
407+ machine-type : ubuntu2004arm64
408+ filters :
409+ branches :
410+ only :
411+ - full-grid
0 commit comments