@@ -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_RELEASE_TYPE = ' pip_version'
20
21
EXT_PIP = ' python-ldap'
21
22
BUILD_VERSION_ARG = ' LDAP_VERSION'
@@ -117,6 +118,23 @@ pipeline {
117
118
env. EXT_RELEASE_CLEAN = sh(
118
119
script : ''' echo ${EXT_RELEASE} | sed 's/[~,%@+;:/]//g' ''' ,
119
120
returnStdout : true ). trim()
121
+
122
+ env. SEMVER = (new Date ()). format(' YYYY.MM.dd' )
123
+ def semver = env. EXT_RELEASE_CLEAN =~ / (\d +)\. (\d +)\. (\d +)$/
124
+ if (semver. find()) {
125
+ env. SEMVER = " ${ semver[0][1]} .${ semver[0][2]} .${ semver[0][3]} "
126
+ } else {
127
+ semver = env. EXT_RELEASE_CLEAN =~ / (\d +)\. (\d +)(?:\. (\d +))?(.*)$/
128
+ if (semver. find()) {
129
+ if (semver[0 ][3 ]) {
130
+ env. SEMVER = " ${ semver[0][1]} .${ semver[0][2]} .${ semver[0][3]} "
131
+ } else if (! semver[0 ][3 ] && ! semver[0 ][4 ]) {
132
+ env. SEMVER = " ${ semver[0][1]} .${ semver[0][2]} .${ (new Date()).format('YYYYMMdd')} "
133
+ }
134
+ }
135
+ }
136
+
137
+ println (" SEMVER: ${ env.SEMVER} " )
120
138
}
121
139
}
122
140
}
@@ -131,6 +149,7 @@ pipeline {
131
149
env. IMAGE = env. DOCKERHUB_IMAGE
132
150
env. GITHUBIMAGE = ' ghcr.io/' + env. LS_USER + ' /' + env. CONTAINER_NAME
133
151
env. GITLABIMAGE = ' registry.gitlab.com/linuxserver.io/' + env. LS_REPO + ' /' + env. CONTAINER_NAME
152
+ env. QUAYIMAGE = ' quay.io/linuxserver.io/' + env. CONTAINER_NAME
134
153
if (env. MULTIARCH == ' true' ) {
135
154
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
136
155
} else {
@@ -153,6 +172,7 @@ pipeline {
153
172
env. IMAGE = env. DEV_DOCKERHUB_IMAGE
154
173
env. GITHUBIMAGE = ' ghcr.io/' + env. LS_USER + ' /lsiodev-' + env. CONTAINER_NAME
155
174
env. GITLABIMAGE = ' registry.gitlab.com/linuxserver.io/' + env. LS_REPO + ' /lsiodev-' + env. CONTAINER_NAME
175
+ env. QUAYIMAGE = ' quay.io/linuxserver.io/lsiodev-' + env. CONTAINER_NAME
156
176
if (env. MULTIARCH == ' true' ) {
157
177
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
158
178
} else {
@@ -175,6 +195,7 @@ pipeline {
175
195
env. IMAGE = env. PR_DOCKERHUB_IMAGE
176
196
env. GITHUBIMAGE = ' ghcr.io/' + env. LS_USER + ' /lspipepr-' + env. CONTAINER_NAME
177
197
env. GITLABIMAGE = ' registry.gitlab.com/linuxserver.io/' + env. LS_REPO + ' /lspipepr-' + env. CONTAINER_NAME
198
+ env. QUAYIMAGE = ' quay.io/linuxserver.io/lspipepr-' + env. CONTAINER_NAME
178
199
if (env. MULTIARCH == ' true' ) {
179
200
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
180
201
} else {
@@ -370,14 +391,56 @@ pipeline {
370
391
"visibility":"public"}' '''
371
392
}
372
393
}
394
+ /* #######################
395
+ Scarf.sh package registry
396
+ ####################### */
397
+ // Add package to Scarf.sh and set permissions
398
+ stage(" Scarf.sh package registry" ){
399
+ when {
400
+ branch " master"
401
+ environment name : ' EXIT_STATUS' , value : ' '
402
+ }
403
+ steps{
404
+ sh ''' #! /bin/bash
405
+ set -e
406
+ PACKAGE_UUID=$(curl -X GET -H "Authorization: Bearer ${SCARF_TOKEN}" https://scarf.sh/api/v1/packages | jq -r '.[] | select(.name=="linuxserver/ldap-auth") | .uuid')
407
+ if [ -z "${PACKAGE_UUID}" ]; then
408
+ echo "Adding package to Scarf.sh"
409
+ PACKAGE_UUID=$(curl -sX POST https://scarf.sh/api/v1/packages \
410
+ -H "Authorization: Bearer ${SCARF_TOKEN}" \
411
+ -H "Content-Type: application/json" \
412
+ -d '{"name":"linuxserver/ldap-auth",\
413
+ "shortDescription":"example description",\
414
+ "libraryType":"docker",\
415
+ "website":"https://github.com/linuxserver/docker-ldap-auth",\
416
+ "backendUrl":"https://ghcr.io/linuxserver/ldap-auth",\
417
+ "publicUrl":"https://lscr.io/linuxserver/ldap-auth"}' \
418
+ | jq -r .uuid)
419
+ else
420
+ echo "Package already exists on Scarf.sh"
421
+ fi
422
+ echo "Setting permissions on Scarf.sh for package ${PACKAGE_UUID}"
423
+ curl -X POST https://scarf.sh/api/v1/packages/${PACKAGE_UUID}/permissions \
424
+ -H "Authorization: Bearer ${SCARF_TOKEN}" \
425
+ -H "Content-Type: application/json" \
426
+ -d '[{"userQuery":"Spad","permissionLevel":"admin"},\
427
+ {"userQuery":"roxedus","permissionLevel":"admin"},\
428
+ {"userQuery":"nemchik","permissionLevel":"admin"},\
429
+ {"userQuery":"driz","permissionLevel":"admin"},\
430
+ {"userQuery":"aptalca","permissionLevel":"admin"},\
431
+ {"userQuery":"saarg","permissionLevel":"admin"},\
432
+ {"userQuery":"Stark","permissionLevel":"admin"}]'
433
+ '''
434
+ }
435
+ }
373
436
/* ###############
374
437
Build Container
375
438
############### */
376
439
// Build Docker container for push to LS Repo
377
440
stage(' Build-Single' ) {
378
441
when {
379
442
expression {
380
- env. MULTIARCH == ' false' || params. PACKAGE_CHECK == ' true'
443
+ env. MULTIARCH == ' false' || params. PACKAGE_CHECK == ' true'
381
444
}
382
445
environment name : ' EXIT_STATUS' , value : ' '
383
446
}
@@ -671,6 +734,12 @@ pipeline {
671
734
credentialsId : ' 3f9ba4d5-100d-45b0-a3c4-633fd6061207' ,
672
735
usernameVariable : ' DOCKERUSER' ,
673
736
passwordVariable : ' DOCKERPASS'
737
+ ],
738
+ [
739
+ $class : ' UsernamePasswordMultiBinding' ,
740
+ credentialsId : ' Quay.io-Robot' ,
741
+ usernameVariable : ' QUAYUSER' ,
742
+ passwordVariable : ' QUAYPASS'
674
743
]
675
744
]) {
676
745
retry(5 ) {
@@ -679,22 +748,26 @@ pipeline {
679
748
echo $DOCKERPASS | docker login -u $DOCKERUSER --password-stdin
680
749
echo $GITHUB_TOKEN | docker login ghcr.io -u LinuxServer-CI --password-stdin
681
750
echo $GITLAB_TOKEN | docker login registry.gitlab.com -u LinuxServer.io --password-stdin
682
- for PUSHIMAGE in "${GITHUBIMAGE}" "${GITLABIMAGE}" "${IMAGE}"; do
751
+ echo $QUAYPASS | docker login quay.io -u $QUAYUSER --password-stdin
752
+ for PUSHIMAGE in "${GITHUBIMAGE}" "${GITLABIMAGE}" "${QUAYIMAGE}" "${IMAGE}"; do
683
753
docker tag ${IMAGE}:${META_TAG} ${PUSHIMAGE}:${META_TAG}
684
754
docker tag ${PUSHIMAGE}:${META_TAG} ${PUSHIMAGE}:latest
685
755
docker tag ${PUSHIMAGE}:${META_TAG} ${PUSHIMAGE}:${EXT_RELEASE_TAG}
756
+ docker tag ${PUSHIMAGE}:${META_TAG} ${PUSHIMAGE}:${SEMVER}
686
757
docker push ${PUSHIMAGE}:latest
687
758
docker push ${PUSHIMAGE}:${META_TAG}
688
759
docker push ${PUSHIMAGE}:${EXT_RELEASE_TAG}
760
+ docker push ${PUSHIMAGE}:${SEMVER}
689
761
done
690
762
'''
691
763
}
692
764
sh ''' #! /bin/bash
693
- for DELETEIMAGE in "${GITHUBIMAGE}" "${GITLABIMAGE}" "${IMAGE}"; do
765
+ for DELETEIMAGE in "${GITHUBIMAGE}" "${GITLABIMAGE}" "${QUAYIMAGE}" "${ IMAGE}"; do
694
766
docker rmi \
695
767
${DELETEIMAGE}:${META_TAG} \
696
768
${DELETEIMAGE}:${EXT_RELEASE_TAG} \
697
- ${DELETEIMAGE}:latest || :
769
+ ${DELETEIMAGE}:latest \
770
+ ${DELETEIMAGE}:${SEMVER} || :
698
771
done
699
772
'''
700
773
}
@@ -713,6 +786,12 @@ pipeline {
713
786
credentialsId : ' 3f9ba4d5-100d-45b0-a3c4-633fd6061207' ,
714
787
usernameVariable : ' DOCKERUSER' ,
715
788
passwordVariable : ' DOCKERPASS'
789
+ ],
790
+ [
791
+ $class : ' UsernamePasswordMultiBinding' ,
792
+ credentialsId : ' Quay.io-Robot' ,
793
+ usernameVariable : ' QUAYUSER' ,
794
+ passwordVariable : ' QUAYPASS'
716
795
]
717
796
]) {
718
797
retry(5 ) {
@@ -721,13 +800,14 @@ pipeline {
721
800
echo $DOCKERPASS | docker login -u $DOCKERUSER --password-stdin
722
801
echo $GITHUB_TOKEN | docker login ghcr.io -u LinuxServer-CI --password-stdin
723
802
echo $GITLAB_TOKEN | docker login registry.gitlab.com -u LinuxServer.io --password-stdin
803
+ echo $QUAYPASS | docker login quay.io -u $QUAYUSER --password-stdin
724
804
if [ "${CI}" == "false" ]; then
725
805
docker pull ghcr.io/linuxserver/lsiodev-buildcache:arm32v7-${COMMIT_SHA}-${BUILD_NUMBER}
726
806
docker pull ghcr.io/linuxserver/lsiodev-buildcache:arm64v8-${COMMIT_SHA}-${BUILD_NUMBER}
727
807
docker tag ghcr.io/linuxserver/lsiodev-buildcache:arm32v7-${COMMIT_SHA}-${BUILD_NUMBER} ${IMAGE}:arm32v7-${META_TAG}
728
808
docker tag ghcr.io/linuxserver/lsiodev-buildcache:arm64v8-${COMMIT_SHA}-${BUILD_NUMBER} ${IMAGE}:arm64v8-${META_TAG}
729
809
fi
730
- for MANIFESTIMAGE in "${IMAGE}" "${GITLABIMAGE}" "${GITHUBIMAGE}"; do
810
+ for MANIFESTIMAGE in "${IMAGE}" "${GITLABIMAGE}" "${GITHUBIMAGE}" "${QUAYIMAGE}" ; do
731
811
docker tag ${IMAGE}:amd64-${META_TAG} ${MANIFESTIMAGE}:amd64-${META_TAG}
732
812
docker tag ${IMAGE}:arm32v7-${META_TAG} ${MANIFESTIMAGE}:arm32v7-${META_TAG}
733
813
docker tag ${IMAGE}:arm64v8-${META_TAG} ${MANIFESTIMAGE}:arm64v8-${META_TAG}
@@ -737,6 +817,9 @@ pipeline {
737
817
docker tag ${MANIFESTIMAGE}:amd64-${META_TAG} ${MANIFESTIMAGE}:amd64-${EXT_RELEASE_TAG}
738
818
docker tag ${MANIFESTIMAGE}:arm32v7-${META_TAG} ${MANIFESTIMAGE}:arm32v7-${EXT_RELEASE_TAG}
739
819
docker tag ${MANIFESTIMAGE}:arm64v8-${META_TAG} ${MANIFESTIMAGE}:arm64v8-${EXT_RELEASE_TAG}
820
+ docker tag ${MANIFESTIMAGE}:amd64-${META_TAG} ${MANIFESTIMAGE}:amd64-${SEMVER}
821
+ docker tag ${MANIFESTIMAGE}:arm32v7-${META_TAG} ${MANIFESTIMAGE}:arm32v7-${SEMVER}
822
+ docker tag ${MANIFESTIMAGE}:arm64v8-${META_TAG} ${MANIFESTIMAGE}:arm64v8-${SEMVER}
740
823
docker push ${MANIFESTIMAGE}:amd64-${META_TAG}
741
824
docker push ${MANIFESTIMAGE}:arm32v7-${META_TAG}
742
825
docker push ${MANIFESTIMAGE}:arm64v8-${META_TAG}
@@ -746,6 +829,9 @@ pipeline {
746
829
docker push ${MANIFESTIMAGE}:amd64-${EXT_RELEASE_TAG}
747
830
docker push ${MANIFESTIMAGE}:arm32v7-${EXT_RELEASE_TAG}
748
831
docker push ${MANIFESTIMAGE}:arm64v8-${EXT_RELEASE_TAG}
832
+ docker push ${MANIFESTIMAGE}:amd64-${SEMVER}
833
+ docker push ${MANIFESTIMAGE}:arm32v7-${SEMVER}
834
+ docker push ${MANIFESTIMAGE}:arm64v8-${SEMVER}
749
835
docker manifest push --purge ${MANIFESTIMAGE}:latest || :
750
836
docker manifest create ${MANIFESTIMAGE}:latest ${MANIFESTIMAGE}:amd64-latest ${MANIFESTIMAGE}:arm32v7-latest ${MANIFESTIMAGE}:arm64v8-latest
751
837
docker manifest annotate ${MANIFESTIMAGE}:latest ${MANIFESTIMAGE}:arm32v7-latest --os linux --arch arm
@@ -758,24 +844,32 @@ pipeline {
758
844
docker manifest create ${MANIFESTIMAGE}:${EXT_RELEASE_TAG} ${MANIFESTIMAGE}:amd64-${EXT_RELEASE_TAG} ${MANIFESTIMAGE}:arm32v7-${EXT_RELEASE_TAG} ${MANIFESTIMAGE}:arm64v8-${EXT_RELEASE_TAG}
759
845
docker manifest annotate ${MANIFESTIMAGE}:${EXT_RELEASE_TAG} ${MANIFESTIMAGE}:arm32v7-${EXT_RELEASE_TAG} --os linux --arch arm
760
846
docker manifest annotate ${MANIFESTIMAGE}:${EXT_RELEASE_TAG} ${MANIFESTIMAGE}:arm64v8-${EXT_RELEASE_TAG} --os linux --arch arm64 --variant v8
847
+ docker manifest push --purge ${MANIFESTIMAGE}:${SEMVER} || :
848
+ docker manifest create ${MANIFESTIMAGE}:${SEMVER} ${MANIFESTIMAGE}:amd64-${SEMVER} ${MANIFESTIMAGE}:arm32v7-${SEMVER} ${MANIFESTIMAGE}:arm64v8-${SEMVER}
849
+ docker manifest annotate ${MANIFESTIMAGE}:${SEMVER} ${MANIFESTIMAGE}:arm32v7-${SEMVER} --os linux --arch arm
850
+ docker manifest annotate ${MANIFESTIMAGE}:${SEMVER} ${MANIFESTIMAGE}:arm64v8-${SEMVER} --os linux --arch arm64 --variant v8
761
851
docker manifest push --purge ${MANIFESTIMAGE}:latest
762
852
docker manifest push --purge ${MANIFESTIMAGE}:${META_TAG}
763
853
docker manifest push --purge ${MANIFESTIMAGE}:${EXT_RELEASE_TAG}
854
+ docker manifest push --purge ${MANIFESTIMAGE}:${SEMVER}
764
855
done
765
856
'''
766
857
}
767
858
sh ''' #! /bin/bash
768
- for DELETEIMAGE in "${GITHUBIMAGE}" "${GITLABIMAGE}" "${IMAGE}"; do
859
+ for DELETEIMAGE in "${GITHUBIMAGE}" "${GITLABIMAGE}" "${QUAYIMAGE}" "${ IMAGE}"; do
769
860
docker rmi \
770
861
${DELETEIMAGE}:amd64-${META_TAG} \
771
862
${DELETEIMAGE}:amd64-latest \
772
863
${DELETEIMAGE}:amd64-${EXT_RELEASE_TAG} \
864
+ ${DELETEIMAGE}:amd64-${SEMVER} \
773
865
${DELETEIMAGE}:arm32v7-${META_TAG} \
774
866
${DELETEIMAGE}:arm32v7-latest \
775
867
${DELETEIMAGE}:arm32v7-${EXT_RELEASE_TAG} \
868
+ ${DELETEIMAGE}:arm32v7-${SEMVER} \
776
869
${DELETEIMAGE}:arm64v8-${META_TAG} \
777
870
${DELETEIMAGE}:arm64v8-latest \
778
- ${DELETEIMAGE}:arm64v8-${EXT_RELEASE_TAG} || :
871
+ ${DELETEIMAGE}:arm64v8-${EXT_RELEASE_TAG} \
872
+ ${DELETEIMAGE}:arm64v8-${SEMVER} || :
779
873
done
780
874
docker rmi \
781
875
ghcr.io/linuxserver/lsiodev-buildcache:arm32v7-${COMMIT_SHA}-${BUILD_NUMBER} \
0 commit comments