Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
eab54ee7ed |
|||
|
e9ff0582aa |
2 changed files with 26 additions and 0 deletions
|
|
@ -18,6 +18,9 @@ const UNION_SLOTS = 'amd64/alpine324';
|
|||
const UA_R45_MUSL = 'R (4.5.3 x86_64-pc-linux-musl x86_64 linux-musl)';
|
||||
const UA_R46_MUSL = 'R (4.6.0 x86_64-pc-linux-musl x86_64 linux-musl)';
|
||||
const UA_R45_ALPINE = 'R/4.5.3 R (4.5.3 x86_64-pc-linux-musl x86_64 linux-musl) Alpine Linux 3.24';
|
||||
const UA_R45_RESOLUTE = 'R/4.5.3 (Ubuntu 26.04) (aarch64-unknown-linux-gnu aarch64 linux-gnu)';
|
||||
const UA_R45_FUTURE_UBUNTU =
|
||||
'R/4.5.3 (Ubuntu 28.04; codename=dynamic-dugong) (aarch64-unknown-linux-gnu aarch64 linux-gnu)';
|
||||
const UA_R45_DARWIN = 'R (4.5.1 aarch64-apple-darwin20 aarch64 darwin20)';
|
||||
const UA_CURL = 'curl/8.0.1';
|
||||
|
||||
|
|
@ -141,6 +144,22 @@ Deno.test('rpkgs-router', async (t) => {
|
|||
assertEquals(res.location, `https://cran.rpkgs.com${SLOT}/4.5/PACKAGES.gz`);
|
||||
});
|
||||
|
||||
await t.step('resolves Ubuntu 26.04 to the resolute slot', async () => {
|
||||
const res = await probe('/src/contrib/PACKAGES.gz', UA_R45_RESOLUTE);
|
||||
assertEquals(
|
||||
res.location,
|
||||
'https://cran.rpkgs.com/arm64/resolute/latest/src/contrib/PACKAGES.gz',
|
||||
);
|
||||
});
|
||||
|
||||
await t.step('resolves a future Ubuntu release from its codename', async () => {
|
||||
const res = await probe('/src/contrib/PACKAGES.gz', UA_R45_FUTURE_UBUNTU);
|
||||
assertEquals(
|
||||
res.location,
|
||||
'https://cran.rpkgs.com/arm64/dynamic-dugong/latest/src/contrib/PACKAGES.gz',
|
||||
);
|
||||
});
|
||||
|
||||
await t.step('sends an unidentifiable distro to CRAN', async () => {
|
||||
const res = await probe('/src/contrib/PACKAGES.gz', UA_R45_MUSL);
|
||||
assertEquals(res.location, 'https://cran.r-project.org/src/contrib/PACKAGES.gz');
|
||||
|
|
|
|||
|
|
@ -58,7 +58,9 @@ 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',
|
||||
'22.04': 'jammy',
|
||||
};
|
||||
|
|
@ -136,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