feat: add flatpak support for linux (#6387)

Signed-off-by: The-Best-Codes <bestcodes.official@gmail.com>
This commit is contained in:
BestCodes
2026-01-14 12:21:54 -06:00
committed by GitHub
parent eaa05f9636
commit 20b8cbd41b
10 changed files with 723 additions and 490 deletions
@@ -7,7 +7,8 @@ const FALLBACK_URL = "https://github.com/block/goose/releases/latest";
const LinuxDesktopInstallButtons = () => {
const [downloadUrls, setDownloadUrls] = useState({
deb: FALLBACK_URL,
rpm: FALLBACK_URL
rpm: FALLBACK_URL,
flatpak: FALLBACK_URL
});
useEffect(() => {
@@ -17,7 +18,7 @@ const LinuxDesktopInstallButtons = () => {
const cached = localStorage.getItem('goose-release-cache');
const cacheTime = localStorage.getItem('goose-release-cache-time');
const now = Date.now();
if (cached && cacheTime && (now - parseInt(cacheTime)) < 3600000) {
// Use cached data if less than 1 hour old
setDownloadUrls(JSON.parse(cached));
@@ -27,25 +28,25 @@ const LinuxDesktopInstallButtons = () => {
// Fetch latest release from GitHub API
const response = await fetch('https://api.github.com/repos/block/goose/releases/latest');
if (!response.ok) throw new Error('API request failed');
const release = await response.json();
const assets = release.assets || [];
// Find DEB and RPM files
// Find DEB, RPM, and Flatpak files
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'));
if (debAsset && rpmAsset) {
const newUrls = {
deb: debAsset.browser_download_url,
rpm: rpmAsset.browser_download_url
};
// Update state and cache
setDownloadUrls(newUrls);
localStorage.setItem('goose-release-cache', JSON.stringify(newUrls));
localStorage.setItem('goose-release-cache-time', now.toString());
}
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());
} catch (error) {
console.warn('Failed to fetch latest release, using fallback URLs:', error);
// Fallback URLs are already set in initial state
@@ -71,9 +72,15 @@ const LinuxDesktopInstallButtons = () => {
>
<IconDownload /> RPM Package (RHEL/Fedora)
</Link>
<Link
className="button button--primary button--lg"
to={downloadUrls.flatpak}
>
<IconDownload /> Flatpak (Universal)
</Link>
</div>
</div>
);
};
export default LinuxDesktopInstallButtons;
export default LinuxDesktopInstallButtons;