@@ -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
CONTAINER_NAME = ' sqlitebrowser'
20
21
BUILD_VERSION_ARG = ' SQLITEB_VERSION'
21
22
LS_USER = ' linuxserver'
@@ -116,6 +117,23 @@ pipeline {
116
117
env. EXT_RELEASE_CLEAN = sh(
117
118
script : ''' echo ${EXT_RELEASE} | sed 's/[~,%@+;:/]//g' ''' ,
118
119
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} " )
119
137
}
120
138
}
121
139
}
@@ -130,6 +148,7 @@ pipeline {
130
148
env. IMAGE = env. DOCKERHUB_IMAGE
131
149
env. GITHUBIMAGE = ' ghcr.io/' + env. LS_USER + ' /' + env. CONTAINER_NAME
132
150
env. GITLABIMAGE = ' registry.gitlab.com/linuxserver.io/' + env. LS_REPO + ' /' + env. CONTAINER_NAME
151
+ env. QUAYIMAGE = ' quay.io/linuxserver.io/' + env. CONTAINER_NAME
133
152
if (env. MULTIARCH == ' true' ) {
134
153
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
135
154
} else {
@@ -152,6 +171,7 @@ pipeline {
152
171
env. IMAGE = env. DEV_DOCKERHUB_IMAGE
153
172
env. GITHUBIMAGE = ' ghcr.io/' + env. LS_USER + ' /lsiodev-' + env. CONTAINER_NAME
154
173
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
155
175
if (env. MULTIARCH == ' true' ) {
156
176
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
157
177
} else {
@@ -174,6 +194,7 @@ pipeline {
174
194
env. IMAGE = env. PR_DOCKERHUB_IMAGE
175
195
env. GITHUBIMAGE = ' ghcr.io/' + env. LS_USER + ' /lspipepr-' + env. CONTAINER_NAME
176
196
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
177
198
if (env. MULTIARCH == ' true' ) {
178
199
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
179
200
} else {
@@ -369,14 +390,56 @@ pipeline {
369
390
"visibility":"public"}' '''
370
391
}
371
392
}
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
+ }
372
435
/* ###############
373
436
Build Container
374
437
############### */
375
438
// Build Docker container for push to LS Repo
376
439
stage(' Build-Single' ) {
377
440
when {
378
441
expression {
379
- env. MULTIARCH == ' false' || params. PACKAGE_CHECK == ' true'
442
+ env. MULTIARCH == ' false' || params. PACKAGE_CHECK == ' true'
380
443
}
381
444
environment name : ' EXIT_STATUS' , value : ' '
382
445
}
@@ -670,6 +733,12 @@ pipeline {
670
733
credentialsId : ' 3f9ba4d5-100d-45b0-a3c4-633fd6061207' ,
671
734
usernameVariable : ' DOCKERUSER' ,
672
735
passwordVariable : ' DOCKERPASS'
736
+ ],
737
+ [
738
+ $class : ' UsernamePasswordMultiBinding' ,
739
+ credentialsId : ' Quay.io-Robot' ,
740
+ usernameVariable : ' QUAYUSER' ,
741
+ passwordVariable : ' QUAYPASS'
673
742
]
674
743
]) {
675
744
retry(5 ) {
@@ -678,22 +747,26 @@ pipeline {
678
747
echo $DOCKERPASS | docker login -u $DOCKERUSER --password-stdin
679
748
echo $GITHUB_TOKEN | docker login ghcr.io -u LinuxServer-CI --password-stdin
680
749
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
682
752
docker tag ${IMAGE}:${META_TAG} ${PUSHIMAGE}:${META_TAG}
683
753
docker tag ${PUSHIMAGE}:${META_TAG} ${PUSHIMAGE}:latest
684
754
docker tag ${PUSHIMAGE}:${META_TAG} ${PUSHIMAGE}:${EXT_RELEASE_TAG}
755
+ docker tag ${PUSHIMAGE}:${META_TAG} ${PUSHIMAGE}:${SEMVER}
685
756
docker push ${PUSHIMAGE}:latest
686
757
docker push ${PUSHIMAGE}:${META_TAG}
687
758
docker push ${PUSHIMAGE}:${EXT_RELEASE_TAG}
759
+ docker push ${PUSHIMAGE}:${SEMVER}
688
760
done
689
761
'''
690
762
}
691
763
sh ''' #! /bin/bash
692
- for DELETEIMAGE in "${GITHUBIMAGE}" "${GITLABIMAGE}" "${IMAGE}"; do
764
+ for DELETEIMAGE in "${GITHUBIMAGE}" "${GITLABIMAGE}" "${QUAYIMAGE}" "${ IMAGE}"; do
693
765
docker rmi \
694
766
${DELETEIMAGE}:${META_TAG} \
695
767
${DELETEIMAGE}:${EXT_RELEASE_TAG} \
696
- ${DELETEIMAGE}:latest || :
768
+ ${DELETEIMAGE}:latest \
769
+ ${DELETEIMAGE}:${SEMVER} || :
697
770
done
698
771
'''
699
772
}
@@ -712,6 +785,12 @@ pipeline {
712
785
credentialsId : ' 3f9ba4d5-100d-45b0-a3c4-633fd6061207' ,
713
786
usernameVariable : ' DOCKERUSER' ,
714
787
passwordVariable : ' DOCKERPASS'
788
+ ],
789
+ [
790
+ $class : ' UsernamePasswordMultiBinding' ,
791
+ credentialsId : ' Quay.io-Robot' ,
792
+ usernameVariable : ' QUAYUSER' ,
793
+ passwordVariable : ' QUAYPASS'
715
794
]
716
795
]) {
717
796
retry(5 ) {
@@ -720,13 +799,14 @@ pipeline {
720
799
echo $DOCKERPASS | docker login -u $DOCKERUSER --password-stdin
721
800
echo $GITHUB_TOKEN | docker login ghcr.io -u LinuxServer-CI --password-stdin
722
801
echo $GITLAB_TOKEN | docker login registry.gitlab.com -u LinuxServer.io --password-stdin
802
+ echo $QUAYPASS | docker login quay.io -u $QUAYUSER --password-stdin
723
803
if [ "${CI}" == "false" ]; then
724
804
docker pull ghcr.io/linuxserver/lsiodev-buildcache:arm32v7-${COMMIT_SHA}-${BUILD_NUMBER}
725
805
docker pull ghcr.io/linuxserver/lsiodev-buildcache:arm64v8-${COMMIT_SHA}-${BUILD_NUMBER}
726
806
docker tag ghcr.io/linuxserver/lsiodev-buildcache:arm32v7-${COMMIT_SHA}-${BUILD_NUMBER} ${IMAGE}:arm32v7-${META_TAG}
727
807
docker tag ghcr.io/linuxserver/lsiodev-buildcache:arm64v8-${COMMIT_SHA}-${BUILD_NUMBER} ${IMAGE}:arm64v8-${META_TAG}
728
808
fi
729
- for MANIFESTIMAGE in "${IMAGE}" "${GITLABIMAGE}" "${GITHUBIMAGE}"; do
809
+ for MANIFESTIMAGE in "${IMAGE}" "${GITLABIMAGE}" "${GITHUBIMAGE}" "${QUAYIMAGE}" ; do
730
810
docker tag ${IMAGE}:amd64-${META_TAG} ${MANIFESTIMAGE}:amd64-${META_TAG}
731
811
docker tag ${IMAGE}:arm32v7-${META_TAG} ${MANIFESTIMAGE}:arm32v7-${META_TAG}
732
812
docker tag ${IMAGE}:arm64v8-${META_TAG} ${MANIFESTIMAGE}:arm64v8-${META_TAG}
@@ -736,6 +816,9 @@ pipeline {
736
816
docker tag ${MANIFESTIMAGE}:amd64-${META_TAG} ${MANIFESTIMAGE}:amd64-${EXT_RELEASE_TAG}
737
817
docker tag ${MANIFESTIMAGE}:arm32v7-${META_TAG} ${MANIFESTIMAGE}:arm32v7-${EXT_RELEASE_TAG}
738
818
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}
739
822
docker push ${MANIFESTIMAGE}:amd64-${META_TAG}
740
823
docker push ${MANIFESTIMAGE}:arm32v7-${META_TAG}
741
824
docker push ${MANIFESTIMAGE}:arm64v8-${META_TAG}
@@ -745,6 +828,9 @@ pipeline {
745
828
docker push ${MANIFESTIMAGE}:amd64-${EXT_RELEASE_TAG}
746
829
docker push ${MANIFESTIMAGE}:arm32v7-${EXT_RELEASE_TAG}
747
830
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}
748
834
docker manifest push --purge ${MANIFESTIMAGE}:latest || :
749
835
docker manifest create ${MANIFESTIMAGE}:latest ${MANIFESTIMAGE}:amd64-latest ${MANIFESTIMAGE}:arm32v7-latest ${MANIFESTIMAGE}:arm64v8-latest
750
836
docker manifest annotate ${MANIFESTIMAGE}:latest ${MANIFESTIMAGE}:arm32v7-latest --os linux --arch arm
@@ -757,24 +843,32 @@ pipeline {
757
843
docker manifest create ${MANIFESTIMAGE}:${EXT_RELEASE_TAG} ${MANIFESTIMAGE}:amd64-${EXT_RELEASE_TAG} ${MANIFESTIMAGE}:arm32v7-${EXT_RELEASE_TAG} ${MANIFESTIMAGE}:arm64v8-${EXT_RELEASE_TAG}
758
844
docker manifest annotate ${MANIFESTIMAGE}:${EXT_RELEASE_TAG} ${MANIFESTIMAGE}:arm32v7-${EXT_RELEASE_TAG} --os linux --arch arm
759
845
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
760
850
docker manifest push --purge ${MANIFESTIMAGE}:latest
761
851
docker manifest push --purge ${MANIFESTIMAGE}:${META_TAG}
762
852
docker manifest push --purge ${MANIFESTIMAGE}:${EXT_RELEASE_TAG}
853
+ docker manifest push --purge ${MANIFESTIMAGE}:${SEMVER}
763
854
done
764
855
'''
765
856
}
766
857
sh ''' #! /bin/bash
767
- for DELETEIMAGE in "${GITHUBIMAGE}" "${GITLABIMAGE}" "${IMAGE}"; do
858
+ for DELETEIMAGE in "${GITHUBIMAGE}" "${GITLABIMAGE}" "${QUAYIMAGE}" "${ IMAGE}"; do
768
859
docker rmi \
769
860
${DELETEIMAGE}:amd64-${META_TAG} \
770
861
${DELETEIMAGE}:amd64-latest \
771
862
${DELETEIMAGE}:amd64-${EXT_RELEASE_TAG} \
863
+ ${DELETEIMAGE}:amd64-${SEMVER} \
772
864
${DELETEIMAGE}:arm32v7-${META_TAG} \
773
865
${DELETEIMAGE}:arm32v7-latest \
774
866
${DELETEIMAGE}:arm32v7-${EXT_RELEASE_TAG} \
867
+ ${DELETEIMAGE}:arm32v7-${SEMVER} \
775
868
${DELETEIMAGE}:arm64v8-${META_TAG} \
776
869
${DELETEIMAGE}:arm64v8-latest \
777
- ${DELETEIMAGE}:arm64v8-${EXT_RELEASE_TAG} || :
870
+ ${DELETEIMAGE}:arm64v8-${EXT_RELEASE_TAG} \
871
+ ${DELETEIMAGE}:arm64v8-${SEMVER} || :
778
872
done
779
873
docker rmi \
780
874
ghcr.io/linuxserver/lsiodev-buildcache:arm32v7-${COMMIT_SHA}-${BUILD_NUMBER} \
0 commit comments