@@ -210,7 +210,7 @@ pipeline {
210210 env. GITLABIMAGE = ' registry.gitlab.com/linuxserver.io/' + env. LS_REPO + ' /' + env. CONTAINER_NAME
211211 env. QUAYIMAGE = ' quay.io/linuxserver.io/' + env. CONTAINER_NAME
212212 if (env. MULTIARCH == ' true' ) {
213- env. CI_TAGS = ' amd64-' + env. EXT_RELEASE_CLEAN + ' -ls' + env. LS_TAG_NUMBER + ' |arm64v8-' + env. EXT_RELEASE_CLEAN + ' -ls' + env. LS_TAG_NUMBER
213+ env. CI_TAGS = ' amd64-' + env. EXT_RELEASE_CLEAN + ' -ls' + env. LS_TAG_NUMBER + ' |riscv64- ' + env . EXT_RELEASE_CLEAN + ' -ls ' + env . LS_TAG_NUMBER + ' | arm64v8-' + env. EXT_RELEASE_CLEAN + ' -ls' + env. LS_TAG_NUMBER
214214 } else {
215215 env. CI_TAGS = env. EXT_RELEASE_CLEAN + ' -ls' + env. LS_TAG_NUMBER
216216 }
@@ -235,7 +235,7 @@ pipeline {
235235 env. GITLABIMAGE = ' registry.gitlab.com/linuxserver.io/' + env. LS_REPO + ' /lsiodev-' + env. CONTAINER_NAME
236236 env. QUAYIMAGE = ' quay.io/linuxserver.io/lsiodev-' + env. CONTAINER_NAME
237237 if (env. MULTIARCH == ' true' ) {
238- env. CI_TAGS = ' amd64-' + 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
238+ env. CI_TAGS = ' amd64-' + env. EXT_RELEASE_CLEAN + ' -pkg-' + env. PACKAGE_TAG + ' -dev-' + env. COMMIT_SHA + ' |riscv64- ' + 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
239239 } else {
240240 env. CI_TAGS = env. EXT_RELEASE_CLEAN + ' -pkg-' + env. PACKAGE_TAG + ' -dev-' + env. COMMIT_SHA
241241 }
@@ -260,7 +260,7 @@ pipeline {
260260 env. GITLABIMAGE = ' registry.gitlab.com/linuxserver.io/' + env. LS_REPO + ' /lspipepr-' + env. CONTAINER_NAME
261261 env. QUAYIMAGE = ' quay.io/linuxserver.io/lspipepr-' + env. CONTAINER_NAME
262262 if (env. MULTIARCH == ' true' ) {
263- env. CI_TAGS = ' amd64-' + env. EXT_RELEASE_CLEAN + ' -pkg-' + env. PACKAGE_TAG + ' -dev-' + env. COMMIT_SHA + ' -pr-' + env. PULL_REQUEST + ' |arm64v8-' + env. EXT_RELEASE_CLEAN + ' -pkg-' + env. PACKAGE_TAG + ' -dev-' + env. COMMIT_SHA + ' -pr-' + env. PULL_REQUEST
263+ env. CI_TAGS = ' amd64-' + env. EXT_RELEASE_CLEAN + ' -pkg-' + env. PACKAGE_TAG + ' -dev-' + env. COMMIT_SHA + ' -pr-' + env. PULL_REQUEST + ' |riscv64- ' + env . EXT_RELEASE_CLEAN + ' -pkg- ' + env . PACKAGE_TAG + ' -dev- ' + env . COMMIT_SHA + ' -pr- ' + env . PULL_REQUEST + ' | arm64v8-' + env. EXT_RELEASE_CLEAN + ' -pkg-' + env. PACKAGE_TAG + ' -dev-' + env. COMMIT_SHA + ' -pr-' + env. PULL_REQUEST
264264 } else {
265265 env. CI_TAGS = env. EXT_RELEASE_CLEAN + ' -pkg-' + env. PACKAGE_TAG + ' -dev-' + env. COMMIT_SHA + ' -pr-' + env. PULL_REQUEST
266266 }
@@ -783,6 +783,76 @@ pipeline {
783783 '''
784784 }
785785 }
786+ stage(' Build RISCV64' ) {
787+ agent {
788+ label ' RISCV64'
789+ }
790+ steps {
791+ echo " Running on node: ${ NODE_NAME} "
792+ sh " sed -r -i 's|(^FROM .*)|\\ 1\\ n\\ nENV LSIO_FIRST_PARTY=true|g' Dockerfile.riscv64"
793+ sh " docker buildx build \
794+ --label \" org.opencontainers.image.created=${ GITHUB_DATE} \" \
795+ --label \" org.opencontainers.image.authors=linuxserver.io\" \
796+ --label \" org.opencontainers.image.url=https://github.com/linuxserver/docker-vscodium-web/packages\" \
797+ --label \" org.opencontainers.image.documentation=https://docs.linuxserver.io/images/docker-vscodium-web\" \
798+ --label \" org.opencontainers.image.source=https://github.com/linuxserver/docker-vscodium-web\" \
799+ --label \" org.opencontainers.image.version=${ EXT_RELEASE_CLEAN} -ls${ LS_TAG_NUMBER} \" \
800+ --label \" org.opencontainers.image.revision=${ COMMIT_SHA} \" \
801+ --label \" org.opencontainers.image.vendor=linuxserver.io\" \
802+ --label \" org.opencontainers.image.licenses=GPL-3.0-only\" \
803+ --label \" org.opencontainers.image.ref.name=${ COMMIT_SHA} \" \
804+ --label \" org.opencontainers.image.title=Vscodium-web\" \
805+ --label \" org.opencontainers.image.description=[Vscodium-web](https://vscodium.com/) is a community-driven, freely-licensed binary distribution of the remote host web component of Microsoft's editor VS Code.\" \
806+ --no-cache --pull -f Dockerfile.riscv64 -t ${ IMAGE} :riscv64-${ META_TAG} --platform=linux/riscv64 \
807+ --provenance=true --sbom=true --builder=container --load \
808+ --build-arg ${ BUILD_VERSION_ARG} =${ EXT_RELEASE} --build-arg VERSION=\" ${ VERSION_TAG} \" --build-arg BUILD_DATE=${ GITHUB_DATE} ."
809+ sh ''' #! /bin/bash
810+ set -e
811+ IFS=',' read -ra CACHE <<< "$BUILDCACHE"
812+ for i in "${CACHE[@]}"; do
813+ docker tag ${IMAGE}:riscv64-${META_TAG} ${i}:riscv64-${COMMIT_SHA}-${BUILD_NUMBER}
814+ done
815+ '''
816+ withCredentials([
817+ [
818+ $class : ' UsernamePasswordMultiBinding' ,
819+ credentialsId : ' Quay.io-Robot' ,
820+ usernameVariable : ' QUAYUSER' ,
821+ passwordVariable : ' QUAYPASS'
822+ ]
823+ ]) {
824+ retry_backoff(5 ,5 ) {
825+ sh ''' #! /bin/bash
826+ set -e
827+ echo $DOCKERHUB_TOKEN | docker login -u linuxserverci --password-stdin
828+ echo $GITHUB_TOKEN | docker login ghcr.io -u LinuxServer-CI --password-stdin
829+ echo $GITLAB_TOKEN | docker login registry.gitlab.com -u LinuxServer.io --password-stdin
830+ echo $QUAYPASS | docker login quay.io -u $QUAYUSER --password-stdin
831+
832+ if [[ "${PACKAGE_CHECK}" != "true" ]]; then
833+ declare -A pids
834+ IFS=',' read -ra CACHE <<< "$BUILDCACHE"
835+ for i in "${CACHE[@]}"; do
836+ docker push ${i}:riscv64-${COMMIT_SHA}-${BUILD_NUMBER} &
837+ pids[$!]="$i"
838+ done
839+ for p in "${!pids[@]}"; do
840+ wait "$p" || { [[ "${pids[$p]}" != *"quay.io"* ]] && exit 1; }
841+ done
842+ fi
843+ '''
844+ }
845+ }
846+ sh ''' #! /bin/bash
847+ containers=$(docker ps -aq)
848+ if [[ -n "${containers}" ]]; then
849+ docker stop ${containers}
850+ fi
851+ docker system prune -f --volumes || :
852+ docker image prune -af || :
853+ '''
854+ }
855+ }
786856 }
787857 }
788858 // Take the image we just built and dump package versions for comparison
@@ -896,6 +966,8 @@ pipeline {
896966 if [ "${MULTIARCH}" == "true" ]; then
897967 docker pull ghcr.io/linuxserver/lsiodev-buildcache:arm64v8-${COMMIT_SHA}-${BUILD_NUMBER} --platform=arm64
898968 docker tag ghcr.io/linuxserver/lsiodev-buildcache:arm64v8-${COMMIT_SHA}-${BUILD_NUMBER} ${IMAGE}:arm64v8-${META_TAG}
969+ docker pull ghcr.io/linuxserver/lsiodev-buildcache:riscv64-${COMMIT_SHA}-${BUILD_NUMBER} --platform=riscv64
970+ docker tag ghcr.io/linuxserver/lsiodev-buildcache:riscv64-${COMMIT_SHA}-${BUILD_NUMBER} ${IMAGE}:riscv64-${META_TAG}
899971 fi
900972 docker run --rm \
901973 --shm-size=1gb \
@@ -977,22 +1049,26 @@ pipeline {
9771049 { if [[ "${MANIFESTIMAGE}" != "${QUAYIMAGE}" ]]; then exit 1; fi; }
9781050 docker buildx imagetools create --prefer-index=false -t ${MANIFESTIMAGE}:arm64v8-${META_TAG} -t ${MANIFESTIMAGE}:arm64v8-latest -t ${MANIFESTIMAGE}:arm64v8-${EXT_RELEASE_TAG} ${CACHEIMAGE}:arm64v8-${COMMIT_SHA}-${BUILD_NUMBER} || \
9791051 { if [[ "${MANIFESTIMAGE}" != "${QUAYIMAGE}" ]]; then exit 1; fi; }
1052+ docker buildx imagetools create --prefer-index=false -t ${MANIFESTIMAGE}:riscv64-${META_TAG} -t ${MANIFESTIMAGE}:riscv64-latest -t ${MANIFESTIMAGE}:riscv64-${EXT_RELEASE_TAG} ${CACHEIMAGE}:riscv64-${COMMIT_SHA}-${BUILD_NUMBER} || \
1053+ { if [[ "${MANIFESTIMAGE}" != "${QUAYIMAGE}" ]]; then exit 1; fi; }
9801054 if [ -n "${SEMVER}" ]; then
9811055 docker buildx imagetools create --prefer-index=false -t ${MANIFESTIMAGE}:amd64-${SEMVER} ${CACHEIMAGE}:amd64-${COMMIT_SHA}-${BUILD_NUMBER} || \
9821056 { if [[ "${MANIFESTIMAGE}" != "${QUAYIMAGE}" ]]; then exit 1; fi; }
9831057 docker buildx imagetools create --prefer-index=false -t ${MANIFESTIMAGE}:arm64v8-${SEMVER} ${CACHEIMAGE}:arm64v8-${COMMIT_SHA}-${BUILD_NUMBER} || \
9841058 { if [[ "${MANIFESTIMAGE}" != "${QUAYIMAGE}" ]]; then exit 1; fi; }
1059+ docker buildx imagetools create --prefer-index=false -t ${MANIFESTIMAGE}:riscv64-${SEMVER} ${CACHEIMAGE}:riscv64-${COMMIT_SHA}-${BUILD_NUMBER} || \
1060+ { if [[ "${MANIFESTIMAGE}" != "${QUAYIMAGE}" ]]; then exit 1; fi; }
9851061 fi
9861062 done
9871063 for MANIFESTIMAGE in "${IMAGE}" "${GITLABIMAGE}" "${GITHUBIMAGE}" "${QUAYIMAGE}"; do
988- docker buildx imagetools create -t ${MANIFESTIMAGE}:latest ${MANIFESTIMAGE}:amd64-latest ${MANIFESTIMAGE}:arm64v8-latest || \
1064+ docker buildx imagetools create -t ${MANIFESTIMAGE}:latest ${MANIFESTIMAGE}:amd64-latest ${MANIFESTIMAGE}:riscv64-latest ${MANIFESTIMAGE}: arm64v8-latest || \
9891065 { if [[ "${MANIFESTIMAGE}" != "${QUAYIMAGE}" ]]; then exit 1; fi; }
990- docker buildx imagetools create -t ${MANIFESTIMAGE}:${META_TAG} ${MANIFESTIMAGE}:amd64-${META_TAG} ${MANIFESTIMAGE}:arm64v8-${META_TAG} || \
1066+ docker buildx imagetools create -t ${MANIFESTIMAGE}:${META_TAG} ${MANIFESTIMAGE}:amd64-${META_TAG} ${MANIFESTIMAGE}:riscv64-${META_TAG} ${MANIFESTIMAGE}: arm64v8-${META_TAG} || \
9911067 { if [[ "${MANIFESTIMAGE}" != "${QUAYIMAGE}" ]]; then exit 1; fi; }
992- docker buildx imagetools create -t ${MANIFESTIMAGE}:${EXT_RELEASE_TAG} ${MANIFESTIMAGE}:amd64-${EXT_RELEASE_TAG} ${MANIFESTIMAGE}:arm64v8-${EXT_RELEASE_TAG} || \
1068+ docker buildx imagetools create -t ${MANIFESTIMAGE}:${EXT_RELEASE_TAG} ${MANIFESTIMAGE}:amd64-${EXT_RELEASE_TAG} ${MANIFESTIMAGE}:riscv64-${EXT_RELEASE_TAG} ${MANIFESTIMAGE}: arm64v8-${EXT_RELEASE_TAG} || \
9931069 { if [[ "${MANIFESTIMAGE}" != "${QUAYIMAGE}" ]]; then exit 1; fi; }
9941070 if [ -n "${SEMVER}" ]; then
995- docker buildx imagetools create -t ${MANIFESTIMAGE}:${SEMVER} ${MANIFESTIMAGE}:amd64-${SEMVER} ${MANIFESTIMAGE}:arm64v8-${SEMVER} || \
1071+ docker buildx imagetools create -t ${MANIFESTIMAGE}:${SEMVER} ${MANIFESTIMAGE}:amd64-${SEMVER} ${MANIFESTIMAGE}:riscv64-${SEMVER} ${MANIFESTIMAGE}: arm64v8-${SEMVER} || \
9961072 { if [[ "${MANIFESTIMAGE}" != "${QUAYIMAGE}" ]]; then exit 1; fi; }
9971073 fi
9981074 done
0 commit comments