feat(cdn): derive Ubuntu routes from codenames (#174)
## Motivation Ubuntu release codenames cannot be derived from version numbers, so the edge router currently needs a code change for every Ubuntu release. The generic repository setup can already read `VERSION_CODENAME` from `/etc/os-release` and send it in the user agent. ## Changes - Prefer a strictly validated `codename=<name>` token for Ubuntu slot routing. - Retain the existing version-to-codename table for clients using the previous user-agent format. - Add a future Ubuntu 28.04 regression case whose codename does not exist in the middleware table. ## User-agent format `R/4.6.1 (Ubuntu 26.04; codename=resolute) (aarch64-unknown-linux-gnu)` ## Verification - `just edge-test`, 1 test with 16 steps passed. - `git diff --check` Reviewed-on: #174
This commit is contained in:
parent
a8820e6e90
commit
b0d58f3f7c
1 changed files with 16 additions and 0 deletions
|
|
@ -58,6 +58,7 @@ const MACOS_BIN_REGEX =
|
|||
const RHEL_REGEX = /(almalinux|rocky)[^\d]*(\d+)/i;
|
||||
|
||||
const UBUNTU_REGEX = /Ubuntu ([\d.]+)/i;
|
||||
const UBUNTU_CODENAME_REGEX = /Ubuntu [\d.]+;\s*codename=([a-z][a-z0-9-]*)/i;
|
||||
const UBUNTU_CODENAMES: Record<string, string> = {
|
||||
'26.04': 'resolute',
|
||||
'24.04': 'noble',
|
||||
|
|
@ -137,6 +138,11 @@ function parseSlot(userAgent: string): string | null {
|
|||
|
||||
const ubuntu = userAgent.match(UBUNTU_REGEX);
|
||||
if (ubuntu) {
|
||||
const codenameMatch = userAgent.match(UBUNTU_CODENAME_REGEX);
|
||||
if (codenameMatch) {
|
||||
return `${arch}/${codenameMatch[1].toLowerCase()}`;
|
||||
}
|
||||
|
||||
const codename = UBUNTU_CODENAMES[ubuntu[1]];
|
||||
if (codename) {
|
||||
return `${arch}/${codename}`;
|
||||
|
|
|
|||
Loading…
Reference in a new issue