@@ -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
BUILD_VERSION_ARG = ' FILEZILLA_VERSION'
20
21
LS_USER = ' linuxserver'
21
22
LS_REPO = ' docker-filezilla'
@@ -120,6 +121,23 @@ pipeline {
120
121
env. EXT_RELEASE_CLEAN = sh(
121
122
script : ''' echo ${EXT_RELEASE} | sed 's/[~,%@+;:/]//g' ''' ,
122
123
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} " )
123
141
}
124
142
}
125
143
}
@@ -134,6 +152,7 @@ pipeline {
134
152
env. IMAGE = env. DOCKERHUB_IMAGE
135
153
env. GITHUBIMAGE = ' ghcr.io/' + env. LS_USER + ' /' + env. CONTAINER_NAME
136
154
env. GITLABIMAGE = ' registry.gitlab.com/linuxserver.io/' + env. LS_REPO + ' /' + env. CONTAINER_NAME
155
+ env. QUAYIMAGE = ' quay.io/linuxserver.io/' + env. CONTAINER_NAME
137
156
if (env. MULTIARCH == ' true' ) {
138
157
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
139
158
} else {
@@ -156,6 +175,7 @@ pipeline {
156
175
env. IMAGE = env. DEV_DOCKERHUB_IMAGE
157
176
env. GITHUBIMAGE = ' ghcr.io/' + env. LS_USER + ' /lsiodev-' + env. CONTAINER_NAME
158
177
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
159
179
if (env. MULTIARCH == ' true' ) {
160
180
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
161
181
} else {
@@ -178,6 +198,7 @@ pipeline {
178
198
env. IMAGE = env. PR_DOCKERHUB_IMAGE
179
199
env. GITHUBIMAGE = ' ghcr.io/' + env. LS_USER + ' /lspipepr-' + env. CONTAINER_NAME
180
200
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
181
202
if (env. MULTIARCH == ' true' ) {
182
203
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
183
204
} else {
@@ -373,14 +394,56 @@ pipeline {
373
394
"visibility":"public"}' '''
374
395
}
375
396
}
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
+ }
376
439
/* ###############
377
440
Build Container
378
441
############### */
379
442
// Build Docker container for push to LS Repo
380
443
stage(' Build-Single' ) {
381
444
when {
382
445
expression {
383
- env. MULTIARCH == ' false' || params. PACKAGE_CHECK == ' true'
446
+ env. MULTIARCH == ' false' || params. PACKAGE_CHECK == ' true'
384
447
}
385
448
environment name : ' EXIT_STATUS' , value : ' '
386
449
}
@@ -674,6 +737,12 @@ pipeline {
674
737
credentialsId : ' 3f9ba4d5-100d-45b0-a3c4-633fd6061207' ,
675
738
usernameVariable : ' DOCKERUSER' ,
676
739
passwordVariable : ' DOCKERPASS'
740
+ ],
741
+ [
742
+ $class : ' UsernamePasswordMultiBinding' ,
743
+ credentialsId : ' Quay.io-Robot' ,
744
+ usernameVariable : ' QUAYUSER' ,
745
+ passwordVariable : ' QUAYPASS'
677
746
]
678
747
]) {
679
748
retry(5 ) {
@@ -682,22 +751,26 @@ pipeline {
682
751
echo $DOCKERPASS | docker login -u $DOCKERUSER --password-stdin
683
752
echo $GITHUB_TOKEN | docker login ghcr.io -u LinuxServer-CI --password-stdin
684
753
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
686
756
docker tag ${IMAGE}:${META_TAG} ${PUSHIMAGE}:${META_TAG}
687
757
docker tag ${PUSHIMAGE}:${META_TAG} ${PUSHIMAGE}:latest
688
758
docker tag ${PUSHIMAGE}:${META_TAG} ${PUSHIMAGE}:${EXT_RELEASE_TAG}
759
+ docker tag ${PUSHIMAGE}:${META_TAG} ${PUSHIMAGE}:${SEMVER}
689
760
docker push ${PUSHIMAGE}:latest
690
761
docker push ${PUSHIMAGE}:${META_TAG}
691
762
docker push ${PUSHIMAGE}:${EXT_RELEASE_TAG}
763
+ docker push ${PUSHIMAGE}:${SEMVER}
692
764
done
693
765
'''
694
766
}
695
767
sh ''' #! /bin/bash
696
- for DELETEIMAGE in "${GITHUBIMAGE}" "${GITLABIMAGE}" "${IMAGE}"; do
768
+ for DELETEIMAGE in "${GITHUBIMAGE}" "${GITLABIMAGE}" "${QUAYIMAGE}" "${ IMAGE}"; do
697
769
docker rmi \
698
770
${DELETEIMAGE}:${META_TAG} \
699
771
${DELETEIMAGE}:${EXT_RELEASE_TAG} \
700
- ${DELETEIMAGE}:latest || :
772
+ ${DELETEIMAGE}:latest \
773
+ ${DELETEIMAGE}:${SEMVER} || :
701
774
done
702
775
'''
703
776
}
@@ -716,6 +789,12 @@ pipeline {
716
789
credentialsId : ' 3f9ba4d5-100d-45b0-a3c4-633fd6061207' ,
717
790
usernameVariable : ' DOCKERUSER' ,
718
791
passwordVariable : ' DOCKERPASS'
792
+ ],
793
+ [
794
+ $class : ' UsernamePasswordMultiBinding' ,
795
+ credentialsId : ' Quay.io-Robot' ,
796
+ usernameVariable : ' QUAYUSER' ,
797
+ passwordVariable : ' QUAYPASS'
719
798
]
720
799
]) {
721
800
retry(5 ) {
@@ -724,13 +803,14 @@ pipeline {
724
803
echo $DOCKERPASS | docker login -u $DOCKERUSER --password-stdin
725
804
echo $GITHUB_TOKEN | docker login ghcr.io -u LinuxServer-CI --password-stdin
726
805
echo $GITLAB_TOKEN | docker login registry.gitlab.com -u LinuxServer.io --password-stdin
806
+ echo $QUAYPASS | docker login quay.io -u $QUAYUSER --password-stdin
727
807
if [ "${CI}" == "false" ]; then
728
808
docker pull ghcr.io/linuxserver/lsiodev-buildcache:arm32v7-${COMMIT_SHA}-${BUILD_NUMBER}
729
809
docker pull ghcr.io/linuxserver/lsiodev-buildcache:arm64v8-${COMMIT_SHA}-${BUILD_NUMBER}
730
810
docker tag ghcr.io/linuxserver/lsiodev-buildcache:arm32v7-${COMMIT_SHA}-${BUILD_NUMBER} ${IMAGE}:arm32v7-${META_TAG}
731
811
docker tag ghcr.io/linuxserver/lsiodev-buildcache:arm64v8-${COMMIT_SHA}-${BUILD_NUMBER} ${IMAGE}:arm64v8-${META_TAG}
732
812
fi
733
- for MANIFESTIMAGE in "${IMAGE}" "${GITLABIMAGE}" "${GITHUBIMAGE}"; do
813
+ for MANIFESTIMAGE in "${IMAGE}" "${GITLABIMAGE}" "${GITHUBIMAGE}" "${QUAYIMAGE}" ; do
734
814
docker tag ${IMAGE}:amd64-${META_TAG} ${MANIFESTIMAGE}:amd64-${META_TAG}
735
815
docker tag ${IMAGE}:arm32v7-${META_TAG} ${MANIFESTIMAGE}:arm32v7-${META_TAG}
736
816
docker tag ${IMAGE}:arm64v8-${META_TAG} ${MANIFESTIMAGE}:arm64v8-${META_TAG}
@@ -740,6 +820,9 @@ pipeline {
740
820
docker tag ${MANIFESTIMAGE}:amd64-${META_TAG} ${MANIFESTIMAGE}:amd64-${EXT_RELEASE_TAG}
741
821
docker tag ${MANIFESTIMAGE}:arm32v7-${META_TAG} ${MANIFESTIMAGE}:arm32v7-${EXT_RELEASE_TAG}
742
822
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}
743
826
docker push ${MANIFESTIMAGE}:amd64-${META_TAG}
744
827
docker push ${MANIFESTIMAGE}:arm32v7-${META_TAG}
745
828
docker push ${MANIFESTIMAGE}:arm64v8-${META_TAG}
@@ -749,6 +832,9 @@ pipeline {
749
832
docker push ${MANIFESTIMAGE}:amd64-${EXT_RELEASE_TAG}
750
833
docker push ${MANIFESTIMAGE}:arm32v7-${EXT_RELEASE_TAG}
751
834
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}
752
838
docker manifest push --purge ${MANIFESTIMAGE}:latest || :
753
839
docker manifest create ${MANIFESTIMAGE}:latest ${MANIFESTIMAGE}:amd64-latest ${MANIFESTIMAGE}:arm32v7-latest ${MANIFESTIMAGE}:arm64v8-latest
754
840
docker manifest annotate ${MANIFESTIMAGE}:latest ${MANIFESTIMAGE}:arm32v7-latest --os linux --arch arm
@@ -761,24 +847,32 @@ pipeline {
761
847
docker manifest create ${MANIFESTIMAGE}:${EXT_RELEASE_TAG} ${MANIFESTIMAGE}:amd64-${EXT_RELEASE_TAG} ${MANIFESTIMAGE}:arm32v7-${EXT_RELEASE_TAG} ${MANIFESTIMAGE}:arm64v8-${EXT_RELEASE_TAG}
762
848
docker manifest annotate ${MANIFESTIMAGE}:${EXT_RELEASE_TAG} ${MANIFESTIMAGE}:arm32v7-${EXT_RELEASE_TAG} --os linux --arch arm
763
849
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
764
854
docker manifest push --purge ${MANIFESTIMAGE}:latest
765
855
docker manifest push --purge ${MANIFESTIMAGE}:${META_TAG}
766
856
docker manifest push --purge ${MANIFESTIMAGE}:${EXT_RELEASE_TAG}
857
+ docker manifest push --purge ${MANIFESTIMAGE}:${SEMVER}
767
858
done
768
859
'''
769
860
}
770
861
sh ''' #! /bin/bash
771
- for DELETEIMAGE in "${GITHUBIMAGE}" "${GITLABIMAGE}" "${IMAGE}"; do
862
+ for DELETEIMAGE in "${GITHUBIMAGE}" "${GITLABIMAGE}" "${QUAYIMAGE}" "${ IMAGE}"; do
772
863
docker rmi \
773
864
${DELETEIMAGE}:amd64-${META_TAG} \
774
865
${DELETEIMAGE}:amd64-latest \
775
866
${DELETEIMAGE}:amd64-${EXT_RELEASE_TAG} \
867
+ ${DELETEIMAGE}:amd64-${SEMVER} \
776
868
${DELETEIMAGE}:arm32v7-${META_TAG} \
777
869
${DELETEIMAGE}:arm32v7-latest \
778
870
${DELETEIMAGE}:arm32v7-${EXT_RELEASE_TAG} \
871
+ ${DELETEIMAGE}:arm32v7-${SEMVER} \
779
872
${DELETEIMAGE}:arm64v8-${META_TAG} \
780
873
${DELETEIMAGE}:arm64v8-latest \
781
- ${DELETEIMAGE}:arm64v8-${EXT_RELEASE_TAG} || :
874
+ ${DELETEIMAGE}:arm64v8-${EXT_RELEASE_TAG} \
875
+ ${DELETEIMAGE}:arm64v8-${SEMVER} || :
782
876
done
783
877
docker rmi \
784
878
ghcr.io/linuxserver/lsiodev-buildcache:arm32v7-${COMMIT_SHA}-${BUILD_NUMBER} \
0 commit comments