@@ -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 CONTAINER_NAME = ' sqlitebrowser'
2021 BUILD_VERSION_ARG = ' SQLITEB_VERSION'
2122 LS_USER = ' linuxserver'
@@ -116,6 +117,23 @@ pipeline {
116117 env. EXT_RELEASE_CLEAN = sh(
117118 script : ''' echo ${EXT_RELEASE} | sed 's/[~,%@+;:/]//g' ''' ,
118119 returnStdout : true ). trim()
120+
121+ env. SEMVER = (new Date ()). format(' YYYY.MM.dd' )
122+ def semver = env. EXT_RELEASE_CLEAN =~ / (\d +)\. (\d +)\. (\d +)$/
123+ if (semver. find()) {
124+ env. SEMVER = " ${ semver[0][1]} .${ semver[0][2]} .${ semver[0][3]} "
125+ } else {
126+ semver = env. EXT_RELEASE_CLEAN =~ / (\d +)\. (\d +)(?:\. (\d +))?(.*)$/
127+ if (semver. find()) {
128+ if (semver[0 ][3 ]) {
129+ env. SEMVER = " ${ semver[0][1]} .${ semver[0][2]} .${ semver[0][3]} "
130+ } else if (! semver[0 ][3 ] && ! semver[0 ][4 ]) {
131+ env. SEMVER = " ${ semver[0][1]} .${ semver[0][2]} .${ (new Date()).format('YYYYMMdd')} "
132+ }
133+ }
134+ }
135+
136+ println (" SEMVER: ${ env.SEMVER} " )
119137 }
120138 }
121139 }
@@ -130,6 +148,7 @@ pipeline {
130148 env. IMAGE = env. DOCKERHUB_IMAGE
131149 env. GITHUBIMAGE = ' ghcr.io/' + env. LS_USER + ' /' + env. CONTAINER_NAME
132150 env. GITLABIMAGE = ' registry.gitlab.com/linuxserver.io/' + env. LS_REPO + ' /' + env. CONTAINER_NAME
151+ env. QUAYIMAGE = ' quay.io/linuxserver.io/' + env. CONTAINER_NAME
133152 if (env. MULTIARCH == ' true' ) {
134153 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
135154 } else {
@@ -152,6 +171,7 @@ pipeline {
152171 env. IMAGE = env. DEV_DOCKERHUB_IMAGE
153172 env. GITHUBIMAGE = ' ghcr.io/' + env. LS_USER + ' /lsiodev-' + env. CONTAINER_NAME
154173 env. GITLABIMAGE = ' registry.gitlab.com/linuxserver.io/' + env. LS_REPO + ' /lsiodev-' + env. CONTAINER_NAME
174+ env. QUAYIMAGE = ' quay.io/linuxserver.io/lsiodev-' + env. CONTAINER_NAME
155175 if (env. MULTIARCH == ' true' ) {
156176 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
157177 } else {
@@ -174,6 +194,7 @@ pipeline {
174194 env. IMAGE = env. PR_DOCKERHUB_IMAGE
175195 env. GITHUBIMAGE = ' ghcr.io/' + env. LS_USER + ' /lspipepr-' + env. CONTAINER_NAME
176196 env. GITLABIMAGE = ' registry.gitlab.com/linuxserver.io/' + env. LS_REPO + ' /lspipepr-' + env. CONTAINER_NAME
197+ env. QUAYIMAGE = ' quay.io/linuxserver.io/lspipepr-' + env. CONTAINER_NAME
177198 if (env. MULTIARCH == ' true' ) {
178199 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
179200 } else {
@@ -369,14 +390,56 @@ pipeline {
369390 "visibility":"public"}' '''
370391 }
371392 }
393+ /* #######################
394+ Scarf.sh package registry
395+ ####################### */
396+ // Add package to Scarf.sh and set permissions
397+ stage(" Scarf.sh package registry" ){
398+ when {
399+ branch " master"
400+ environment name : ' EXIT_STATUS' , value : ' '
401+ }
402+ steps{
403+ sh ''' #! /bin/bash
404+ set -e
405+ PACKAGE_UUID=$(curl -X GET -H "Authorization: Bearer ${SCARF_TOKEN}" https://scarf.sh/api/v1/packages | jq -r '.[] | select(.name=="linuxserver/sqlitebrowser") | .uuid')
406+ if [ -z "${PACKAGE_UUID}" ]; then
407+ echo "Adding package to Scarf.sh"
408+ PACKAGE_UUID=$(curl -sX POST https://scarf.sh/api/v1/packages \
409+ -H "Authorization: Bearer ${SCARF_TOKEN}" \
410+ -H "Content-Type: application/json" \
411+ -d '{"name":"linuxserver/sqlitebrowser",\
412+ "shortDescription":"example description",\
413+ "libraryType":"docker",\
414+ "website":"https://github.com/linuxserver/docker-sqlitebrowser",\
415+ "backendUrl":"https://ghcr.io/linuxserver/sqlitebrowser",\
416+ "publicUrl":"https://lscr.io/linuxserver/sqlitebrowser"}' \
417+ | jq -r .uuid)
418+ else
419+ echo "Package already exists on Scarf.sh"
420+ fi
421+ echo "Setting permissions on Scarf.sh for package ${PACKAGE_UUID}"
422+ curl -X POST https://scarf.sh/api/v1/packages/${PACKAGE_UUID}/permissions \
423+ -H "Authorization: Bearer ${SCARF_TOKEN}" \
424+ -H "Content-Type: application/json" \
425+ -d '[{"userQuery":"Spad","permissionLevel":"admin"},\
426+ {"userQuery":"roxedus","permissionLevel":"admin"},\
427+ {"userQuery":"nemchik","permissionLevel":"admin"},\
428+ {"userQuery":"driz","permissionLevel":"admin"},\
429+ {"userQuery":"aptalca","permissionLevel":"admin"},\
430+ {"userQuery":"saarg","permissionLevel":"admin"},\
431+ {"userQuery":"Stark","permissionLevel":"admin"}]'
432+ '''
433+ }
434+ }
372435 /* ###############
373436 Build Container
374437 ############### */
375438 // Build Docker container for push to LS Repo
376439 stage(' Build-Single' ) {
377440 when {
378441 expression {
379- env. MULTIARCH == ' false' || params. PACKAGE_CHECK == ' true'
442+ env. MULTIARCH == ' false' || params. PACKAGE_CHECK == ' true'
380443 }
381444 environment name : ' EXIT_STATUS' , value : ' '
382445 }
@@ -670,6 +733,12 @@ pipeline {
670733 credentialsId : ' 3f9ba4d5-100d-45b0-a3c4-633fd6061207' ,
671734 usernameVariable : ' DOCKERUSER' ,
672735 passwordVariable : ' DOCKERPASS'
736+ ],
737+ [
738+ $class : ' UsernamePasswordMultiBinding' ,
739+ credentialsId : ' Quay.io-Robot' ,
740+ usernameVariable : ' QUAYUSER' ,
741+ passwordVariable : ' QUAYPASS'
673742 ]
674743 ]) {
675744 retry(5 ) {
@@ -678,22 +747,26 @@ pipeline {
678747 echo $DOCKERPASS | docker login -u $DOCKERUSER --password-stdin
679748 echo $GITHUB_TOKEN | docker login ghcr.io -u LinuxServer-CI --password-stdin
680749 echo $GITLAB_TOKEN | docker login registry.gitlab.com -u LinuxServer.io --password-stdin
681- for PUSHIMAGE in "${GITHUBIMAGE}" "${GITLABIMAGE}" "${IMAGE}"; do
750+ echo $QUAYPASS | docker login quay.io -u $QUAYUSER --password-stdin
751+ for PUSHIMAGE in "${GITHUBIMAGE}" "${GITLABIMAGE}" "${QUAYIMAGE}" "${IMAGE}"; do
682752 docker tag ${IMAGE}:${META_TAG} ${PUSHIMAGE}:${META_TAG}
683753 docker tag ${PUSHIMAGE}:${META_TAG} ${PUSHIMAGE}:latest
684754 docker tag ${PUSHIMAGE}:${META_TAG} ${PUSHIMAGE}:${EXT_RELEASE_TAG}
755+ docker tag ${PUSHIMAGE}:${META_TAG} ${PUSHIMAGE}:${SEMVER}
685756 docker push ${PUSHIMAGE}:latest
686757 docker push ${PUSHIMAGE}:${META_TAG}
687758 docker push ${PUSHIMAGE}:${EXT_RELEASE_TAG}
759+ docker push ${PUSHIMAGE}:${SEMVER}
688760 done
689761 '''
690762 }
691763 sh ''' #! /bin/bash
692- for DELETEIMAGE in "${GITHUBIMAGE}" "${GITLABIMAGE}" "${IMAGE}"; do
764+ for DELETEIMAGE in "${GITHUBIMAGE}" "${GITLABIMAGE}" "${QUAYIMAGE}" "${ IMAGE}"; do
693765 docker rmi \
694766 ${DELETEIMAGE}:${META_TAG} \
695767 ${DELETEIMAGE}:${EXT_RELEASE_TAG} \
696- ${DELETEIMAGE}:latest || :
768+ ${DELETEIMAGE}:latest \
769+ ${DELETEIMAGE}:${SEMVER} || :
697770 done
698771 '''
699772 }
@@ -712,6 +785,12 @@ pipeline {
712785 credentialsId : ' 3f9ba4d5-100d-45b0-a3c4-633fd6061207' ,
713786 usernameVariable : ' DOCKERUSER' ,
714787 passwordVariable : ' DOCKERPASS'
788+ ],
789+ [
790+ $class : ' UsernamePasswordMultiBinding' ,
791+ credentialsId : ' Quay.io-Robot' ,
792+ usernameVariable : ' QUAYUSER' ,
793+ passwordVariable : ' QUAYPASS'
715794 ]
716795 ]) {
717796 retry(5 ) {
@@ -720,13 +799,14 @@ pipeline {
720799 echo $DOCKERPASS | docker login -u $DOCKERUSER --password-stdin
721800 echo $GITHUB_TOKEN | docker login ghcr.io -u LinuxServer-CI --password-stdin
722801 echo $GITLAB_TOKEN | docker login registry.gitlab.com -u LinuxServer.io --password-stdin
802+ echo $QUAYPASS | docker login quay.io -u $QUAYUSER --password-stdin
723803 if [ "${CI}" == "false" ]; then
724804 docker pull ghcr.io/linuxserver/lsiodev-buildcache:arm32v7-${COMMIT_SHA}-${BUILD_NUMBER}
725805 docker pull ghcr.io/linuxserver/lsiodev-buildcache:arm64v8-${COMMIT_SHA}-${BUILD_NUMBER}
726806 docker tag ghcr.io/linuxserver/lsiodev-buildcache:arm32v7-${COMMIT_SHA}-${BUILD_NUMBER} ${IMAGE}:arm32v7-${META_TAG}
727807 docker tag ghcr.io/linuxserver/lsiodev-buildcache:arm64v8-${COMMIT_SHA}-${BUILD_NUMBER} ${IMAGE}:arm64v8-${META_TAG}
728808 fi
729- for MANIFESTIMAGE in "${IMAGE}" "${GITLABIMAGE}" "${GITHUBIMAGE}"; do
809+ for MANIFESTIMAGE in "${IMAGE}" "${GITLABIMAGE}" "${GITHUBIMAGE}" "${QUAYIMAGE}" ; do
730810 docker tag ${IMAGE}:amd64-${META_TAG} ${MANIFESTIMAGE}:amd64-${META_TAG}
731811 docker tag ${IMAGE}:arm32v7-${META_TAG} ${MANIFESTIMAGE}:arm32v7-${META_TAG}
732812 docker tag ${IMAGE}:arm64v8-${META_TAG} ${MANIFESTIMAGE}:arm64v8-${META_TAG}
@@ -736,6 +816,9 @@ pipeline {
736816 docker tag ${MANIFESTIMAGE}:amd64-${META_TAG} ${MANIFESTIMAGE}:amd64-${EXT_RELEASE_TAG}
737817 docker tag ${MANIFESTIMAGE}:arm32v7-${META_TAG} ${MANIFESTIMAGE}:arm32v7-${EXT_RELEASE_TAG}
738818 docker tag ${MANIFESTIMAGE}:arm64v8-${META_TAG} ${MANIFESTIMAGE}:arm64v8-${EXT_RELEASE_TAG}
819+ docker tag ${MANIFESTIMAGE}:amd64-${META_TAG} ${MANIFESTIMAGE}:amd64-${SEMVER}
820+ docker tag ${MANIFESTIMAGE}:arm32v7-${META_TAG} ${MANIFESTIMAGE}:arm32v7-${SEMVER}
821+ docker tag ${MANIFESTIMAGE}:arm64v8-${META_TAG} ${MANIFESTIMAGE}:arm64v8-${SEMVER}
739822 docker push ${MANIFESTIMAGE}:amd64-${META_TAG}
740823 docker push ${MANIFESTIMAGE}:arm32v7-${META_TAG}
741824 docker push ${MANIFESTIMAGE}:arm64v8-${META_TAG}
@@ -745,6 +828,9 @@ pipeline {
745828 docker push ${MANIFESTIMAGE}:amd64-${EXT_RELEASE_TAG}
746829 docker push ${MANIFESTIMAGE}:arm32v7-${EXT_RELEASE_TAG}
747830 docker push ${MANIFESTIMAGE}:arm64v8-${EXT_RELEASE_TAG}
831+ docker push ${MANIFESTIMAGE}:amd64-${SEMVER}
832+ docker push ${MANIFESTIMAGE}:arm32v7-${SEMVER}
833+ docker push ${MANIFESTIMAGE}:arm64v8-${SEMVER}
748834 docker manifest push --purge ${MANIFESTIMAGE}:latest || :
749835 docker manifest create ${MANIFESTIMAGE}:latest ${MANIFESTIMAGE}:amd64-latest ${MANIFESTIMAGE}:arm32v7-latest ${MANIFESTIMAGE}:arm64v8-latest
750836 docker manifest annotate ${MANIFESTIMAGE}:latest ${MANIFESTIMAGE}:arm32v7-latest --os linux --arch arm
@@ -757,24 +843,32 @@ pipeline {
757843 docker manifest create ${MANIFESTIMAGE}:${EXT_RELEASE_TAG} ${MANIFESTIMAGE}:amd64-${EXT_RELEASE_TAG} ${MANIFESTIMAGE}:arm32v7-${EXT_RELEASE_TAG} ${MANIFESTIMAGE}:arm64v8-${EXT_RELEASE_TAG}
758844 docker manifest annotate ${MANIFESTIMAGE}:${EXT_RELEASE_TAG} ${MANIFESTIMAGE}:arm32v7-${EXT_RELEASE_TAG} --os linux --arch arm
759845 docker manifest annotate ${MANIFESTIMAGE}:${EXT_RELEASE_TAG} ${MANIFESTIMAGE}:arm64v8-${EXT_RELEASE_TAG} --os linux --arch arm64 --variant v8
846+ docker manifest push --purge ${MANIFESTIMAGE}:${SEMVER} || :
847+ docker manifest create ${MANIFESTIMAGE}:${SEMVER} ${MANIFESTIMAGE}:amd64-${SEMVER} ${MANIFESTIMAGE}:arm32v7-${SEMVER} ${MANIFESTIMAGE}:arm64v8-${SEMVER}
848+ docker manifest annotate ${MANIFESTIMAGE}:${SEMVER} ${MANIFESTIMAGE}:arm32v7-${SEMVER} --os linux --arch arm
849+ docker manifest annotate ${MANIFESTIMAGE}:${SEMVER} ${MANIFESTIMAGE}:arm64v8-${SEMVER} --os linux --arch arm64 --variant v8
760850 docker manifest push --purge ${MANIFESTIMAGE}:latest
761851 docker manifest push --purge ${MANIFESTIMAGE}:${META_TAG}
762852 docker manifest push --purge ${MANIFESTIMAGE}:${EXT_RELEASE_TAG}
853+ docker manifest push --purge ${MANIFESTIMAGE}:${SEMVER}
763854 done
764855 '''
765856 }
766857 sh ''' #! /bin/bash
767- for DELETEIMAGE in "${GITHUBIMAGE}" "${GITLABIMAGE}" "${IMAGE}"; do
858+ for DELETEIMAGE in "${GITHUBIMAGE}" "${GITLABIMAGE}" "${QUAYIMAGE}" "${ IMAGE}"; do
768859 docker rmi \
769860 ${DELETEIMAGE}:amd64-${META_TAG} \
770861 ${DELETEIMAGE}:amd64-latest \
771862 ${DELETEIMAGE}:amd64-${EXT_RELEASE_TAG} \
863+ ${DELETEIMAGE}:amd64-${SEMVER} \
772864 ${DELETEIMAGE}:arm32v7-${META_TAG} \
773865 ${DELETEIMAGE}:arm32v7-latest \
774866 ${DELETEIMAGE}:arm32v7-${EXT_RELEASE_TAG} \
867+ ${DELETEIMAGE}:arm32v7-${SEMVER} \
775868 ${DELETEIMAGE}:arm64v8-${META_TAG} \
776869 ${DELETEIMAGE}:arm64v8-latest \
777- ${DELETEIMAGE}:arm64v8-${EXT_RELEASE_TAG} || :
870+ ${DELETEIMAGE}:arm64v8-${EXT_RELEASE_TAG} \
871+ ${DELETEIMAGE}:arm64v8-${SEMVER} || :
778872 done
779873 docker rmi \
780874 ghcr.io/linuxserver/lsiodev-buildcache:arm32v7-${COMMIT_SHA}-${BUILD_NUMBER} \
0 commit comments