ui: fetch all Fedora releasevers (43+44), not just hardcoded 43
Some checks failed
deploy-ui / build-and-deploy (push) Has been cancelled
Some checks failed
deploy-ui / build-and-deploy (push) Has been cancelled
Fixes packages only showing one Fedora version (e.g. claude-desktop's fc44 build was invisible). Generalises the hook to iterate RELEASEVERS.
This commit is contained in:
@@ -1,16 +1,41 @@
|
|||||||
import { useEffect, useState } from "react";
|
import { useEffect, useState } from "react";
|
||||||
import type { Channel, PackagesManifest, PackageVersion } from "../types/packages.ts";
|
import type { Channel, PackagesManifest, PackageVersion } from "../types/packages.ts";
|
||||||
|
|
||||||
const STABLE_URL = "/fedora/43/x86_64/packages.json";
|
// Fedora releasevers served at rpm.lair.cafe. Add new versions here as trees
|
||||||
const UNSTABLE_URL = "/fedora/43/x86_64/unstable/packages.json";
|
// come online; missing trees (e.g. a releasever with no unstable repo) 404 and
|
||||||
|
// are skipped gracefully.
|
||||||
|
const RELEASEVERS = ["43", "44"];
|
||||||
|
|
||||||
|
interface ManifestSource {
|
||||||
|
url: string;
|
||||||
|
channel: Channel;
|
||||||
|
releasever: string;
|
||||||
|
}
|
||||||
|
|
||||||
|
function manifestSources(): ManifestSource[] {
|
||||||
|
return RELEASEVERS.flatMap((releasever) => [
|
||||||
|
{
|
||||||
|
url: `/fedora/${releasever}/x86_64/packages.json`,
|
||||||
|
channel: "stable" as const,
|
||||||
|
releasever,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
url: `/fedora/${releasever}/x86_64/unstable/packages.json`,
|
||||||
|
channel: "unstable" as const,
|
||||||
|
releasever,
|
||||||
|
},
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
|
||||||
function tagPackages(
|
function tagPackages(
|
||||||
manifest: PackagesManifest,
|
manifest: PackagesManifest,
|
||||||
channel: Channel,
|
channel: Channel,
|
||||||
|
releasever: string,
|
||||||
): PackageVersion[] {
|
): PackageVersion[] {
|
||||||
return manifest.packages.map((p) => ({
|
return manifest.packages.map((p) => ({
|
||||||
...p,
|
...p,
|
||||||
channel,
|
channel,
|
||||||
|
releasever,
|
||||||
baseUrl: manifest.baseUrl,
|
baseUrl: manifest.baseUrl,
|
||||||
}));
|
}));
|
||||||
}
|
}
|
||||||
@@ -24,24 +49,20 @@ export function usePackages() {
|
|||||||
let cancelled = false;
|
let cancelled = false;
|
||||||
|
|
||||||
const fetchManifest = async (
|
const fetchManifest = async (
|
||||||
url: string,
|
source: ManifestSource,
|
||||||
channel: Channel,
|
|
||||||
): Promise<PackageVersion[]> => {
|
): Promise<PackageVersion[]> => {
|
||||||
const res = await fetch(url);
|
const res = await fetch(source.url);
|
||||||
if (!res.ok) {
|
if (!res.ok) {
|
||||||
if (res.status === 404) return [];
|
if (res.status === 404) return [];
|
||||||
throw new Error(`HTTP ${res.status} fetching ${channel} manifest`);
|
throw new Error(`HTTP ${res.status} fetching ${source.url}`);
|
||||||
}
|
}
|
||||||
const data = (await res.json()) as PackagesManifest;
|
const data = (await res.json()) as PackagesManifest;
|
||||||
return tagPackages(data, channel);
|
return tagPackages(data, source.channel, source.releasever);
|
||||||
};
|
};
|
||||||
|
|
||||||
Promise.all([
|
Promise.all(manifestSources().map(fetchManifest))
|
||||||
fetchManifest(STABLE_URL, "stable"),
|
.then((lists) => {
|
||||||
fetchManifest(UNSTABLE_URL, "unstable"),
|
if (!cancelled) setPackages(lists.flat());
|
||||||
])
|
|
||||||
.then(([stable, unstable]) => {
|
|
||||||
if (!cancelled) setPackages([...stable, ...unstable]);
|
|
||||||
})
|
})
|
||||||
.catch((err: unknown) => {
|
.catch((err: unknown) => {
|
||||||
if (!cancelled)
|
if (!cancelled)
|
||||||
|
|||||||
Reference in New Issue
Block a user