Skip to content

Commit 2a595e1

Browse files
committed
Enable 26.04 image
1 parent 2c55693 commit 2a595e1

9 files changed

Lines changed: 132 additions & 58 deletions

File tree

.github/workflows/deploy-images.yml

Lines changed: 16 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -52,11 +52,10 @@ jobs:
5252
include:
5353
- os: ubuntu
5454
os-version: 24.04
55-
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
59-
runs-on: ${{ matrix.runs-on }}
55+
- os: ubuntu
56+
os-version: 26.04
57+
fail-fast: false
58+
runs-on: ubuntu-latest
6059
needs: [setup]
6160
permissions:
6261
packages: write
@@ -138,6 +137,12 @@ jobs:
138137
-t ${{ needs.setup.outputs.docker-registry }}/riscv-runner:ubuntu-24.04-staging \
139138
${{ needs.setup.outputs.docker-registry }}/riscv-runner:ubuntu-24.04-sha-${{ github.sha }}
140139
140+
- name: Tag ubuntu-26.04 image for staging
141+
run: >-
142+
docker buildx imagetools create \
143+
-t ${{ needs.setup.outputs.docker-registry }}/riscv-runner:ubuntu-26.04-staging \
144+
${{ needs.setup.outputs.docker-registry }}/riscv-runner:ubuntu-26.04-sha-${{ github.sha }}
145+
141146
- name: Set up kubeconfig
142147
run: |
143148
mkdir -p ~/.kube
@@ -177,6 +182,12 @@ jobs:
177182
-t ${{ needs.setup.outputs.docker-registry }}/riscv-runner:ubuntu-24.04-latest \
178183
${{ needs.setup.outputs.docker-registry }}/riscv-runner:ubuntu-24.04-sha-${{ github.sha }}
179184
185+
- name: Tag ubuntu-26.04 image for prod
186+
run: >-
187+
docker buildx imagetools create \
188+
-t ${{ needs.setup.outputs.docker-registry }}/riscv-runner:ubuntu-26.04-latest \
189+
${{ needs.setup.outputs.docker-registry }}/riscv-runner:ubuntu-26.04-sha-${{ github.sha }}
190+
180191
- name: Set up kubeconfig
181192
run: |
182193
mkdir -p ~/.kube

container/cmd/ghfe/payload.go

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ package main
44

55
import (
66
"github.com/riseproject-dev/riscv-runner/container/internal"
7+
"slices"
78
)
89

910
// senderDropKeys / repoDropKeys / repoOwnerDropKeys / orgDropKeys /
@@ -118,5 +119,11 @@ func matchLabelsToK8s(cfg internal.Config, orgID int64, repoFullName string, lab
118119
if len(labels) == 1 && labels[0] == "ubuntu-24.04-riscv" {
119120
return "scw-em-rv1", cfg.ImageUbuntu24, true
120121
}
122+
if len(labels) == 2 && slices.Contains(labels, "ubuntu-24.04-riscv") && slices.Contains(labels, "rva23") {
123+
return "spacemit-k3-pico-itx", cfg.ImageUbuntu24, true
124+
}
125+
if len(labels) == 1 && labels[0] == "ubuntu-26.04-riscv" {
126+
return "spacemit-k3-pico-itx", cfg.ImageUbuntu26, true
127+
}
121128
return "", "", false
122129
}

container/cmd/ghfe/payload_test.go

Lines changed: 16 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -74,20 +74,22 @@ func TestMatchLabelsToK8s(t *testing.T) {
7474
}
7575

7676
tests := []struct {
77-
name string
78-
orgID int64
79-
repo string
80-
labels []string
81-
wantPool string
82-
wantOK bool
77+
name string
78+
orgID int64
79+
repo string
80+
labels []string
81+
wantPool string
82+
wantImage string
83+
wantOK bool
8384
}{
84-
{"general ubuntu-24", 999, "x/y", []string{"ubuntu-24.04-riscv"}, "scw-em-rv1", true},
85-
{"general no labels", 999, "x/y", []string{}, "", false},
86-
{"general other", 999, "x/y", []string{"ubuntu-26.04-riscv"}, "", false},
85+
{"general ubuntu-24", 999, "x/y", []string{"ubuntu-24.04-riscv"}, "scw-em-rv1", cfg.ImageUbuntu24, true},
86+
{"general ubuntu-26", 999, "x/y", []string{"ubuntu-26.04-riscv"}, "spacemit-k3-pico-itx", cfg.ImageUbuntu26, true},
87+
{"general no labels", 999, "x/y", []string{}, "", "", false},
88+
{"general other", 999, "x/y", []string{"ubuntu-98.04-riscv"}, "", "", false},
8789

88-
{"ggml ubuntu-24", internal.GGMLOrgID, "ggml/llama.cpp", []string{"ubuntu-24.04-riscv"}, "cloudv10x-jupiter", true},
89-
{"ggml with extra label", internal.GGMLOrgID, "ggml/llama.cpp", []string{"ubuntu-24.04-riscv", "extra"}, "", false},
90-
{"riseproject llama.cpp ubuntu-24", internal.RiseprojectDevOrgID, "riseproject-dev/llama.cpp", []string{"ubuntu-24.04-riscv"}, "cloudv10x-jupiter", true},
90+
{"ggml ubuntu-24", internal.GGMLOrgID, "ggml/llama.cpp", []string{"ubuntu-24.04-riscv"}, "cloudv10x-jupiter", cfg.ImageUbuntu24, true},
91+
{"ggml with extra label", internal.GGMLOrgID, "ggml/llama.cpp", []string{"ubuntu-24.04-riscv", "extra"}, "", "", false},
92+
{"riseproject llama.cpp ubuntu-24", internal.RiseprojectDevOrgID, "riseproject-dev/llama.cpp", []string{"ubuntu-24.04-riscv"}, "cloudv10x-jupiter", cfg.ImageUbuntu24, true},
9193
}
9294

9395
for _, tc := range tests {
@@ -99,8 +101,8 @@ func TestMatchLabelsToK8s(t *testing.T) {
99101
if ok && pool != tc.wantPool {
100102
t.Fatalf("pool=%q want=%q", pool, tc.wantPool)
101103
}
102-
if ok && image != cfg.ImageUbuntu24 {
103-
t.Fatalf("image=%q want img24", image)
104+
if ok && image != tc.wantImage {
105+
t.Fatalf("image=%q want=%q", image, tc.wantImage)
104106
}
105107
})
106108
}

container/cmd/ghfe/webhook_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -193,7 +193,7 @@ func TestIgnoredNoLabel_PayloadMinimized(t *testing.T) {
193193
},
194194
"workflow_job": map[string]any{
195195
"id": float64(7),
196-
"labels": []any{"ubuntu-26.04-riscv"},
196+
"labels": []any{"ubuntu-98.04-riscv"},
197197
"html_url": "https://example.com",
198198
"url": "drop",
199199
"steps": []any{"a"},

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

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,11 @@ spec:
3030
image: rg.fr-par.scw.cloud/funcscwriseriscvrunnerappqdvknz9s/riscv-runner:ubuntu-24.04-${TAG}
3131
imagePullPolicy: Always
3232
command: ["true"]
33+
# TODO: Enable 26.04 on machines; running out of disk space for now
34+
# - name: ubuntu-2604-image-cache
35+
# image: rg.fr-par.scw.cloud/funcscwriseriscvrunnerappqdvknz9s/riscv-runner:ubuntu-26.04-${TAG}
36+
# imagePullPolicy: Always
37+
# command: ["true"]
3338
containers:
3439
- name: device-plugin
3540
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)