@@ -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 = ' FILEZILLA_VERSION'
2021 LS_USER = ' linuxserver'
2122 LS_REPO = ' docker-filezilla'
@@ -120,6 +121,23 @@ pipeline {
120121 env. EXT_RELEASE_CLEAN = sh(
121122 script : ''' echo ${EXT_RELEASE} | sed 's/[~,%@+;:/]//g' ''' ,
122123 returnStdout : true ). trim()
124+
125+ env. SEMVER = (new Date ()). format(' YYYY.MM.dd' )
126+ def semver = env. EXT_RELEASE_CLEAN =~ / (\d +)\. (\d +)\. (\d +)$/
127+ if (semver. find()) {
128+ env. SEMVER = " ${ semver[0][1]} .${ semver[0][2]} .${ semver[0][3]} "
129+ } else {
130+ semver = env. EXT_RELEASE_CLEAN =~ / (\d +)\. (\d +)(?:\. (\d +))?(.*)$/
131+ if (semver. find()) {
132+ if (semver[0 ][3 ]) {
133+ env. SEMVER = " ${ semver[0][1]} .${ semver[0][2]} .${ semver[0][3]} "
134+ } else if (! semver[0 ][3 ] && ! semver[0 ][4 ]) {
135+ env. SEMVER = " ${ semver[0][1]} .${ semver[0][2]} .${ (new Date()).format('YYYYMMdd')} "
136+ }
137+ }
138+ }
139+
140+ println (" SEMVER: ${ env.SEMVER} " )
123141 }
124142 }
125143 }
@@ -134,6 +152,7 @@ pipeline {
134152 env. IMAGE = env. DOCKERHUB_IMAGE
135153 env. GITHUBIMAGE = ' ghcr.io/' + env. LS_USER + ' /' + env. CONTAINER_NAME
136154 env. GITLABIMAGE = ' registry.gitlab.com/linuxserver.io/' + env. LS_REPO + ' /' + env. CONTAINER_NAME
155+ env. QUAYIMAGE = ' quay.io/linuxserver.io/' + env. CONTAINER_NAME
137156 if (env. MULTIARCH == ' true' ) {
138157 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
139158 } else {
@@ -156,6 +175,7 @@ pipeline {
156175 env. IMAGE = env. DEV_DOCKERHUB_IMAGE
157176 env. GITHUBIMAGE = ' ghcr.io/' + env. LS_USER + ' /lsiodev-' + env. CONTAINER_NAME
158177 env. GITLABIMAGE = ' registry.gitlab.com/linuxserver.io/' + env. LS_REPO + ' /lsiodev-' + env. CONTAINER_NAME
178+ env. QUAYIMAGE = ' quay.io/linuxserver.io/lsiodev-' + env. CONTAINER_NAME
159179 if (env. MULTIARCH == ' true' ) {
160180 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
161181 } else {
@@ -178,6 +198,7 @@ pipeline {
178198 env. IMAGE = env. PR_DOCKERHUB_IMAGE
179199 env. GITHUBIMAGE = ' ghcr.io/' + env. LS_USER + ' /lspipepr-' + env. CONTAINER_NAME
180200 env. GITLABIMAGE = ' registry.gitlab.com/linuxserver.io/' + env. LS_REPO + ' /lspipepr-' + env. CONTAINER_NAME
201+ env. QUAYIMAGE = ' quay.io/linuxserver.io/lspipepr-' + env. CONTAINER_NAME
181202 if (env. MULTIARCH == ' true' ) {
182203 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
183204 } else {
@@ -373,14 +394,56 @@ pipeline {
373394 "visibility":"public"}' '''
374395 }
375396 }
397+ /* #######################
398+ Scarf.sh package registry
399+ ####################### */
400+ // Add package to Scarf.sh and set permissions
401+ stage(" Scarf.sh package registry" ){
402+ when {
403+ branch " master"
404+ environment name : ' EXIT_STATUS' , value : ' '
405+ }
406+ steps{
407+ sh ''' #! /bin/bash
408+ set -e
409+ PACKAGE_UUID=$(curl -X GET -H "Authorization: Bearer ${SCARF_TOKEN}" https://scarf.sh/api/v1/packages | jq -r '.[] | select(.name=="linuxserver/filezilla") | .uuid')
410+ if [ -z "${PACKAGE_UUID}" ]; then
411+ echo "Adding package to Scarf.sh"
412+ PACKAGE_UUID=$(curl -sX POST https://scarf.sh/api/v1/packages \
413+ -H "Authorization: Bearer ${SCARF_TOKEN}" \
414+ -H "Content-Type: application/json" \
415+ -d '{"name":"linuxserver/filezilla",\
416+ "shortDescription":"example description",\
417+ "libraryType":"docker",\
418+ "website":"https://github.com/linuxserver/docker-filezilla",\
419+ "backendUrl":"https://ghcr.io/linuxserver/filezilla",\
420+ "publicUrl":"https://lscr.io/linuxserver/filezilla"}' \
421+ | jq -r .uuid)
422+ else
423+ echo "Package already exists on Scarf.sh"
424+ fi
425+ echo "Setting permissions on Scarf.sh for package ${PACKAGE_UUID}"
426+ curl -X POST https://scarf.sh/api/v1/packages/${PACKAGE_UUID}/permissions \
427+ -H "Authorization: Bearer ${SCARF_TOKEN}" \
428+ -H "Content-Type: application/json" \
429+ -d '[{"userQuery":"Spad","permissionLevel":"admin"},\
430+ {"userQuery":"roxedus","permissionLevel":"admin"},\
431+ {"userQuery":"nemchik","permissionLevel":"admin"},\
432+ {"userQuery":"driz","permissionLevel":"admin"},\
433+ {"userQuery":"aptalca","permissionLevel":"admin"},\
434+ {"userQuery":"saarg","permissionLevel":"admin"},\
435+ {"userQuery":"Stark","permissionLevel":"admin"}]'
436+ '''
437+ }
438+ }
376439 /* ###############
377440 Build Container
378441 ############### */
379442 // Build Docker container for push to LS Repo
380443 stage(' Build-Single' ) {
381444 when {
382445 expression {
383- env. MULTIARCH == ' false' || params. PACKAGE_CHECK == ' true'
446+ env. MULTIARCH == ' false' || params. PACKAGE_CHECK == ' true'
384447 }
385448 environment name : ' EXIT_STATUS' , value : ' '
386449 }
@@ -674,6 +737,12 @@ pipeline {
674737 credentialsId : ' 3f9ba4d5-100d-45b0-a3c4-633fd6061207' ,
675738 usernameVariable : ' DOCKERUSER' ,
676739 passwordVariable : ' DOCKERPASS'
740+ ],
741+ [
742+ $class : ' UsernamePasswordMultiBinding' ,
743+ credentialsId : ' Quay.io-Robot' ,
744+ usernameVariable : ' QUAYUSER' ,
745+ passwordVariable : ' QUAYPASS'
677746 ]
678747 ]) {
679748 retry(5 ) {
@@ -682,22 +751,26 @@ pipeline {
682751 echo $DOCKERPASS | docker login -u $DOCKERUSER --password-stdin
683752 echo $GITHUB_TOKEN | docker login ghcr.io -u LinuxServer-CI --password-stdin
684753 echo $GITLAB_TOKEN | docker login registry.gitlab.com -u LinuxServer.io --password-stdin
685- for PUSHIMAGE in "${GITHUBIMAGE}" "${GITLABIMAGE}" "${IMAGE}"; do
754+ echo $QUAYPASS | docker login quay.io -u $QUAYUSER --password-stdin
755+ for PUSHIMAGE in "${GITHUBIMAGE}" "${GITLABIMAGE}" "${QUAYIMAGE}" "${IMAGE}"; do
686756 docker tag ${IMAGE}:${META_TAG} ${PUSHIMAGE}:${META_TAG}
687757 docker tag ${PUSHIMAGE}:${META_TAG} ${PUSHIMAGE}:latest
688758 docker tag ${PUSHIMAGE}:${META_TAG} ${PUSHIMAGE}:${EXT_RELEASE_TAG}
759+ docker tag ${PUSHIMAGE}:${META_TAG} ${PUSHIMAGE}:${SEMVER}
689760 docker push ${PUSHIMAGE}:latest
690761 docker push ${PUSHIMAGE}:${META_TAG}
691762 docker push ${PUSHIMAGE}:${EXT_RELEASE_TAG}
763+ docker push ${PUSHIMAGE}:${SEMVER}
692764 done
693765 '''
694766 }
695767 sh ''' #! /bin/bash
696- for DELETEIMAGE in "${GITHUBIMAGE}" "${GITLABIMAGE}" "${IMAGE}"; do
768+ for DELETEIMAGE in "${GITHUBIMAGE}" "${GITLABIMAGE}" "${QUAYIMAGE}" "${ IMAGE}"; do
697769 docker rmi \
698770 ${DELETEIMAGE}:${META_TAG} \
699771 ${DELETEIMAGE}:${EXT_RELEASE_TAG} \
700- ${DELETEIMAGE}:latest || :
772+ ${DELETEIMAGE}:latest \
773+ ${DELETEIMAGE}:${SEMVER} || :
701774 done
702775 '''
703776 }
@@ -716,6 +789,12 @@ pipeline {
716789 credentialsId : ' 3f9ba4d5-100d-45b0-a3c4-633fd6061207' ,
717790 usernameVariable : ' DOCKERUSER' ,
718791 passwordVariable : ' DOCKERPASS'
792+ ],
793+ [
794+ $class : ' UsernamePasswordMultiBinding' ,
795+ credentialsId : ' Quay.io-Robot' ,
796+ usernameVariable : ' QUAYUSER' ,
797+ passwordVariable : ' QUAYPASS'
719798 ]
720799 ]) {
721800 retry(5 ) {
@@ -724,13 +803,14 @@ pipeline {
724803 echo $DOCKERPASS | docker login -u $DOCKERUSER --password-stdin
725804 echo $GITHUB_TOKEN | docker login ghcr.io -u LinuxServer-CI --password-stdin
726805 echo $GITLAB_TOKEN | docker login registry.gitlab.com -u LinuxServer.io --password-stdin
806+ echo $QUAYPASS | docker login quay.io -u $QUAYUSER --password-stdin
727807 if [ "${CI}" == "false" ]; then
728808 docker pull ghcr.io/linuxserver/lsiodev-buildcache:arm32v7-${COMMIT_SHA}-${BUILD_NUMBER}
729809 docker pull ghcr.io/linuxserver/lsiodev-buildcache:arm64v8-${COMMIT_SHA}-${BUILD_NUMBER}
730810 docker tag ghcr.io/linuxserver/lsiodev-buildcache:arm32v7-${COMMIT_SHA}-${BUILD_NUMBER} ${IMAGE}:arm32v7-${META_TAG}
731811 docker tag ghcr.io/linuxserver/lsiodev-buildcache:arm64v8-${COMMIT_SHA}-${BUILD_NUMBER} ${IMAGE}:arm64v8-${META_TAG}
732812 fi
733- for MANIFESTIMAGE in "${IMAGE}" "${GITLABIMAGE}" "${GITHUBIMAGE}"; do
813+ for MANIFESTIMAGE in "${IMAGE}" "${GITLABIMAGE}" "${GITHUBIMAGE}" "${QUAYIMAGE}" ; do
734814 docker tag ${IMAGE}:amd64-${META_TAG} ${MANIFESTIMAGE}:amd64-${META_TAG}
735815 docker tag ${IMAGE}:arm32v7-${META_TAG} ${MANIFESTIMAGE}:arm32v7-${META_TAG}
736816 docker tag ${IMAGE}:arm64v8-${META_TAG} ${MANIFESTIMAGE}:arm64v8-${META_TAG}
@@ -740,6 +820,9 @@ pipeline {
740820 docker tag ${MANIFESTIMAGE}:amd64-${META_TAG} ${MANIFESTIMAGE}:amd64-${EXT_RELEASE_TAG}
741821 docker tag ${MANIFESTIMAGE}:arm32v7-${META_TAG} ${MANIFESTIMAGE}:arm32v7-${EXT_RELEASE_TAG}
742822 docker tag ${MANIFESTIMAGE}:arm64v8-${META_TAG} ${MANIFESTIMAGE}:arm64v8-${EXT_RELEASE_TAG}
823+ docker tag ${MANIFESTIMAGE}:amd64-${META_TAG} ${MANIFESTIMAGE}:amd64-${SEMVER}
824+ docker tag ${MANIFESTIMAGE}:arm32v7-${META_TAG} ${MANIFESTIMAGE}:arm32v7-${SEMVER}
825+ docker tag ${MANIFESTIMAGE}:arm64v8-${META_TAG} ${MANIFESTIMAGE}:arm64v8-${SEMVER}
743826 docker push ${MANIFESTIMAGE}:amd64-${META_TAG}
744827 docker push ${MANIFESTIMAGE}:arm32v7-${META_TAG}
745828 docker push ${MANIFESTIMAGE}:arm64v8-${META_TAG}
@@ -749,6 +832,9 @@ pipeline {
749832 docker push ${MANIFESTIMAGE}:amd64-${EXT_RELEASE_TAG}
750833 docker push ${MANIFESTIMAGE}:arm32v7-${EXT_RELEASE_TAG}
751834 docker push ${MANIFESTIMAGE}:arm64v8-${EXT_RELEASE_TAG}
835+ docker push ${MANIFESTIMAGE}:amd64-${SEMVER}
836+ docker push ${MANIFESTIMAGE}:arm32v7-${SEMVER}
837+ docker push ${MANIFESTIMAGE}:arm64v8-${SEMVER}
752838 docker manifest push --purge ${MANIFESTIMAGE}:latest || :
753839 docker manifest create ${MANIFESTIMAGE}:latest ${MANIFESTIMAGE}:amd64-latest ${MANIFESTIMAGE}:arm32v7-latest ${MANIFESTIMAGE}:arm64v8-latest
754840 docker manifest annotate ${MANIFESTIMAGE}:latest ${MANIFESTIMAGE}:arm32v7-latest --os linux --arch arm
@@ -761,24 +847,32 @@ pipeline {
761847 docker manifest create ${MANIFESTIMAGE}:${EXT_RELEASE_TAG} ${MANIFESTIMAGE}:amd64-${EXT_RELEASE_TAG} ${MANIFESTIMAGE}:arm32v7-${EXT_RELEASE_TAG} ${MANIFESTIMAGE}:arm64v8-${EXT_RELEASE_TAG}
762848 docker manifest annotate ${MANIFESTIMAGE}:${EXT_RELEASE_TAG} ${MANIFESTIMAGE}:arm32v7-${EXT_RELEASE_TAG} --os linux --arch arm
763849 docker manifest annotate ${MANIFESTIMAGE}:${EXT_RELEASE_TAG} ${MANIFESTIMAGE}:arm64v8-${EXT_RELEASE_TAG} --os linux --arch arm64 --variant v8
850+ docker manifest push --purge ${MANIFESTIMAGE}:${SEMVER} || :
851+ docker manifest create ${MANIFESTIMAGE}:${SEMVER} ${MANIFESTIMAGE}:amd64-${SEMVER} ${MANIFESTIMAGE}:arm32v7-${SEMVER} ${MANIFESTIMAGE}:arm64v8-${SEMVER}
852+ docker manifest annotate ${MANIFESTIMAGE}:${SEMVER} ${MANIFESTIMAGE}:arm32v7-${SEMVER} --os linux --arch arm
853+ docker manifest annotate ${MANIFESTIMAGE}:${SEMVER} ${MANIFESTIMAGE}:arm64v8-${SEMVER} --os linux --arch arm64 --variant v8
764854 docker manifest push --purge ${MANIFESTIMAGE}:latest
765855 docker manifest push --purge ${MANIFESTIMAGE}:${META_TAG}
766856 docker manifest push --purge ${MANIFESTIMAGE}:${EXT_RELEASE_TAG}
857+ docker manifest push --purge ${MANIFESTIMAGE}:${SEMVER}
767858 done
768859 '''
769860 }
770861 sh ''' #! /bin/bash
771- for DELETEIMAGE in "${GITHUBIMAGE}" "${GITLABIMAGE}" "${IMAGE}"; do
862+ for DELETEIMAGE in "${GITHUBIMAGE}" "${GITLABIMAGE}" "${QUAYIMAGE}" "${ IMAGE}"; do
772863 docker rmi \
773864 ${DELETEIMAGE}:amd64-${META_TAG} \
774865 ${DELETEIMAGE}:amd64-latest \
775866 ${DELETEIMAGE}:amd64-${EXT_RELEASE_TAG} \
867+ ${DELETEIMAGE}:amd64-${SEMVER} \
776868 ${DELETEIMAGE}:arm32v7-${META_TAG} \
777869 ${DELETEIMAGE}:arm32v7-latest \
778870 ${DELETEIMAGE}:arm32v7-${EXT_RELEASE_TAG} \
871+ ${DELETEIMAGE}:arm32v7-${SEMVER} \
779872 ${DELETEIMAGE}:arm64v8-${META_TAG} \
780873 ${DELETEIMAGE}:arm64v8-latest \
781- ${DELETEIMAGE}:arm64v8-${EXT_RELEASE_TAG} || :
874+ ${DELETEIMAGE}:arm64v8-${EXT_RELEASE_TAG} \
875+ ${DELETEIMAGE}:arm64v8-${SEMVER} || :
782876 done
783877 docker rmi \
784878 ghcr.io/linuxserver/lsiodev-buildcache:arm32v7-${COMMIT_SHA}-${BUILD_NUMBER} \
0 commit comments