@@ -16,6 +16,7 @@ pipeline {
1616 GITHUB_TOKEN = credentials(' 498b4638-2d02-4ce5-832d-8a57d01d97ab' )
1717 GITLAB_TOKEN = credentials(' b6f0f1dd-6952-4cf6-95d1-9c06380283f0' )
1818 GITLAB_NAMESPACE = credentials(' gitlab-namespace-id' )
19+ SCARF_TOKEN = credentials(' scarf_api_key' )
1920 EXT_GIT_BRANCH = ' master'
2021 EXT_USER = ' phpmyadmin'
2122 EXT_REPO = ' phpmyadmin'
@@ -119,6 +120,23 @@ pipeline {
119120 env. EXT_RELEASE_CLEAN = sh(
120121 script : ''' echo ${EXT_RELEASE} | sed 's/[~,%@+;:/]//g' ''' ,
121122 returnStdout : true ). trim()
123+
124+ env. SEMVER = (new Date ()). format(' YYYY.MM.dd' )
125+ def semver = env. EXT_RELEASE_CLEAN =~ / (\d +)\. (\d +)\. (\d +)$/
126+ if (semver. find()) {
127+ env. SEMVER = " ${ semver[0][1]} .${ semver[0][2]} .${ semver[0][3]} "
128+ } else {
129+ semver = env. EXT_RELEASE_CLEAN =~ / (\d +)\. (\d +)(?:\. (\d +))?(.*)$/
130+ if (semver. find()) {
131+ if (semver[0 ][3 ]) {
132+ env. SEMVER = " ${ semver[0][1]} .${ semver[0][2]} .${ semver[0][3]} "
133+ } else if (! semver[0 ][3 ] && ! semver[0 ][4 ]) {
134+ env. SEMVER = " ${ semver[0][1]} .${ semver[0][2]} .${ (new Date()).format('YYYYMMdd')} "
135+ }
136+ }
137+ }
138+
139+ println (" SEMVER: ${ env.SEMVER} " )
122140 }
123141 }
124142 }
@@ -133,6 +151,7 @@ pipeline {
133151 env. IMAGE = env. DOCKERHUB_IMAGE
134152 env. GITHUBIMAGE = ' ghcr.io/' + env. LS_USER + ' /' + env. CONTAINER_NAME
135153 env. GITLABIMAGE = ' registry.gitlab.com/linuxserver.io/' + env. LS_REPO + ' /' + env. CONTAINER_NAME
154+ env. QUAYIMAGE = ' quay.io/linuxserver.io/' + env. CONTAINER_NAME
136155 if (env. MULTIARCH == ' true' ) {
137156 env. CI_TAGS = ' amd64-' + env. EXT_RELEASE_CLEAN + ' -ls' + env. LS_TAG_NUMBER + ' |arm32v7-' + env. EXT_RELEASE_CLEAN + ' -ls' + env. LS_TAG_NUMBER + ' |arm64v8-' + env. EXT_RELEASE_CLEAN + ' -ls' + env. LS_TAG_NUMBER
138157 } else {
@@ -155,6 +174,7 @@ pipeline {
155174 env. IMAGE = env. DEV_DOCKERHUB_IMAGE
156175 env. GITHUBIMAGE = ' ghcr.io/' + env. LS_USER + ' /lsiodev-' + env. CONTAINER_NAME
157176 env. GITLABIMAGE = ' registry.gitlab.com/linuxserver.io/' + env. LS_REPO + ' /lsiodev-' + env. CONTAINER_NAME
177+ env. QUAYIMAGE = ' quay.io/linuxserver.io/lsiodev-' + env. CONTAINER_NAME
158178 if (env. MULTIARCH == ' true' ) {
159179 env. CI_TAGS = ' amd64-' + env. EXT_RELEASE_CLEAN + ' -pkg-' + env. PACKAGE_TAG + ' -dev-' + env. COMMIT_SHA + ' |arm32v7-' + 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
160180 } else {
@@ -177,6 +197,7 @@ pipeline {
177197 env. IMAGE = env. PR_DOCKERHUB_IMAGE
178198 env. GITHUBIMAGE = ' ghcr.io/' + env. LS_USER + ' /lspipepr-' + env. CONTAINER_NAME
179199 env. GITLABIMAGE = ' registry.gitlab.com/linuxserver.io/' + env. LS_REPO + ' /lspipepr-' + env. CONTAINER_NAME
200+ env. QUAYIMAGE = ' quay.io/linuxserver.io/lspipepr-' + env. CONTAINER_NAME
180201 if (env. MULTIARCH == ' true' ) {
181202 env. CI_TAGS = ' amd64-' + env. EXT_RELEASE_CLEAN + ' -pkg-' + env. PACKAGE_TAG + ' -pr-' + env. PULL_REQUEST + ' |arm32v7-' + 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
182203 } else {
@@ -372,14 +393,56 @@ pipeline {
372393 "visibility":"public"}' '''
373394 }
374395 }
396+ /* #######################
397+ Scarf.sh package registry
398+ ####################### */
399+ // Add package to Scarf.sh and set permissions
400+ stage(" Scarf.sh package registry" ){
401+ when {
402+ branch " main"
403+ environment name : ' EXIT_STATUS' , value : ' '
404+ }
405+ steps{
406+ sh ''' #! /bin/bash
407+ set -e
408+ PACKAGE_UUID=$(curl -X GET -H "Authorization: Bearer ${SCARF_TOKEN}" https://scarf.sh/api/v1/packages | jq -r '.[] | select(.name=="linuxserver/phpmyadmin") | .uuid')
409+ if [ -z "${PACKAGE_UUID}" ]; then
410+ echo "Adding package to Scarf.sh"
411+ PACKAGE_UUID=$(curl -sX POST https://scarf.sh/api/v1/packages \
412+ -H "Authorization: Bearer ${SCARF_TOKEN}" \
413+ -H "Content-Type: application/json" \
414+ -d '{"name":"linuxserver/phpmyadmin",\
415+ "shortDescription":"example description",\
416+ "libraryType":"docker",\
417+ "website":"https://github.com/linuxserver/docker-phpmyadmin",\
418+ "backendUrl":"https://ghcr.io/linuxserver/phpmyadmin",\
419+ "publicUrl":"https://lscr.io/linuxserver/phpmyadmin"}' \
420+ | jq -r .uuid)
421+ else
422+ echo "Package already exists on Scarf.sh"
423+ fi
424+ echo "Setting permissions on Scarf.sh for package ${PACKAGE_UUID}"
425+ curl -X POST https://scarf.sh/api/v1/packages/${PACKAGE_UUID}/permissions \
426+ -H "Authorization: Bearer ${SCARF_TOKEN}" \
427+ -H "Content-Type: application/json" \
428+ -d '[{"userQuery":"Spad","permissionLevel":"admin"},\
429+ {"userQuery":"roxedus","permissionLevel":"admin"},\
430+ {"userQuery":"nemchik","permissionLevel":"admin"},\
431+ {"userQuery":"driz","permissionLevel":"admin"},\
432+ {"userQuery":"aptalca","permissionLevel":"admin"},\
433+ {"userQuery":"saarg","permissionLevel":"admin"},\
434+ {"userQuery":"Stark","permissionLevel":"admin"}]'
435+ '''
436+ }
437+ }
375438 /* ###############
376439 Build Container
377440 ############### */
378441 // Build Docker container for push to LS Repo
379442 stage(' Build-Single' ) {
380443 when {
381444 expression {
382- env. MULTIARCH == ' false' || params. PACKAGE_CHECK == ' true'
445+ env. MULTIARCH == ' false' || params. PACKAGE_CHECK == ' true'
383446 }
384447 environment name : ' EXIT_STATUS' , value : ' '
385448 }
@@ -673,6 +736,12 @@ pipeline {
673736 credentialsId : ' 3f9ba4d5-100d-45b0-a3c4-633fd6061207' ,
674737 usernameVariable : ' DOCKERUSER' ,
675738 passwordVariable : ' DOCKERPASS'
739+ ],
740+ [
741+ $class : ' UsernamePasswordMultiBinding' ,
742+ credentialsId : ' Quay.io-Robot' ,
743+ usernameVariable : ' QUAYUSER' ,
744+ passwordVariable : ' QUAYPASS'
676745 ]
677746 ]) {
678747 retry(5 ) {
@@ -681,22 +750,26 @@ pipeline {
681750 echo $DOCKERPASS | docker login -u $DOCKERUSER --password-stdin
682751 echo $GITHUB_TOKEN | docker login ghcr.io -u LinuxServer-CI --password-stdin
683752 echo $GITLAB_TOKEN | docker login registry.gitlab.com -u LinuxServer.io --password-stdin
684- for PUSHIMAGE in "${GITHUBIMAGE}" "${GITLABIMAGE}" "${IMAGE}"; do
753+ echo $QUAYPASS | docker login quay.io -u $QUAYUSER --password-stdin
754+ for PUSHIMAGE in "${GITHUBIMAGE}" "${GITLABIMAGE}" "${QUAYIMAGE}" "${IMAGE}"; do
685755 docker tag ${IMAGE}:${META_TAG} ${PUSHIMAGE}:${META_TAG}
686756 docker tag ${PUSHIMAGE}:${META_TAG} ${PUSHIMAGE}:latest
687757 docker tag ${PUSHIMAGE}:${META_TAG} ${PUSHIMAGE}:${EXT_RELEASE_TAG}
758+ docker tag ${PUSHIMAGE}:${META_TAG} ${PUSHIMAGE}:${SEMVER}
688759 docker push ${PUSHIMAGE}:latest
689760 docker push ${PUSHIMAGE}:${META_TAG}
690761 docker push ${PUSHIMAGE}:${EXT_RELEASE_TAG}
762+ docker push ${PUSHIMAGE}:${SEMVER}
691763 done
692764 '''
693765 }
694766 sh ''' #! /bin/bash
695- for DELETEIMAGE in "${GITHUBIMAGE}" "${GITLABIMAGE}" "${IMAGE}"; do
767+ for DELETEIMAGE in "${GITHUBIMAGE}" "${GITLABIMAGE}" "${QUAYIMAGE}" "${ IMAGE}"; do
696768 docker rmi \
697769 ${DELETEIMAGE}:${META_TAG} \
698770 ${DELETEIMAGE}:${EXT_RELEASE_TAG} \
699- ${DELETEIMAGE}:latest || :
771+ ${DELETEIMAGE}:latest \
772+ ${DELETEIMAGE}:${SEMVER} || :
700773 done
701774 '''
702775 }
@@ -715,6 +788,12 @@ pipeline {
715788 credentialsId : ' 3f9ba4d5-100d-45b0-a3c4-633fd6061207' ,
716789 usernameVariable : ' DOCKERUSER' ,
717790 passwordVariable : ' DOCKERPASS'
791+ ],
792+ [
793+ $class : ' UsernamePasswordMultiBinding' ,
794+ credentialsId : ' Quay.io-Robot' ,
795+ usernameVariable : ' QUAYUSER' ,
796+ passwordVariable : ' QUAYPASS'
718797 ]
719798 ]) {
720799 retry(5 ) {
@@ -723,13 +802,14 @@ pipeline {
723802 echo $DOCKERPASS | docker login -u $DOCKERUSER --password-stdin
724803 echo $GITHUB_TOKEN | docker login ghcr.io -u LinuxServer-CI --password-stdin
725804 echo $GITLAB_TOKEN | docker login registry.gitlab.com -u LinuxServer.io --password-stdin
805+ echo $QUAYPASS | docker login quay.io -u $QUAYUSER --password-stdin
726806 if [ "${CI}" == "false" ]; then
727807 docker pull ghcr.io/linuxserver/lsiodev-buildcache:arm32v7-${COMMIT_SHA}-${BUILD_NUMBER}
728808 docker pull ghcr.io/linuxserver/lsiodev-buildcache:arm64v8-${COMMIT_SHA}-${BUILD_NUMBER}
729809 docker tag ghcr.io/linuxserver/lsiodev-buildcache:arm32v7-${COMMIT_SHA}-${BUILD_NUMBER} ${IMAGE}:arm32v7-${META_TAG}
730810 docker tag ghcr.io/linuxserver/lsiodev-buildcache:arm64v8-${COMMIT_SHA}-${BUILD_NUMBER} ${IMAGE}:arm64v8-${META_TAG}
731811 fi
732- for MANIFESTIMAGE in "${IMAGE}" "${GITLABIMAGE}" "${GITHUBIMAGE}"; do
812+ for MANIFESTIMAGE in "${IMAGE}" "${GITLABIMAGE}" "${GITHUBIMAGE}" "${QUAYIMAGE}" ; do
733813 docker tag ${IMAGE}:amd64-${META_TAG} ${MANIFESTIMAGE}:amd64-${META_TAG}
734814 docker tag ${IMAGE}:arm32v7-${META_TAG} ${MANIFESTIMAGE}:arm32v7-${META_TAG}
735815 docker tag ${IMAGE}:arm64v8-${META_TAG} ${MANIFESTIMAGE}:arm64v8-${META_TAG}
@@ -739,6 +819,9 @@ pipeline {
739819 docker tag ${MANIFESTIMAGE}:amd64-${META_TAG} ${MANIFESTIMAGE}:amd64-${EXT_RELEASE_TAG}
740820 docker tag ${MANIFESTIMAGE}:arm32v7-${META_TAG} ${MANIFESTIMAGE}:arm32v7-${EXT_RELEASE_TAG}
741821 docker tag ${MANIFESTIMAGE}:arm64v8-${META_TAG} ${MANIFESTIMAGE}:arm64v8-${EXT_RELEASE_TAG}
822+ docker tag ${MANIFESTIMAGE}:amd64-${META_TAG} ${MANIFESTIMAGE}:amd64-${SEMVER}
823+ docker tag ${MANIFESTIMAGE}:arm32v7-${META_TAG} ${MANIFESTIMAGE}:arm32v7-${SEMVER}
824+ docker tag ${MANIFESTIMAGE}:arm64v8-${META_TAG} ${MANIFESTIMAGE}:arm64v8-${SEMVER}
742825 docker push ${MANIFESTIMAGE}:amd64-${META_TAG}
743826 docker push ${MANIFESTIMAGE}:arm32v7-${META_TAG}
744827 docker push ${MANIFESTIMAGE}:arm64v8-${META_TAG}
@@ -748,6 +831,9 @@ pipeline {
748831 docker push ${MANIFESTIMAGE}:amd64-${EXT_RELEASE_TAG}
749832 docker push ${MANIFESTIMAGE}:arm32v7-${EXT_RELEASE_TAG}
750833 docker push ${MANIFESTIMAGE}:arm64v8-${EXT_RELEASE_TAG}
834+ docker push ${MANIFESTIMAGE}:amd64-${SEMVER}
835+ docker push ${MANIFESTIMAGE}:arm32v7-${SEMVER}
836+ docker push ${MANIFESTIMAGE}:arm64v8-${SEMVER}
751837 docker manifest push --purge ${MANIFESTIMAGE}:latest || :
752838 docker manifest create ${MANIFESTIMAGE}:latest ${MANIFESTIMAGE}:amd64-latest ${MANIFESTIMAGE}:arm32v7-latest ${MANIFESTIMAGE}:arm64v8-latest
753839 docker manifest annotate ${MANIFESTIMAGE}:latest ${MANIFESTIMAGE}:arm32v7-latest --os linux --arch arm
@@ -760,24 +846,32 @@ pipeline {
760846 docker manifest create ${MANIFESTIMAGE}:${EXT_RELEASE_TAG} ${MANIFESTIMAGE}:amd64-${EXT_RELEASE_TAG} ${MANIFESTIMAGE}:arm32v7-${EXT_RELEASE_TAG} ${MANIFESTIMAGE}:arm64v8-${EXT_RELEASE_TAG}
761847 docker manifest annotate ${MANIFESTIMAGE}:${EXT_RELEASE_TAG} ${MANIFESTIMAGE}:arm32v7-${EXT_RELEASE_TAG} --os linux --arch arm
762848 docker manifest annotate ${MANIFESTIMAGE}:${EXT_RELEASE_TAG} ${MANIFESTIMAGE}:arm64v8-${EXT_RELEASE_TAG} --os linux --arch arm64 --variant v8
849+ docker manifest push --purge ${MANIFESTIMAGE}:${SEMVER} || :
850+ docker manifest create ${MANIFESTIMAGE}:${SEMVER} ${MANIFESTIMAGE}:amd64-${SEMVER} ${MANIFESTIMAGE}:arm32v7-${SEMVER} ${MANIFESTIMAGE}:arm64v8-${SEMVER}
851+ docker manifest annotate ${MANIFESTIMAGE}:${SEMVER} ${MANIFESTIMAGE}:arm32v7-${SEMVER} --os linux --arch arm
852+ docker manifest annotate ${MANIFESTIMAGE}:${SEMVER} ${MANIFESTIMAGE}:arm64v8-${SEMVER} --os linux --arch arm64 --variant v8
763853 docker manifest push --purge ${MANIFESTIMAGE}:latest
764854 docker manifest push --purge ${MANIFESTIMAGE}:${META_TAG}
765855 docker manifest push --purge ${MANIFESTIMAGE}:${EXT_RELEASE_TAG}
856+ docker manifest push --purge ${MANIFESTIMAGE}:${SEMVER}
766857 done
767858 '''
768859 }
769860 sh ''' #! /bin/bash
770- for DELETEIMAGE in "${GITHUBIMAGE}" "${GITLABIMAGE}" "${IMAGE}"; do
861+ for DELETEIMAGE in "${GITHUBIMAGE}" "${GITLABIMAGE}" "${QUAYIMAGE}" "${ IMAGE}"; do
771862 docker rmi \
772863 ${DELETEIMAGE}:amd64-${META_TAG} \
773864 ${DELETEIMAGE}:amd64-latest \
774865 ${DELETEIMAGE}:amd64-${EXT_RELEASE_TAG} \
866+ ${DELETEIMAGE}:amd64-${SEMVER} \
775867 ${DELETEIMAGE}:arm32v7-${META_TAG} \
776868 ${DELETEIMAGE}:arm32v7-latest \
777869 ${DELETEIMAGE}:arm32v7-${EXT_RELEASE_TAG} \
870+ ${DELETEIMAGE}:arm32v7-${SEMVER} \
778871 ${DELETEIMAGE}:arm64v8-${META_TAG} \
779872 ${DELETEIMAGE}:arm64v8-latest \
780- ${DELETEIMAGE}:arm64v8-${EXT_RELEASE_TAG} || :
873+ ${DELETEIMAGE}:arm64v8-${EXT_RELEASE_TAG} \
874+ ${DELETEIMAGE}:arm64v8-${SEMVER} || :
781875 done
782876 docker rmi \
783877 ghcr.io/linuxserver/lsiodev-buildcache:arm32v7-${COMMIT_SHA}-${BUILD_NUMBER} \
0 commit comments