Skip to content

Commit 65b0c4a

Browse files
committed
Enable 26.04 image
1 parent 2c55693 commit 65b0c4a

8 files changed

Lines changed: 111 additions & 42 deletions

File tree

.github/workflows/deploy-images.yml

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -53,9 +53,9 @@ jobs:
5353
- os: ubuntu
5454
os-version: 24.04
5555
runs-on: ubuntu-24.04
56-
# - os: ubuntu
57-
# os-version: 26.04
58-
# runs-on: ubuntu-latest # ubuntu-26.04-riscv-rva23 # Ubuntu 26.04 requires RVA23 hardware to run
56+
- os: ubuntu
57+
os-version: 26.04
58+
runs-on: ubuntu-24.04
5959
runs-on: ${{ matrix.runs-on }}
6060
needs: [setup]
6161
permissions:
@@ -138,6 +138,12 @@ jobs:
138138
-t ${{ needs.setup.outputs.docker-registry }}/riscv-runner:ubuntu-24.04-staging \
139139
${{ needs.setup.outputs.docker-registry }}/riscv-runner:ubuntu-24.04-sha-${{ github.sha }}
140140
141+
- name: Tag ubuntu-26.04 image for staging
142+
run: >-
143+
docker buildx imagetools create \
144+
-t ${{ needs.setup.outputs.docker-registry }}/riscv-runner:ubuntu-26.04-staging \
145+
${{ needs.setup.outputs.docker-registry }}/riscv-runner:ubuntu-26.04-sha-${{ github.sha }}
146+
141147
- name: Set up kubeconfig
142148
run: |
143149
mkdir -p ~/.kube
@@ -177,6 +183,12 @@ jobs:
177183
-t ${{ needs.setup.outputs.docker-registry }}/riscv-runner:ubuntu-24.04-latest \
178184
${{ needs.setup.outputs.docker-registry }}/riscv-runner:ubuntu-24.04-sha-${{ github.sha }}
179185
186+
- name: Tag ubuntu-26.04 image for prod
187+
run: >-
188+
docker buildx imagetools create \
189+
-t ${{ needs.setup.outputs.docker-registry }}/riscv-runner:ubuntu-26.04-latest \
190+
${{ needs.setup.outputs.docker-registry }}/riscv-runner:ubuntu-26.04-sha-${{ github.sha }}
191+
180192
- name: Set up kubeconfig
181193
run: |
182194
mkdir -p ~/.kube

container/cmd/ghfe/payload.go

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -118,5 +118,8 @@ func matchLabelsToK8s(cfg internal.Config, orgID int64, repoFullName string, lab
118118
if len(labels) == 1 && labels[0] == "ubuntu-24.04-riscv" {
119119
return "scw-em-rv1", cfg.ImageUbuntu24, true
120120
}
121+
if len(labels) == 1 && labels[0] == "ubuntu-26.04-riscv" {
122+
return "spacemit-k3-pico-itx", cfg.ImageUbuntu26, true
123+
}
121124
return "", "", false
122125
}

