@@ -35,7 +35,7 @@ pipeline {
3535 script{
3636 env. EXIT_STATUS = ' '
3737 env. LS_RELEASE = sh(
38- script : ''' curl -s https ://api.github.com/repos/${LS_USER}/${LS_REPO}/releases/latest | jq -r '. | .tag_name' ''' ,
38+ script : ''' docker run --rm alexeiled/skopeo sh -c 'skopeo inspect docker ://docker.io/'${DOCKERHUB_IMAGE}':latest 2>/dev/null' | jq -r '.Labels.build_version' | awk '{print $3}' | grep ' \\ -ls' || : ''' ,
3939 returnStdout : true ). trim()
4040 env. LS_RELEASE_NOTES = sh(
4141 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' ''' ,
@@ -49,6 +49,14 @@ pipeline {
4949 env. CODE_URL = ' https://github.com/' + env. LS_USER + ' /' + env. LS_REPO + ' /commit/' + env. GIT_COMMIT
5050 env. DOCKERHUB_LINK = ' https://hub.docker.com/r/' + env. DOCKERHUB_IMAGE + ' /tags/'
5151 env. PULL_REQUEST = env. CHANGE_ID
52+ env. LICENSE_TAG = sh(
53+ script : ''' #!/bin/bash
54+ if [ -e LICENSE ] ; then
55+ cat LICENSE | md5sum | cut -c1-8
56+ else
57+ echo none
58+ fi''' ,
59+ returnStdout : true ). trim()
5260 }
5361 script{
5462 env. LS_RELEASE_NUMBER = sh(
@@ -195,6 +203,73 @@ pipeline {
195203 }
196204 }
197205 }
206+ // Use helper containers to render templated files
207+ stage(' Update-Templates' ) {
208+ when {
209+ branch " master"
210+ environment name : ' CHANGE_ID' , value : ' '
211+ expression {
212+ env. CONTAINER_NAME != null
213+ }
214+ }
215+ steps {
216+ sh ''' #! /bin/bash
217+ set -e
218+ TEMPDIR=$(mktemp -d)
219+ docker pull linuxserver/jenkins-builder:latest
220+ docker run --rm -e CONTAINER_NAME=${CONTAINER_NAME} -e GITHUB_BRANCH=master -v ${TEMPDIR}:/ansible/jenkins linuxserver/jenkins-builder:latest
221+ docker pull linuxserver/doc-builder:latest
222+ docker run --rm -e CONTAINER_NAME=${CONTAINER_NAME} -e GITHUB_BRANCH=master -v ${TEMPDIR}:/ansible/readme linuxserver/doc-builder:latest
223+ if [ "$(md5sum ${TEMPDIR}/${LS_REPO}/Jenkinsfile | awk '{ print $1 }')" != "$(md5sum Jenkinsfile | awk '{ print $1 }')" ] || \
224+ [ "$(md5sum ${TEMPDIR}/${CONTAINER_NAME}/README.md | awk '{ print $1 }')" != "$(md5sum README.md | awk '{ print $1 }')" ] || \
225+ [ "$(md5sum ${TEMPDIR}/${LS_REPO}/LICENSE | md5sum | cut -c1-8)" != "${LICENSE_TAG}" ]; then
226+ mkdir -p ${TEMPDIR}/repo
227+ git clone https://github.com/${LS_USER}/${LS_REPO}.git ${TEMPDIR}/repo/${LS_REPO}
228+ git --git-dir ${TEMPDIR}/repo/${LS_REPO}/.git checkout -f master
229+ cp ${TEMPDIR}/${CONTAINER_NAME}/README.md ${TEMPDIR}/repo/${LS_REPO}/
230+ cp ${TEMPDIR}/docker-${CONTAINER_NAME}/Jenkinsfile ${TEMPDIR}/repo/${LS_REPO}/
231+ cp ${TEMPDIR}/docker-${CONTAINER_NAME}/LICENSE ${TEMPDIR}/repo/${LS_REPO}/
232+ cd ${TEMPDIR}/repo/${LS_REPO}/
233+ git --git-dir ${TEMPDIR}/repo/${LS_REPO}/.git add Jenkinsfile README.md LICENSE
234+ git --git-dir ${TEMPDIR}/repo/${LS_REPO}/.git commit -m 'Bot Updating Templated Files'
235+ git --git-dir ${TEMPDIR}/repo/${LS_REPO}/.git push https://LinuxServer-CI:${GITHUB_TOKEN}@github.com/${LS_USER}/${LS_REPO}.git --all
236+ echo "true" > /tmp/${COMMIT_SHA}-${BUILD_NUMBER}
237+ else
238+ echo "false" > /tmp/${COMMIT_SHA}-${BUILD_NUMBER}
239+ fi
240+ mkdir -p ${TEMPDIR}/gitbook
241+ git clone https://github.com/linuxserver/docker-documentation.git ${TEMPDIR}/gitbook/docker-documentation
242+ 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
243+ cp ${TEMPDIR}/${CONTAINER_NAME}/docker-${CONTAINER_NAME}.md ${TEMPDIR}/gitbook/docker-documentation/images/
244+ cd ${TEMPDIR}/gitbook/docker-documentation/
245+ git add images/docker-${CONTAINER_NAME}.md
246+ git commit -m 'Bot Updating Templated Files'
247+ git push https://LinuxServer-CI:${GITHUB_TOKEN}@github.com/linuxserver/docker-documentation.git --all
248+ fi
249+ rm -Rf ${TEMPDIR}'''
250+ script{
251+ env. FILES_UPDATED = sh(
252+ script : ''' cat /tmp/${COMMIT_SHA}-${BUILD_NUMBER}''' ,
253+ returnStdout : true ). trim()
254+ }
255+ }
256+ }
257+ // Exit the build if the Templated files were just updated
258+ stage(' Template-exit' ) {
259+ when {
260+ branch " master"
261+ environment name : ' CHANGE_ID' , value : ' '
262+ environment name : ' FILES_UPDATED' , value : ' true'
263+ expression {
264+ env. CONTAINER_NAME != null
265+ }
266+ }
267+ steps {
268+ script{
269+ env. EXIT_STATUS = ' ABORTED'
270+ }
271+ }
272+ }
198273 /* ###############
199274 Build Container
200275 ############### */
@@ -239,15 +314,13 @@ pipeline {
239314 sh ''' #! /bin/bash
240315 echo $DOCKERPASS | docker login -u $DOCKERUSER --password-stdin
241316 '''
242- sh " curl https://lsio-ci.ams3.digitaloceanspaces.com/qemu-arm-static -o qemu-arm-static"
243- sh " chmod +x qemu-*"
244317 sh " docker build --no-cache --pull -f Dockerfile.armhf -t ${ IMAGE} :arm32v7-${ META_TAG} \
245318 --build-arg ${ BUILD_VERSION_ARG} =${ EXT_RELEASE} --build-arg VERSION=\" ${ META_TAG} \" --build-arg BUILD_DATE=${ GITHUB_DATE} ."
246319 sh " docker tag ${ IMAGE} :arm32v7-${ META_TAG} lsiodev/buildcache:arm32v7-${ COMMIT_SHA} -${ BUILD_NUMBER} "
247320 sh " docker push lsiodev/buildcache:arm32v7-${ COMMIT_SHA} -${ BUILD_NUMBER} "
248321 sh ''' docker rmi \
249322 ${IMAGE}:arm32v7-${META_TAG} \
250- lsiodev/buildcache:arm32v7-${COMMIT_SHA}-${BUILD_NUMBER} '''
323+ lsiodev/buildcache:arm32v7-${COMMIT_SHA}-${BUILD_NUMBER} || : '''
251324 }
252325 }
253326 }
@@ -268,15 +341,13 @@ pipeline {
268341 sh ''' #! /bin/bash
269342 echo $DOCKERPASS | docker login -u $DOCKERUSER --password-stdin
270343 '''
271- sh " curl https://lsio-ci.ams3.digitaloceanspaces.com/qemu-aarch64-static -o qemu-aarch64-static"
272- sh " chmod +x qemu-*"
273344 sh " docker build --no-cache --pull -f Dockerfile.aarch64 -t ${ IMAGE} :arm64v8-${ META_TAG} \
274345 --build-arg ${ BUILD_VERSION_ARG} =${ EXT_RELEASE} --build-arg VERSION=\" ${ META_TAG} \" --build-arg BUILD_DATE=${ GITHUB_DATE} ."
275346 sh " docker tag ${ IMAGE} :arm64v8-${ META_TAG} lsiodev/buildcache:arm64v8-${ COMMIT_SHA} -${ BUILD_NUMBER} "
276347 sh " docker push lsiodev/buildcache:arm64v8-${ COMMIT_SHA} -${ BUILD_NUMBER} "
277348 sh ''' docker rmi \
278349 ${IMAGE}:arm64v8-${META_TAG} \
279- lsiodev/buildcache:arm64v8-${COMMIT_SHA}-${BUILD_NUMBER} '''
350+ lsiodev/buildcache:arm64v8-${COMMIT_SHA}-${BUILD_NUMBER} || : '''
280351 }
281352 }
282353 }
@@ -440,7 +511,7 @@ pipeline {
440511 sh " docker push ${ IMAGE} :${ META_TAG} "
441512 sh ''' docker rmi \
442513 ${IMAGE}:${META_TAG} \
443- ${IMAGE}:latest '''
514+ ${IMAGE}:latest || : '''
444515
445516 }
446517 }
@@ -489,15 +560,6 @@ pipeline {
489560 sh " docker manifest annotate ${ IMAGE} :${ META_TAG} ${ IMAGE} :arm64v8-${ META_TAG} --os linux --arch arm64 --variant v8"
490561 sh " docker manifest push --purge ${ IMAGE} :latest"
491562 sh " docker manifest push --purge ${ IMAGE} :${ META_TAG} "
492- sh ''' docker rmi \
493- ${IMAGE}:amd64-${META_TAG} \
494- ${IMAGE}:amd64-latest \
495- ${IMAGE}:arm32v7-${META_TAG} \
496- ${IMAGE}:arm32v7-latest \
497- ${IMAGE}:arm64v8-${META_TAG} \
498- ${IMAGE}:arm64v8-latest \
499- lsiodev/buildcache:arm32v7-${COMMIT_SHA}-${BUILD_NUMBER} \
500- lsiodev/buildcache:arm64v8-${COMMIT_SHA}-${BUILD_NUMBER} '''
501563 }
502564 }
503565 }
@@ -506,25 +568,25 @@ pipeline {
506568 when {
507569 branch " master"
508570 expression {
509- env. LS_RELEASE != env. EXT_RELEASE_CLEAN + ' -pkg- ' + env . PACKAGE_TAG + ' - ls' + env. LS_TAG_NUMBER
571+ env. LS_RELEASE != env. EXT_RELEASE_CLEAN + ' -ls' + env. LS_TAG_NUMBER
510572 }
511573 environment name : ' CHANGE_ID' , value : ' '
512574 environment name : ' EXIT_STATUS' , value : ' '
513575 }
514576 steps {
515- echo " Pushing New tag for current commit ${ EXT_RELEASE_CLEAN} -pkg- ${ PACKAGE_TAG } - ls${ LS_TAG_NUMBER} "
577+ echo " Pushing New tag for current commit ${ EXT_RELEASE_CLEAN} -ls${ LS_TAG_NUMBER} "
516578 sh ''' curl -H "Authorization: token ${GITHUB_TOKEN}" -X POST https://api.github.com/repos/${LS_USER}/${LS_REPO}/git/tags \
517- -d '{"tag":"'${EXT_RELEASE_CLEAN}'-pkg-'${PACKAGE_TAG}'- ls'${LS_TAG_NUMBER}'",\
579+ -d '{"tag":"'${EXT_RELEASE_CLEAN}'-ls'${LS_TAG_NUMBER}'",\
518580 "object": "'${COMMIT_SHA}'",\
519- "message": "Tagging Release '${EXT_RELEASE_CLEAN}'-pkg-'${PACKAGE_TAG}'- ls'${LS_TAG_NUMBER}' to master",\
581+ "message": "Tagging Release '${EXT_RELEASE_CLEAN}'-ls'${LS_TAG_NUMBER}' to master",\
520582 "type": "commit",\
521583 "tagger": {"name": "LinuxServer Jenkins","email": "jenkins@linuxserver.io","date": "'${GITHUB_DATE}'"}}' '''
522584 echo " Pushing New release for Tag"
523585 sh ''' #! /bin/bash
524586 echo "Updating base packages to ${PACKAGE_TAG}" > releasebody.json
525- echo '{"tag_name":"'${EXT_RELEASE_CLEAN}'-pkg-'${PACKAGE_TAG}'- ls'${LS_TAG_NUMBER}'",\
587+ echo '{"tag_name":"'${EXT_RELEASE_CLEAN}'-ls'${LS_TAG_NUMBER}'",\
526588 "target_commitish": "master",\
527- "name": "'${EXT_RELEASE_CLEAN}'-pkg-'${PACKAGE_TAG}'- ls'${LS_TAG_NUMBER}'",\
589+ "name": "'${EXT_RELEASE_CLEAN}'-ls'${LS_TAG_NUMBER}'",\
528590 "body": "**LinuxServer Changes:**\\ n\\ n'${LS_RELEASE_NOTES}'\\ n**OS Changes:**\\ n\\ n' > start
529591 printf '","draft": false,"prerelease": false}' >> releasebody.json
530592 paste -d'\\ 0' start releasebody.json > releasebody.json.done
0 commit comments