Files
tkmind_go/documentation/src/components/LinuxDesktopInstallButtons.js
T

87 lines
3.0 KiB
JavaScript
Raw Normal View History

2025-06-19 16:47:06 -04:00
import Link from "@docusaurus/Link";
import { IconDownload } from "@site/src/components/icons/download";
2025-08-03 19:17:46 -04:00
import { useState, useEffect } from "react";
const FALLBACK_URL = "https://github.com/aaif-goose/goose/releases/latest";
2025-06-19 16:47:06 -04:00
const LinuxDesktopInstallButtons = () => {
2025-08-03 19:17:46 -04:00
const [downloadUrls, setDownloadUrls] = useState({
deb: FALLBACK_URL,
2026-01-14 12:21:54 -06:00
rpm: FALLBACK_URL,
flatpak: FALLBACK_URL
2025-08-03 19:17:46 -04:00
});
useEffect(() => {
const fetchLatestRelease = async () => {
try {
// Check cache first (1 hour expiry)
const cached = localStorage.getItem('goose-release-cache');
const cacheTime = localStorage.getItem('goose-release-cache-time');
const now = Date.now();
2026-01-14 12:21:54 -06:00
2025-08-03 19:17:46 -04:00
if (cached && cacheTime && (now - parseInt(cacheTime)) < 3600000) {
// Use cached data if less than 1 hour old
setDownloadUrls(JSON.parse(cached));
return;
}
// Fetch latest release from GitHub API
const response = await fetch('https://api.github.com/repos/aaif-goose/goose/releases/latest');
2025-08-03 19:17:46 -04:00
if (!response.ok) throw new Error('API request failed');
2026-01-14 12:21:54 -06:00
2025-08-03 19:17:46 -04:00
const release = await response.json();
const assets = release.assets || [];
2026-01-14 12:21:54 -06:00
// Find DEB, RPM, and Flatpak files
2025-08-03 19:17:46 -04:00
const debAsset = assets.find(asset => asset.name.includes('.deb') && asset.name.includes('amd64'));
const rpmAsset = assets.find(asset => asset.name.includes('.rpm') && asset.name.includes('x86_64'));
2026-01-14 12:21:54 -06:00
const flatpakAsset = assets.find(asset => asset.name.endsWith('.flatpak'));
const newUrls = {
deb: debAsset?.browser_download_url || FALLBACK_URL,
rpm: rpmAsset?.browser_download_url || FALLBACK_URL,
flatpak: flatpakAsset?.browser_download_url || FALLBACK_URL
};
// Update state and cache
setDownloadUrls(newUrls);
localStorage.setItem('goose-release-cache', JSON.stringify(newUrls));
localStorage.setItem('goose-release-cache-time', now.toString());
2025-08-03 19:17:46 -04:00
} catch (error) {
console.warn('Failed to fetch latest release, using fallback URLs:', error);
// Fallback URLs are already set in initial state
}
};
fetchLatestRelease();
}, []);
2025-06-19 16:47:06 -04:00
return (
<div>
2025-12-17 17:22:03 -08:00
<p>Click one of the buttons below to download goose Desktop for Linux:</p>
2025-06-19 16:47:06 -04:00
<div className="pill-button" style={{ display: 'flex', gap: '0.5rem', flexWrap: 'wrap' }}>
<Link
className="button button--primary button--lg"
2025-08-03 19:17:46 -04:00
to={downloadUrls.deb}
2025-06-19 16:47:06 -04:00
>
<IconDownload /> DEB Package (Ubuntu/Debian)
2025-06-19 16:47:06 -04:00
</Link>
<Link
className="button button--primary button--lg"
2025-08-03 19:17:46 -04:00
to={downloadUrls.rpm}
2025-06-19 16:47:06 -04:00
>
<IconDownload /> RPM Package (RHEL/Fedora)
2025-06-19 16:47:06 -04:00
</Link>
2026-01-14 12:21:54 -06:00
<Link
className="button button--primary button--lg"
to={downloadUrls.flatpak}
>
<IconDownload /> Flatpak (Universal)
</Link>
2025-06-19 16:47:06 -04:00
</div>
</div>
);
};
2026-01-14 12:21:54 -06:00
export default LinuxDesktopInstallButtons;