@@ -352,7 +352,7 @@ pipeline {
352352 env.GITLABIMAGE = 'registry.gitlab.com/linuxserver.io/' + env.LS_REPO + '/' + env.CONTAINER_NAME
353353 env.QUAYIMAGE = 'quay.io/linuxserver.io/' + env.CONTAINER_NAME
354354 if (env.MULTIARCH == 'true') {
355- env.CI_TAGS = 'amd64-{% if release_tag != "latest" %} {{ release_tag }}-{% endif %} ' + env.EXT_RELEASE_CLEAN + '-ls' + env.LS_TAG_NUMBER + '|arm64v8-{% if release_tag != "latest" %} {{ release_tag }}-{% endif %} ' + env.EXT_RELEASE_CLEAN + '-ls' + env.LS_TAG_NUMBER
355+ env.CI_TAGS = 'amd64-{% if release_tag != "latest" %} {{ release_tag }}-{% endif %} ' + env.EXT_RELEASE_CLEAN + '-ls' + env.LS_TAG_NUMBER + {% if build_riscv 64 %} '|riscv64- {% if release_tag != "latest" %} {{ release_tag }}- {% endif %} ' + env.EXT_RELEASE_CLEAN + '-ls' + env.LS_TAG_NUMBER + {% endif %} '|arm64v8-{% if release_tag != "latest" %} {{ release_tag }}-{% endif %} ' + env.EXT_RELEASE_CLEAN + '-ls' + env.LS_TAG_NUMBER
356356 } else {
357357 env.CI_TAGS = {% if release_tag != "latest" %} '{{ release_tag }}-' + {% endif %} env.EXT_RELEASE_CLEAN + '-ls' + env.LS_TAG_NUMBER
358358 }
@@ -376,7 +376,7 @@ pipeline {
376376 env.GITLABIMAGE = 'registry.gitlab.com/linuxserver.io/' + env.LS_REPO + '/lsiodev-' + env.CONTAINER_NAME
377377 env.QUAYIMAGE = 'quay.io/linuxserver.io/lsiodev-' + env.CONTAINER_NAME
378378 if (env.MULTIARCH == 'true') {
379- env.CI_TAGS = 'amd64-{% if release_tag != "latest" %} {{ release_tag }}-{% endif %} ' + env.EXT_RELEASE_CLEAN + '-pkg-' + env.PACKAGE_TAG + '-dev-' + env.COMMIT_SHA + '|arm64v8-{% if release_tag != "latest" %} {{ release_tag }}-{% endif %} ' + env.EXT_RELEASE_CLEAN + '-pkg-' + env.PACKAGE_TAG + '-dev-' + env.COMMIT_SHA
379+ env.CI_TAGS = 'amd64-{% if release_tag != "latest" %} {{ release_tag }}-{% endif %} ' + env.EXT_RELEASE_CLEAN + '-pkg-' + env.PACKAGE_TAG + '-dev-' + env.COMMIT_SHA + {% if build_riscv 64 %} '|riscv64- {% if release_tag != "latest" %} {{ release_tag }}- {% endif %} ' + env.EXT_RELEASE_CLEAN + '-pkg-' + env.PACKAGE_TAG + '-dev-' + env.COMMIT_SHA + {% endif %} '|arm64v8-{% if release_tag != "latest" %} {{ release_tag }}-{% endif %} ' + env.EXT_RELEASE_CLEAN + '-pkg-' + env.PACKAGE_TAG + '-dev-' + env.COMMIT_SHA
380380 } else {
381381 env.CI_TAGS = {% if release_tag != "latest" %} '{{ release_tag }}-' + {% endif %} env.EXT_RELEASE_CLEAN + '-pkg-' + env.PACKAGE_TAG + '-dev-' + env.COMMIT_SHA
382382 }
@@ -400,7 +400,7 @@ pipeline {
400400 env.GITLABIMAGE = 'registry.gitlab.com/linuxserver.io/' + env.LS_REPO + '/lspipepr-' + env.CONTAINER_NAME
401401 env.QUAYIMAGE = 'quay.io/linuxserver.io/lspipepr-' + env.CONTAINER_NAME
402402 if (env.MULTIARCH == 'true') {
403- env.CI_TAGS = 'amd64-{% if release_tag != "latest" %} {{ release_tag }}-{% endif %} ' + env.EXT_RELEASE_CLEAN + '-pkg-' + env.PACKAGE_TAG + '-dev-' + env.COMMIT_SHA + '-pr-' + env.PULL_REQUEST + '|arm64v8-{% if release_tag != "latest" %} {{ release_tag }}-{% endif %} ' + env.EXT_RELEASE_CLEAN + '-pkg-' + env.PACKAGE_TAG + '-dev-' + env.COMMIT_SHA + '-pr-' + env.PULL_REQUEST
403+ env.CI_TAGS = 'amd64-{% if release_tag != "latest" %} {{ release_tag }}-{% endif %} ' + env.EXT_RELEASE_CLEAN + '-pkg-' + env.PACKAGE_TAG + '-dev-' + env.COMMIT_SHA + '-pr-' + env.PULL_REQUEST + {% if build_riscv 64 %} '|riscv64- {% if release_tag != "latest" %} {{ release_tag }}- {% endif %} ' + env.EXT_RELEASE_CLEAN + '-pkg-' + env.PACKAGE_TAG + '-dev-' + env.COMMIT_SHA + '-pr-' + env.PULL_REQUEST + {% endif %} '|arm64v8-{% if release_tag != "latest" %} {{ release_tag }}-{% endif %} ' + env.EXT_RELEASE_CLEAN + '-pkg-' + env.PACKAGE_TAG + '-dev-' + env.COMMIT_SHA + '-pr-' + env.PULL_REQUEST
404404 } else {
405405 env.CI_TAGS = {% if release_tag != "latest" %} '{{ release_tag }}-' + {% endif %} env.EXT_RELEASE_CLEAN + '-pkg-' + env.PACKAGE_TAG + '-dev-' + env.COMMIT_SHA + '-pr-' + env.PULL_REQUEST
406406 }
@@ -913,7 +913,7 @@ pipeline {
913913 }
914914 stage('Build ARM64') {
915915 agent {
916- {% if use_qemu is defined %}
916+ {% if use_qemu is defined or use_qemu_arm 64 is defined %}
917917 label 'X86-64-MULTI'
918918{% else %}
919919 label 'ARM64'
@@ -984,6 +984,81 @@ pipeline {
984984 '''
985985 }
986986 }
987+ {% if build_riscv 64 %}
988+ stage('Build RISCV64') {
989+ agent {
990+ {% if use_qemu is defined or use_qemu_riscv 64 is defined %}
991+ label 'X86-64-MULTI'
992+ {% else %}
993+ label 'RISCV64'
994+ {% endif %}
995+ }
996+ steps {
997+ echo "Running on node: ${NODE_NAME}"
998+ {% if "docker-baseimage" not in project_repo_name %}
999+ sh "sed -r -i 's|(^FROM .*)|\\1\\n\\nENV LSIO_FIRST_PARTY=true|g' Dockerfile.riscv64"
1000+ {% endif %}
1001+ sh "docker buildx build \
1002+ --label \"org.opencontainers.image.created=${GITHUB_DATE}\" \
1003+ --label \"org.opencontainers.image.authors={{ lsio_project_name }}\" \
1004+ --label \"org.opencontainers.image.url={{ project_github_repo_url }}/packages\" \
1005+ --label \"org.opencontainers.image.documentation={{ lsio_docs_url }}/images/docker-{{ project_name }}\" \
1006+ --label \"org.opencontainers.image.source={{ project_github_repo_url }}\" \
1007+ --label \"org.opencontainers.image.version=${EXT_RELEASE_CLEAN}-ls${LS_TAG_NUMBER}\" \
1008+ --label \"org.opencontainers.image.revision=${COMMIT_SHA}\" \
1009+ --label \"org.opencontainers.image.vendor={{ lsio_project_name }}\" \
1010+ --label \"org.opencontainers.image.licenses=GPL-3.0-only\" \
1011+ --label \"org.opencontainers.image.ref.name=${COMMIT_SHA}\" \
1012+ --label \"org.opencontainers.image.title={{ project_name|capitalize }}\" \
1013+ --label \"org.opencontainers.image.description={% if project_blurb is defined %} {{ project_blurb | replace('"', '') | replace('\n', ' ') }}{% else %} {{ project_name }} image by {{ lsio_project_name }}{% endif %} \" \
1014+ --no-cache --pull -f Dockerfile.riscv64 -t ${IMAGE}:riscv64-${META_TAG} --platform=linux/riscv64 \
1015+ --provenance={{ image_provenance | lower }} --sbom={{ image_sbom | lower }} --builder={{ image_builder }} --load \
1016+ --build-arg ${BUILD_VERSION_ARG}=${EXT_RELEASE} --build-arg VERSION=\"${VERSION_TAG}\" --build-arg BUILD_DATE=${GITHUB_DATE} ."
1017+ sh '''#! /bin/bash
1018+ set -e
1019+ IFS=',' read -ra CACHE <<< "$BUILDCACHE"
1020+ for i in "${CACHE[@]}"; do
1021+ docker tag ${IMAGE}:riscv64-${META_TAG} ${i}:riscv64-${COMMIT_SHA}-${BUILD_NUMBER}
1022+ done
1023+ '''
1024+ withCredentials([
1025+ [
1026+ $class: 'UsernamePasswordMultiBinding',
1027+ credentialsId: 'Quay.io-Robot',
1028+ usernameVariable: 'QUAYUSER',
1029+ passwordVariable: 'QUAYPASS'
1030+ ]
1031+ ]) {
1032+ retry_backoff(5,5) {
1033+ sh '''#! /bin/bash
1034+ set -e
1035+ echo $DOCKERHUB_TOKEN | docker login -u linuxserverci --password-stdin
1036+ echo $GITHUB_TOKEN | docker login ghcr.io -u LinuxServer-CI --password-stdin
1037+ echo $GITLAB_TOKEN | docker login registry.gitlab.com -u LinuxServer.io --password-stdin
1038+ echo $QUAYPASS | docker login quay.io -u $QUAYUSER --password-stdin
1039+ if [[ "${PACKAGE_CHECK}" != "true" ]]; then
1040+ IFS=',' read -ra CACHE <<< "$BUILDCACHE"
1041+ for i in "${CACHE[@]}"; do
1042+ docker push ${i}:riscv64-${COMMIT_SHA}-${BUILD_NUMBER} &
1043+ done
1044+ for p in $(jobs -p); do
1045+ wait "$p" || { echo "job $p failed" >&2 ; exit 1; }
1046+ done
1047+ fi
1048+ '''
1049+ }
1050+ }
1051+ sh '''#! /bin/bash
1052+ containers=$(docker ps -aq)
1053+ if [[ -n "${containers}" ]]; then
1054+ docker stop ${containers}
1055+ fi
1056+ docker system prune -f --volumes || :
1057+ docker image prune -af || :
1058+ '''
1059+ }
1060+ }
1061+ {% endif %}
9871062 }
9881063 }
9891064{% if skip_package_check is not defined %}
@@ -1099,6 +1174,10 @@ pipeline {
10991174 if [ "${MULTIARCH}" == "true" ]; then
11001175 docker pull ghcr.io/linuxserver/lsiodev-buildcache:arm64v8-${COMMIT_SHA}-${BUILD_NUMBER} --platform=arm64
11011176 docker tag ghcr.io/linuxserver/lsiodev-buildcache:arm64v8-${COMMIT_SHA}-${BUILD_NUMBER} ${IMAGE}:arm64v8-${META_TAG}
1177+ {% if build_riscv 64 %}
1178+ docker pull ghcr.io/linuxserver/lsiodev-buildcache:riscv64-${COMMIT_SHA}-${BUILD_NUMBER} --platform=riscv64
1179+ docker tag ghcr.io/linuxserver/lsiodev-buildcache:riscv64-${COMMIT_SHA}-${BUILD_NUMBER} ${IMAGE}:riscv64-${META_TAG}
1180+ {% endif %}
11021181 fi
11031182 docker run --rm \
11041183 --shm-size=1gb \
@@ -1189,22 +1268,28 @@ pipeline {
11891268 done
11901269 docker buildx imagetools create --prefer-index=false -t ${MANIFESTIMAGE}:amd64-${META_TAG} -t ${MANIFESTIMAGE}:amd64-{{ release_tag }} -t ${MANIFESTIMAGE}:amd64-${EXT_RELEASE_TAG} ${CACHEIMAGE}:amd64-${COMMIT_SHA}-${BUILD_NUMBER}
11911270 docker buildx imagetools create --prefer-index=false -t ${MANIFESTIMAGE}:arm64v8-${META_TAG} -t ${MANIFESTIMAGE}:arm64v8-{{ release_tag }} -t ${MANIFESTIMAGE}:arm64v8-${EXT_RELEASE_TAG} ${CACHEIMAGE}:arm64v8-${COMMIT_SHA}-${BUILD_NUMBER}
1271+ {% if build_riscv 64 %}
1272+ docker buildx imagetools create --prefer-index=false -t ${MANIFESTIMAGE}:riscv64-${META_TAG} -t ${MANIFESTIMAGE}:riscv64-{{ release_tag }} -t ${MANIFESTIMAGE}:riscv64-${EXT_RELEASE_TAG} ${CACHEIMAGE}:riscv64-${COMMIT_SHA}-${BUILD_NUMBER}
1273+ {% endif %}
11921274 if [ -n "${SEMVER}" ]; then
11931275 docker buildx imagetools create --prefer-index=false -t ${MANIFESTIMAGE}:amd64-${SEMVER} ${CACHEIMAGE}:amd64-${COMMIT_SHA}-${BUILD_NUMBER}
11941276 docker buildx imagetools create --prefer-index=false -t ${MANIFESTIMAGE}:arm64v8-${SEMVER} ${CACHEIMAGE}:arm64v8-${COMMIT_SHA}-${BUILD_NUMBER}
1277+ {% if build_riscv 64 %}
1278+ docker buildx imagetools create --prefer-index=false -t ${MANIFESTIMAGE}:riscv64-${SEMVER} ${CACHEIMAGE}:riscv64-${COMMIT_SHA}-${BUILD_NUMBER}
1279+ {% endif %}
11951280 fi
11961281 done
11971282 for MANIFESTIMAGE in "${IMAGE}" "${GITLABIMAGE}" "${GITHUBIMAGE}" "${QUAYIMAGE}"; do
11981283{% if project_deprecation_status %}
1199- docker buildx imagetools create -t ${MANIFESTIMAGE}:{{ release_tag }} -t ${MANIFESTIMAGE}:amd64-{{ release_tag }} -t ${MANIFESTIMAGE}:arm64v8-{{ release_tag }} ghcr.io/linuxserver/jenkins-builder:empty || true
1284+ docker buildx imagetools create -t ${MANIFESTIMAGE}:{{ release_tag }} -t ${MANIFESTIMAGE}:amd64-{{ release_tag }} -t ${MANIFESTIMAGE}:arm64v8-{{ release_tag }}{% if build_riscv 64 %} -t ${MANIFESTIMAGE}:riscv64-{{ release_tag }} {% endif %} ghcr.io/linuxserver/jenkins-builder:empty || true
12001285{% else %}
1201- docker buildx imagetools create -t ${MANIFESTIMAGE}:{{ release_tag }} ${MANIFESTIMAGE}:amd64-{{ release_tag }} ${MANIFESTIMAGE}:arm64v8-{{ release_tag }}
1286+ docker buildx imagetools create -t ${MANIFESTIMAGE}:{{ release_tag }} ${MANIFESTIMAGE}:amd64-{{ release_tag }}{% if build_riscv 64 %} ${MANIFESTIMAGE}:riscv64-{{ release_tag }} {% endif %} ${MANIFESTIMAGE}:arm64v8-{{ release_tag }}
12021287{% endif %}
1203- docker buildx imagetools create -t ${MANIFESTIMAGE}:${META_TAG} ${MANIFESTIMAGE}:amd64-${META_TAG} ${MANIFESTIMAGE}:arm64v8-${META_TAG}
1288+ docker buildx imagetools create -t ${MANIFESTIMAGE}:${META_TAG} ${MANIFESTIMAGE}:amd64-${META_TAG}{% if build_riscv 64 %} ${MANIFESTIMAGE}:riscv64-${META_TAG} {% endif %} ${MANIFESTIMAGE}:arm64v8-${META_TAG}
12041289
1205- docker buildx imagetools create -t ${MANIFESTIMAGE}:${EXT_RELEASE_TAG} ${MANIFESTIMAGE}:amd64-${EXT_RELEASE_TAG} ${MANIFESTIMAGE}:arm64v8-${EXT_RELEASE_TAG}
1290+ docker buildx imagetools create -t ${MANIFESTIMAGE}:${EXT_RELEASE_TAG} ${MANIFESTIMAGE}:amd64-${EXT_RELEASE_TAG}{% if build_riscv 64 %} ${MANIFESTIMAGE}:riscv64-${EXT_RELEASE_TAG} {% endif %} ${MANIFESTIMAGE}:arm64v8-${EXT_RELEASE_TAG}
12061291 if [ -n "${SEMVER}" ]; then
1207- docker buildx imagetools create -t ${MANIFESTIMAGE}:${SEMVER} ${MANIFESTIMAGE}:amd64-${SEMVER} ${MANIFESTIMAGE}:arm64v8-${SEMVER}
1292+ docker buildx imagetools create -t ${MANIFESTIMAGE}:${SEMVER} ${MANIFESTIMAGE}:amd64-${SEMVER}{% if build_riscv 64 %} ${MANIFESTIMAGE}:riscv64-${SEMVER} {% endif %} ${MANIFESTIMAGE}:arm64v8-${SEMVER}
12081293 fi
12091294 done
12101295 '''
0 commit comments