From ce17f9dd9451feae8b80f7d8054be5b72ce8d1fa Mon Sep 17 00:00:00 2001 From: Brendan Allan Date: Fri, 20 Feb 2026 22:33:21 +0800 Subject: desktop: publish betas to separate repo (#14376) --- .../src/routes/download/[channel]/[platform].ts | 41 ++++++++++++++++++++++ .../console/app/src/routes/download/[platform].ts | 38 -------------------- packages/console/app/src/routes/download/index.tsx | 22 ++++++------ 3 files changed, 52 insertions(+), 49 deletions(-) create mode 100644 packages/console/app/src/routes/download/[channel]/[platform].ts delete mode 100644 packages/console/app/src/routes/download/[platform].ts (limited to 'packages/console') diff --git a/packages/console/app/src/routes/download/[channel]/[platform].ts b/packages/console/app/src/routes/download/[channel]/[platform].ts new file mode 100644 index 000000000..9a5284263 --- /dev/null +++ b/packages/console/app/src/routes/download/[channel]/[platform].ts @@ -0,0 +1,41 @@ +import type { APIEvent } from "@solidjs/start" +import type { DownloadPlatform } from "../types" + +const assetNames: Record = { + "darwin-aarch64-dmg": "opencode-desktop-darwin-aarch64.dmg", + "darwin-x64-dmg": "opencode-desktop-darwin-x64.dmg", + "windows-x64-nsis": "opencode-desktop-windows-x64.exe", + "linux-x64-deb": "opencode-desktop-linux-amd64.deb", + "linux-x64-appimage": "opencode-desktop-linux-amd64.AppImage", + "linux-x64-rpm": "opencode-desktop-linux-x86_64.rpm", +} satisfies Record + +// Doing this on the server lets us preserve the original name for platforms we don't care to rename for +const downloadNames: Record = { + "darwin-aarch64-dmg": "OpenCode Desktop.dmg", + "darwin-x64-dmg": "OpenCode Desktop.dmg", + "windows-x64-nsis": "OpenCode Desktop Installer.exe", +} satisfies { [K in DownloadPlatform]?: string } + +export async function GET({ params: { platform, channel } }: APIEvent) { + const assetName = assetNames[platform] + if (!assetName) return new Response("Not Found", { status: 404 }) + + const resp = await fetch( + `https://github.com/anomalyco/${channel === "stable" ? "opencode" : "opencode-beta"}/releases/latest/download/${assetName}`, + { + cf: { + // in case gh releases has rate limits + cacheTtl: 60 * 5, + cacheEverything: true, + }, + } as any, + ) + + const downloadName = downloadNames[platform] + + const headers = new Headers(resp.headers) + if (downloadName) headers.set("content-disposition", `attachment; filename="${downloadName}"`) + + return new Response(resp.body, { ...resp, headers }) +} diff --git a/packages/console/app/src/routes/download/[platform].ts b/packages/console/app/src/routes/download/[platform].ts deleted file mode 100644 index 2c30a8036..000000000 --- a/packages/console/app/src/routes/download/[platform].ts +++ /dev/null @@ -1,38 +0,0 @@ -import { APIEvent } from "@solidjs/start" -import { DownloadPlatform } from "./types" - -const assetNames: Record = { - "darwin-aarch64-dmg": "opencode-desktop-darwin-aarch64.dmg", - "darwin-x64-dmg": "opencode-desktop-darwin-x64.dmg", - "windows-x64-nsis": "opencode-desktop-windows-x64.exe", - "linux-x64-deb": "opencode-desktop-linux-amd64.deb", - "linux-x64-appimage": "opencode-desktop-linux-amd64.AppImage", - "linux-x64-rpm": "opencode-desktop-linux-x86_64.rpm", -} satisfies Record - -// Doing this on the server lets us preserve the original name for platforms we don't care to rename for -const downloadNames: Record = { - "darwin-aarch64-dmg": "OpenCode Desktop.dmg", - "darwin-x64-dmg": "OpenCode Desktop.dmg", - "windows-x64-nsis": "OpenCode Desktop Installer.exe", -} satisfies { [K in DownloadPlatform]?: string } - -export async function GET({ params: { platform } }: APIEvent) { - const assetName = assetNames[platform] - if (!assetName) return new Response("Not Found", { status: 404 }) - - const resp = await fetch(`https://github.com/anomalyco/opencode/releases/latest/download/${assetName}`, { - cf: { - // in case gh releases has rate limits - cacheTtl: 60 * 5, - cacheEverything: true, - }, - } as any) - - const downloadName = downloadNames[platform] - - const headers = new Headers(resp.headers) - if (downloadName) headers.set("content-disposition", `attachment; filename="${downloadName}"`) - - return new Response(resp.body, { ...resp, headers }) -} diff --git a/packages/console/app/src/routes/download/index.tsx b/packages/console/app/src/routes/download/index.tsx index e5e4e9750..0278d8622 100644 --- a/packages/console/app/src/routes/download/index.tsx +++ b/packages/console/app/src/routes/download/index.tsx @@ -1,18 +1,18 @@ import "./index.css" -import { Title, Meta } from "@solidjs/meta" -import { A, createAsync, query } from "@solidjs/router" -import { Header } from "~/component/header" -import { Footer } from "~/component/footer" -import { IconCopy, IconCheck } from "~/component/icon" +import { Meta, Title } from "@solidjs/meta" +import { A } from "@solidjs/router" +import { createSignal, type JSX, onMount, Show } from "solid-js" import { Faq } from "~/component/faq" -import desktopAppIcon from "../../asset/lander/opencode-desktop-icon.png" +import { Footer } from "~/component/footer" +import { Header } from "~/component/header" +import { IconCheck, IconCopy } from "~/component/icon" import { Legal } from "~/component/legal" +import { LocaleLinks } from "~/component/locale-links" import { config } from "~/config" -import { createSignal, onMount, Show, JSX } from "solid-js" -import { DownloadPlatform } from "./types" import { useI18n } from "~/context/i18n" import { useLanguage } from "~/context/language" -import { LocaleLinks } from "~/component/locale-links" +import desktopAppIcon from "../../asset/lander/opencode-desktop-icon.png" +import type { DownloadPlatform } from "./types" type OS = "macOS" | "Windows" | "Linux" | null @@ -40,8 +40,8 @@ function getDownloadPlatform(os: OS): DownloadPlatform { } } -function getDownloadHref(platform: DownloadPlatform) { - return `/download/${platform}` +function getDownloadHref(platform: DownloadPlatform, channel: "stable" | "beta" = "stable") { + return `/download/${channel}/${platform}` } function IconDownload(props: JSX.SvgSVGAttributes) { -- cgit v1.2.3