@@ -41,7 +41,7 @@ pipeline {
4141 script : ''' curl -s https://api.github.com/repos/${LS_USER}/${LS_REPO}/releases/latest | jq -r '. | .tag_name' ''' ,
4242 returnStdout : true ). trim()
4343 env. LS_RELEASE_NOTES = sh(
44- script : ''' git log -1 --pretty=%B | sed -E ':a;N;$!ba;s/\\ r{0,1}\\ n/\\\\ n/g' ''' ,
44+ script : ''' cat readme-vars.yml | awk -F \\ " '/date: "[0-9][0-9].[0-9][0-9].[0-9][0-9]:/ {print $4;exit;}' | sed -E ':a;N;$!ba;s/\\ r{0,1}\\ n/\\\\ n/g' ''' ,
4545 returnStdout : true ). trim()
4646 env. GITHUB_DATE = sh(
4747 script : ''' date '+%Y-%m-%dT%H:%M:%S%:z' ''' ,
@@ -132,7 +132,7 @@ pipeline {
132132 script{
133133 env. IMAGE = env. DOCKERHUB_IMAGE
134134 if (env. MULTIARCH == ' true' ) {
135- env. CI_TAGS = ' amd64-' + env. EXT_RELEASE_CLEAN + ' -ls' + env. LS_TAG_NUMBER + ' |arm32v6 -' + env. EXT_RELEASE_CLEAN + ' -ls' + env. LS_TAG_NUMBER + ' |arm64v8-' + env. EXT_RELEASE_CLEAN + ' -ls' + env. LS_TAG_NUMBER
135+ env. CI_TAGS = ' amd64-' + env. EXT_RELEASE_CLEAN + ' -ls' + env. LS_TAG_NUMBER + ' |arm32v7 -' + env. EXT_RELEASE_CLEAN + ' -ls' + env. LS_TAG_NUMBER + ' |arm64v8-' + env. EXT_RELEASE_CLEAN + ' -ls' + env. LS_TAG_NUMBER
136136 } else {
137137 env. CI_TAGS = env. EXT_RELEASE_CLEAN + ' -ls' + env. LS_TAG_NUMBER
138138 }
@@ -150,7 +150,7 @@ pipeline {
150150 script{
151151 env. IMAGE = env. DEV_DOCKERHUB_IMAGE
152152 if (env. MULTIARCH == ' true' ) {
153- env. CI_TAGS = ' amd64-' + env. EXT_RELEASE_CLEAN + ' -pkg-' + env. PACKAGE_TAG + ' -dev-' + env. COMMIT_SHA + ' |arm32v6 -' + env. EXT_RELEASE_CLEAN + ' -pkg-' + env. PACKAGE_TAG + ' -dev-' + env. COMMIT_SHA + ' |arm64v8-' + env. EXT_RELEASE_CLEAN + ' -pkg-' + env. PACKAGE_TAG + ' -dev-' + env. COMMIT_SHA
153+ env. CI_TAGS = ' amd64-' + env. EXT_RELEASE_CLEAN + ' -pkg-' + env. PACKAGE_TAG + ' -dev-' + env. COMMIT_SHA + ' |arm32v7 -' + env. EXT_RELEASE_CLEAN + ' -pkg-' + env. PACKAGE_TAG + ' -dev-' + env. COMMIT_SHA + ' |arm64v8-' + env. EXT_RELEASE_CLEAN + ' -pkg-' + env. PACKAGE_TAG + ' -dev-' + env. COMMIT_SHA
154154 } else {
155155 env. CI_TAGS = env. EXT_RELEASE_CLEAN + ' -pkg-' + env. PACKAGE_TAG + ' -dev-' + env. COMMIT_SHA
156156 }
@@ -168,7 +168,7 @@ pipeline {
168168 script{
169169 env. IMAGE = env. PR_DOCKERHUB_IMAGE
170170 if (env. MULTIARCH == ' true' ) {
171- env. CI_TAGS = ' amd64-' + env. EXT_RELEASE_CLEAN + ' -pkg-' + env. PACKAGE_TAG + ' -pr-' + env. PULL_REQUEST + ' |arm32v6 -' + env. EXT_RELEASE_CLEAN + ' -pkg-' + env. PACKAGE_TAG + ' -pr-' + env. PULL_REQUEST + ' |arm64v8-' + env. EXT_RELEASE_CLEAN + ' -pkg-' + env. PACKAGE_TAG + ' -pr-' + env. PULL_REQUEST
171+ env. CI_TAGS = ' amd64-' + env. EXT_RELEASE_CLEAN + ' -pkg-' + env. PACKAGE_TAG + ' -pr-' + env. PULL_REQUEST + ' |arm32v7 -' + env. EXT_RELEASE_CLEAN + ' -pkg-' + env. PACKAGE_TAG + ' -pr-' + env. PULL_REQUEST + ' |arm64v8-' + env. EXT_RELEASE_CLEAN + ' -pkg-' + env. PACKAGE_TAG + ' -pr-' + env. PULL_REQUEST
172172 } else {
173173 env. CI_TAGS = env. EXT_RELEASE_CLEAN + ' -pkg-' + env. PACKAGE_TAG + ' -pr-' + env. PULL_REQUEST
174174 }
@@ -178,6 +178,35 @@ pipeline {
178178 }
179179 }
180180 }
181+ // Run ShellCheck
182+ stage(' ShellCheck' ) {
183+ when {
184+ environment name : ' CI' , value : ' true'
185+ }
186+ steps {
187+ withCredentials([
188+ string(credentialsId : ' spaces-key' , variable : ' DO_KEY' ),
189+ string(credentialsId : ' spaces-secret' , variable : ' DO_SECRET' )
190+ ]) {
191+ script{
192+ env. SHELLCHECK_URL = ' https://lsio-ci.ams3.digitaloceanspaces.com/' + env. IMAGE + ' /' + env. META_TAG + ' /shellcheck-result.xml'
193+ }
194+ sh ''' curl -sL https://raw.githubusercontent.com/linuxserver/docker-shellcheck/master/checkrun.sh | /bin/bash'''
195+ sh ''' #! /bin/bash
196+ set -e
197+ docker pull lsiodev/spaces-file-upload:latest
198+ docker run --rm \
199+ -e DESTINATION=\" ${IMAGE}/${META_TAG}/shellcheck-result.xml\" \
200+ -e FILE_NAME="shellcheck-result.xml" \
201+ -e MIMETYPE="text/xml" \
202+ -v ${WORKSPACE}:/mnt \
203+ -e SECRET_KEY=\" ${DO_SECRET}\" \
204+ -e ACCESS_KEY=\" ${DO_KEY}\" \
205+ -t lsiodev/spaces-file-upload:latest \
206+ python /upload.py'''
207+ }
208+ }
209+ }
181210 // Use helper containers to render templated files
182211 stage(' Update-Templates' ) {
183212 when {
@@ -209,6 +238,15 @@ pipeline {
209238 else
210239 echo "false" > /tmp/${COMMIT_SHA}-${BUILD_NUMBER}
211240 fi
241+ mkdir -p ${TEMPDIR}/gitbook
242+ git clone https://github.com/linuxserver/docker-documentation.git ${TEMPDIR}/gitbook/docker-documentation
243+ if [ "${BRANCH_NAME}" = "master" ] && [ ! -f ${TEMPDIR}/gitbook/docker-documentation/images/docker-${CONTAINER_NAME}.md ] || [ "$(md5sum ${TEMPDIR}/gitbook/docker-documentation/images/docker-${CONTAINER_NAME}.md | awk '{ print $1 }')" != "$(md5sum ${TEMPDIR}/${CONTAINER_NAME}/docker-${CONTAINER_NAME}.md | awk '{ print $1 }')" ]; then
244+ cp ${TEMPDIR}/${CONTAINER_NAME}/docker-${CONTAINER_NAME}.md ${TEMPDIR}/gitbook/docker-documentation/images/
245+ cd ${TEMPDIR}/gitbook/docker-documentation/
246+ git add images/docker-${CONTAINER_NAME}.md
247+ git commit -m 'Bot Updating Templated Files'
248+ git push https://LinuxServer-CI:${GITHUB_TOKEN}@github.com/linuxserver/docker-documentation.git --all
249+ fi
212250 rm -Rf ${TEMPDIR}'''
213251 script{
214252 env. FILES_UPDATED = sh(
@@ -243,7 +281,7 @@ pipeline {
243281 environment name : ' EXIT_STATUS' , value : ' '
244282 }
245283 steps {
246- sh " docker build --no-cache -t ${ IMAGE} :${ META_TAG} \
284+ sh " docker build --no-cache --pull - t ${ IMAGE} :${ META_TAG} \
247285 --build-arg ${ BUILD_VERSION_ARG} =${ EXT_RELEASE} --build-arg VERSION=\" ${ META_TAG} \" --build-arg BUILD_DATE=${ GITHUB_DATE} ."
248286 }
249287 }
@@ -256,7 +294,7 @@ pipeline {
256294 parallel {
257295 stage(' Build X86' ) {
258296 steps {
259- sh " docker build --no-cache -t ${ IMAGE} :amd64-${ META_TAG} \
297+ sh " docker build --no-cache --pull - t ${ IMAGE} :amd64-${ META_TAG} \
260298 --build-arg ${ BUILD_VERSION_ARG} =${ EXT_RELEASE} --build-arg VERSION=\" ${ META_TAG} \" --build-arg BUILD_DATE=${ GITHUB_DATE} ."
261299 }
262300 }
@@ -279,10 +317,13 @@ pipeline {
279317 '''
280318 sh " curl https://lsio-ci.ams3.digitaloceanspaces.com/qemu-arm-static -o qemu-arm-static"
281319 sh " chmod +x qemu-*"
282- sh " docker build --no-cache -f Dockerfile.armhf -t ${ IMAGE} :arm32v6 -${ META_TAG} \
320+ sh " docker build --no-cache --pull - f Dockerfile.armhf -t ${ IMAGE} :arm32v7 -${ META_TAG} \
283321 --build-arg ${ BUILD_VERSION_ARG} =${ EXT_RELEASE} --build-arg VERSION=\" ${ META_TAG} \" --build-arg BUILD_DATE=${ GITHUB_DATE} ."
284- sh " docker tag ${ IMAGE} :arm32v6-${ META_TAG} lsiodev/buildcache:arm32v6-${ COMMIT_SHA} -${ BUILD_NUMBER} "
285- sh " docker push lsiodev/buildcache:arm32v6-${ COMMIT_SHA} -${ BUILD_NUMBER} "
322+ sh " docker tag ${ IMAGE} :arm32v7-${ META_TAG} lsiodev/buildcache:arm32v7-${ COMMIT_SHA} -${ BUILD_NUMBER} "
323+ sh " docker push lsiodev/buildcache:arm32v7-${ COMMIT_SHA} -${ BUILD_NUMBER} "
324+ sh ''' docker rmi \
325+ ${IMAGE}:arm32v7-${META_TAG} \
326+ lsiodev/buildcache:arm32v7-${COMMIT_SHA}-${BUILD_NUMBER} '''
286327 }
287328 }
288329 }
@@ -305,10 +346,13 @@ pipeline {
305346 '''
306347 sh " curl https://lsio-ci.ams3.digitaloceanspaces.com/qemu-aarch64-static -o qemu-aarch64-static"
307348 sh " chmod +x qemu-*"
308- sh " docker build --no-cache -f Dockerfile.aarch64 -t ${ IMAGE} :arm64v8-${ META_TAG} \
349+ sh " docker build --no-cache --pull - f Dockerfile.aarch64 -t ${ IMAGE} :arm64v8-${ META_TAG} \
309350 --build-arg ${ BUILD_VERSION_ARG} =${ EXT_RELEASE} --build-arg VERSION=\" ${ META_TAG} \" --build-arg BUILD_DATE=${ GITHUB_DATE} ."
310351 sh " docker tag ${ IMAGE} :arm64v8-${ META_TAG} lsiodev/buildcache:arm64v8-${ COMMIT_SHA} -${ BUILD_NUMBER} "
311352 sh " docker push lsiodev/buildcache:arm64v8-${ COMMIT_SHA} -${ BUILD_NUMBER} "
353+ sh ''' docker rmi \
354+ ${IMAGE}:arm64v8-${META_TAG} \
355+ lsiodev/buildcache:arm64v8-${COMMIT_SHA}-${BUILD_NUMBER} '''
312356 }
313357 }
314358 }
@@ -332,13 +376,13 @@ pipeline {
332376 fi
333377 if [ "${DIST_IMAGE}" == "alpine" ]; then
334378 docker run --rm --entrypoint '/bin/sh' -v ${TEMPDIR}:/tmp ${LOCAL_CONTAINER} -c '\
335- apk info > packages && \
336- apk info -v > versions && \
337- paste -d " " packages versions > /tmp/package_versions.txt && \
379+ apk info -v > /tmp/package_versions.txt && \
380+ sort -o /tmp/package_versions.txt /tmp/package_versions.txt && \
338381 chmod 777 /tmp/package_versions.txt'
339382 elif [ "${DIST_IMAGE}" == "ubuntu" ]; then
340383 docker run --rm --entrypoint '/bin/sh' -v ${TEMPDIR}:/tmp ${LOCAL_CONTAINER} -c '\
341- apt list -qq --installed > /tmp/package_versions.txt && \
384+ apt list -qq --installed | sed "s#/.*now ##g" | cut -d" " -f1 > /tmp/package_versions.txt && \
385+ sort -o /tmp/package_versions.txt /tmp/package_versions.txt && \
342386 chmod 777 /tmp/package_versions.txt'
343387 fi
344388 NEW_PACKAGE_TAG=$(md5sum ${TEMPDIR}/package_versions.txt | cut -c1-8 )
@@ -418,9 +462,9 @@ pipeline {
418462 set -e
419463 docker pull lsiodev/ci:latest
420464 if [ "${MULTIARCH}" == "true" ]; then
421- docker pull lsiodev/buildcache:arm32v6 -${COMMIT_SHA}-${BUILD_NUMBER}
465+ docker pull lsiodev/buildcache:arm32v7 -${COMMIT_SHA}-${BUILD_NUMBER}
422466 docker pull lsiodev/buildcache:arm64v8-${COMMIT_SHA}-${BUILD_NUMBER}
423- docker tag lsiodev/buildcache:arm32v6 -${COMMIT_SHA}-${BUILD_NUMBER} ${IMAGE}:arm32v6 -${META_TAG}
467+ docker tag lsiodev/buildcache:arm32v7 -${COMMIT_SHA}-${BUILD_NUMBER} ${IMAGE}:arm32v7 -${META_TAG}
424468 docker tag lsiodev/buildcache:arm64v8-${COMMIT_SHA}-${BUILD_NUMBER} ${IMAGE}:arm64v8-${META_TAG}
425469 fi
426470 docker run --rm \
@@ -470,6 +514,10 @@ pipeline {
470514 sh " docker tag ${ IMAGE} :${ META_TAG} ${ IMAGE} :latest"
471515 sh " docker push ${ IMAGE} :latest"
472516 sh " docker push ${ IMAGE} :${ META_TAG} "
517+ sh ''' docker rmi \
518+ ${IMAGE}:${META_TAG} \
519+ ${IMAGE}:latest '''
520+
473521 }
474522 }
475523 }
@@ -493,30 +541,39 @@ pipeline {
493541 '''
494542 sh ''' #! /bin/bash
495543 if [ "${CI}" == "false" ]; then
496- docker pull lsiodev/buildcache:arm32v6 -${COMMIT_SHA}-${BUILD_NUMBER}
544+ docker pull lsiodev/buildcache:arm32v7 -${COMMIT_SHA}-${BUILD_NUMBER}
497545 docker pull lsiodev/buildcache:arm64v8-${COMMIT_SHA}-${BUILD_NUMBER}
498- docker tag lsiodev/buildcache:arm32v6 -${COMMIT_SHA}-${BUILD_NUMBER} ${IMAGE}:arm32v6 -${META_TAG}
546+ docker tag lsiodev/buildcache:arm32v7 -${COMMIT_SHA}-${BUILD_NUMBER} ${IMAGE}:arm32v7 -${META_TAG}
499547 docker tag lsiodev/buildcache:arm64v8-${COMMIT_SHA}-${BUILD_NUMBER} ${IMAGE}:arm64v8-${META_TAG}
500548 fi'''
501549 sh " docker tag ${ IMAGE} :amd64-${ META_TAG} ${ IMAGE} :amd64-latest"
502- sh " docker tag ${ IMAGE} :arm32v6 -${ META_TAG} ${ IMAGE} :arm32v6 -latest"
550+ sh " docker tag ${ IMAGE} :arm32v7 -${ META_TAG} ${ IMAGE} :arm32v7 -latest"
503551 sh " docker tag ${ IMAGE} :arm64v8-${ META_TAG} ${ IMAGE} :arm64v8-latest"
504552 sh " docker push ${ IMAGE} :amd64-${ META_TAG} "
505- sh " docker push ${ IMAGE} :arm32v6 -${ META_TAG} "
553+ sh " docker push ${ IMAGE} :arm32v7 -${ META_TAG} "
506554 sh " docker push ${ IMAGE} :arm64v8-${ META_TAG} "
507555 sh " docker push ${ IMAGE} :amd64-latest"
508- sh " docker push ${ IMAGE} :arm32v6 -latest"
556+ sh " docker push ${ IMAGE} :arm32v7 -latest"
509557 sh " docker push ${ IMAGE} :arm64v8-latest"
510558 sh " docker manifest push --purge ${ IMAGE} :latest || :"
511- sh " docker manifest create ${ IMAGE} :latest ${ IMAGE} :amd64-latest ${ IMAGE} :arm32v6 -latest ${ IMAGE} :arm64v8-latest"
512- sh " docker manifest annotate ${ IMAGE} :latest ${ IMAGE} :arm32v6 -latest --os linux --arch arm"
559+ sh " docker manifest create ${ IMAGE} :latest ${ IMAGE} :amd64-latest ${ IMAGE} :arm32v7 -latest ${ IMAGE} :arm64v8-latest"
560+ sh " docker manifest annotate ${ IMAGE} :latest ${ IMAGE} :arm32v7 -latest --os linux --arch arm"
513561 sh " docker manifest annotate ${ IMAGE} :latest ${ IMAGE} :arm64v8-latest --os linux --arch arm64 --variant v8"
514562 sh " docker manifest push --purge ${ IMAGE} :${ META_TAG} || :"
515- sh " docker manifest create ${ IMAGE} :${ META_TAG} ${ IMAGE} :amd64-${ META_TAG} ${ IMAGE} :arm32v6 -${ META_TAG} ${ IMAGE} :arm64v8-${ META_TAG} "
516- sh " docker manifest annotate ${ IMAGE} :${ META_TAG} ${ IMAGE} :arm32v6 -${ META_TAG} --os linux --arch arm"
563+ sh " docker manifest create ${ IMAGE} :${ META_TAG} ${ IMAGE} :amd64-${ META_TAG} ${ IMAGE} :arm32v7 -${ META_TAG} ${ IMAGE} :arm64v8-${ META_TAG} "
564+ sh " docker manifest annotate ${ IMAGE} :${ META_TAG} ${ IMAGE} :arm32v7 -${ META_TAG} --os linux --arch arm"
517565 sh " docker manifest annotate ${ IMAGE} :${ META_TAG} ${ IMAGE} :arm64v8-${ META_TAG} --os linux --arch arm64 --variant v8"
518566 sh " docker manifest push --purge ${ IMAGE} :latest"
519567 sh " docker manifest push --purge ${ IMAGE} :${ META_TAG} "
568+ sh ''' docker rmi \
569+ ${IMAGE}:amd64-${META_TAG} \
570+ ${IMAGE}:amd64-latest \
571+ ${IMAGE}:arm32v7-${META_TAG} \
572+ ${IMAGE}:arm32v7-latest \
573+ ${IMAGE}:arm64v8-${META_TAG} \
574+ ${IMAGE}:arm64v8-latest \
575+ lsiodev/buildcache:arm32v7-${COMMIT_SHA}-${BUILD_NUMBER} \
576+ lsiodev/buildcache:arm64v8-${COMMIT_SHA}-${BUILD_NUMBER} '''
520577 }
521578 }
522579 }
@@ -577,6 +634,18 @@ pipeline {
577634 }
578635 }
579636 }
637+ // If this is a Pull request send the CI link as a comment on it
638+ stage(' Pull Request Comment' ) {
639+ when {
640+ not {environment name : ' CHANGE_ID' , value : ' ' }
641+ environment name : ' CI' , value : ' true'
642+ environment name : ' EXIT_STATUS' , value : ' '
643+ }
644+ steps {
645+ sh ''' curl -H "Authorization: token ${GITHUB_TOKEN}" -X POST https://api.github.com/repos/${LS_USER}/${LS_REPO}/issues/${PULL_REQUEST}/comments \
646+ -d '{"body": "I am a bot, here are the test results for this PR: \\ n'${CI_URL}' \\ n'${SHELLCHECK_URL}'"}' '''
647+ }
648+ }
580649 }
581650 /* ######################
582651 Send status to Discord
@@ -589,12 +658,12 @@ pipeline {
589658 }
590659 else if (currentBuild. currentResult == " SUCCESS" ){
591660 sh ''' curl -X POST --data '{"avatar_url": "https://wiki.jenkins-ci.org/download/attachments/2916393/headshot.png","embeds": [{"color": 1681177,\
592- "description": "**Build:** '${BUILD_NUMBER}'\\ n**CI Results:** '${CI_URL}'\\ n**Status:** Success\\ n**Job:** '${RUN_DISPLAY_URL}'\\ n**Change:** '${CODE_URL}'\\ n**External Release:**: '${RELEASE_LINK}'\\ n**DockerHub:** '${DOCKERHUB_LINK}'\\ n"}],\
661+ "description": "**Build:** '${BUILD_NUMBER}'\\ n**CI Results:** '${CI_URL}'\\ n**ShellCheck Results:** '${SHELLCHECK_URL}' \\ n** Status:** Success\\ n**Job:** '${RUN_DISPLAY_URL}'\\ n**Change:** '${CODE_URL}'\\ n**External Release:**: '${RELEASE_LINK}'\\ n**DockerHub:** '${DOCKERHUB_LINK}'\\ n"}],\
593662 "username": "Jenkins"}' ${BUILDS_DISCORD} '''
594663 }
595664 else {
596665 sh ''' curl -X POST --data '{"avatar_url": "https://wiki.jenkins-ci.org/download/attachments/2916393/headshot.png","embeds": [{"color": 16711680,\
597- "description": "**Build:** '${BUILD_NUMBER}'\\ n**CI Results:** '${CI_URL}'\\ n**Status:** failure\\ n**Job:** '${RUN_DISPLAY_URL}'\\ n**Change:** '${CODE_URL}'\\ n**External Release:**: '${RELEASE_LINK}'\\ n**DockerHub:** '${DOCKERHUB_LINK}'\\ n"}],\
666+ "description": "**Build:** '${BUILD_NUMBER}'\\ n**CI Results:** '${CI_URL}'\\ n**ShellCheck Results:** '${SHELLCHECK_URL}' \\ n** Status:** failure\\ n**Job:** '${RUN_DISPLAY_URL}'\\ n**Change:** '${CODE_URL}'\\ n**External Release:**: '${RELEASE_LINK}'\\ n**DockerHub:** '${DOCKERHUB_LINK}'\\ n"}],\
598667 "username": "Jenkins"}' ${BUILDS_DISCORD} '''
599668 }
600669 }
0 commit comments