@@ -16,6 +16,7 @@ pipeline {
16
16
GITHUB_TOKEN = credentials(' 498b4638-2d02-4ce5-832d-8a57d01d97ab' )
17
17
GITLAB_TOKEN = credentials(' b6f0f1dd-6952-4cf6-95d1-9c06380283f0' )
18
18
GITLAB_NAMESPACE = credentials(' gitlab-namespace-id' )
19
+ SCARF_TOKEN = credentials(' scarf_api_key' )
19
20
EXT_GIT_BRANCH = ' master'
20
21
EXT_USER = ' bookstackapp'
21
22
EXT_REPO = ' bookstack'
@@ -126,6 +127,23 @@ pipeline {
126
127
env. EXT_RELEASE_CLEAN = sh(
127
128
script : ''' echo ${EXT_RELEASE} | sed 's/[~,%@+;:/]//g' ''' ,
128
129
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} " )
129
147
}
130
148
}
131
149
}
@@ -140,6 +158,7 @@ pipeline {
140
158
env. IMAGE = env. DOCKERHUB_IMAGE
141
159
env. GITHUBIMAGE = ' ghcr.io/' + env. LS_USER + ' /' + env. CONTAINER_NAME
142
160
env. GITLABIMAGE = ' registry.gitlab.com/linuxserver.io/' + env. LS_REPO + ' /' + env. CONTAINER_NAME
161
+ env. QUAYIMAGE = ' quay.io/linuxserver.io/' + env. CONTAINER_NAME
143
162
if (env. MULTIARCH == ' true' ) {
144
163
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
145
164
} else {
@@ -162,6 +181,7 @@ pipeline {
162
181
env. IMAGE = env. DEV_DOCKERHUB_IMAGE
163
182
env. GITHUBIMAGE = ' ghcr.io/' + env. LS_USER + ' /lsiodev-' + env. CONTAINER_NAME
164
183
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
165
185
if (env. MULTIARCH == ' true' ) {
166
186
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
167
187
} else {
@@ -184,6 +204,7 @@ pipeline {
184
204
env. IMAGE = env. PR_DOCKERHUB_IMAGE
185
205
env. GITHUBIMAGE = ' ghcr.io/' + env. LS_USER + ' /lspipepr-' + env. CONTAINER_NAME
186
206
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
187
208
if (env. MULTIARCH == ' true' ) {
188
209
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
189
210
} else {
@@ -379,14 +400,56 @@ pipeline {
379
400
"visibility":"public"}' '''
380
401
}
381
402
}
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
+ }
382
445
/* ###############
383
446
Build Container
384
447
############### */
385
448
// Build Docker container for push to LS Repo
386
449
stage(' Build-Single' ) {
387
450
when {
388
451
expression {
389
- env. MULTIARCH == ' false' || params. PACKAGE_CHECK == ' true'
452
+ env. MULTIARCH == ' false' || params. PACKAGE_CHECK == ' true'
390
453
}
391
454
environment name : ' EXIT_STATUS' , value : ' '
392
455
}
@@ -680,6 +743,12 @@ pipeline {
680
743
credentialsId : ' 3f9ba4d5-100d-45b0-a3c4-633fd6061207' ,
681
744
usernameVariable : ' DOCKERUSER' ,
682
745
passwordVariable : ' DOCKERPASS'
746
+ ],
747
+ [
748
+ $class : ' UsernamePasswordMultiBinding' ,
749
+ credentialsId : ' Quay.io-Robot' ,
750
+ usernameVariable : ' QUAYUSER' ,
751
+ passwordVariable : ' QUAYPASS'
683
752
]
684
753
]) {
685
754
retry(5 ) {
@@ -688,22 +757,26 @@ pipeline {
688
757
echo $DOCKERPASS | docker login -u $DOCKERUSER --password-stdin
689
758
echo $GITHUB_TOKEN | docker login ghcr.io -u LinuxServer-CI --password-stdin
690
759
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
692
762
docker tag ${IMAGE}:${META_TAG} ${PUSHIMAGE}:${META_TAG}
693
763
docker tag ${PUSHIMAGE}:${META_TAG} ${PUSHIMAGE}:latest
694
764
docker tag ${PUSHIMAGE}:${META_TAG} ${PUSHIMAGE}:${EXT_RELEASE_TAG}
765
+ docker tag ${PUSHIMAGE}:${META_TAG} ${PUSHIMAGE}:${SEMVER}
695
766
docker push ${PUSHIMAGE}:latest
696
767
docker push ${PUSHIMAGE}:${META_TAG}
697
768
docker push ${PUSHIMAGE}:${EXT_RELEASE_TAG}
769
+ docker push ${PUSHIMAGE}:${SEMVER}
698
770
done
699
771
'''
700
772
}
701
773
sh ''' #! /bin/bash
702
- for DELETEIMAGE in "${GITHUBIMAGE}" "${GITLABIMAGE}" "${IMAGE}"; do
774
+ for DELETEIMAGE in "${GITHUBIMAGE}" "${GITLABIMAGE}" "${QUAYIMAGE}" "${ IMAGE}"; do
703
775
docker rmi \
704
776
${DELETEIMAGE}:${META_TAG} \
705
777
${DELETEIMAGE}:${EXT_RELEASE_TAG} \
706
- ${DELETEIMAGE}:latest || :
778
+ ${DELETEIMAGE}:latest \
779
+ ${DELETEIMAGE}:${SEMVER} || :
707
780
done
708
781
'''
709
782
}
@@ -722,6 +795,12 @@ pipeline {
722
795
credentialsId : ' 3f9ba4d5-100d-45b0-a3c4-633fd6061207' ,
723
796
usernameVariable : ' DOCKERUSER' ,
724
797
passwordVariable : ' DOCKERPASS'
798
+ ],
799
+ [
800
+ $class : ' UsernamePasswordMultiBinding' ,
801
+ credentialsId : ' Quay.io-Robot' ,
802
+ usernameVariable : ' QUAYUSER' ,
803
+ passwordVariable : ' QUAYPASS'
725
804
]
726
805
]) {
727
806
retry(5 ) {
@@ -730,13 +809,14 @@ pipeline {
730
809
echo $DOCKERPASS | docker login -u $DOCKERUSER --password-stdin
731
810
echo $GITHUB_TOKEN | docker login ghcr.io -u LinuxServer-CI --password-stdin
732
811
echo $GITLAB_TOKEN | docker login registry.gitlab.com -u LinuxServer.io --password-stdin
812
+ echo $QUAYPASS | docker login quay.io -u $QUAYUSER --password-stdin
733
813
if [ "${CI}" == "false" ]; then
734
814
docker pull ghcr.io/linuxserver/lsiodev-buildcache:arm32v7-${COMMIT_SHA}-${BUILD_NUMBER}
735
815
docker pull ghcr.io/linuxserver/lsiodev-buildcache:arm64v8-${COMMIT_SHA}-${BUILD_NUMBER}
736
816
docker tag ghcr.io/linuxserver/lsiodev-buildcache:arm32v7-${COMMIT_SHA}-${BUILD_NUMBER} ${IMAGE}:arm32v7-${META_TAG}
737
817
docker tag ghcr.io/linuxserver/lsiodev-buildcache:arm64v8-${COMMIT_SHA}-${BUILD_NUMBER} ${IMAGE}:arm64v8-${META_TAG}
738
818
fi
739
- for MANIFESTIMAGE in "${IMAGE}" "${GITLABIMAGE}" "${GITHUBIMAGE}"; do
819
+ for MANIFESTIMAGE in "${IMAGE}" "${GITLABIMAGE}" "${GITHUBIMAGE}" "${QUAYIMAGE}" ; do
740
820
docker tag ${IMAGE}:amd64-${META_TAG} ${MANIFESTIMAGE}:amd64-${META_TAG}
741
821
docker tag ${IMAGE}:arm32v7-${META_TAG} ${MANIFESTIMAGE}:arm32v7-${META_TAG}
742
822
docker tag ${IMAGE}:arm64v8-${META_TAG} ${MANIFESTIMAGE}:arm64v8-${META_TAG}
@@ -746,6 +826,9 @@ pipeline {
746
826
docker tag ${MANIFESTIMAGE}:amd64-${META_TAG} ${MANIFESTIMAGE}:amd64-${EXT_RELEASE_TAG}
747
827
docker tag ${MANIFESTIMAGE}:arm32v7-${META_TAG} ${MANIFESTIMAGE}:arm32v7-${EXT_RELEASE_TAG}
748
828
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}
749
832
docker push ${MANIFESTIMAGE}:amd64-${META_TAG}
750
833
docker push ${MANIFESTIMAGE}:arm32v7-${META_TAG}
751
834
docker push ${MANIFESTIMAGE}:arm64v8-${META_TAG}
@@ -755,6 +838,9 @@ pipeline {
755
838
docker push ${MANIFESTIMAGE}:amd64-${EXT_RELEASE_TAG}
756
839
docker push ${MANIFESTIMAGE}:arm32v7-${EXT_RELEASE_TAG}
757
840
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}
758
844
docker manifest push --purge ${MANIFESTIMAGE}:latest || :
759
845
docker manifest create ${MANIFESTIMAGE}:latest ${MANIFESTIMAGE}:amd64-latest ${MANIFESTIMAGE}:arm32v7-latest ${MANIFESTIMAGE}:arm64v8-latest
760
846
docker manifest annotate ${MANIFESTIMAGE}:latest ${MANIFESTIMAGE}:arm32v7-latest --os linux --arch arm
@@ -767,24 +853,32 @@ pipeline {
767
853
docker manifest create ${MANIFESTIMAGE}:${EXT_RELEASE_TAG} ${MANIFESTIMAGE}:amd64-${EXT_RELEASE_TAG} ${MANIFESTIMAGE}:arm32v7-${EXT_RELEASE_TAG} ${MANIFESTIMAGE}:arm64v8-${EXT_RELEASE_TAG}
768
854
docker manifest annotate ${MANIFESTIMAGE}:${EXT_RELEASE_TAG} ${MANIFESTIMAGE}:arm32v7-${EXT_RELEASE_TAG} --os linux --arch arm
769
855
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
770
860
docker manifest push --purge ${MANIFESTIMAGE}:latest
771
861
docker manifest push --purge ${MANIFESTIMAGE}:${META_TAG}
772
862
docker manifest push --purge ${MANIFESTIMAGE}:${EXT_RELEASE_TAG}
863
+ docker manifest push --purge ${MANIFESTIMAGE}:${SEMVER}
773
864
done
774
865
'''
775
866
}
776
867
sh ''' #! /bin/bash
777
- for DELETEIMAGE in "${GITHUBIMAGE}" "${GITLABIMAGE}" "${IMAGE}"; do
868
+ for DELETEIMAGE in "${GITHUBIMAGE}" "${GITLABIMAGE}" "${QUAYIMAGE}" "${ IMAGE}"; do
778
869
docker rmi \
779
870
${DELETEIMAGE}:amd64-${META_TAG} \
780
871
${DELETEIMAGE}:amd64-latest \
781
872
${DELETEIMAGE}:amd64-${EXT_RELEASE_TAG} \
873
+ ${DELETEIMAGE}:amd64-${SEMVER} \
782
874
${DELETEIMAGE}:arm32v7-${META_TAG} \
783
875
${DELETEIMAGE}:arm32v7-latest \
784
876
${DELETEIMAGE}:arm32v7-${EXT_RELEASE_TAG} \
877
+ ${DELETEIMAGE}:arm32v7-${SEMVER} \
785
878
${DELETEIMAGE}:arm64v8-${META_TAG} \
786
879
${DELETEIMAGE}:arm64v8-latest \
787
- ${DELETEIMAGE}:arm64v8-${EXT_RELEASE_TAG} || :
880
+ ${DELETEIMAGE}:arm64v8-${EXT_RELEASE_TAG} \
881
+ ${DELETEIMAGE}:arm64v8-${SEMVER} || :
788
882
done
789
883
docker rmi \
790
884
ghcr.io/linuxserver/lsiodev-buildcache:arm32v7-${COMMIT_SHA}-${BUILD_NUMBER} \
0 commit comments