Skip to content

Commit aeea4ee

Browse files
authored
Merge pull request #335 from linuxserver/riscv64
add support for riscv64
2 parents 2390b12 + 6380cd4 commit aeea4ee

File tree

3 files changed

+98
-9
lines changed

3 files changed

+98
-9
lines changed

ansible/roles/documentation/templates/README_SNIPPETS/SUPPORTED_ARCHITECTURES.j2

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,5 +9,8 @@ The architectures supported by this image are:
99
| Architecture | Available | Tag |
1010
| :----: | :----: | ---- |
1111
| x86-64 | {{ '✅ | amd64-\<version tag\>' if 'x86-64' in (available_architectures | map(attribute="arch") ) else '❌ |' }} |
12+
{% if build_riscv64 %}
13+
| riscv64 | {{ '✅ | riscv64-\<version tag\>' }} |
14+
{% endif %}
1215
| arm64 | {{ '✅ | arm64v8-\<version tag\>' if 'arm64' in (available_architectures | map(attribute="arch") ) else '❌ |' }} |
1316
| armhf | {{ '✅ | arm32v7-\<version tag\>' if 'armhf' in (available_architectures | map(attribute="arch") ) else '❌ |' }} |

ansible/roles/repository/templates/Jenkinsfile.j2

Lines changed: 94 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -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_riscv64 %}'|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_riscv64 %}'|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_riscv64 %}'|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_arm64 is defined %}
917917
label 'X86-64-MULTI'
918918
{% else %}
919919
label 'ARM64'
@@ -984,6 +984,81 @@ pipeline {
984984
'''
985985
}
986986
}
987+
{% if build_riscv64 %}
988+
stage('Build RISCV64') {
989+
agent {
990+
{% if use_qemu is defined or use_qemu_riscv64 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_riscv64 %}
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_riscv64 %}
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_riscv64 %}
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_riscv64 %} -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_riscv64 %} ${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_riscv64 %} ${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_riscv64 %} ${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_riscv64 %} ${MANIFESTIMAGE}:riscv64-${SEMVER}{% endif %} ${MANIFESTIMAGE}:arm64v8-${SEMVER}
12081293
fi
12091294
done
12101295
'''

ansible/vars/default.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,7 @@ unraid_template_sync: true
5555
unraid_template: true
5656
armhf_native: false
5757
build_armhf: false
58+
build_riscv64: false
5859
image_provenance: true
5960
image_sbom: true
6061
image_builder: "container"

0 commit comments

Comments
 (0)