@@ -116,6 +116,16 @@ pipeline {
116116 }
117117 }
118118 }
119+ // Sanitize the release tag and strip illegal docker or github characters
120+ stage(" Sanitize tag" ){
121+ steps{
122+ script{
123+ env. EXT_RELEASE_CLEAN = sh(
124+ script : ''' echo ${EXT_RELEASE} | sed 's/[~,%@+;:/]//g' ''' ,
125+ returnStdout : true ). trim()
126+ }
127+ }
128+ }
119129 // If this is a master build use live docker endpoints
120130 stage(" Set ENV live build" ){
121131 when {
@@ -126,11 +136,11 @@ pipeline {
126136 script{
127137 env. IMAGE = env. DOCKERHUB_IMAGE
128138 if (env. MULTIARCH == ' true' ) {
129- env. CI_TAGS = ' amd64-' + env. EXT_RELEASE + ' -ls' + env. LS_TAG_NUMBER + ' |arm32v6-' + env. EXT_RELEASE + ' -ls' + env. LS_TAG_NUMBER + ' |arm64v8-' + env. EXT_RELEASE + ' -ls' + env. LS_TAG_NUMBER
139+ 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
130140 } else {
131- env. CI_TAGS = env. EXT_RELEASE + ' -ls' + env. LS_TAG_NUMBER
141+ env. CI_TAGS = env. EXT_RELEASE_CLEAN + ' -ls' + env. LS_TAG_NUMBER
132142 }
133- env. META_TAG = env. EXT_RELEASE + ' -ls' + env. LS_TAG_NUMBER
143+ env. META_TAG = env. EXT_RELEASE_CLEAN + ' -ls' + env. LS_TAG_NUMBER
134144 }
135145 }
136146 }
@@ -144,11 +154,11 @@ pipeline {
144154 script{
145155 env. IMAGE = env. DEV_DOCKERHUB_IMAGE
146156 if (env. MULTIARCH == ' true' ) {
147- env. CI_TAGS = ' amd64-' + env. EXT_RELEASE + ' -pkg-' + env. PACKAGE_TAG + ' -dev-' + env. COMMIT_SHA + ' |arm32v6-' + env. EXT_RELEASE + ' -pkg-' + env. PACKAGE_TAG + ' -dev-' + env. COMMIT_SHA + ' |arm64v8-' + env. EXT_RELEASE + ' -pkg-' + env. PACKAGE_TAG + ' -dev-' + env. COMMIT_SHA
157+ 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
148158 } else {
149- env. CI_TAGS = env. EXT_RELEASE + ' -pkg-' + env. PACKAGE_TAG + ' -dev-' + env. COMMIT_SHA
159+ env. CI_TAGS = env. EXT_RELEASE_CLEAN + ' -pkg-' + env. PACKAGE_TAG + ' -dev-' + env. COMMIT_SHA
150160 }
151- env. META_TAG = env. EXT_RELEASE + ' -pkg-' + env. PACKAGE_TAG + ' -dev-' + env. COMMIT_SHA
161+ env. META_TAG = env. EXT_RELEASE_CLEAN + ' -pkg-' + env. PACKAGE_TAG + ' -dev-' + env. COMMIT_SHA
152162 env. DOCKERHUB_LINK = ' https://hub.docker.com/r/' + env. DEV_DOCKERHUB_IMAGE + ' /tags/'
153163 }
154164 }
@@ -162,11 +172,11 @@ pipeline {
162172 script{
163173 env. IMAGE = env. PR_DOCKERHUB_IMAGE
164174 if (env. MULTIARCH == ' true' ) {
165- env. CI_TAGS = ' amd64-' + env. EXT_RELEASE + ' -pkg-' + env. PACKAGE_TAG + ' -pr-' + env. PULL_REQUEST + ' |arm32v6-' + env. EXT_RELEASE + ' -pkg-' + env. PACKAGE_TAG + ' -pr-' + env. PULL_REQUEST + ' |arm64v8-' + env. EXT_RELEASE + ' -pkg-' + env. PACKAGE_TAG + ' -pr-' + env. PULL_REQUEST
175+ 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
166176 } else {
167- env. CI_TAGS = env. EXT_RELEASE + ' -pkg-' + env. PACKAGE_TAG + ' -pr-' + env. PULL_REQUEST
177+ env. CI_TAGS = env. EXT_RELEASE_CLEAN + ' -pkg-' + env. PACKAGE_TAG + ' -pr-' + env. PULL_REQUEST
168178 }
169- env. META_TAG = env. EXT_RELEASE + ' -pkg-' + env. PACKAGE_TAG + ' -pr-' + env. PULL_REQUEST
179+ env. META_TAG = env. EXT_RELEASE_CLEAN + ' -pkg-' + env. PACKAGE_TAG + ' -pr-' + env. PULL_REQUEST
170180 env. CODE_URL = ' https://github.com/' + env. LS_USER + ' /' + env. LS_REPO + ' /pull/' + env. PULL_REQUEST
171181 env. DOCKERHUB_LINK = ' https://hub.docker.com/r/' + env. PR_DOCKERHUB_IMAGE + ' /tags/'
172182 }
@@ -325,25 +335,32 @@ pipeline {
325335 LOCAL_CONTAINER=${IMAGE}:${META_TAG}
326336 fi
327337 if [ "${DIST_IMAGE}" == "alpine" ]; then
328- docker run --rm -v ${TEMPDIR}:/tmp ${LOCAL_CONTAINER} sh -c '\
338+ docker run --rm --entrypoint '/bin/sh' - v ${TEMPDIR}:/tmp ${LOCAL_CONTAINER} -c '\
329339 apk info > packages && \
330340 apk info -v > versions && \
331- paste -d " " packages versions > /tmp/package_versions.txt'
341+ paste -d " " packages versions > /tmp/package_versions.txt && \
342+ chmod 777 /tmp/package_versions.txt'
332343 elif [ "${DIST_IMAGE}" == "ubuntu" ]; then
333- docker run --rm -v ${TEMPDIR}:/tmp ${LOCAL_CONTAINER} sh -c '\
334- apt -qq list --installed | awk "{print \$ 1,\$ 2}" > /tmp/package_versions.txt'
344+ docker run --rm --entrypoint '/bin/sh' -v ${TEMPDIR}:/tmp ${LOCAL_CONTAINER} -c '\
345+ apt list -qq --installed > /tmp/package_versions.txt && \
346+ chmod 777 /tmp/package_versions.txt'
335347 fi
336- if [ "$(md5sum ${TEMPDIR}/package_versions.txt | cut -c1-8 )" != "${PACKAGE_TAG}" ]; then
348+ NEW_PACKAGE_TAG=$(md5sum ${TEMPDIR}/package_versions.txt | cut -c1-8 )
349+ echo "Package tag sha from current packages in buit container is ${NEW_PACKAGE_TAG} comparing to old ${PACKAGE_TAG} from github"
350+ if [ "${NEW_PACKAGE_TAG}" != "${PACKAGE_TAG}" ]; then
337351 git clone https://github.com/${LS_USER}/${LS_REPO}.git ${TEMPDIR}/${LS_REPO}
338352 git --git-dir ${TEMPDIR}/${LS_REPO}/.git checkout -f master
339353 cp ${TEMPDIR}/package_versions.txt ${TEMPDIR}/${LS_REPO}/
340354 cd ${TEMPDIR}/${LS_REPO}/
341- git --git-dir ${TEMPDIR}/${LS_REPO}/.git add package_versions.txt
342- git --git-dir ${TEMPDIR}/${LS_REPO}/.git commit -m 'Bot Updating Package Versions'
343- git --git-dir ${TEMPDIR}/${LS_REPO}/.git push https://LinuxServer-CI:${GITHUB_TOKEN}@github.com/${LS_USER}/${LS_REPO}.git --all
355+ wait
356+ git add package_versions.txt
357+ git commit -m 'Bot Updating Package Versions'
358+ git push https://LinuxServer-CI:${GITHUB_TOKEN}@github.com/${LS_USER}/${LS_REPO}.git --all
344359 echo "true" > /tmp/packages-${COMMIT_SHA}-${BUILD_NUMBER}
360+ echo "Package tag updated, stopping build process"
345361 else
346362 echo "false" > /tmp/packages-${COMMIT_SHA}-${BUILD_NUMBER}
363+ echo "Package tag is same as previous continue with build process"
347364 fi
348365 rm -Rf ${TEMPDIR}'''
349366 script{
@@ -398,6 +415,9 @@ pipeline {
398415 string(credentialsId : ' spaces-key' , variable : ' DO_KEY' ),
399416 string(credentialsId : ' spaces-secret' , variable : ' DO_SECRET' )
400417 ]) {
418+ script{
419+ env. CI_URL = ' https://lsio-ci.ams3.digitaloceanspaces.com/' + env. IMAGE + ' /' + env. META_TAG + ' /index.html'
420+ }
401421 sh ''' #! /bin/bash
402422 set -e
403423 docker pull lsiodev/ci:latest
@@ -426,9 +446,6 @@ pipeline {
426446 -e DO_BUCKET="lsio-ci" \
427447 -t lsiodev/ci:latest \
428448 python /ci/ci.py'''
429- script{
430- env. CI_URL = ' https://lsio-ci.ams3.digitaloceanspaces.com/' + env. IMAGE + ' /' + env. META_TAG + ' /index.html'
431- }
432449 }
433450 }
434451 }
@@ -498,7 +515,7 @@ pipeline {
498515 sh " docker manifest create ${ IMAGE} :latest ${ IMAGE} :amd64-latest ${ IMAGE} :arm32v6-latest ${ IMAGE} :arm64v8-latest"
499516 sh " docker manifest annotate ${ IMAGE} :latest ${ IMAGE} :arm32v6-latest --os linux --arch arm"
500517 sh " docker manifest annotate ${ IMAGE} :latest ${ IMAGE} :arm64v8-latest --os linux --arch arm64 --variant v8"
501- sh " docker manifest push --purge ${ IMAGE} :${ EXT_RELEASE } -ls ${ LS_TAG_NUMBER } || :"
518+ sh " docker manifest push --purge ${ IMAGE} :${ META_TAG } || :"
502519 sh " docker manifest create ${ IMAGE} :${ META_TAG} ${ IMAGE} :amd64-${ META_TAG} ${ IMAGE} :arm32v6-${ META_TAG} ${ IMAGE} :arm64v8-${ META_TAG} "
503520 sh " docker manifest annotate ${ IMAGE} :${ META_TAG} ${ IMAGE} :arm32v6-${ META_TAG} --os linux --arch arm"
504521 sh " docker manifest annotate ${ IMAGE} :${ META_TAG} ${ IMAGE} :arm64v8-${ META_TAG} --os linux --arch arm64 --variant v8"
@@ -512,25 +529,25 @@ pipeline {
512529 when {
513530 branch " master"
514531 expression {
515- env. LS_RELEASE != env. EXT_RELEASE + ' -pkg-' + env. PACKAGE_TAG + ' -ls' + env. LS_TAG_NUMBER
532+ env. LS_RELEASE != env. EXT_RELEASE_CLEAN + ' -pkg-' + env. PACKAGE_TAG + ' -ls' + env. LS_TAG_NUMBER
516533 }
517534 environment name : ' CHANGE_ID' , value : ' '
518535 environment name : ' EXIT_STATUS' , value : ' '
519536 }
520537 steps {
521- echo " Pushing New tag for current commit ${ EXT_RELEASE } -pkg-${ PACKAGE_TAG} -ls${ LS_TAG_NUMBER} "
538+ echo " Pushing New tag for current commit ${ EXT_RELEASE_CLEAN } -pkg-${ PACKAGE_TAG} -ls${ LS_TAG_NUMBER} "
522539 sh ''' curl -H "Authorization: token ${GITHUB_TOKEN}" -X POST https://api.github.com/repos/${LS_USER}/${LS_REPO}/git/tags \
523- -d '{"tag":"'${EXT_RELEASE }'-pkg-'${PACKAGE_TAG}'-ls'${LS_TAG_NUMBER}'",\
540+ -d '{"tag":"'${EXT_RELEASE_CLEAN }'-pkg-'${PACKAGE_TAG}'-ls'${LS_TAG_NUMBER}'",\
524541 "object": "'${COMMIT_SHA}'",\
525- "message": "Tagging Release '${EXT_RELEASE }'-pkg-'${PACKAGE_TAG}'-ls'${LS_TAG_NUMBER}' to master",\
542+ "message": "Tagging Release '${EXT_RELEASE_CLEAN }'-pkg-'${PACKAGE_TAG}'-ls'${LS_TAG_NUMBER}' to master",\
526543 "type": "commit",\
527544 "tagger": {"name": "LinuxServer Jenkins","email": "[email protected] ","date": "'${GITHUB_DATE}'"}}' ''' 528545 echo " Pushing New release for Tag"
529546 sh ''' #! /bin/bash
530547 curl -s https://api.github.com/repos/${EXT_USER}/${EXT_REPO}/releases/latest | jq '. |.body' | sed 's:^.\\ (.*\\ ).$:\\ 1:' > releasebody.json
531- echo '{"tag_name":"'${EXT_RELEASE }'-pkg-'${PACKAGE_TAG}'-ls'${LS_TAG_NUMBER}'",\
548+ echo '{"tag_name":"'${EXT_RELEASE_CLEAN }'-pkg-'${PACKAGE_TAG}'-ls'${LS_TAG_NUMBER}'",\
532549 "target_commitish": "master",\
533- "name": "'${EXT_RELEASE }'-pkg-'${PACKAGE_TAG}'-ls'${LS_TAG_NUMBER}'",\
550+ "name": "'${EXT_RELEASE_CLEAN }'-pkg-'${PACKAGE_TAG}'-ls'${LS_TAG_NUMBER}'",\
534551 "body": "**LinuxServer Changes:**\\ n\\ n'${LS_RELEASE_NOTES}'\\ n**'${EXT_REPO}' Changes:**\\ n\\ n' > start
535552 printf '","draft": false,"prerelease": false}' >> releasebody.json
536553 paste -d'\\ 0' start releasebody.json > releasebody.json.done
0 commit comments