Skip to content
This repository was archived by the owner on May 17, 2026. It is now read-only.

Commit 8f44348

Browse files
committed
Bot Updating Templated Files
1 parent 663c958 commit 8f44348

1 file changed

Lines changed: 77 additions & 41 deletions

File tree

Jenkinsfile

Lines changed: 77 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)