@@ -60,7 +60,7 @@ pipeline {
6060 }
6161 script{
6262 env. IG_TAG_NUMBER = sh(
63- script : ''' #!/bin/bash
63+ script : ''' #! /bin/bash
6464 tagsha=$(git rev-list -n 1 ${IG_RELEASE} 2>/dev/null)
6565 if [ "${tagsha}" == "${COMMIT_SHA}" ]; then
6666 echo ${IG_RELEASE_NUMBER}
@@ -81,7 +81,7 @@ pipeline {
8181 steps{
8282 script{
8383 env. PACKAGE_TAG = sh(
84- script : ''' #!/bin/bash
84+ script : ''' #! /bin/bash
8585 if [ -e package_versions.txt ] ; then
8686 cat package_versions.txt | md5sum | cut -c1-8
8787 else
@@ -216,29 +216,57 @@ pipeline {
216216 }
217217 }
218218 steps {
219- sh ''' #!/bin/bash
219+ sh ''' #! /bin/bash
220220 set -e
221221 TEMPDIR=$(mktemp -d)
222222 docker pull ghcr.io/imagegenius/jenkins-builder:latest
223- # Stage 1 - Jenkinsfile update
224- mkdir -p ${TEMPDIR}/repo
225- git clone https://ImageGeniusCI:${GITHUB_TOKEN}@github.com/${IG_USER}/${IG_REPO}.git ${TEMPDIR}/repo/${IG_REPO}
226- cd ${TEMPDIR}/repo/${IG_REPO}
223+ mkdir -p ${TEMPDIR}/source
224+ git clone https://ImageGeniusCI:${GITHUB_TOKEN}@github.com/${IG_USER}/${IG_REPO}.git ${TEMPDIR}/source
225+ cd ${TEMPDIR}/source
227226 git checkout -f main
228- docker run --rm -e CONTAINER_NAME=${CONTAINER_NAME} -e GITHUB_BRANCH=main -v ${TEMPDIR}/repo/${IG_REPO}:/tmp/docker-${CONTAINER_NAME}:ro -v ${TEMPDIR}:/ansible/jenkins ghcr.io/imagegenius/jenkins-builder:latest
227+ docker run --rm -e CONTAINER_NAME=${CONTAINER_NAME} -e GITHUB_BRANCH=main -v ${TEMPDIR}/source:/tmp -v ${TEMPDIR}:/ansible/jenkins ghcr.io/imagegenius/jenkins-builder:latest
228+ # Stage 1 - Jenkinsfile update
229229 if [[ "$(md5sum Jenkinsfile | awk '{ print $1 }')" != "$(md5sum ${TEMPDIR}/docker-${CONTAINER_NAME}/Jenkinsfile | awk '{ print $1 }')" ]]; then
230+ mkdir -p ${TEMPDIR}/repo
231+ git clone https://ImageGeniusCI:${GITHUB_TOKEN}@github.com/${IG_USER}/${IG_REPO}.git ${TEMPDIR}/repo/${IG_REPO}
232+ cd ${TEMPDIR}/repo/${IG_REPO}
233+ git checkout -f main
230234 cp ${TEMPDIR}/docker-${CONTAINER_NAME}/Jenkinsfile ${TEMPDIR}/repo/${IG_REPO}/
231235 git add Jenkinsfile
232236 git commit -m 'Bot Updating Templated Files'
233237 git push https://ImageGeniusCI:${GITHUB_TOKEN}@github.com/${IG_USER}/${IG_REPO}.git --all
234238 echo "true" > /tmp/${COMMIT_SHA}-${BUILD_NUMBER}
235239 echo "Updating Jenkinsfile"
236- rm -rf ${TEMPDIR}
240+ rm -Rf ${TEMPDIR}
237241 exit 0
238242 else
239243 echo "Jenkinsfile is up to date."
240244 fi
241- # Stage 2 - Update templates
245+ # Stage 2 - Delete old templates
246+ OLD_TEMPLATES=".github/ISSUE_TEMPLATE.md .github/ISSUE_TEMPLATE/issue.bug.md .github/ISSUE_TEMPLATE/issue.feature.md .github/workflows/call_invalid_helper.yml .github/workflows/stale.yml Dockerfile.armhf"
247+ for i in ${OLD_TEMPLATES}; do
248+ if [[ -f "${i}" ]]; then
249+ TEMPLATES_TO_DELETE="${i} ${TEMPLATES_TO_DELETE}"
250+ fi
251+ done
252+ if [[ -n "${TEMPLATES_TO_DELETE}" ]]; then
253+ mkdir -p ${TEMPDIR}/repo
254+ git clone https://ImageGeniusCI:${GITHUB_TOKEN}@github.com/${IG_USER}/${IG_REPO}.git ${TEMPDIR}/repo/${IG_REPO}
255+ cd ${TEMPDIR}/repo/${IG_REPO}
256+ git checkout -f main
257+ for i in ${TEMPLATES_TO_DELETE}; do
258+ git rm "${i}"
259+ done
260+ git commit -m 'Bot Updating Templated Files'
261+ git push https://ImageGeniusCI:${GITHUB_TOKEN}@github.com/${IG_USER}/${IG_REPO}.git --all
262+ echo "true" > /tmp/${COMMIT_SHA}-${BUILD_NUMBER}
263+ echo "Deleting old and deprecated templates"
264+ rm -Rf ${TEMPDIR}
265+ exit 0
266+ else
267+ echo "No templates to delete"
268+ fi
269+ # Stage 3 - Update templates
242270 CURRENTHASH=$(grep -hs ^ ${TEMPLATED_FILES} | md5sum | cut -c1-8)
243271 cd ${TEMPDIR}/docker-${CONTAINER_NAME}
244272 NEWHASH=$(grep -hs ^ ${TEMPLATED_FILES} | md5sum | cut -c1-8)
@@ -251,19 +279,20 @@ pipeline {
251279 mkdir -p ${TEMPDIR}/repo/${IG_REPO}/.github/workflows
252280 mkdir -p ${TEMPDIR}/repo/${IG_REPO}/.github/ISSUE_TEMPLATE
253281 cp --parents ${TEMPLATED_FILES} ${TEMPDIR}/repo/${IG_REPO}/ || :
282+ cp --parents readme-vars.yml ${TEMPDIR}/repo/${IG_REPO}/ || :
254283 cd ${TEMPDIR}/repo/${IG_REPO}/
255284 if ! grep -q '.jenkins-external' .gitignore 2>/dev/null; then
256285 echo ".jenkins-external" >> .gitignore
257286 git add .gitignore
258287 fi
259- git add ${TEMPLATED_FILES}
288+ git add readme-vars.yml ${TEMPLATED_FILES}
260289 git commit -m 'Bot Updating Templated Files'
261290 git push https://ImageGeniusCI:${GITHUB_TOKEN}@github.com/${IG_USER}/${IG_REPO}.git --all
262291 echo "true" > /tmp/${COMMIT_SHA}-${BUILD_NUMBER}
263292 else
264293 echo "false" > /tmp/${COMMIT_SHA}-${BUILD_NUMBER}
265294 fi
266- rm -rf ${TEMPDIR}'''
295+ rm -Rf ${TEMPDIR}'''
267296 script{
268297 env. FILES_UPDATED = sh(
269298 script : ''' cat /tmp/${COMMIT_SHA}-${BUILD_NUMBER}''' ,
@@ -296,7 +325,7 @@ pipeline {
296325 }
297326 steps {
298327 script{
299- sh ''' #!/bin/bash
328+ sh ''' #! /bin/bash
300329 WRONG_PERM=$(find ./ -path "./.git" -prune -o \\ ( -name "run" -o -name "finish" -o -name "check" \\ ) -not -perm -u=x,g=x,o=x -print)
301330 if [[ -n "${WRONG_PERM}" ]]; then
302331 echo "The following S6 service files are missing the executable bit; canceling the faulty build: ${WRONG_PERM}"
@@ -320,7 +349,7 @@ pipeline {
320349 }
321350 steps {
322351 echo " Running on node: ${ NODE_NAME} "
323- sh ''' #!/bin/bash
352+ sh ''' #! /bin/bash
324353 set -e
325354 BUILDX_CONTAINER=$(head /dev/urandom | tr -dc 'a-z' | head -c12)
326355 trap 'docker buildx rm ${BUILDX_CONTAINER}' EXIT
@@ -356,7 +385,7 @@ pipeline {
356385 stage(' Build X86' ) {
357386 steps {
358387 echo " Running on node: ${ NODE_NAME} "
359- sh ''' #!/bin/bash
388+ sh ''' #! /bin/bash
360389 set -e
361390 BUILDX_CONTAINER=$(head /dev/urandom | tr -dc 'a-z' | head -c12)
362391 trap 'docker buildx rm ${BUILDX_CONTAINER}' EXIT
@@ -386,10 +415,10 @@ pipeline {
386415 steps {
387416 echo " Running on node: ${ NODE_NAME} "
388417 echo ' Logging into Github'
389- sh ''' #!/bin/bash
418+ sh ''' #! /bin/bash
390419 echo $GITHUB_TOKEN | docker login ghcr.io -u ImageGeniusCI --password-stdin
391420 '''
392- sh ''' #!/bin/bash
421+ sh ''' #! /bin/bash
393422 set -e
394423 BUILDX_CONTAINER=$(head /dev/urandom | tr -dc 'a-z' | head -c12)
395424 trap 'docker buildx rm ${BUILDX_CONTAINER}' EXIT
@@ -430,7 +459,7 @@ pipeline {
430459 environment name : ' EXIT_STATUS' , value : ' '
431460 }
432461 steps {
433- sh ''' #!/bin/bash
462+ sh ''' #! /bin/bash
434463 set -e
435464 TEMPDIR=$(mktemp -d)
436465 if [ "${MULTIARCH}" == "true" ] && [ "${PACKAGE_CHECK}" == "false" ]; then
@@ -461,8 +490,7 @@ pipeline {
461490 echo "false" > /tmp/packages-${COMMIT_SHA}-${BUILD_NUMBER}
462491 echo "Package tag is same as previous continue with build process"
463492 fi
464- rm -rf ${TEMPDIR}
465- '''
493+ rm -Rf ${TEMPDIR}'''
466494 script{
467495 env. PACKAGE_UPDATED = sh(
468496 script : ''' cat /tmp/packages-${COMMIT_SHA}-${BUILD_NUMBER}''' ,
@@ -479,7 +507,7 @@ pipeline {
479507 environment name : ' EXIT_STATUS' , value : ' '
480508 }
481509 steps {
482- sh ''' #!/bin/bash
510+ sh ''' #! /bin/bash
483511 echo "Packages were updated. Cleaning up the image and exiting."
484512 if [ "${MULTIARCH}" == "true" ] && [ "${PACKAGE_CHECK}" == "false" ]; then
485513 docker rmi ${GITHUBIMAGE}:amd64-${META_TAG} || :
@@ -503,7 +531,7 @@ pipeline {
503531 }
504532 }
505533 steps {
506- sh ''' #!/bin/bash
534+ sh ''' #! /bin/bash
507535 echo "There are no package updates. Cleaning up the image and exiting."
508536 if [ "${MULTIARCH}" == "true" ] && [ "${PACKAGE_CHECK}" == "false" ]; then
509537 docker rmi ${GITHUBIMAGE}:amd64-${META_TAG} || :
@@ -533,7 +561,7 @@ pipeline {
533561 env. CI_URL = ' https://ci-tests.imagegenius.io/' + env. CONTAINER_NAME + ' /' + env. META_TAG + ' /index.html'
534562 env. CI_JSON_URL = ' https://ci-tests.imagegenius.io/' + env. CONTAINER_NAME + ' /' + env. META_TAG + ' /report.json'
535563 }
536- sh ''' #!/bin/bash
564+ sh ''' #! /bin/bash
537565 set -e
538566 docker pull ghcr.io/imagegenius/ci:latest
539567 if [ "${MULTIARCH}" == "true" ]; then
@@ -574,7 +602,7 @@ pipeline {
574602 }
575603 steps {
576604 retry(5 ) {
577- sh ''' #!/bin/bash
605+ sh ''' #! /bin/bash
578606 set -e
579607 echo $GITHUB_TOKEN | docker login ghcr.io -u ImageGeniusCI --password-stdin
580608 docker tag ${GITHUBIMAGE}:${META_TAG} ${GITHUBIMAGE}:latest
@@ -590,7 +618,7 @@ pipeline {
590618 fi
591619 '''
592620 }
593- sh ''' #!/bin/bash
621+ sh ''' #! /bin/bash
594622 docker rmi \
595623 ${GITHUBIMAGE}:${META_TAG} \
596624 ${GITHUBIMAGE}:${EXT_RELEASE_TAG} \
@@ -609,7 +637,7 @@ pipeline {
609637 }
610638 steps {
611639 retry(5 ) {
612- sh ''' #!/bin/bash
640+ sh ''' #! /bin/bash
613641 set -e
614642 echo $GITHUB_TOKEN | docker login ghcr.io -u ImageGeniusCI --password-stdin
615643 if [ "${CI}" == "false" ]; then
@@ -650,9 +678,16 @@ pipeline {
650678 docker manifest create ${GITHUBIMAGE}:${SEMVER} ${GITHUBIMAGE}:amd64-${SEMVER} ${GITHUBIMAGE}:arm64v8-${SEMVER}
651679 docker manifest annotate ${GITHUBIMAGE}:${SEMVER} ${GITHUBIMAGE}:arm64v8-${SEMVER} --os linux --arch arm64 --variant v8
652680 fi
653- docker manifest push --purge ${GITHUBIMAGE}:arm32v7-latest || :
654- docker manifest create ${GITHUBIMAGE}:arm32v7-latest ${GITHUBIMAGE}:amd64-latest
655- docker manifest push --purge ${GITHUBIMAGE}:arm32v7-latest
681+ token=$(curl -sX GET "https://ghcr.io/token?scope=repository%3Aimagegenius%2F${CONTAINER_NAME}%3Apull" | jq -r '.token')
682+ digest=$(curl -s \
683+ --header "Accept: application/vnd.docker.distribution.manifest.v2+json" \
684+ --header "Authorization: Bearer ${token}" \
685+ "https://ghcr.io/v2/imagegenius/${CONTAINER_NAME}/manifests/arm32v7-latest")
686+ if [[ $(echo "$digest" | jq -r '.layers') != "null" ]]; then
687+ docker manifest push --purge ${GITHUBIMAGE}:arm32v7-latest || :
688+ docker manifest create ${GITHUBIMAGE}:arm32v7-latest ${GITHUBIMAGE}:amd64-latest
689+ docker manifest push --purge ${GITHUBIMAGE}:arm32v7-latest
690+ fi
656691 docker manifest push --purge ${GITHUBIMAGE}:latest
657692 docker manifest push --purge ${GITHUBIMAGE}:${META_TAG}
658693 docker manifest push --purge ${GITHUBIMAGE}:${EXT_RELEASE_TAG}
@@ -661,7 +696,7 @@ pipeline {
661696 fi
662697 '''
663698 }
664- sh ''' #!/bin/bash
699+ sh ''' #! /bin/bash
665700 docker rmi \
666701 ${GITHUBIMAGE}:amd64-${META_TAG} \
667702 ${GITHUBIMAGE}:amd64-latest \
@@ -698,7 +733,7 @@ pipeline {
698733 "type": "commit",\
699734 "tagger": {"name": "ImageGenius Jenkins","email": "ci@imagegenius.io","date": "'${GITHUB_DATE}'"}}' '''
700735 echo " Pushing New release for Tag"
701- sh ''' #!/bin/bash
736+ sh ''' #! /bin/bash
702737 curl -H "Authorization: token ${GITHUB_TOKEN}" -s https://api.github.com/repos/${EXT_USER}/${EXT_REPO}/releases/latest | jq '. |.body' | sed 's:^.\\ (.*\\ ).$:\\ 1:' > releasebody.json
703738 echo '{"tag_name":"'${META_TAG}'",\
704739 "target_commitish": "main",\
@@ -716,7 +751,7 @@ pipeline {
716751 environment name : ' EXIT_STATUS' , value : ' '
717752 }
718753 steps {
719- sh ''' #!/bin/bash
754+ sh ''' #! /bin/bash
720755 # Function to retrieve JSON data from URL
721756 get_json() {
722757 local url="$1"
@@ -806,19 +841,20 @@ pipeline {
806841 sh ''' curl -X POST -H "Content-Type: application/json" --data '{"avatar_url": "https://raw.githubusercontent.com/linuxserver/docker-templates/master/linuxserver.io/img/jenkins-avatar.png","embeds": [{"color": 16711680,\
807842 "description": "**'${IG_REPO}' Build '${BUILD_NUMBER}' Failed! (main)**\\ n**CI Results:** '${CI_URL}'\\ n**Job:** '${RUN_DISPLAY_URL}'\\ n**Change:** '${CODE_URL}'\\ n**External Release:** '${RELEASE_LINK}'\\ n"}],\
808843 "username": "Jenkins"}' ${BUILDS_DISCORD} '''
809- // Clean up images if CI tests fail
810- sh ''' if [ "${MULTIARCH}" == "true" ] && [ "${PACKAGE_CHECK}" == "false" ]; then
811- docker rmi ${GITHUBIMAGE}:amd64-${META_TAG} || :
812- docker rmi ghcr.io/imagegenius/igdev-buildcache:arm64v8-${COMMIT_SHA}-${BUILD_NUMBER} || :
813- docker rmi ${GITHUBIMAGE}:arm64v8-${META_TAG} || :
814- else
815- docker rmi ${GITHUBIMAGE}:${META_TAG} || :
816- fi
817- '''
818844 }
819845 }
820846 }
821847 cleanup {
848+ // Clean up images if CI tests fail
849+ sh ''' #! /bin/bash
850+ if [ "${MULTIARCH}" == "true" ] && [ "${PACKAGE_CHECK}" == "false" ]; then
851+ docker rmi ${GITHUBIMAGE}:amd64-${META_TAG} || :
852+ docker rmi ghcr.io/imagegenius/igdev-buildcache:arm64v8-${COMMIT_SHA}-${BUILD_NUMBER} || :
853+ docker rmi ${GITHUBIMAGE}:arm64v8-${META_TAG} || :
854+ else
855+ docker rmi ${GITHUBIMAGE}:${META_TAG} || :
856+ fi
857+ '''
822858 cleanWs()
823859 }
824860 }
0 commit comments