From 17e96ec15455f8486cbaa4da0ba56be3fe8a15f3 Mon Sep 17 00:00:00 2001 From: sharon wang Date: Wed, 26 Feb 2025 14:13:47 -0500 Subject: [PATCH 1/4] use posit cdn instead of github release asset for download url --- .../src/test/positron/testElectron.ts | 21 +++++++------------ 1 file changed, 7 insertions(+), 14 deletions(-) diff --git a/extensions/positron-python/src/test/positron/testElectron.ts b/extensions/positron-python/src/test/positron/testElectron.ts index 027ea153228..7571bb8b2ab 100644 --- a/extensions/positron-python/src/test/positron/testElectron.ts +++ b/extensions/positron-python/src/test/positron/testElectron.ts @@ -240,22 +240,11 @@ export async function downloadAndUnzipPositron(): Promise<{ version: string; exe case 'darwin': suffix = '.dmg'; break; - case 'linux': - suffix = '.deb'; - break; - case 'win32': - suffix = '.exe'; - break; default: { throw new Error(`Unsupported platform: ${platform}.`); } } - // eslint-disable-next-line @typescript-eslint/no-explicit-any - const asset = release.assets.find((a: any) => a.name.endsWith(suffix)); - if (!asset) { - throw new Error(`No asset found with suffix ${suffix} for platform ${platform}`); - } const version = release.tag_name; console.log(`Using ${version} build of Positron`); @@ -280,8 +269,13 @@ export async function downloadAndUnzipPositron(): Promise<{ version: string; exe } } - console.log(`Downloading Positron for ${platform} from ${asset.url}`); - const url = new URL(asset.url); + const fileName = `Positron-${version}${suffix}`; + const url = URL.parse(`https://cdn.posit.co/positron/prereleases/mac/universal/${fileName}`); + if (!url) { + throw new Error(`Failed to parse URL: ${url}`); + } + + console.log(`Downloading Positron for ${platform} from ${url.href}`); // Reset the Accept header to download the asset. headers.Accept = 'application/octet-stream'; const dlRequestOptions: https.RequestOptions = { @@ -300,7 +294,6 @@ export async function downloadAndUnzipPositron(): Promise<{ version: string; exe // Download to a temporary file. const tempDir = await fs.mkdtemp(path.join(os.tmpdir(), 'positron-')); - const fileName = asset.name; const downloadPath = path.join(tempDir, fileName); try { const writer = fs.createWriteStream(downloadPath); From f1af522e008e87a0548530414706004c82f80a24 Mon Sep 17 00:00:00 2001 From: sharon wang Date: Wed, 26 Feb 2025 14:31:22 -0500 Subject: [PATCH 2/4] import url lib to get URL --- .../src/test/positron/testElectron.ts | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/extensions/positron-python/src/test/positron/testElectron.ts b/extensions/positron-python/src/test/positron/testElectron.ts index 7571bb8b2ab..84be0503d51 100644 --- a/extensions/positron-python/src/test/positron/testElectron.ts +++ b/extensions/positron-python/src/test/positron/testElectron.ts @@ -1,5 +1,5 @@ /*--------------------------------------------------------------------------------------------- - * Copyright (C) 2024 Posit Software, PBC. All rights reserved. + * Copyright (C) 2025 Posit Software, PBC. All rights reserved. * Licensed under the Elastic License 2.0. See LICENSE.txt for license information. *--------------------------------------------------------------------------------------------*/ @@ -9,6 +9,7 @@ import { IncomingMessage } from 'http'; import * as https from 'https'; import * as os from 'os'; import * as path from 'path'; +import { URL } from 'url'; import { defaultCachePath } from '@vscode/test-electron/out/download'; import { TestOptions } from '@vscode/test-electron/out/runTest'; import { runTests as vscodeRunTests } from '@vscode/test-electron'; @@ -270,20 +271,20 @@ export async function downloadAndUnzipPositron(): Promise<{ version: string; exe } const fileName = `Positron-${version}${suffix}`; - const url = URL.parse(`https://cdn.posit.co/positron/prereleases/mac/universal/${fileName}`); - if (!url) { - throw new Error(`Failed to parse URL: ${url}`); + const downloadUrl = URL.parse(`https://cdn.posit.co/positron/prereleases/mac/universal/${fileName}`); + if (!downloadUrl) { + throw new Error(`Failed to parse URL: ${downloadUrl}`); } - console.log(`Downloading Positron for ${platform} from ${url.href}`); + console.log(`Downloading Positron for ${platform} from ${downloadUrl.href}`); // Reset the Accept header to download the asset. headers.Accept = 'application/octet-stream'; const dlRequestOptions: https.RequestOptions = { headers, method: 'GET', - protocol: url.protocol, - hostname: url.hostname, - path: url.pathname, + protocol: downloadUrl.protocol, + hostname: downloadUrl.hostname, + path: downloadUrl.pathname, }; let dlResponse = await httpsGetAsync(dlRequestOptions); From 9e1bd86d96e45555f7fdda93bed67e6071fc54c5 Mon Sep 17 00:00:00 2001 From: sharon wang Date: Wed, 26 Feb 2025 15:58:59 -0500 Subject: [PATCH 3/4] use `new URL` instead of `URL.parse()` --- .../src/test/positron/testElectron.ts | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/extensions/positron-python/src/test/positron/testElectron.ts b/extensions/positron-python/src/test/positron/testElectron.ts index 84be0503d51..59146b0ad2d 100644 --- a/extensions/positron-python/src/test/positron/testElectron.ts +++ b/extensions/positron-python/src/test/positron/testElectron.ts @@ -9,7 +9,6 @@ import { IncomingMessage } from 'http'; import * as https from 'https'; import * as os from 'os'; import * as path from 'path'; -import { URL } from 'url'; import { defaultCachePath } from '@vscode/test-electron/out/download'; import { TestOptions } from '@vscode/test-electron/out/runTest'; import { runTests as vscodeRunTests } from '@vscode/test-electron'; @@ -271,20 +270,20 @@ export async function downloadAndUnzipPositron(): Promise<{ version: string; exe } const fileName = `Positron-${version}${suffix}`; - const downloadUrl = URL.parse(`https://cdn.posit.co/positron/prereleases/mac/universal/${fileName}`); - if (!downloadUrl) { - throw new Error(`Failed to parse URL: ${downloadUrl}`); + const url = new URL(`https://cdn.posit.co/positron/prereleases/mac/universal/${fileName}`); + if (!url) { + throw new Error(`Failed to parse URL: ${url}`); } - console.log(`Downloading Positron for ${platform} from ${downloadUrl.href}`); + console.log(`Downloading Positron for ${platform} from ${url.href}`); // Reset the Accept header to download the asset. headers.Accept = 'application/octet-stream'; const dlRequestOptions: https.RequestOptions = { headers, method: 'GET', - protocol: downloadUrl.protocol, - hostname: downloadUrl.hostname, - path: downloadUrl.pathname, + protocol: url.protocol, + hostname: url.hostname, + path: url.pathname, }; let dlResponse = await httpsGetAsync(dlRequestOptions); From 626b5bbd7878d18a8830900cbda4e041bbd54468 Mon Sep 17 00:00:00 2001 From: sharon wang Date: Wed, 26 Feb 2025 16:08:54 -0500 Subject: [PATCH 4/4] use switch for consistency with previous platform checks --- .../src/test/positron/testElectron.ts | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/extensions/positron-python/src/test/positron/testElectron.ts b/extensions/positron-python/src/test/positron/testElectron.ts index 59146b0ad2d..d234b2bd19e 100644 --- a/extensions/positron-python/src/test/positron/testElectron.ts +++ b/extensions/positron-python/src/test/positron/testElectron.ts @@ -269,10 +269,15 @@ export async function downloadAndUnzipPositron(): Promise<{ version: string; exe } } - const fileName = `Positron-${version}${suffix}`; - const url = new URL(`https://cdn.posit.co/positron/prereleases/mac/universal/${fileName}`); - if (!url) { - throw new Error(`Failed to parse URL: ${url}`); + let fileName: string; + let url: URL | undefined; + switch (platform) { + case 'darwin': + fileName = `Positron-${version}${suffix}`; + url = new URL(`https://cdn.posit.co/positron/prereleases/mac/universal/${fileName}`); + break; + default: + throw new Error(`Unsupported platform: ${platform}`); } console.log(`Downloading Positron for ${platform} from ${url.href}`);