Skip to content

Commit 53bed51

Browse files
committed
fetch release automatically from the list of vscodium github releases
1 parent acf6689 commit 53bed51

File tree

4 files changed

+63
-11
lines changed

4 files changed

+63
-11
lines changed

package.json

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -74,12 +74,6 @@
7474
"scope": "application",
7575
"default": true
7676
},
77-
"remote.SSH.vscodiumReleaseNumber": {
78-
"type": "string",
79-
"description": "The VSCodium specific release number to use with serverDownloadUrlTemplate, automatic if left empty. It needs to be provided to install with VSCode-OSS.",
80-
"scope": "application",
81-
"default": ""
82-
},
8377
"remote.SSH.serverDownloadUrlTemplate": {
8478
"type": "string",
8579
"description": "The URL from where the vscode server will be downloaded. You can use the following variables and they will be replaced dynamically:\n- ${quality}: vscode server quality, e.g. stable or insiders\n- ${version}: vscode server version, e.g. 1.69.0\n- ${commit}: vscode server release commit\n- ${arch}: vscode server arch, e.g. x64, armhf, arm64\n- ${release}: release number, vscodium only https://github.com/VSCodium/vscodium/pull/1192",
@@ -111,6 +105,12 @@
111105
"scope": "application",
112106
"default": ""
113107
},
108+
"remote.SSH.experimental.vscodiumReleaseNumber": {
109+
"type": "string",
110+
"description": "**Experimental:** The VSCodium specific release number to use with serverDownloadUrlTemplate, automatic if left empty.",
111+
"scope": "application",
112+
"default": ""
113+
},
114114
"remote.SSH.experimental.modifyMatchingCommit": {
115115
"type": "boolean",
116116
"description": "**Experimental:** When true, modify the commit value of the remote server to match the local host.",
@@ -375,6 +375,7 @@
375375
"dependencies": {
376376
"@jeanp413/ssh-config": "^4.3.1",
377377
"glob": "^9.3.1",
378+
"node-fetch": "^3.3.2",
378379
"simple-socks": "git+https://github.com/jeanp413/simple-socks#main",
379380
"socks": "^2.5.0",
380381
"ssh2": "git+https://github.com/jeanp413/ssh2#master"

src/fetchRelease.ts

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
import fetch from 'node-fetch';
2+
import Log from './common/logger';
3+
4+
5+
interface githubReleasesData {
6+
name: string;
7+
}
8+
9+
export async function fetchRelease(version: string, logger: Log): Promise<string> {
10+
11+
// Fetch github releases following: https://docs.github.com/en/rest/releases/releases?apiVersion=2022-11-28
12+
logger.info('Fetch the last release number of VSCodium corresponding to version ' + version);
13+
14+
let release = '';
15+
try {
16+
const response = await fetch("https://api.github.com/repos/VSCodium/vscodium/releases", {
17+
method: "GET",
18+
headers: {
19+
"Content-Type": "application/json",
20+
"Accept": "application/vnd.github+json",
21+
"X-GitHub-Api-Version": "2022-11-28",
22+
},
23+
});
24+
const data = await response.json() as Array<githubReleasesData>;
25+
let fullVersion: string;
26+
for (let releaseInfo of data) {
27+
fullVersion = releaseInfo.name;
28+
if (fullVersion.startsWith(version)) {
29+
logger.info('found release version: ' + fullVersion);
30+
31+
// Found a version match, it is the newer
32+
// Remove the version and the dot '.': 1.96.4.25026 -> 25026
33+
release = fullVersion.slice(version.length + 1);
34+
break;
35+
}
36+
}
37+
} catch (error) {
38+
logger.error('Error fetching releases:', error);
39+
}
40+
41+
return release;
42+
}

src/serverConfig.ts

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
import * as vscode from 'vscode';
22
import * as fs from 'fs';
33
import * as path from 'path';
4+
import { fetchRelease } from './fetchRelease';
5+
import Log from './common/logger';
46

57
let vscodeProductJson: any;
68
async function getVSCodeProductJson() {
@@ -23,18 +25,25 @@ export interface IServerConfig {
2325
modifyMatchingCommit: boolean;
2426
}
2527

26-
export async function getVSCodeServerConfig(): Promise<IServerConfig> {
28+
export async function getVSCodeServerConfig(logger: Log): Promise<IServerConfig> {
2729
const productJson = await getVSCodeProductJson();
2830

2931
const customServerBinaryName = vscode.workspace.getConfiguration('remote.SSH.experimental').get<string>('serverBinaryName', '');
3032
const customModifyMatchingCommit = vscode.workspace.getConfiguration('remote.SSH.experimental').get<boolean>('modifyMatchingCommit', false);
31-
const customRelease = vscode.workspace.getConfiguration('remote.SSH').get<string>('vscodiumReleaseNumber', '');
33+
34+
// Get release, if the option is provided or fetch it from the github releases
35+
const version = vscode.version.replace('-insider','');
36+
let customRelease = vscode.workspace.getConfiguration('remote.SSH.experimental').get<string>('vscodiumReleaseNumber', '');
37+
customRelease = customRelease || productJson.release;
38+
if (!customRelease) {
39+
customRelease = await fetchRelease(version, logger);
40+
}
3241

3342
return {
34-
version: vscode.version.replace('-insider',''),
43+
version: version,
3544
commit: productJson.commit,
3645
quality: productJson.quality,
37-
release: customRelease || productJson.release,
46+
release: customRelease,
3847
serverApplicationName: customServerBinaryName || productJson.serverApplicationName,
3948
serverDataFolderName: productJson.serverDataFolderName,
4049
serverDownloadUrlTemplate: productJson.serverDownloadUrlTemplate,

src/serverSetup.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,7 @@ export async function installCodeServer(conn: SSHConnection, serverDownloadUrlTe
7070

7171
const scriptId = crypto.randomBytes(12).toString('hex');
7272

73-
const vscodeServerConfig = await getVSCodeServerConfig();
73+
const vscodeServerConfig = await getVSCodeServerConfig(logger);
7474
const installOptions: ServerInstallOptions = {
7575
id: scriptId,
7676
version: vscodeServerConfig.version,

0 commit comments

Comments
 (0)