@@ -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 BUILD_VERSION_ARG = ' OS'
2021 LS_USER = ' linuxserver'
2122 LS_REPO = ' docker-baseimage-alpine-nginx'
@@ -114,6 +115,23 @@ pipeline {
114115 env. EXT_RELEASE_CLEAN = sh(
115116 script : ''' echo ${EXT_RELEASE} | sed 's/[~,%@+;:/]//g' ''' ,
116117 returnStdout : true ). trim()
118+
119+ env. SEMVER = (new Date ()). format(' YYYY.MM.dd' )
120+ def semver = env. EXT_RELEASE_CLEAN =~ / (\d +)\. (\d +)\. (\d +)$/
121+ if (semver. find()) {
122+ env. SEMVER = " ${ semver[0][1]} .${ semver[0][2]} .${ semver[0][3]} "
123+ } else {
124+ semver = env. EXT_RELEASE_CLEAN =~ / (\d +)\. (\d +)(?:\. (\d +))?(.*)$/
125+ if (semver. find()) {
126+ if (semver[0 ][3 ]) {
127+ env. SEMVER = " ${ semver[0][1]} .${ semver[0][2]} .${ semver[0][3]} "
128+ } else if (! semver[0 ][3 ] && ! semver[0 ][4 ]) {
129+ env. SEMVER = " ${ semver[0][1]} .${ semver[0][2]} .${ (new Date()).format('YYYYMMdd')} "
130+ }
131+ }
132+ }
133+
134+ println (" SEMVER: ${ env.SEMVER} " )
117135 }
118136 }
119137 }
@@ -128,6 +146,7 @@ pipeline {
128146 env. IMAGE = env. DOCKERHUB_IMAGE
129147 env. GITHUBIMAGE = ' ghcr.io/' + env. LS_USER + ' /' + env. CONTAINER_NAME
130148 env. GITLABIMAGE = ' registry.gitlab.com/linuxserver.io/' + env. LS_REPO + ' /' + env. CONTAINER_NAME
149+ env. QUAYIMAGE = ' quay.io/linuxserver.io/' + env. CONTAINER_NAME
131150 if (env. MULTIARCH == ' true' ) {
132151 env. CI_TAGS = ' amd64-3.9-' + env. EXT_RELEASE_CLEAN + ' -ls' + env. LS_TAG_NUMBER + ' |arm32v7-3.9-' + env. EXT_RELEASE_CLEAN + ' -ls' + env. LS_TAG_NUMBER + ' |arm64v8-3.9-' + env. EXT_RELEASE_CLEAN + ' -ls' + env. LS_TAG_NUMBER
133152 } else {
@@ -150,6 +169,7 @@ pipeline {
150169 env. IMAGE = env. DEV_DOCKERHUB_IMAGE
151170 env. GITHUBIMAGE = ' ghcr.io/' + env. LS_USER + ' /lsiodev-' + env. CONTAINER_NAME
152171 env. GITLABIMAGE = ' registry.gitlab.com/linuxserver.io/' + env. LS_REPO + ' /lsiodev-' + env. CONTAINER_NAME
172+ env. QUAYIMAGE = ' quay.io/linuxserver.io/lsiodev-' + env. CONTAINER_NAME
153173 if (env. MULTIARCH == ' true' ) {
154174 env. CI_TAGS = ' amd64-3.9-' + env. EXT_RELEASE_CLEAN + ' -pkg-' + env. PACKAGE_TAG + ' -dev-' + env. COMMIT_SHA + ' |arm32v7-3.9-' + env. EXT_RELEASE_CLEAN + ' -pkg-' + env. PACKAGE_TAG + ' -dev-' + env. COMMIT_SHA + ' |arm64v8-3.9-' + env. EXT_RELEASE_CLEAN + ' -pkg-' + env. PACKAGE_TAG + ' -dev-' + env. COMMIT_SHA
155175 } else {
@@ -172,6 +192,7 @@ pipeline {
172192 env. IMAGE = env. PR_DOCKERHUB_IMAGE
173193 env. GITHUBIMAGE = ' ghcr.io/' + env. LS_USER + ' /lspipepr-' + env. CONTAINER_NAME
174194 env. GITLABIMAGE = ' registry.gitlab.com/linuxserver.io/' + env. LS_REPO + ' /lspipepr-' + env. CONTAINER_NAME
195+ env. QUAYIMAGE = ' quay.io/linuxserver.io/lspipepr-' + env. CONTAINER_NAME
175196 if (env. MULTIARCH == ' true' ) {
176197 env. CI_TAGS = ' amd64-3.9-' + env. EXT_RELEASE_CLEAN + ' -pkg-' + env. PACKAGE_TAG + ' -pr-' + env. PULL_REQUEST + ' |arm32v7-3.9-' + env. EXT_RELEASE_CLEAN + ' -pkg-' + env. PACKAGE_TAG + ' -pr-' + env. PULL_REQUEST + ' |arm64v8-3.9-' + env. EXT_RELEASE_CLEAN + ' -pkg-' + env. PACKAGE_TAG + ' -pr-' + env. PULL_REQUEST
177198 } else {
@@ -348,14 +369,56 @@ pipeline {
348369 "visibility":"public"}' '''
349370 }
350371 }
372+ /* #######################
373+ Scarf.sh package registry
374+ ####################### */
375+ // Add package to Scarf.sh and set permissions
376+ stage(" Scarf.sh package registry" ){
377+ when {
378+ branch " 3.9"
379+ environment name : ' EXIT_STATUS' , value : ' '
380+ }
381+ steps{
382+ sh ''' #! /bin/bash
383+ set -e
384+ PACKAGE_UUID=$(curl -X GET -H "Authorization: Bearer ${SCARF_TOKEN}" https://scarf.sh/api/v1/packages | jq -r '.[] | select(.name=="linuxserver/baseimage-alpine-nginx") | .uuid')
385+ if [ -z "${PACKAGE_UUID}" ]; then
386+ echo "Adding package to Scarf.sh"
387+ PACKAGE_UUID=$(curl -sX POST https://scarf.sh/api/v1/packages \
388+ -H "Authorization: Bearer ${SCARF_TOKEN}" \
389+ -H "Content-Type: application/json" \
390+ -d '{"name":"linuxserver/baseimage-alpine-nginx",\
391+ "shortDescription":"example description",\
392+ "libraryType":"docker",\
393+ "website":"https://github.com/linuxserver/docker-baseimage-alpine-nginx",\
394+ "backendUrl":"https://ghcr.io/linuxserver/baseimage-alpine-nginx",\
395+ "publicUrl":"https://lscr.io/linuxserver/baseimage-alpine-nginx"}' \
396+ | jq -r .uuid)
397+ else
398+ echo "Package already exists on Scarf.sh"
399+ fi
400+ echo "Setting permissions on Scarf.sh for package ${PACKAGE_UUID}"
401+ curl -X POST https://scarf.sh/api/v1/packages/${PACKAGE_UUID}/permissions \
402+ -H "Authorization: Bearer ${SCARF_TOKEN}" \
403+ -H "Content-Type: application/json" \
404+ -d '[{"userQuery":"Spad","permissionLevel":"admin"},\
405+ {"userQuery":"roxedus","permissionLevel":"admin"},\
406+ {"userQuery":"nemchik","permissionLevel":"admin"},\
407+ {"userQuery":"driz","permissionLevel":"admin"},\
408+ {"userQuery":"aptalca","permissionLevel":"admin"},\
409+ {"userQuery":"saarg","permissionLevel":"admin"},\
410+ {"userQuery":"Stark","permissionLevel":"admin"}]'
411+ '''
412+ }
413+ }
351414 /* ###############
352415 Build Container
353416 ############### */
354417 // Build Docker container for push to LS Repo
355418 stage(' Build-Single' ) {
356419 when {
357420 expression {
358- env. MULTIARCH == ' false' || params. PACKAGE_CHECK == ' true'
421+ env. MULTIARCH == ' false' || params. PACKAGE_CHECK == ' true'
359422 }
360423 environment name : ' EXIT_STATUS' , value : ' '
361424 }
@@ -635,6 +698,12 @@ pipeline {
635698 credentialsId : ' 3f9ba4d5-100d-45b0-a3c4-633fd6061207' ,
636699 usernameVariable : ' DOCKERUSER' ,
637700 passwordVariable : ' DOCKERPASS'
701+ ],
702+ [
703+ $class : ' UsernamePasswordMultiBinding' ,
704+ credentialsId : ' Quay.io-Robot' ,
705+ usernameVariable : ' QUAYUSER' ,
706+ passwordVariable : ' QUAYPASS'
638707 ]
639708 ]) {
640709 retry(5 ) {
@@ -643,22 +712,26 @@ pipeline {
643712 echo $DOCKERPASS | docker login -u $DOCKERUSER --password-stdin
644713 echo $GITHUB_TOKEN | docker login ghcr.io -u LinuxServer-CI --password-stdin
645714 echo $GITLAB_TOKEN | docker login registry.gitlab.com -u LinuxServer.io --password-stdin
646- for PUSHIMAGE in "${GITHUBIMAGE}" "${GITLABIMAGE}" "${IMAGE}"; do
715+ echo $QUAYPASS | docker login quay.io -u $QUAYUSER --password-stdin
716+ for PUSHIMAGE in "${GITHUBIMAGE}" "${GITLABIMAGE}" "${QUAYIMAGE}" "${IMAGE}"; do
647717 docker tag ${IMAGE}:${META_TAG} ${PUSHIMAGE}:${META_TAG}
648718 docker tag ${PUSHIMAGE}:${META_TAG} ${PUSHIMAGE}:3.9
649719 docker tag ${PUSHIMAGE}:${META_TAG} ${PUSHIMAGE}:${EXT_RELEASE_TAG}
720+ docker tag ${PUSHIMAGE}:${META_TAG} ${PUSHIMAGE}:${SEMVER}
650721 docker push ${PUSHIMAGE}:3.9
651722 docker push ${PUSHIMAGE}:${META_TAG}
652723 docker push ${PUSHIMAGE}:${EXT_RELEASE_TAG}
724+ docker push ${PUSHIMAGE}:${SEMVER}
653725 done
654726 '''
655727 }
656728 sh ''' #! /bin/bash
657- for DELETEIMAGE in "${GITHUBIMAGE}" "${GITLABIMAGE}" "${IMAGE}"; do
729+ for DELETEIMAGE in "${GITHUBIMAGE}" "${GITLABIMAGE}" "${QUAYIMAGE}" "${ IMAGE}"; do
658730 docker rmi \
659731 ${DELETEIMAGE}:${META_TAG} \
660732 ${DELETEIMAGE}:${EXT_RELEASE_TAG} \
661- ${DELETEIMAGE}:3.9 || :
733+ ${DELETEIMAGE}:3.9 \
734+ ${DELETEIMAGE}:${SEMVER} || :
662735 done
663736 '''
664737 }
@@ -677,6 +750,12 @@ pipeline {
677750 credentialsId : ' 3f9ba4d5-100d-45b0-a3c4-633fd6061207' ,
678751 usernameVariable : ' DOCKERUSER' ,
679752 passwordVariable : ' DOCKERPASS'
753+ ],
754+ [
755+ $class : ' UsernamePasswordMultiBinding' ,
756+ credentialsId : ' Quay.io-Robot' ,
757+ usernameVariable : ' QUAYUSER' ,
758+ passwordVariable : ' QUAYPASS'
680759 ]
681760 ]) {
682761 retry(5 ) {
@@ -685,13 +764,14 @@ pipeline {
685764 echo $DOCKERPASS | docker login -u $DOCKERUSER --password-stdin
686765 echo $GITHUB_TOKEN | docker login ghcr.io -u LinuxServer-CI --password-stdin
687766 echo $GITLAB_TOKEN | docker login registry.gitlab.com -u LinuxServer.io --password-stdin
767+ echo $QUAYPASS | docker login quay.io -u $QUAYUSER --password-stdin
688768 if [ "${CI}" == "false" ]; then
689769 docker pull ghcr.io/linuxserver/lsiodev-buildcache:arm32v7-${COMMIT_SHA}-${BUILD_NUMBER}
690770 docker pull ghcr.io/linuxserver/lsiodev-buildcache:arm64v8-${COMMIT_SHA}-${BUILD_NUMBER}
691771 docker tag ghcr.io/linuxserver/lsiodev-buildcache:arm32v7-${COMMIT_SHA}-${BUILD_NUMBER} ${IMAGE}:arm32v7-${META_TAG}
692772 docker tag ghcr.io/linuxserver/lsiodev-buildcache:arm64v8-${COMMIT_SHA}-${BUILD_NUMBER} ${IMAGE}:arm64v8-${META_TAG}
693773 fi
694- for MANIFESTIMAGE in "${IMAGE}" "${GITLABIMAGE}" "${GITHUBIMAGE}"; do
774+ for MANIFESTIMAGE in "${IMAGE}" "${GITLABIMAGE}" "${GITHUBIMAGE}" "${QUAYIMAGE}" ; do
695775 docker tag ${IMAGE}:amd64-${META_TAG} ${MANIFESTIMAGE}:amd64-${META_TAG}
696776 docker tag ${IMAGE}:arm32v7-${META_TAG} ${MANIFESTIMAGE}:arm32v7-${META_TAG}
697777 docker tag ${IMAGE}:arm64v8-${META_TAG} ${MANIFESTIMAGE}:arm64v8-${META_TAG}
@@ -701,6 +781,9 @@ pipeline {
701781 docker tag ${MANIFESTIMAGE}:amd64-${META_TAG} ${MANIFESTIMAGE}:amd64-${EXT_RELEASE_TAG}
702782 docker tag ${MANIFESTIMAGE}:arm32v7-${META_TAG} ${MANIFESTIMAGE}:arm32v7-${EXT_RELEASE_TAG}
703783 docker tag ${MANIFESTIMAGE}:arm64v8-${META_TAG} ${MANIFESTIMAGE}:arm64v8-${EXT_RELEASE_TAG}
784+ docker tag ${MANIFESTIMAGE}:amd64-${META_TAG} ${MANIFESTIMAGE}:amd64-${SEMVER}
785+ docker tag ${MANIFESTIMAGE}:arm32v7-${META_TAG} ${MANIFESTIMAGE}:arm32v7-${SEMVER}
786+ docker tag ${MANIFESTIMAGE}:arm64v8-${META_TAG} ${MANIFESTIMAGE}:arm64v8-${SEMVER}
704787 docker push ${MANIFESTIMAGE}:amd64-${META_TAG}
705788 docker push ${MANIFESTIMAGE}:arm32v7-${META_TAG}
706789 docker push ${MANIFESTIMAGE}:arm64v8-${META_TAG}
@@ -710,6 +793,9 @@ pipeline {
710793 docker push ${MANIFESTIMAGE}:amd64-${EXT_RELEASE_TAG}
711794 docker push ${MANIFESTIMAGE}:arm32v7-${EXT_RELEASE_TAG}
712795 docker push ${MANIFESTIMAGE}:arm64v8-${EXT_RELEASE_TAG}
796+ docker push ${MANIFESTIMAGE}:amd64-${SEMVER}
797+ docker push ${MANIFESTIMAGE}:arm32v7-${SEMVER}
798+ docker push ${MANIFESTIMAGE}:arm64v8-${SEMVER}
713799 docker manifest push --purge ${MANIFESTIMAGE}:3.9 || :
714800 docker manifest create ${MANIFESTIMAGE}:3.9 ${MANIFESTIMAGE}:amd64-3.9 ${MANIFESTIMAGE}:arm32v7-3.9 ${MANIFESTIMAGE}:arm64v8-3.9
715801 docker manifest annotate ${MANIFESTIMAGE}:3.9 ${MANIFESTIMAGE}:arm32v7-3.9 --os linux --arch arm
@@ -722,21 +808,28 @@ pipeline {
722808 docker manifest create ${MANIFESTIMAGE}:${EXT_RELEASE_TAG} ${MANIFESTIMAGE}:amd64-${EXT_RELEASE_TAG} ${MANIFESTIMAGE}:arm32v7-${EXT_RELEASE_TAG} ${MANIFESTIMAGE}:arm64v8-${EXT_RELEASE_TAG}
723809 docker manifest annotate ${MANIFESTIMAGE}:${EXT_RELEASE_TAG} ${MANIFESTIMAGE}:arm32v7-${EXT_RELEASE_TAG} --os linux --arch arm
724810 docker manifest annotate ${MANIFESTIMAGE}:${EXT_RELEASE_TAG} ${MANIFESTIMAGE}:arm64v8-${EXT_RELEASE_TAG} --os linux --arch arm64 --variant v8
811+ docker manifest push --purge ${MANIFESTIMAGE}:${SEMVER} || :
812+ docker manifest create ${MANIFESTIMAGE}:${SEMVER} ${MANIFESTIMAGE}:amd64-${SEMVER} ${MANIFESTIMAGE}:arm32v7-${SEMVER} ${MANIFESTIMAGE}:arm64v8-${SEMVER}
813+ docker manifest annotate ${MANIFESTIMAGE}:${SEMVER} ${MANIFESTIMAGE}:arm32v7-${SEMVER} --os linux --arch arm
814+ docker manifest annotate ${MANIFESTIMAGE}:${SEMVER} ${MANIFESTIMAGE}:arm64v8-${SEMVER} --os linux --arch arm64 --variant v8
725815 docker manifest push --purge ${MANIFESTIMAGE}:3.9
726816 docker manifest push --purge ${MANIFESTIMAGE}:${META_TAG}
727817 docker manifest push --purge ${MANIFESTIMAGE}:${EXT_RELEASE_TAG}
818+ docker manifest push --purge ${MANIFESTIMAGE}:${SEMVER}
728819 done
729820 '''
730821 }
731822 sh ''' #! /bin/bash
732- for DELETEIMAGE in "${GITHUBIMAGE}" "${GITLABIMAGE}" "${IMAGE}"; do
823+ for DELETEIMAGE in "${GITHUBIMAGE}" "${GITLABIMAGE}" "${QUAYIMAGE}" "${ IMAGE}"; do
733824 docker rmi \
734825 ${DELETEIMAGE}:arm32v7-${META_TAG} \
735826 ${DELETEIMAGE}:arm32v7-3.9 \
736827 ${DELETEIMAGE}:arm32v7-${EXT_RELEASE_TAG} \
828+ ${DELETEIMAGE}:arm32v7-${SEMVER} \
737829 ${DELETEIMAGE}:arm64v8-${META_TAG} \
738830 ${DELETEIMAGE}:arm64v8-3.9 \
739- ${DELETEIMAGE}:arm64v8-${EXT_RELEASE_TAG} || :
831+ ${DELETEIMAGE}:arm64v8-${EXT_RELEASE_TAG} \
832+ ${DELETEIMAGE}:arm64v8-${SEMVER} || :
740833 done
741834 docker rmi \
742835 ghcr.io/linuxserver/lsiodev-buildcache:arm32v7-${COMMIT_SHA}-${BUILD_NUMBER} \
0 commit comments