container/cmd/ghfe/payload_test.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -82,8 +82,9 @@ func TestMatchLabelsToK8s(t *testing.T) {
8282
wantOK bool
8383
}{
8484
{"general ubuntu-24", 999, "x/y", []string{"ubuntu-24.04-riscv"}, "scw-em-rv1", true},
85+
{"general ubuntu-26", 999, "x/y", []string{"ubuntu-26.04-riscv"}, "spacemit-k3-pico-itx", true},
8586
{"general no labels", 999, "x/y", []string{}, "", false},
86-
{"general other", 999, "x/y", []string{"ubuntu-26.04-riscv"}, "", false},
87+
{"general other", 999, "x/y", []string{"ubuntu-98.04-riscv"}, "", false},
8788

8889
{"ggml ubuntu-24", internal.GGMLOrgID, "ggml/llama.cpp", []string{"ubuntu-24.04-riscv"}, "cloudv10x-jupiter", true},
8990
{"ggml with extra label", internal.GGMLOrgID, "ggml/llama.cpp", []string{"ubuntu-24.04-riscv", "extra"}, "", false},

device-plugin/k8s-ds-device-plugin.yaml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,10 @@ spec:
3030
image: rg.fr-par.scw.cloud/funcscwriseriscvrunnerappqdvknz9s/riscv-runner:ubuntu-24.04-${TAG}
3131
imagePullPolicy: Always
3232
command: ["true"]
33+
- name: ubuntu-2604-image-cache
34+
image: rg.fr-par.scw.cloud/funcscwriseriscvrunnerappqdvknz9s/riscv-runner:ubuntu-26.04-${TAG}
35+
imagePullPolicy: Always
36+
command: ["true"]
3337
containers:
3438
- name: device-plugin
3539
image: rg.fr-par.scw.cloud/funcscwriseriscvrunnerappqdvknz9s/riscv-runner:device-plugin-${TAG}

images/runner/Dockerfile.ubuntu

Lines changed: 78 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,13 @@ ARG PYTHON310_VERSION=3.10.20
4444
ARG PYTHON310_TAG=${PYTHON310_VERSION}-24741349542
4545
ARG PYTHON310_SHA256=f4d1a502c5f109d05a03333e14e4c0f0b92634c29de76613aaf42d0019b99cd5 # https://github.com/riseproject-dev/python-versions/releases/${PYTHON310_TAG}
4646
RUN bash -eux -o pipefail <<'EOF'
47+
if [[ "${OS_VERSION}" == "26.04" ]]; then
48+
# FIXME: It's still missing 26.06 python builds at https://github.com/riseproject-dev/python-versions
49+
mkdir -p ${RUNNER_TOOL_CACHE}/Python/${PYTHON310_VERSION}/riscv64
50+
touch ${RUNNER_TOOL_CACHE}/Python/${PYTHON310_VERSION}/riscv64.complete
51+
exit 0
52+
fi
53+
4754
# Download Python 3.10
4855
curl -fsSL --retry 12 --retry-all-errors https://github.com/riseproject-dev/python-versions/releases/download/${PYTHON310_TAG}/python-${PYTHON310_VERSION}-linux-${OS_VERSION}-riscv64.tar.gz \
4956
-o python-${PYTHON310_VERSION}-linux-${OS_VERSION}-riscv64.tar.gz
@@ -68,6 +75,13 @@ ARG PYTHON311_VERSION=3.11.15
6875
ARG PYTHON311_TAG=${PYTHON311_VERSION}-24739855755
6976
ARG PYTHON311_SHA256=4fbfb313efdf4faa4684100a0fde10919766a77c4463b98fe52c146c4b14e4a2 # https://github.com/riseproject-dev/python-versions/releases/${PYTHON311_TAG}
7077
RUN bash -eux -o pipefail <<'EOF'
78+
if [[ "${OS_VERSION}" == "26.04" ]]; then
79+
# FIXME: It's still missing 26.06 python builds at https://github.com/riseproject-dev/python-versions
80+
mkdir -p ${RUNNER_TOOL_CACHE}/Python/${PYTHON311_VERSION}/riscv64
81+
touch ${RUNNER_TOOL_CACHE}/Python/${PYTHON311_VERSION}/riscv64.complete
82+
exit 0
83+
fi
84+
7185
# Download Python 3.11
7286
curl -fsSL --retry 12 --retry-all-errors https://github.com/riseproject-dev/python-versions/releases/download/${PYTHON311_TAG}/python-${PYTHON311_VERSION}-linux-${OS_VERSION}-riscv64.tar.gz \
7387
-o python-${PYTHON311_VERSION}-linux-${OS_VERSION}-riscv64.tar.gz
@@ -92,6 +106,13 @@ ARG PYTHON312_VERSION=3.12.13
92106
ARG PYTHON312_TAG=${PYTHON312_VERSION}-24738165632
93107
ARG PYTHON312_SHA256=377dd19847333f18e319ce1b5c0f90246646c81d9356050b08b82a366c5bb3f8 # https://github.com/riseproject-dev/python-versions/releases/${PYTHON312_TAG}
94108
RUN bash -eux -o pipefail <<'EOF'
109+
if [[ "${OS_VERSION}" == "26.04" ]]; then
110+
# FIXME: It's still missing 26.06 python builds at https://github.com/riseproject-dev/python-versions
111+
mkdir -p ${RUNNER_TOOL_CACHE}/Python/${PYTHON312_VERSION}/riscv64
112+
touch ${RUNNER_TOOL_CACHE}/Python/${PYTHON312_VERSION}/riscv64.complete
113+
exit 0
114+
fi
115+
95116
# Download Python 3.12
96117
curl -fsSL --retry 12 --retry-all-errors https://github.com/riseproject-dev/python-versions/releases/download/${PYTHON312_TAG}/python-${PYTHON312_VERSION}-linux-${OS_VERSION}-riscv64.tar.gz \
97118
-o python-${PYTHON312_VERSION}-linux-${OS_VERSION}-riscv64.tar.gz
@@ -116,6 +137,13 @@ ARG PYTHON313_VERSION=3.13.13
116137
ARG PYTHON313_TAG=${PYTHON313_VERSION}-24736470736
117138
ARG PYTHON313_SHA256=0f44fe31a9dc49d3d1c896a0de5b421309abe40b4253b4b975b0e94e43b130ab # https://github.com/riseproject-dev/python-versions/releases/${PYTHON313_TAG}
118139
RUN bash -eux -o pipefail <<'EOF'
140+
if [[ "${OS_VERSION}" == "26.04" ]]; then
141+
# FIXME: It's still missing 26.06 python builds at https://github.com/riseproject-dev/python-versions
142+
mkdir -p ${RUNNER_TOOL_CACHE}/Python/${PYTHON313_VERSION}/riscv64
143+
touch ${RUNNER_TOOL_CACHE}/Python/${PYTHON313_VERSION}/riscv64.complete
144+
exit 0
145+
fi
146+
119147
# Download Python 3.13
120148
curl -fsSL --retry 12 --retry-all-errors https://github.com/riseproject-dev/python-versions/releases/download/${PYTHON313_TAG}/python-${PYTHON313_VERSION}-linux-${OS_VERSION}-riscv64.tar.gz \
121149
-o python-${PYTHON313_VERSION}-linux-${OS_VERSION}-riscv64.tar.gz
@@ -140,6 +168,13 @@ ARG PYTHON313_VERSION=3.13.13
140168
ARG PYTHON313_TAG=${PYTHON313_VERSION}-24736470736
141169
ARG PYTHON313_SHA256=8b41f6c8406805ecf2a513ad3d52e56ad32353578b0d249fd02a76e280ee2e0c # https://github.com/riseproject-dev/python-versions/releases/${PYTHON313_TAG}
142170
RUN bash -eux -o pipefail <<'EOF'
171+
if [[ "${OS_VERSION}" == "26.04" ]]; then
172+
# FIXME: It's still missing 26.06 python builds at https://github.com/riseproject-dev/python-versions
173+
mkdir -p ${RUNNER_TOOL_CACHE}/Python/${PYTHON313_VERSION}/riscv64
174+
touch ${RUNNER_TOOL_CACHE}/Python/${PYTHON313_VERSION}/riscv64.complete
175+
exit 0
176+
fi
177+
143178
# Download Python 3.13
144179
curl -fsSL --retry 12 --retry-all-errors https://github.com/riseproject-dev/python-versions/releases/download/${PYTHON313_TAG}/python-${PYTHON313_VERSION}-linux-${OS_VERSION}-riscv64-freethreaded.tar.gz \
145180
-o python-${PYTHON313_VERSION}-linux-${OS_VERSION}-riscv64-freethreaded.tar.gz
@@ -164,6 +199,13 @@ ARG PYTHON314_VERSION=3.14.4
164199
ARG PYTHON314_TAG=${PYTHON314_VERSION}-24734614154
165200
ARG PYTHON314_SHA256=3688a211455a084ae1c77e9a093417d4472906496e977fc2ce8adca5d5978893 # https://github.com/riseproject-dev/python-versions/releases/${PYTHON314_TAG}
166201
RUN bash -eux -o pipefail <<'EOF'
202+
if [[ "${OS_VERSION}" == "26.04" ]]; then
203+
# FIXME: It's still missing 26.06 python builds at https://github.com/riseproject-dev/python-versions
204+
mkdir -p ${RUNNER_TOOL_CACHE}/Python/${PYTHON314_VERSION}/riscv64
205+
touch ${RUNNER_TOOL_CACHE}/Python/${PYTHON314_VERSION}/riscv64.complete
206+
exit 0
207+
fi
208+
167209
# Download Python 3.14
168210
curl -fsSL --retry 12 --retry-all-errors https://github.com/riseproject-dev/python-versions/releases/download/${PYTHON314_TAG}/python-${PYTHON314_VERSION}-linux-${OS_VERSION}-riscv64.tar.gz \
169211
-o python-${PYTHON314_VERSION}-linux-${OS_VERSION}-riscv64.tar.gz
@@ -188,6 +230,13 @@ ARG PYTHON314_VERSION=3.14.4
188230
ARG PYTHON314_TAG=${PYTHON314_VERSION}-24734614154
189231
ARG PYTHON314_SHA256=a575e5c7a74c86bff1110531fdd3592a07a910d8463c9aba982707a2ec06b824 # https://github.com/riseproject-dev/python-versions/releases/${PYTHON314_TAG}
190232
RUN bash -eux -o pipefail <<'EOF'
233+
if [[ "${OS_VERSION}" == "26.04" ]]; then
234+
# FIXME: It's still missing 26.06 python builds at https://github.com/riseproject-dev/python-versions
235+
mkdir -p ${RUNNER_TOOL_CACHE}/Python/${PYTHON314_VERSION}/riscv64
236+
touch ${RUNNER_TOOL_CACHE}/Python/${PYTHON314_VERSION}/riscv64.complete
237+
exit 0
238+
fi
239+
191240
# Download Python 3.14
192241
curl -fsSL --retry 12 --retry-all-errors https://github.com/riseproject-dev/python-versions/releases/download/${PYTHON314_TAG}/python-${PYTHON314_VERSION}-linux-${OS_VERSION}-riscv64-freethreaded.tar.gz \
193242
-o python-${PYTHON314_VERSION}-linux-${OS_VERSION}-riscv64-freethreaded.tar.gz
@@ -348,10 +397,10 @@ FROM base-builder AS docker-init
348397

349398
WORKDIR /build
350399

351-
ARG TINI_VERSION=0.19.0
400+
ARG TINI_VERSION=0.19.1
352401
RUN bash -eux -o pipefail <<'EOF'
353402
# Download tini
354-
git clone --depth 1 --branch "v${TINI_VERSION}" https://github.com/krallin/tini.git
403+
git clone --depth 1 --branch "v${TINI_VERSION}" https://github.com/riseproject-dev/tini.git
355404
pushd tini
356405

357406
# Build & install to /usr/local
@@ -620,9 +669,6 @@ RUN bash -eux -o pipefail <<'EOF'
620669
ccache \
621670
chrony \
622671
cifs-utils \
623-
clang-{16,17,18} \
624-
clang-format-{16,17,18} \
625-
clang-tidy-{16,17,18} \
626672
cloud-init \
627673
cmake \
628674
containerd \
@@ -645,15 +691,10 @@ RUN bash -eux -o pipefail <<'EOF'
645691
fonts-noto-color-emoji \
646692
ftp \
647693
g++ \
648-
g++-{12,13,14} \
649694
gettext-base \
650695
gcc \
651-
gcc-{12,13,14} \
652696
gettext-base \
653697
gfortran \
654-
gfortran-12 \
655-
gfortran-13 \
656-
gfortran-14 \
657698
gh \
658699
git \
659700
git-ftp \
@@ -667,7 +708,6 @@ RUN bash -eux -o pipefail <<'EOF'
667708
jq \
668709
libatomic1 \
669710
libbz2-1.0 \
670-
libclang-{16,17,18}-dev \
671711
libexpat1 \
672712
libffi8 \
673713
libgdbm6 \
@@ -695,22 +735,6 @@ RUN bash -eux -o pipefail <<'EOF'
695735
p7zip-full \
696736
parallel \
697737
patchelf \
698-
php8.3-pgsql \
699-
php8.3-phpdbg \
700-
php8.3-pspell \
701-
php8.3-readline \
702-
php8.3-redis \
703-
php8.3-snmp \
704-
php8.3-soap \
705-
php8.3-sqlite3 \
706-
php8.3-sybase \
707-
php8.3-tidy \
708-
php8.3-xdebug \
709-
php8.3-xml \
710-
php8.3-xsl \
711-
php8.3-yaml \
712-
php8.3-zip \
713-
php8.3-zmq \
714738
pigz \
715739
pkg-config \
716740
podman \
@@ -780,26 +804,47 @@ RUN bash -eux -o pipefail <<'EOF'
780804
if [[ "${VERSION_ID}" == "24.04" ]]; then
781805
# Install 24.04 specific packages
782806
apt-get install -y --no-install-recommends \
807+
clang-{16,17,18} \
808+
clang-format-{16,17,18} \
809+
clang-tidy-{16,17,18} \
810+
g++-{12,13,14} \
811+
gcc-{12,13,14} \
812+
gfortran-{12,13,14} \
813+
libclang-{16,17,18}-dev \
783814
p7zip-rar \
815+
php8.3-{pgsql,phpdbg,pspell,readline,redis,snmp,soap,sqlite3,sybase,tidy,xdebug,xml,xsl,yaml,zip,zmq} \
816+
postgresql-16 \
784817
&& true
785818
elif [[ "${VERSION_ID}" == "26.04" ]]; then
786819
# Install 26.04 specific packages
787-
true # nothing yet
820+
apt-get install -y --no-install-recommends \
821+
clang-{20,21,22} \
822+
clang-format-{20,21,22} \
823+
clang-tidy-{20,21,22} \
824+
g++-{13,14,15} \
825+
gcc-{13,14,15} \
826+
gfortran-{13,14,15} \
827+
libclang-{20,21,22}-dev \
828+
php8.5-{pgsql,phpdbg,pspell,readline,redis,snmp,soap,sqlite3,sybase,tidy,xdebug,xml,xsl,yaml,zip,zmq} \
829+
postgresql-18 \
830+
&& true
788831
else
789832
echo "Unknown Ubuntu version ${VERSION_ID}"
790833
exit 1
791834
fi
792835

793-
# Clean apt cache. Do NOT remove /var/lib/dpkg — it holds the package
794-
# database and lock files; without it, `apt-get install` fails for users.
795-
apt-get clean
796-
rm -rf /var/lib/apt/lists/*
797-
798836
# Add a user which will run the github actions
799837
groupadd -f docker
800838
useradd -m -u 1001 -G docker runner # also creates a `runner` group
839+
801840
# Add runner to sudoers without password prompt
841+
apt-get install -y --no-install-recommends sudo
802842
echo "runner ALL=(ALL) NOPASSWD:ALL" > /etc/sudoers.d/runner
843+
844+
# Clean apt cache. Do NOT remove /var/lib/dpkg — it holds the package
845+
# database and lock files; without it, `apt-get install` fails for users.
846+
apt-get clean
847+
rm -rf /var/lib/apt/lists/*
803848
EOF
804849

805850
# Fix some specific directories' permissions

website/docs/architecture/images.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -80,8 +80,11 @@ rg.fr-par.scw.cloud/funcscwriseriscvrunnerappqdvknz9s/riscv-runner
8080
| Tag | Image | Source branch |
8181
|-----|-------|---------------|
8282
| `ubuntu-24.04-latest` | Runner image, Ubuntu 24.04 | `main` (deploy-prod) |
83+
| `ubuntu-26.04-latest` | Runner image, Ubuntu 26.04 | `main` (deploy-prod) |
8384
| `ubuntu-24.04-staging` | Runner image, Ubuntu 24.04 | `main` (deploy-staging) |
85+
| `ubuntu-26.04-staging` | Runner image, Ubuntu 26.04 | `main` (deploy-staging) |
8486
| `ubuntu-24.04-sha-<sha>` | Per-commit build | every build |
87+
| `ubuntu-26.04-sha-<sha>` | Per-commit build | every build |
8588

8689
## Source files
8790

website/docs/getting-started/configure.md

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,8 +31,9 @@ Save this as `.github/workflows/riscv.yml` in your repository.
3131
| Label | Description |
3232
|-------|-------------|
3333
| `ubuntu-24.04-riscv` | Standard RISC-V runner, Ubuntu 24.04 |
34+
| `ubuntu-26.04-riscv` | Standard RISC-V runner, Ubuntu 26.04 |
3435

35-
`ubuntu-26.04-riscv` is not yet routable: the webhook handler only matches `ubuntu-24.04-riscv` today, and the image build matrix only produces the 24.04 image. The label will be re-enabled when RVA23 hardware lands. See the [Runner Labels Reference](labels) for full hardware specs.
36+
See the [Runner Labels Reference](labels) for full hardware specs.
3637

3738
## Pre-installed tools
3839

website/docs/getting-started/labels.md

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -10,10 +10,10 @@ Each label maps to a specific hardware configuration, OS version, and Kubernetes
1010

1111
## Labels
1212

13-
| Label | OS | Board | SoC | Status |
14-
|-------|-----|-------|-----|--------|
15-
| `ubuntu-24.04-riscv` | Ubuntu 24.04 | Scaleway EM-RV1 | SpacemiT K1 | Generally available |
16-
| `ubuntu-26.04-riscv` | Ubuntu 26.04 | TBD | TBD | Not yet enabled (awaiting RVA23 hardware) |
13+
| Label | OS | Board | Status |
14+
|-------|-----|-------|--------|
15+
| `ubuntu-24.04-riscv` | Ubuntu 24.04 | Scaleway EM-RV1 | Generally available |
16+
| `ubuntu-26.04-riscv` | Ubuntu 26.04 | Spacemit K3 | Early Access |
1717

1818
The webhook handler only recognises single-label arrays; jobs using multiple `runs-on` labels (other than via `[self-hosted, ...]` matrix combinations) will not be picked up. See the routing table in [Webhook Handler § Label matching](../architecture/ghfe#label-matching).
1919

0 commit comments

Comments
 (0)