@@ -118,6 +118,16 @@ pipeline {
118118 }
119119 }
120120 }
121+ // Sanitize the release tag and strip illegal docker or github characters
122+ stage(" Sanitize tag" ){
123+ steps{
124+ script{
125+ env. EXT_RELEASE_CLEAN = sh(
126+ script : ''' echo ${EXT_RELEASE} | sed 's/[~,%@+;:]//g' ''' ,
127+ returnStdout : true ). trim()
128+ }
129+ }
130+ }
121131 // If this is a master build use live docker endpoints
122132 stage(" Set ENV live build" ){
123133 when {
@@ -128,11 +138,11 @@ pipeline {
128138 script{
129139 env. IMAGE = env. DOCKERHUB_IMAGE
130140 if (env. MULTIARCH == ' true' ) {
131- 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
141+ 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
132142 } else {
133- env. CI_TAGS = env. EXT_RELEASE + ' -ls' + env. LS_TAG_NUMBER
143+ env. CI_TAGS = env. EXT_RELEASE_CLEAN + ' -ls' + env. LS_TAG_NUMBER
134144 }
135- env. META_TAG = env. EXT_RELEASE + ' -ls' + env. LS_TAG_NUMBER
145+ env. META_TAG = env. EXT_RELEASE_CLEAN + ' -ls' + env. LS_TAG_NUMBER
136146 }
137147 }
138148 }
@@ -146,11 +156,11 @@ pipeline {
146156 script{
147157 env. IMAGE = env. DEV_DOCKERHUB_IMAGE
148158 if (env. MULTIARCH == ' true' ) {
149- 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
159+ 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
150160 } else {
151- env. CI_TAGS = env. EXT_RELEASE + ' -pkg-' + env. PACKAGE_TAG + ' -dev-' + env. COMMIT_SHA
161+ env. CI_TAGS = env. EXT_RELEASE_CLEAN + ' -pkg-' + env. PACKAGE_TAG + ' -dev-' + env. COMMIT_SHA
152162 }
153- env. META_TAG = env. EXT_RELEASE + ' -pkg-' + env. PACKAGE_TAG + ' -dev-' + env. COMMIT_SHA
163+ env. META_TAG = env. EXT_RELEASE_CLEAN + ' -pkg-' + env. PACKAGE_TAG + ' -dev-' + env. COMMIT_SHA
154164 env. DOCKERHUB_LINK = ' https://hub.docker.com/r/' + env. DEV_DOCKERHUB_IMAGE + ' /tags/'
155165 }
156166 }
@@ -164,11 +174,11 @@ pipeline {
164174 script{
165175 env. IMAGE = env. PR_DOCKERHUB_IMAGE
166176 if (env. MULTIARCH == ' true' ) {
167- 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
177+ 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
168178 } else {
169- env. CI_TAGS = env. EXT_RELEASE + ' -pkg-' + env. PACKAGE_TAG + ' -pr-' + env. PULL_REQUEST
179+ env. CI_TAGS = env. EXT_RELEASE_CLEAN + ' -pkg-' + env. PACKAGE_TAG + ' -pr-' + env. PULL_REQUEST
170180 }
171- env. META_TAG = env. EXT_RELEASE + ' -pkg-' + env. PACKAGE_TAG + ' -pr-' + env. PULL_REQUEST
181+ env. META_TAG = env. EXT_RELEASE_CLEAN + ' -pkg-' + env. PACKAGE_TAG + ' -pr-' + env. PULL_REQUEST
172182 env. CODE_URL = ' https://github.com/' + env. LS_USER + ' /' + env. LS_REPO + ' /pull/' + env. PULL_REQUEST
173183 env. DOCKERHUB_LINK = ' https://hub.docker.com/r/' + env. PR_DOCKERHUB_IMAGE + ' /tags/'
174184 }
@@ -330,10 +340,12 @@ pipeline {
330340 docker run --rm --entrypoint '/bin/sh' -v ${TEMPDIR}:/tmp ${LOCAL_CONTAINER} -c '\
331341 apk info > packages && \
332342 apk info -v > versions && \
333- paste -d " " packages versions > /tmp/package_versions.txt'
343+ paste -d " " packages versions > /tmp/package_versions.txt && \
344+ chmod 777 /tmp/package_versions.txt'
334345 elif [ "${DIST_IMAGE}" == "ubuntu" ]; then
335346 docker run --rm --entrypoint '/bin/sh' -v ${TEMPDIR}:/tmp ${LOCAL_CONTAINER} -c '\
336- apt -qq list --installed | awk "{print \$ 1,\$ 2}" > /tmp/package_versions.txt'
347+ apt -qq list --installed | awk "{print \$ 1,\$ 2}" > /tmp/package_versions.txt && \
348+ chmod 777 /tmp/package_versions.txt'
337349 fi
338350 if [ "$(md5sum ${TEMPDIR}/package_versions.txt | cut -c1-8 )" != "${PACKAGE_TAG}" ]; then
339351 git clone https://github.com/${LS_USER}/${LS_REPO}.git ${TEMPDIR}/${LS_REPO}
@@ -500,7 +512,7 @@ pipeline {
500512 sh " docker manifest create ${ IMAGE} :latest ${ IMAGE} :amd64-latest ${ IMAGE} :arm32v6-latest ${ IMAGE} :arm64v8-latest"
501513 sh " docker manifest annotate ${ IMAGE} :latest ${ IMAGE} :arm32v6-latest --os linux --arch arm"
502514 sh " docker manifest annotate ${ IMAGE} :latest ${ IMAGE} :arm64v8-latest --os linux --arch arm64 --variant v8"
503- sh " docker manifest push --purge ${ IMAGE} :${ EXT_RELEASE } -ls ${ LS_TAG_NUMBER } || :"
515+ sh " docker manifest push --purge ${ IMAGE} :${ META_TAG } || :"
504516 sh " docker manifest create ${ IMAGE} :${ META_TAG} ${ IMAGE} :amd64-${ META_TAG} ${ IMAGE} :arm32v6-${ META_TAG} ${ IMAGE} :arm64v8-${ META_TAG} "
505517 sh " docker manifest annotate ${ IMAGE} :${ META_TAG} ${ IMAGE} :arm32v6-${ META_TAG} --os linux --arch arm"
506518 sh " docker manifest annotate ${ IMAGE} :${ META_TAG} ${ IMAGE} :arm64v8-${ META_TAG} --os linux --arch arm64 --variant v8"
@@ -514,25 +526,25 @@ pipeline {
514526 when {
515527 branch " master"
516528 expression {
517- env. LS_RELEASE != env. EXT_RELEASE + ' -pkg-' + env. PACKAGE_TAG + ' -ls' + env. LS_TAG_NUMBER
529+ env. LS_RELEASE != env. EXT_RELEASE_CLEAN + ' -pkg-' + env. PACKAGE_TAG + ' -ls' + env. LS_TAG_NUMBER
518530 }
519531 environment name : ' CHANGE_ID' , value : ' '
520532 environment name : ' EXIT_STATUS' , value : ' '
521533 }
522534 steps {
523- echo " Pushing New tag for current commit ${ EXT_RELEASE } -pkg-${ PACKAGE_TAG} -ls${ LS_TAG_NUMBER} "
535+ echo " Pushing New tag for current commit ${ EXT_RELEASE_CLEAN } -pkg-${ PACKAGE_TAG} -ls${ LS_TAG_NUMBER} "
524536 sh ''' curl -H "Authorization: token ${GITHUB_TOKEN}" -X POST https://api.github.com/repos/${LS_USER}/${LS_REPO}/git/tags \
525- -d '{"tag":"'${EXT_RELEASE }'-pkg-'${PACKAGE_TAG}'-ls'${LS_TAG_NUMBER}'",\
537+ -d '{"tag":"'${EXT_RELEASE_CLEAN }'-pkg-'${PACKAGE_TAG}'-ls'${LS_TAG_NUMBER}'",\
526538 "object": "'${COMMIT_SHA}'",\
527- "message": "Tagging Release '${EXT_RELEASE }'-pkg-'${PACKAGE_TAG}'-ls'${LS_TAG_NUMBER}' to master",\
539+ "message": "Tagging Release '${EXT_RELEASE_CLEAN }'-pkg-'${PACKAGE_TAG}'-ls'${LS_TAG_NUMBER}' to master",\
528540 "type": "commit",\
529541 "tagger": {"name": "LinuxServer Jenkins","email": "jenkins@linuxserver.io","date": "'${GITHUB_DATE}'"}}' '''
530542 echo " Pushing New release for Tag"
531543 sh ''' #! /bin/bash
532544 curl -s https://api.github.com/repos/${EXT_USER}/${EXT_REPO}/releases/latest | jq '. |.body' | sed 's:^.\\ (.*\\ ).$:\\ 1:' > releasebody.json
533- echo '{"tag_name":"'${EXT_RELEASE }'-pkg-'${PACKAGE_TAG}'-ls'${LS_TAG_NUMBER}'",\
545+ echo '{"tag_name":"'${EXT_RELEASE_CLEAN }'-pkg-'${PACKAGE_TAG}'-ls'${LS_TAG_NUMBER}'",\
534546 "target_commitish": "master",\
535- "name": "'${EXT_RELEASE }'-pkg-'${PACKAGE_TAG}'-ls'${LS_TAG_NUMBER}'",\
547+ "name": "'${EXT_RELEASE_CLEAN }'-pkg-'${PACKAGE_TAG}'-ls'${LS_TAG_NUMBER}'",\
536548 "body": "**LinuxServer Changes:**\\ n\\ n'${LS_RELEASE_NOTES}'\\ n**'${EXT_REPO}' Changes:**\\ n\\ n' > start
537549 printf '","draft": false,"prerelease": false}' >> releasebody.json
538550 paste -d'\\ 0' start releasebody.json > releasebody.json.done
0 commit comments