@@ -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 = ' code-server'
20
21
BUILD_VERSION_ARG = ' CODE_RELEASE'
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,13 +390,57 @@ 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 " focal"
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/code-server") | .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/code-server",\
412
+ "shortDescription":"example description",\
413
+ "libraryType":"docker",\
414
+ "website":"https://github.com/linuxserver/docker-code-server",\
415
+ "backendUrl":"https://ghcr.io/linuxserver/code-server",\
416
+ "publicUrl":"https://lscr.io/linuxserver/code-server"}' \
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
- environment name : ' MULTIARCH' , value : ' false'
441
+ expression {
442
+ env. MULTIARCH == ' false' || params. PACKAGE_CHECK == ' true'
443
+ }
379
444
environment name : ' EXIT_STATUS' , value : ' '
380
445
}
381
446
steps {
@@ -400,7 +465,10 @@ pipeline {
400
465
// Build MultiArch Docker containers for push to LS Repo
401
466
stage(' Build-Multi' ) {
402
467
when {
403
- environment name : ' MULTIARCH' , value : ' true'
468
+ allOf {
469
+ environment name : ' MULTIARCH' , value : ' true'
470
+ expression { params. PACKAGE_CHECK == ' false' }
471
+ }
404
472
environment name : ' EXIT_STATUS' , value : ' '
405
473
}
406
474
parallel {
@@ -505,7 +573,7 @@ pipeline {
505
573
sh ''' #! /bin/bash
506
574
set -e
507
575
TEMPDIR=$(mktemp -d)
508
- if [ "${MULTIARCH}" == "true" ]; then
576
+ if [ "${MULTIARCH}" == "true" ] && [ "${PACKAGE_CHECK}" == "false" ] ; then
509
577
LOCAL_CONTAINER=${IMAGE}:amd64-${META_TAG}
510
578
else
511
579
LOCAL_CONTAINER=${IMAGE}:${META_TAG}
@@ -566,7 +634,7 @@ pipeline {
566
634
steps {
567
635
sh ''' #! /bin/bash
568
636
echo "Packages were updated. Cleaning up the image and exiting."
569
- if [ "${MULTIARCH}" == "true" ]; then
637
+ if [ "${MULTIARCH}" == "true" ] && [ "${PACKAGE_CHECK}" == "false" ] ; then
570
638
docker rmi ${IMAGE}:amd64-${META_TAG}
571
639
else
572
640
docker rmi ${IMAGE}:${META_TAG}
@@ -590,7 +658,7 @@ pipeline {
590
658
steps {
591
659
sh ''' #! /bin/bash
592
660
echo "There are no package updates. Cleaning up the image and exiting."
593
- if [ "${MULTIARCH}" == "true" ]; then
661
+ if [ "${MULTIARCH}" == "true" ] && [ "${PACKAGE_CHECK}" == "false" ] ; then
594
662
docker rmi ${IMAGE}:amd64-${META_TAG}
595
663
else
596
664
docker rmi ${IMAGE}:${META_TAG}
@@ -665,6 +733,12 @@ pipeline {
665
733
credentialsId : ' 3f9ba4d5-100d-45b0-a3c4-633fd6061207' ,
666
734
usernameVariable : ' DOCKERUSER' ,
667
735
passwordVariable : ' DOCKERPASS'
736
+ ],
737
+ [
738
+ $class : ' UsernamePasswordMultiBinding' ,
739
+ credentialsId : ' Quay.io-Robot' ,
740
+ usernameVariable : ' QUAYUSER' ,
741
+ passwordVariable : ' QUAYPASS'
668
742
]
669
743
]) {
670
744
retry(5 ) {
@@ -673,22 +747,26 @@ pipeline {
673
747
echo $DOCKERPASS | docker login -u $DOCKERUSER --password-stdin
674
748
echo $GITHUB_TOKEN | docker login ghcr.io -u LinuxServer-CI --password-stdin
675
749
echo $GITLAB_TOKEN | docker login registry.gitlab.com -u LinuxServer.io --password-stdin
676
- 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
677
752
docker tag ${IMAGE}:${META_TAG} ${PUSHIMAGE}:${META_TAG}
678
753
docker tag ${PUSHIMAGE}:${META_TAG} ${PUSHIMAGE}:latest
679
754
docker tag ${PUSHIMAGE}:${META_TAG} ${PUSHIMAGE}:${EXT_RELEASE_TAG}
755
+ docker tag ${PUSHIMAGE}:${META_TAG} ${PUSHIMAGE}:${SEMVER}
680
756
docker push ${PUSHIMAGE}:latest
681
757
docker push ${PUSHIMAGE}:${META_TAG}
682
758
docker push ${PUSHIMAGE}:${EXT_RELEASE_TAG}
759
+ docker push ${PUSHIMAGE}:${SEMVER}
683
760
done
684
761
'''
685
762
}
686
763
sh ''' #! /bin/bash
687
- for DELETEIMAGE in "${GITHUBIMAGE}" "${GITLABIMAGE}" "${IMAGE}"; do
764
+ for DELETEIMAGE in "${GITHUBIMAGE}" "${GITLABIMAGE}" "${QUAYIMAGE}" "${ IMAGE}"; do
688
765
docker rmi \
689
766
${DELETEIMAGE}:${META_TAG} \
690
767
${DELETEIMAGE}:${EXT_RELEASE_TAG} \
691
- ${DELETEIMAGE}:latest || :
768
+ ${DELETEIMAGE}:latest \
769
+ ${DELETEIMAGE}:${SEMVER} || :
692
770
done
693
771
'''
694
772
}
@@ -707,6 +785,12 @@ pipeline {
707
785
credentialsId : ' 3f9ba4d5-100d-45b0-a3c4-633fd6061207' ,
708
786
usernameVariable : ' DOCKERUSER' ,
709
787
passwordVariable : ' DOCKERPASS'
788
+ ],
789
+ [
790
+ $class : ' UsernamePasswordMultiBinding' ,
791
+ credentialsId : ' Quay.io-Robot' ,
792
+ usernameVariable : ' QUAYUSER' ,
793
+ passwordVariable : ' QUAYPASS'
710
794
]
711
795
]) {
712
796
retry(5 ) {
@@ -715,13 +799,14 @@ pipeline {
715
799
echo $DOCKERPASS | docker login -u $DOCKERUSER --password-stdin
716
800
echo $GITHUB_TOKEN | docker login ghcr.io -u LinuxServer-CI --password-stdin
717
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
718
803
if [ "${CI}" == "false" ]; then
719
804
docker pull ghcr.io/linuxserver/lsiodev-buildcache:arm32v7-${COMMIT_SHA}-${BUILD_NUMBER}
720
805
docker pull ghcr.io/linuxserver/lsiodev-buildcache:arm64v8-${COMMIT_SHA}-${BUILD_NUMBER}
721
806
docker tag ghcr.io/linuxserver/lsiodev-buildcache:arm32v7-${COMMIT_SHA}-${BUILD_NUMBER} ${IMAGE}:arm32v7-${META_TAG}
722
807
docker tag ghcr.io/linuxserver/lsiodev-buildcache:arm64v8-${COMMIT_SHA}-${BUILD_NUMBER} ${IMAGE}:arm64v8-${META_TAG}
723
808
fi
724
- for MANIFESTIMAGE in "${IMAGE}" "${GITLABIMAGE}" "${GITHUBIMAGE}"; do
809
+ for MANIFESTIMAGE in "${IMAGE}" "${GITLABIMAGE}" "${GITHUBIMAGE}" "${QUAYIMAGE}" ; do
725
810
docker tag ${IMAGE}:amd64-${META_TAG} ${MANIFESTIMAGE}:amd64-${META_TAG}
726
811
docker tag ${IMAGE}:arm32v7-${META_TAG} ${MANIFESTIMAGE}:arm32v7-${META_TAG}
727
812
docker tag ${IMAGE}:arm64v8-${META_TAG} ${MANIFESTIMAGE}:arm64v8-${META_TAG}
@@ -731,6 +816,9 @@ pipeline {
731
816
docker tag ${MANIFESTIMAGE}:amd64-${META_TAG} ${MANIFESTIMAGE}:amd64-${EXT_RELEASE_TAG}
732
817
docker tag ${MANIFESTIMAGE}:arm32v7-${META_TAG} ${MANIFESTIMAGE}:arm32v7-${EXT_RELEASE_TAG}
733
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}
734
822
docker push ${MANIFESTIMAGE}:amd64-${META_TAG}
735
823
docker push ${MANIFESTIMAGE}:arm32v7-${META_TAG}
736
824
docker push ${MANIFESTIMAGE}:arm64v8-${META_TAG}
@@ -740,6 +828,9 @@ pipeline {
740
828
docker push ${MANIFESTIMAGE}:amd64-${EXT_RELEASE_TAG}
741
829
docker push ${MANIFESTIMAGE}:arm32v7-${EXT_RELEASE_TAG}
742
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}
743
834
docker manifest push --purge ${MANIFESTIMAGE}:latest || :
744
835
docker manifest create ${MANIFESTIMAGE}:latest ${MANIFESTIMAGE}:amd64-latest ${MANIFESTIMAGE}:arm32v7-latest ${MANIFESTIMAGE}:arm64v8-latest
745
836
docker manifest annotate ${MANIFESTIMAGE}:latest ${MANIFESTIMAGE}:arm32v7-latest --os linux --arch arm
@@ -752,24 +843,32 @@ pipeline {
752
843
docker manifest create ${MANIFESTIMAGE}:${EXT_RELEASE_TAG} ${MANIFESTIMAGE}:amd64-${EXT_RELEASE_TAG} ${MANIFESTIMAGE}:arm32v7-${EXT_RELEASE_TAG} ${MANIFESTIMAGE}:arm64v8-${EXT_RELEASE_TAG}
753
844
docker manifest annotate ${MANIFESTIMAGE}:${EXT_RELEASE_TAG} ${MANIFESTIMAGE}:arm32v7-${EXT_RELEASE_TAG} --os linux --arch arm
754
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
755
850
docker manifest push --purge ${MANIFESTIMAGE}:latest
756
851
docker manifest push --purge ${MANIFESTIMAGE}:${META_TAG}
757
852
docker manifest push --purge ${MANIFESTIMAGE}:${EXT_RELEASE_TAG}
853
+ docker manifest push --purge ${MANIFESTIMAGE}:${SEMVER}
758
854
done
759
855
'''
760
856
}
761
857
sh ''' #! /bin/bash
762
- for DELETEIMAGE in "${GITHUBIMAGE}" "${GITLABIMAGE}" "${IMAGE}"; do
858
+ for DELETEIMAGE in "${GITHUBIMAGE}" "${GITLABIMAGE}" "${QUAYIMAGE}" "${ IMAGE}"; do
763
859
docker rmi \
764
860
${DELETEIMAGE}:amd64-${META_TAG} \
765
861
${DELETEIMAGE}:amd64-latest \
766
862
${DELETEIMAGE}:amd64-${EXT_RELEASE_TAG} \
863
+ ${DELETEIMAGE}:amd64-${SEMVER} \
767
864
${DELETEIMAGE}:arm32v7-${META_TAG} \
768
865
${DELETEIMAGE}:arm32v7-latest \
769
866
${DELETEIMAGE}:arm32v7-${EXT_RELEASE_TAG} \
867
+ ${DELETEIMAGE}:arm32v7-${SEMVER} \
770
868
${DELETEIMAGE}:arm64v8-${META_TAG} \
771
869
${DELETEIMAGE}:arm64v8-latest \
772
- ${DELETEIMAGE}:arm64v8-${EXT_RELEASE_TAG} || :
870
+ ${DELETEIMAGE}:arm64v8-${EXT_RELEASE_TAG} \
871
+ ${DELETEIMAGE}:arm64v8-${SEMVER} || :
773
872
done
774
873
docker rmi \
775
874
ghcr.io/linuxserver/lsiodev-buildcache:arm32v7-${COMMIT_SHA}-${BUILD_NUMBER} \
0 commit comments