@@ -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 = ' linuxserver'
2122 EXT_REPO = ' gclient'
@@ -126,6 +127,23 @@ pipeline {
126127 env. EXT_RELEASE_CLEAN = sh(
127128 script : ''' echo ${EXT_RELEASE} | sed 's/[~,%@+;:/]//g' ''' ,
128129 returnStdout : true ). trim()
130+
131+ env. SEMVER = (new Date ()). format(' YYYY.MM.dd' )
132+ def semver = env. EXT_RELEASE_CLEAN =~ / (\d +)\. (\d +)\. (\d +)$/
133+ if (semver. find()) {
134+ env. SEMVER = " ${ semver[0][1]} .${ semver[0][2]} .${ semver[0][3]} "
135+ } else {
136+ semver = env. EXT_RELEASE_CLEAN =~ / (\d +)\. (\d +)(?:\. (\d +))?(.*)$/
137+ if (semver. find()) {
138+ if (semver[0 ][3 ]) {
139+ env. SEMVER = " ${ semver[0][1]} .${ semver[0][2]} .${ semver[0][3]} "
140+ } else if (! semver[0 ][3 ] && ! semver[0 ][4 ]) {
141+ env. SEMVER = " ${ semver[0][1]} .${ semver[0][2]} .${ (new Date()).format('YYYYMMdd')} "
142+ }
143+ }
144+ }
145+
146+ println (" SEMVER: ${ env.SEMVER} " )
129147 }
130148 }
131149 }
@@ -140,6 +158,7 @@ pipeline {
140158 env. IMAGE = env. DOCKERHUB_IMAGE
141159 env. GITHUBIMAGE = ' ghcr.io/' + env. LS_USER + ' /' + env. CONTAINER_NAME
142160 env. GITLABIMAGE = ' registry.gitlab.com/linuxserver.io/' + env. LS_REPO + ' /' + env. CONTAINER_NAME
161+ env. QUAYIMAGE = ' quay.io/linuxserver.io/' + env. CONTAINER_NAME
143162 if (env. MULTIARCH == ' true' ) {
144163 env. CI_TAGS = ' amd64-bionic-' + env. EXT_RELEASE_CLEAN + ' -ls' + env. LS_TAG_NUMBER + ' |arm32v7-bionic-' + env. EXT_RELEASE_CLEAN + ' -ls' + env. LS_TAG_NUMBER + ' |arm64v8-bionic-' + env. EXT_RELEASE_CLEAN + ' -ls' + env. LS_TAG_NUMBER
145164 } else {
@@ -162,6 +181,7 @@ pipeline {
162181 env. IMAGE = env. DEV_DOCKERHUB_IMAGE
163182 env. GITHUBIMAGE = ' ghcr.io/' + env. LS_USER + ' /lsiodev-' + env. CONTAINER_NAME
164183 env. GITLABIMAGE = ' registry.gitlab.com/linuxserver.io/' + env. LS_REPO + ' /lsiodev-' + env. CONTAINER_NAME
184+ env. QUAYIMAGE = ' quay.io/linuxserver.io/lsiodev-' + env. CONTAINER_NAME
165185 if (env. MULTIARCH == ' true' ) {
166186 env. CI_TAGS = ' amd64-bionic-' + env. EXT_RELEASE_CLEAN + ' -pkg-' + env. PACKAGE_TAG + ' -dev-' + env. COMMIT_SHA + ' |arm32v7-bionic-' + env. EXT_RELEASE_CLEAN + ' -pkg-' + env. PACKAGE_TAG + ' -dev-' + env. COMMIT_SHA + ' |arm64v8-bionic-' + env. EXT_RELEASE_CLEAN + ' -pkg-' + env. PACKAGE_TAG + ' -dev-' + env. COMMIT_SHA
167187 } else {
@@ -184,6 +204,7 @@ pipeline {
184204 env. IMAGE = env. PR_DOCKERHUB_IMAGE
185205 env. GITHUBIMAGE = ' ghcr.io/' + env. LS_USER + ' /lspipepr-' + env. CONTAINER_NAME
186206 env. GITLABIMAGE = ' registry.gitlab.com/linuxserver.io/' + env. LS_REPO + ' /lspipepr-' + env. CONTAINER_NAME
207+ env. QUAYIMAGE = ' quay.io/linuxserver.io/lspipepr-' + env. CONTAINER_NAME
187208 if (env. MULTIARCH == ' true' ) {
188209 env. CI_TAGS = ' amd64-bionic-' + env. EXT_RELEASE_CLEAN + ' -pkg-' + env. PACKAGE_TAG + ' -pr-' + env. PULL_REQUEST + ' |arm32v7-bionic-' + env. EXT_RELEASE_CLEAN + ' -pkg-' + env. PACKAGE_TAG + ' -pr-' + env. PULL_REQUEST + ' |arm64v8-bionic-' + env. EXT_RELEASE_CLEAN + ' -pkg-' + env. PACKAGE_TAG + ' -pr-' + env. PULL_REQUEST
189210 } else {
@@ -360,14 +381,56 @@ pipeline {
360381 "visibility":"public"}' '''
361382 }
362383 }
384+ /* #######################
385+ Scarf.sh package registry
386+ ####################### */
387+ // Add package to Scarf.sh and set permissions
388+ stage(" Scarf.sh package registry" ){
389+ when {
390+ branch " bionic"
391+ environment name : ' EXIT_STATUS' , value : ' '
392+ }
393+ steps{
394+ sh ''' #! /bin/bash
395+ set -e
396+ PACKAGE_UUID=$(curl -X GET -H "Authorization: Bearer ${SCARF_TOKEN}" https://scarf.sh/api/v1/packages | jq -r '.[] | select(.name=="linuxserver/baseimage-rdesktop-web") | .uuid')
397+ if [ -z "${PACKAGE_UUID}" ]; then
398+ echo "Adding package to Scarf.sh"
399+ PACKAGE_UUID=$(curl -sX POST https://scarf.sh/api/v1/packages \
400+ -H "Authorization: Bearer ${SCARF_TOKEN}" \
401+ -H "Content-Type: application/json" \
402+ -d '{"name":"linuxserver/baseimage-rdesktop-web",\
403+ "shortDescription":"example description",\
404+ "libraryType":"docker",\
405+ "website":"https://github.com/linuxserver/docker-baseimage-rdesktop-web",\
406+ "backendUrl":"https://ghcr.io/linuxserver/baseimage-rdesktop-web",\
407+ "publicUrl":"https://lscr.io/linuxserver/baseimage-rdesktop-web"}' \
408+ | jq -r .uuid)
409+ else
410+ echo "Package already exists on Scarf.sh"
411+ fi
412+ echo "Setting permissions on Scarf.sh for package ${PACKAGE_UUID}"
413+ curl -X POST https://scarf.sh/api/v1/packages/${PACKAGE_UUID}/permissions \
414+ -H "Authorization: Bearer ${SCARF_TOKEN}" \
415+ -H "Content-Type: application/json" \
416+ -d '[{"userQuery":"Spad","permissionLevel":"admin"},\
417+ {"userQuery":"roxedus","permissionLevel":"admin"},\
418+ {"userQuery":"nemchik","permissionLevel":"admin"},\
419+ {"userQuery":"driz","permissionLevel":"admin"},\
420+ {"userQuery":"aptalca","permissionLevel":"admin"},\
421+ {"userQuery":"saarg","permissionLevel":"admin"},\
422+ {"userQuery":"Stark","permissionLevel":"admin"}]'
423+ '''
424+ }
425+ }
363426 /* ###############
364427 Build Container
365428 ############### */
366429 // Build Docker container for push to LS Repo
367430 stage(' Build-Single' ) {
368431 when {
369432 expression {
370- env. MULTIARCH == ' false' || params. PACKAGE_CHECK == ' true'
433+ env. MULTIARCH == ' false' || params. PACKAGE_CHECK == ' true'
371434 }
372435 environment name : ' EXIT_STATUS' , value : ' '
373436 }
@@ -647,6 +710,12 @@ pipeline {
647710 credentialsId : ' 3f9ba4d5-100d-45b0-a3c4-633fd6061207' ,
648711 usernameVariable : ' DOCKERUSER' ,
649712 passwordVariable : ' DOCKERPASS'
713+ ],
714+ [
715+ $class : ' UsernamePasswordMultiBinding' ,
716+ credentialsId : ' Quay.io-Robot' ,
717+ usernameVariable : ' QUAYUSER' ,
718+ passwordVariable : ' QUAYPASS'
650719 ]
651720 ]) {
652721 retry(5 ) {
@@ -655,22 +724,26 @@ pipeline {
655724 echo $DOCKERPASS | docker login -u $DOCKERUSER --password-stdin
656725 echo $GITHUB_TOKEN | docker login ghcr.io -u LinuxServer-CI --password-stdin
657726 echo $GITLAB_TOKEN | docker login registry.gitlab.com -u LinuxServer.io --password-stdin
658- for PUSHIMAGE in "${GITHUBIMAGE}" "${GITLABIMAGE}" "${IMAGE}"; do
727+ echo $QUAYPASS | docker login quay.io -u $QUAYUSER --password-stdin
728+ for PUSHIMAGE in "${GITHUBIMAGE}" "${GITLABIMAGE}" "${QUAYIMAGE}" "${IMAGE}"; do
659729 docker tag ${IMAGE}:${META_TAG} ${PUSHIMAGE}:${META_TAG}
660730 docker tag ${PUSHIMAGE}:${META_TAG} ${PUSHIMAGE}:bionic
661731 docker tag ${PUSHIMAGE}:${META_TAG} ${PUSHIMAGE}:${EXT_RELEASE_TAG}
732+ docker tag ${PUSHIMAGE}:${META_TAG} ${PUSHIMAGE}:${SEMVER}
662733 docker push ${PUSHIMAGE}:bionic
663734 docker push ${PUSHIMAGE}:${META_TAG}
664735 docker push ${PUSHIMAGE}:${EXT_RELEASE_TAG}
736+ docker push ${PUSHIMAGE}:${SEMVER}
665737 done
666738 '''
667739 }
668740 sh ''' #! /bin/bash
669- for DELETEIMAGE in "${GITHUBIMAGE}" "${GITLABIMAGE}" "${IMAGE}"; do
741+ for DELETEIMAGE in "${GITHUBIMAGE}" "${GITLABIMAGE}" "${QUAYIMAGE}" "${ IMAGE}"; do
670742 docker rmi \
671743 ${DELETEIMAGE}:${META_TAG} \
672744 ${DELETEIMAGE}:${EXT_RELEASE_TAG} \
673- ${DELETEIMAGE}:bionic || :
745+ ${DELETEIMAGE}:bionic \
746+ ${DELETEIMAGE}:${SEMVER} || :
674747 done
675748 '''
676749 }
@@ -689,6 +762,12 @@ pipeline {
689762 credentialsId : ' 3f9ba4d5-100d-45b0-a3c4-633fd6061207' ,
690763 usernameVariable : ' DOCKERUSER' ,
691764 passwordVariable : ' DOCKERPASS'
765+ ],
766+ [
767+ $class : ' UsernamePasswordMultiBinding' ,
768+ credentialsId : ' Quay.io-Robot' ,
769+ usernameVariable : ' QUAYUSER' ,
770+ passwordVariable : ' QUAYPASS'
692771 ]
693772 ]) {
694773 retry(5 ) {
@@ -697,13 +776,14 @@ pipeline {
697776 echo $DOCKERPASS | docker login -u $DOCKERUSER --password-stdin
698777 echo $GITHUB_TOKEN | docker login ghcr.io -u LinuxServer-CI --password-stdin
699778 echo $GITLAB_TOKEN | docker login registry.gitlab.com -u LinuxServer.io --password-stdin
779+ echo $QUAYPASS | docker login quay.io -u $QUAYUSER --password-stdin
700780 if [ "${CI}" == "false" ]; then
701781 docker pull ghcr.io/linuxserver/lsiodev-buildcache:arm32v7-${COMMIT_SHA}-${BUILD_NUMBER}
702782 docker pull ghcr.io/linuxserver/lsiodev-buildcache:arm64v8-${COMMIT_SHA}-${BUILD_NUMBER}
703783 docker tag ghcr.io/linuxserver/lsiodev-buildcache:arm32v7-${COMMIT_SHA}-${BUILD_NUMBER} ${IMAGE}:arm32v7-${META_TAG}
704784 docker tag ghcr.io/linuxserver/lsiodev-buildcache:arm64v8-${COMMIT_SHA}-${BUILD_NUMBER} ${IMAGE}:arm64v8-${META_TAG}
705785 fi
706- for MANIFESTIMAGE in "${IMAGE}" "${GITLABIMAGE}" "${GITHUBIMAGE}"; do
786+ for MANIFESTIMAGE in "${IMAGE}" "${GITLABIMAGE}" "${GITHUBIMAGE}" "${QUAYIMAGE}" ; do
707787 docker tag ${IMAGE}:amd64-${META_TAG} ${MANIFESTIMAGE}:amd64-${META_TAG}
708788 docker tag ${IMAGE}:arm32v7-${META_TAG} ${MANIFESTIMAGE}:arm32v7-${META_TAG}
709789 docker tag ${IMAGE}:arm64v8-${META_TAG} ${MANIFESTIMAGE}:arm64v8-${META_TAG}
@@ -713,6 +793,9 @@ pipeline {
713793 docker tag ${MANIFESTIMAGE}:amd64-${META_TAG} ${MANIFESTIMAGE}:amd64-${EXT_RELEASE_TAG}
714794 docker tag ${MANIFESTIMAGE}:arm32v7-${META_TAG} ${MANIFESTIMAGE}:arm32v7-${EXT_RELEASE_TAG}
715795 docker tag ${MANIFESTIMAGE}:arm64v8-${META_TAG} ${MANIFESTIMAGE}:arm64v8-${EXT_RELEASE_TAG}
796+ docker tag ${MANIFESTIMAGE}:amd64-${META_TAG} ${MANIFESTIMAGE}:amd64-${SEMVER}
797+ docker tag ${MANIFESTIMAGE}:arm32v7-${META_TAG} ${MANIFESTIMAGE}:arm32v7-${SEMVER}
798+ docker tag ${MANIFESTIMAGE}:arm64v8-${META_TAG} ${MANIFESTIMAGE}:arm64v8-${SEMVER}
716799 docker push ${MANIFESTIMAGE}:amd64-${META_TAG}
717800 docker push ${MANIFESTIMAGE}:arm32v7-${META_TAG}
718801 docker push ${MANIFESTIMAGE}:arm64v8-${META_TAG}
@@ -722,6 +805,9 @@ pipeline {
722805 docker push ${MANIFESTIMAGE}:amd64-${EXT_RELEASE_TAG}
723806 docker push ${MANIFESTIMAGE}:arm32v7-${EXT_RELEASE_TAG}
724807 docker push ${MANIFESTIMAGE}:arm64v8-${EXT_RELEASE_TAG}
808+ docker push ${MANIFESTIMAGE}:amd64-${SEMVER}
809+ docker push ${MANIFESTIMAGE}:arm32v7-${SEMVER}
810+ docker push ${MANIFESTIMAGE}:arm64v8-${SEMVER}
725811 docker manifest push --purge ${MANIFESTIMAGE}:bionic || :
726812 docker manifest create ${MANIFESTIMAGE}:bionic ${MANIFESTIMAGE}:amd64-bionic ${MANIFESTIMAGE}:arm32v7-bionic ${MANIFESTIMAGE}:arm64v8-bionic
727813 docker manifest annotate ${MANIFESTIMAGE}:bionic ${MANIFESTIMAGE}:arm32v7-bionic --os linux --arch arm
@@ -734,21 +820,28 @@ pipeline {
734820 docker manifest create ${MANIFESTIMAGE}:${EXT_RELEASE_TAG} ${MANIFESTIMAGE}:amd64-${EXT_RELEASE_TAG} ${MANIFESTIMAGE}:arm32v7-${EXT_RELEASE_TAG} ${MANIFESTIMAGE}:arm64v8-${EXT_RELEASE_TAG}
735821 docker manifest annotate ${MANIFESTIMAGE}:${EXT_RELEASE_TAG} ${MANIFESTIMAGE}:arm32v7-${EXT_RELEASE_TAG} --os linux --arch arm
736822 docker manifest annotate ${MANIFESTIMAGE}:${EXT_RELEASE_TAG} ${MANIFESTIMAGE}:arm64v8-${EXT_RELEASE_TAG} --os linux --arch arm64 --variant v8
823+ docker manifest push --purge ${MANIFESTIMAGE}:${SEMVER} || :
824+ docker manifest create ${MANIFESTIMAGE}:${SEMVER} ${MANIFESTIMAGE}:amd64-${SEMVER} ${MANIFESTIMAGE}:arm32v7-${SEMVER} ${MANIFESTIMAGE}:arm64v8-${SEMVER}
825+ docker manifest annotate ${MANIFESTIMAGE}:${SEMVER} ${MANIFESTIMAGE}:arm32v7-${SEMVER} --os linux --arch arm
826+ docker manifest annotate ${MANIFESTIMAGE}:${SEMVER} ${MANIFESTIMAGE}:arm64v8-${SEMVER} --os linux --arch arm64 --variant v8
737827 docker manifest push --purge ${MANIFESTIMAGE}:bionic
738828 docker manifest push --purge ${MANIFESTIMAGE}:${META_TAG}
739829 docker manifest push --purge ${MANIFESTIMAGE}:${EXT_RELEASE_TAG}
830+ docker manifest push --purge ${MANIFESTIMAGE}:${SEMVER}
740831 done
741832 '''
742833 }
743834 sh ''' #! /bin/bash
744- for DELETEIMAGE in "${GITHUBIMAGE}" "${GITLABIMAGE}" "${IMAGE}"; do
835+ for DELETEIMAGE in "${GITHUBIMAGE}" "${GITLABIMAGE}" "${QUAYIMAGE}" "${ IMAGE}"; do
745836 docker rmi \
746837 ${DELETEIMAGE}:arm32v7-${META_TAG} \
747838 ${DELETEIMAGE}:arm32v7-bionic \
748839 ${DELETEIMAGE}:arm32v7-${EXT_RELEASE_TAG} \
840+ ${DELETEIMAGE}:arm32v7-${SEMVER} \
749841 ${DELETEIMAGE}:arm64v8-${META_TAG} \
750842 ${DELETEIMAGE}:arm64v8-bionic \
751- ${DELETEIMAGE}:arm64v8-${EXT_RELEASE_TAG} || :
843+ ${DELETEIMAGE}:arm64v8-${EXT_RELEASE_TAG} \
844+ ${DELETEIMAGE}:arm64v8-${SEMVER} || :
752845 done
753846 docker rmi \
754847 ghcr.io/linuxserver/lsiodev-buildcache:arm32v7-${COMMIT_SHA}-${BUILD_NUMBER} \
0 commit comments