@@ -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 = ' bookstackapp'
2122 EXT_REPO = ' bookstack'
@@ -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-' + 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
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-' + 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
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-' + 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
189210 } else {
@@ -379,14 +400,56 @@ pipeline {
379400 "visibility":"public"}' '''
380401 }
381402 }
403+ /* #######################
404+ Scarf.sh package registry
405+ ####################### */
406+ // Add package to Scarf.sh and set permissions
407+ stage(" Scarf.sh package registry" ){
408+ when {
409+ branch " master"
410+ environment name : ' EXIT_STATUS' , value : ' '
411+ }
412+ steps{
413+ sh ''' #! /bin/bash
414+ set -e
415+ PACKAGE_UUID=$(curl -X GET -H "Authorization: Bearer ${SCARF_TOKEN}" https://scarf.sh/api/v1/packages | jq -r '.[] | select(.name=="linuxserver/bookstack") | .uuid')
416+ if [ -z "${PACKAGE_UUID}" ]; then
417+ echo "Adding package to Scarf.sh"
418+ PACKAGE_UUID=$(curl -sX POST https://scarf.sh/api/v1/packages \
419+ -H "Authorization: Bearer ${SCARF_TOKEN}" \
420+ -H "Content-Type: application/json" \
421+ -d '{"name":"linuxserver/bookstack",\
422+ "shortDescription":"example description",\
423+ "libraryType":"docker",\
424+ "website":"https://github.com/linuxserver/docker-bookstack",\
425+ "backendUrl":"https://ghcr.io/linuxserver/bookstack",\
426+ "publicUrl":"https://lscr.io/linuxserver/bookstack"}' \
427+ | jq -r .uuid)
428+ else
429+ echo "Package already exists on Scarf.sh"
430+ fi
431+ echo "Setting permissions on Scarf.sh for package ${PACKAGE_UUID}"
432+ curl -X POST https://scarf.sh/api/v1/packages/${PACKAGE_UUID}/permissions \
433+ -H "Authorization: Bearer ${SCARF_TOKEN}" \
434+ -H "Content-Type: application/json" \
435+ -d '[{"userQuery":"Spad","permissionLevel":"admin"},\
436+ {"userQuery":"roxedus","permissionLevel":"admin"},\
437+ {"userQuery":"nemchik","permissionLevel":"admin"},\
438+ {"userQuery":"driz","permissionLevel":"admin"},\
439+ {"userQuery":"aptalca","permissionLevel":"admin"},\
440+ {"userQuery":"saarg","permissionLevel":"admin"},\
441+ {"userQuery":"Stark","permissionLevel":"admin"}]'
442+ '''
443+ }
444+ }
382445 /* ###############
383446 Build Container
384447 ############### */
385448 // Build Docker container for push to LS Repo
386449 stage(' Build-Single' ) {
387450 when {
388451 expression {
389- env. MULTIARCH == ' false' || params. PACKAGE_CHECK == ' true'
452+ env. MULTIARCH == ' false' || params. PACKAGE_CHECK == ' true'
390453 }
391454 environment name : ' EXIT_STATUS' , value : ' '
392455 }
@@ -680,6 +743,12 @@ pipeline {
680743 credentialsId : ' 3f9ba4d5-100d-45b0-a3c4-633fd6061207' ,
681744 usernameVariable : ' DOCKERUSER' ,
682745 passwordVariable : ' DOCKERPASS'
746+ ],
747+ [
748+ $class : ' UsernamePasswordMultiBinding' ,
749+ credentialsId : ' Quay.io-Robot' ,
750+ usernameVariable : ' QUAYUSER' ,
751+ passwordVariable : ' QUAYPASS'
683752 ]
684753 ]) {
685754 retry(5 ) {
@@ -688,22 +757,26 @@ pipeline {
688757 echo $DOCKERPASS | docker login -u $DOCKERUSER --password-stdin
689758 echo $GITHUB_TOKEN | docker login ghcr.io -u LinuxServer-CI --password-stdin
690759 echo $GITLAB_TOKEN | docker login registry.gitlab.com -u LinuxServer.io --password-stdin
691- for PUSHIMAGE in "${GITHUBIMAGE}" "${GITLABIMAGE}" "${IMAGE}"; do
760+ echo $QUAYPASS | docker login quay.io -u $QUAYUSER --password-stdin
761+ for PUSHIMAGE in "${GITHUBIMAGE}" "${GITLABIMAGE}" "${QUAYIMAGE}" "${IMAGE}"; do
692762 docker tag ${IMAGE}:${META_TAG} ${PUSHIMAGE}:${META_TAG}
693763 docker tag ${PUSHIMAGE}:${META_TAG} ${PUSHIMAGE}:latest
694764 docker tag ${PUSHIMAGE}:${META_TAG} ${PUSHIMAGE}:${EXT_RELEASE_TAG}
765+ docker tag ${PUSHIMAGE}:${META_TAG} ${PUSHIMAGE}:${SEMVER}
695766 docker push ${PUSHIMAGE}:latest
696767 docker push ${PUSHIMAGE}:${META_TAG}
697768 docker push ${PUSHIMAGE}:${EXT_RELEASE_TAG}
769+ docker push ${PUSHIMAGE}:${SEMVER}
698770 done
699771 '''
700772 }
701773 sh ''' #! /bin/bash
702- for DELETEIMAGE in "${GITHUBIMAGE}" "${GITLABIMAGE}" "${IMAGE}"; do
774+ for DELETEIMAGE in "${GITHUBIMAGE}" "${GITLABIMAGE}" "${QUAYIMAGE}" "${ IMAGE}"; do
703775 docker rmi \
704776 ${DELETEIMAGE}:${META_TAG} \
705777 ${DELETEIMAGE}:${EXT_RELEASE_TAG} \
706- ${DELETEIMAGE}:latest || :
778+ ${DELETEIMAGE}:latest \
779+ ${DELETEIMAGE}:${SEMVER} || :
707780 done
708781 '''
709782 }
@@ -722,6 +795,12 @@ pipeline {
722795 credentialsId : ' 3f9ba4d5-100d-45b0-a3c4-633fd6061207' ,
723796 usernameVariable : ' DOCKERUSER' ,
724797 passwordVariable : ' DOCKERPASS'
798+ ],
799+ [
800+ $class : ' UsernamePasswordMultiBinding' ,
801+ credentialsId : ' Quay.io-Robot' ,
802+ usernameVariable : ' QUAYUSER' ,
803+ passwordVariable : ' QUAYPASS'
725804 ]
726805 ]) {
727806 retry(5 ) {
@@ -730,13 +809,14 @@ pipeline {
730809 echo $DOCKERPASS | docker login -u $DOCKERUSER --password-stdin
731810 echo $GITHUB_TOKEN | docker login ghcr.io -u LinuxServer-CI --password-stdin
732811 echo $GITLAB_TOKEN | docker login registry.gitlab.com -u LinuxServer.io --password-stdin
812+ echo $QUAYPASS | docker login quay.io -u $QUAYUSER --password-stdin
733813 if [ "${CI}" == "false" ]; then
734814 docker pull ghcr.io/linuxserver/lsiodev-buildcache:arm32v7-${COMMIT_SHA}-${BUILD_NUMBER}
735815 docker pull ghcr.io/linuxserver/lsiodev-buildcache:arm64v8-${COMMIT_SHA}-${BUILD_NUMBER}
736816 docker tag ghcr.io/linuxserver/lsiodev-buildcache:arm32v7-${COMMIT_SHA}-${BUILD_NUMBER} ${IMAGE}:arm32v7-${META_TAG}
737817 docker tag ghcr.io/linuxserver/lsiodev-buildcache:arm64v8-${COMMIT_SHA}-${BUILD_NUMBER} ${IMAGE}:arm64v8-${META_TAG}
738818 fi
739- for MANIFESTIMAGE in "${IMAGE}" "${GITLABIMAGE}" "${GITHUBIMAGE}"; do
819+ for MANIFESTIMAGE in "${IMAGE}" "${GITLABIMAGE}" "${GITHUBIMAGE}" "${QUAYIMAGE}" ; do
740820 docker tag ${IMAGE}:amd64-${META_TAG} ${MANIFESTIMAGE}:amd64-${META_TAG}
741821 docker tag ${IMAGE}:arm32v7-${META_TAG} ${MANIFESTIMAGE}:arm32v7-${META_TAG}
742822 docker tag ${IMAGE}:arm64v8-${META_TAG} ${MANIFESTIMAGE}:arm64v8-${META_TAG}
@@ -746,6 +826,9 @@ pipeline {
746826 docker tag ${MANIFESTIMAGE}:amd64-${META_TAG} ${MANIFESTIMAGE}:amd64-${EXT_RELEASE_TAG}
747827 docker tag ${MANIFESTIMAGE}:arm32v7-${META_TAG} ${MANIFESTIMAGE}:arm32v7-${EXT_RELEASE_TAG}
748828 docker tag ${MANIFESTIMAGE}:arm64v8-${META_TAG} ${MANIFESTIMAGE}:arm64v8-${EXT_RELEASE_TAG}
829+ docker tag ${MANIFESTIMAGE}:amd64-${META_TAG} ${MANIFESTIMAGE}:amd64-${SEMVER}
830+ docker tag ${MANIFESTIMAGE}:arm32v7-${META_TAG} ${MANIFESTIMAGE}:arm32v7-${SEMVER}
831+ docker tag ${MANIFESTIMAGE}:arm64v8-${META_TAG} ${MANIFESTIMAGE}:arm64v8-${SEMVER}
749832 docker push ${MANIFESTIMAGE}:amd64-${META_TAG}
750833 docker push ${MANIFESTIMAGE}:arm32v7-${META_TAG}
751834 docker push ${MANIFESTIMAGE}:arm64v8-${META_TAG}
@@ -755,6 +838,9 @@ pipeline {
755838 docker push ${MANIFESTIMAGE}:amd64-${EXT_RELEASE_TAG}
756839 docker push ${MANIFESTIMAGE}:arm32v7-${EXT_RELEASE_TAG}
757840 docker push ${MANIFESTIMAGE}:arm64v8-${EXT_RELEASE_TAG}
841+ docker push ${MANIFESTIMAGE}:amd64-${SEMVER}
842+ docker push ${MANIFESTIMAGE}:arm32v7-${SEMVER}
843+ docker push ${MANIFESTIMAGE}:arm64v8-${SEMVER}
758844 docker manifest push --purge ${MANIFESTIMAGE}:latest || :
759845 docker manifest create ${MANIFESTIMAGE}:latest ${MANIFESTIMAGE}:amd64-latest ${MANIFESTIMAGE}:arm32v7-latest ${MANIFESTIMAGE}:arm64v8-latest
760846 docker manifest annotate ${MANIFESTIMAGE}:latest ${MANIFESTIMAGE}:arm32v7-latest --os linux --arch arm
@@ -767,24 +853,32 @@ pipeline {
767853 docker manifest create ${MANIFESTIMAGE}:${EXT_RELEASE_TAG} ${MANIFESTIMAGE}:amd64-${EXT_RELEASE_TAG} ${MANIFESTIMAGE}:arm32v7-${EXT_RELEASE_TAG} ${MANIFESTIMAGE}:arm64v8-${EXT_RELEASE_TAG}
768854 docker manifest annotate ${MANIFESTIMAGE}:${EXT_RELEASE_TAG} ${MANIFESTIMAGE}:arm32v7-${EXT_RELEASE_TAG} --os linux --arch arm
769855 docker manifest annotate ${MANIFESTIMAGE}:${EXT_RELEASE_TAG} ${MANIFESTIMAGE}:arm64v8-${EXT_RELEASE_TAG} --os linux --arch arm64 --variant v8
856+ docker manifest push --purge ${MANIFESTIMAGE}:${SEMVER} || :
857+ docker manifest create ${MANIFESTIMAGE}:${SEMVER} ${MANIFESTIMAGE}:amd64-${SEMVER} ${MANIFESTIMAGE}:arm32v7-${SEMVER} ${MANIFESTIMAGE}:arm64v8-${SEMVER}
858+ docker manifest annotate ${MANIFESTIMAGE}:${SEMVER} ${MANIFESTIMAGE}:arm32v7-${SEMVER} --os linux --arch arm
859+ docker manifest annotate ${MANIFESTIMAGE}:${SEMVER} ${MANIFESTIMAGE}:arm64v8-${SEMVER} --os linux --arch arm64 --variant v8
770860 docker manifest push --purge ${MANIFESTIMAGE}:latest
771861 docker manifest push --purge ${MANIFESTIMAGE}:${META_TAG}
772862 docker manifest push --purge ${MANIFESTIMAGE}:${EXT_RELEASE_TAG}
863+ docker manifest push --purge ${MANIFESTIMAGE}:${SEMVER}
773864 done
774865 '''
775866 }
776867 sh ''' #! /bin/bash
777- for DELETEIMAGE in "${GITHUBIMAGE}" "${GITLABIMAGE}" "${IMAGE}"; do
868+ for DELETEIMAGE in "${GITHUBIMAGE}" "${GITLABIMAGE}" "${QUAYIMAGE}" "${ IMAGE}"; do
778869 docker rmi \
779870 ${DELETEIMAGE}:amd64-${META_TAG} \
780871 ${DELETEIMAGE}:amd64-latest \
781872 ${DELETEIMAGE}:amd64-${EXT_RELEASE_TAG} \
873+ ${DELETEIMAGE}:amd64-${SEMVER} \
782874 ${DELETEIMAGE}:arm32v7-${META_TAG} \
783875 ${DELETEIMAGE}:arm32v7-latest \
784876 ${DELETEIMAGE}:arm32v7-${EXT_RELEASE_TAG} \
877+ ${DELETEIMAGE}:arm32v7-${SEMVER} \
785878 ${DELETEIMAGE}:arm64v8-${META_TAG} \
786879 ${DELETEIMAGE}:arm64v8-latest \
787- ${DELETEIMAGE}:arm64v8-${EXT_RELEASE_TAG} || :
880+ ${DELETEIMAGE}:arm64v8-${EXT_RELEASE_TAG} \
881+ ${DELETEIMAGE}:arm64v8-${SEMVER} || :
788882 done
789883 docker rmi \
790884 ghcr.io/linuxserver/lsiodev-buildcache:arm32v7-${COMMIT_SHA}-${BUILD_NUMBER} \
0 commit comments