Skip to content

Commit 49deb2e

Browse files
committed
Add script for updating Node version
1 parent 0be60f3 commit 49deb2e

File tree

3 files changed

+82
-11
lines changed

3 files changed

+82
-11
lines changed
Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
import { join, resolve } from "path";
2+
import { execSync } from "child_process";
3+
import { outputFile, readFile, readJSON } from "fs-extra";
4+
import { getVersionInformation } from "./util/vscode-versions";
5+
import { fetchJson } from "./util/fetch";
6+
7+
const extensionDirectory = resolve(__dirname, "..");
8+
9+
interface Release {
10+
tag_name: string;
11+
}
12+
13+
async function updateNodeVersion() {
14+
const latestVsCodeRelease = await fetchJson<Release>(
15+
"https://api.github.com/repos/microsoft/vscode/releases/latest",
16+
);
17+
const latestVsCodeVersion = latestVsCodeRelease.tag_name;
18+
19+
console.log(`Latest VS Code version is ${latestVsCodeVersion}`);
20+
21+
const versionInformation = await getVersionInformation(latestVsCodeVersion);
22+
console.log(
23+
`VS Code ${versionInformation.vscodeVersion} uses Electron ${versionInformation.electronVersion} and Node ${versionInformation.nodeVersion}`,
24+
);
25+
26+
let currentNodeVersion = (
27+
await readFile(join(extensionDirectory, ".nvmrc"), "utf8")
28+
).trim();
29+
if (currentNodeVersion.startsWith("v")) {
30+
currentNodeVersion = currentNodeVersion.slice(1);
31+
}
32+
33+
if (currentNodeVersion === versionInformation.nodeVersion) {
34+
console.log("Node version is already up to date");
35+
return;
36+
}
37+
38+
console.log("Node version needs to be updated, updating now");
39+
40+
await outputFile(
41+
join(extensionDirectory, ".nvmrc"),
42+
`v${versionInformation.nodeVersion}\n`,
43+
);
44+
45+
console.log("Updated .nvmrc");
46+
47+
const packageJson = await readJSON(
48+
join(extensionDirectory, "package.json"),
49+
"utf8",
50+
);
51+
52+
packageJson.engines.node = `^${versionInformation.nodeVersion}`;
53+
packageJson.devDependencies["@types/node"] =
54+
`${versionInformation.nodeVersion}`;
55+
56+
await outputFile(
57+
join(extensionDirectory, "package.json"),
58+
`${JSON.stringify(packageJson, null, 2)}\n`,
59+
);
60+
61+
console.log("Updated package.json, now running npm install");
62+
63+
execSync("npm install", { cwd: extensionDirectory, stdio: "inherit" });
64+
65+
console.log("Node version updated successfully");
66+
}
67+
68+
updateNodeVersion().catch((e: unknown) => {
69+
console.error(e);
70+
process.exit(2);
71+
});
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
export async function fetchJson<T>(url: string): Promise<T> {
2+
const response = await fetch(url);
3+
if (!response.ok) {
4+
throw new Error(
5+
`Could not fetch ${url}: ${response.status} ${response.statusText}`,
6+
);
7+
}
8+
9+
return (await response.json()) as T;
10+
}

extensions/ql-vscode/scripts/util/vscode-versions.ts

Lines changed: 1 addition & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,5 @@
11
import { minVersion } from "semver";
2-
3-
async function fetchJson<T>(url: string): Promise<T> {
4-
const response = await fetch(url);
5-
if (!response.ok) {
6-
throw new Error(
7-
`Could not fetch ${url}: ${response.status} ${response.statusText}`,
8-
);
9-
}
10-
11-
return (await response.json()) as T;
12-
}
2+
import { fetchJson } from "./fetch";
133

144
type VsCodePackageJson = {
155
devDependencies: {

0 commit comments

Comments
 (0)