summaryrefslogtreecommitdiffhomepage
path: root/packages
diff options
context:
space:
mode:
authorBrendan Allan <[email protected]>2025-12-18 01:59:23 +0800
committerGitHub <[email protected]>2025-12-18 01:59:23 +0800
commit2a3a8a1ec2d71ae27730226cfac37830c7a5dfd7 (patch)
tree79728cd1d3ae8cf926df9fd7bae1326a8a1b6112 /packages
parent69e562125d26b246f0374fad2de7d0d34092100c (diff)
downloadopencode-2a3a8a1ec2d71ae27730226cfac37830c7a5dfd7.tar.gz
opencode-2a3a8a1ec2d71ae27730226cfac37830c7a5dfd7.zip
console: use download proxy to rename mac and windows installers (#5697)
Co-authored-by: GitHub Action <[email protected]>
Diffstat (limited to 'packages')
-rw-r--r--packages/console/app/src/routes/download/[platform].ts21
-rw-r--r--packages/console/app/src/routes/download/index.tsx29
-rw-r--r--packages/console/app/src/routes/download/types.ts1
3 files changed, 36 insertions, 15 deletions
diff --git a/packages/console/app/src/routes/download/[platform].ts b/packages/console/app/src/routes/download/[platform].ts
index 94e3957c6..486b6bf6c 100644
--- a/packages/console/app/src/routes/download/[platform].ts
+++ b/packages/console/app/src/routes/download/[platform].ts
@@ -1,20 +1,37 @@
import { APIEvent } from "@solidjs/start"
+import { DownloadPlatform } from "./types"
const assetNames: Record<string, string> = {
"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-rpm": "opencode-desktop-linux-x86_64.rpm",
-}
+} satisfies Record<DownloadPlatform, string>
+
+// Doing this on the server lets us preserve the original name for platforms we don't care to rename for
+const downloadNames: Record<string, string> = {
+ "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 })
- return await fetch(`https://github.com/sst/opencode/releases/latest/download/${assetName}`, {
+ const resp = await fetch(`https://github.com/sst/opencode/releases/latest/download/${assetName}`, {
cf: {
+ // in case gh releases has rate limits
cacheTtl: 60 * 60 * 24,
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 d8d2b5bb0..4f4258755 100644
--- a/packages/console/app/src/routes/download/index.tsx
+++ b/packages/console/app/src/routes/download/index.tsx
@@ -9,6 +9,7 @@ import desktopAppIcon from "../../asset/lander/opencode-desktop-icon.png"
import { Legal } from "~/component/legal"
import { config } from "~/config"
import { createSignal, onMount, Show, JSX } from "solid-js"
+import { DownloadPlatform } from "./types"
type OS = "macOS" | "Windows" | "Linux" | null
@@ -23,20 +24,23 @@ function detectOS(): OS {
return null
}
-function getDownloadUrl(os: OS): string {
- const base = "https://github.com/sst/opencode/releases/latest/download"
+function getDownloadPlatform(os: OS): DownloadPlatform {
switch (os) {
case "macOS":
- return `${base}/opencode-desktop-darwin-aarch64.dmg`
+ return "darwin-aarch64-dmg"
case "Windows":
- return `${base}/opencode-desktop-windows-x64.exe`
+ return "windows-x64-nsis"
case "Linux":
- return `${base}/opencode-desktop-linux-amd64.deb`
+ return "linux-x64-deb"
default:
- return `${base}/opencode-desktop-darwin-aarch64.dmg`
+ return "darwin-aarch64-dmg"
}
}
+function getDownloadHref(platform: DownloadPlatform) {
+ return `/download/${platform}`
+}
+
function IconDownload(props: JSX.SvgSVGAttributes<SVGSVGElement>) {
return (
<svg width="20" height="20" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg" {...props}>
@@ -60,7 +64,6 @@ function CopyStatus() {
}
export default function Download() {
- const downloadUrl = "https://github.com/sst/opencode/releases/latest/download"
const [detectedOS, setDetectedOS] = createSignal<OS>(null)
onMount(() => {
@@ -92,7 +95,7 @@ export default function Download() {
<h1>Download OpenCode</h1>
<p>Available in Beta for macOS, Windows, and Linux</p>
<Show when={detectedOS()}>
- <a href={getDownloadUrl(detectedOS())} data-component="download-button">
+ <a href={getDownloadHref(getDownloadPlatform(detectedOS()))} data-component="download-button">
<IconDownload />
Download for {detectedOS()}
</a>
@@ -166,7 +169,7 @@ export default function Download() {
macOS (<span data-slot="hide-narrow">Apple </span>Silicon)
</span>
</div>
- <a href={downloadUrl + "/opencode-desktop-darwin-aarch64.dmg"} data-component="action-button">
+ <a href={getDownloadHref("darwin-aarch64-dmg")} data-component="action-button">
Download
</a>
</div>
@@ -182,7 +185,7 @@ export default function Download() {
</span>
<span>macOS (Intel)</span>
</div>
- <a href={downloadUrl + "/opencode-desktop-darwin-x64.dmg"} data-component="action-button">
+ <a href={getDownloadHref("darwin-x64-dmg")} data-component="action-button">
Download
</a>
</div>
@@ -205,7 +208,7 @@ export default function Download() {
</span>
<span>Windows (x64)</span>
</div>
- <a href={downloadUrl + "/opencode-desktop-windows-x64.exe"} data-component="action-button">
+ <a href={getDownloadHref("windows-x64-nsis")} data-component="action-button">
Download
</a>
</div>
@@ -221,7 +224,7 @@ export default function Download() {
</span>
<span>Linux (.deb)</span>
</div>
- <a href={downloadUrl + "/opencode-desktop-linux-amd64.deb"} data-component="action-button">
+ <a href={getDownloadHref("linux-x64-deb")} data-component="action-button">
Download
</a>
</div>
@@ -237,7 +240,7 @@ export default function Download() {
</span>
<span>Linux (.rpm)</span>
</div>
- <a href={downloadUrl + "/opencode-desktop-linux-x86_64.rpm"} data-component="action-button">
+ <a href={getDownloadHref("linux-x64-rpm")} data-component="action-button">
Download
</a>
</div>
diff --git a/packages/console/app/src/routes/download/types.ts b/packages/console/app/src/routes/download/types.ts
new file mode 100644
index 000000000..adf71880d
--- /dev/null
+++ b/packages/console/app/src/routes/download/types.ts
@@ -0,0 +1 @@
+export type DownloadPlatform = `darwin-${"x64" | "aarch64"}-dmg` | "windows-x64-nsis" | `linux-x64-${"deb" | "rpm"}`