From 855de8f09ef41909dc65a51adf4b954272a51dd2 Mon Sep 17 00:00:00 2001 From: Nate Sesti Date: Wed, 9 Aug 2023 18:06:11 -0700 Subject: ci: :green_heart: testing testing in ci --- extension/src/continueIdeClient.ts | 13 +++++++------ extension/src/test-suite/environmentSetup.test.ts | 12 ++++++++---- 2 files changed, 15 insertions(+), 10 deletions(-) (limited to 'extension/src') diff --git a/extension/src/continueIdeClient.ts b/extension/src/continueIdeClient.ts index d89093ca..5b9e285d 100644 --- a/extension/src/continueIdeClient.ts +++ b/extension/src/continueIdeClient.ts @@ -12,7 +12,7 @@ import { rejectSuggestionCommand, } from "./suggestions"; import { FileEditWithFullContents } from "../schema/FileEditWithFullContents"; -import * as fs from 'fs'; +import * as fs from "fs"; import { WebsocketMessenger } from "./util/messenger"; import { diffManager } from "./diffs"; const os = require("os"); @@ -30,13 +30,12 @@ class IdeProtocolClient { private _lastReloadTime: number = 16; private _reconnectionTimeouts: NodeJS.Timeout[] = []; - private _sessionId: string | null = null; + sessionId: string | null = null; private _serverUrl: string; private _newWebsocketMessenger() { const requestUrl = - this._serverUrl + - (this._sessionId ? `?session_id=${this._sessionId}` : ""); + this._serverUrl + (this.sessionId ? `?session_id=${this.sessionId}` : ""); const messenger = new WebsocketMessenger(requestUrl); this.messenger = messenger; @@ -383,7 +382,9 @@ class IdeProtocolClient { async getUserSecret(key: string) { // Check if secret already exists in VS Code settings (global) let secret = vscode.workspace.getConfiguration("continue").get(key); - if (typeof secret !== "undefined" && secret !== null) {return secret;} + if (typeof secret !== "undefined" && secret !== null) { + return secret; + } // If not, ask user for secret secret = await vscode.window.showInputBox({ @@ -420,7 +421,7 @@ class IdeProtocolClient { console.log("Getting session ID"); const resp = await this.messenger?.sendAndReceive("getSessionId", {}); console.log("New Continue session with ID: ", resp.sessionId); - this._sessionId = resp.sessionId; + this.sessionId = resp.sessionId; return resp.sessionId; } diff --git a/extension/src/test-suite/environmentSetup.test.ts b/extension/src/test-suite/environmentSetup.test.ts index 9a478522..a6aa3433 100644 --- a/extension/src/test-suite/environmentSetup.test.ts +++ b/extension/src/test-suite/environmentSetup.test.ts @@ -2,18 +2,22 @@ import { test, describe } from "mocha"; import * as assert from "assert"; import { getContinueServerUrl } from "../bridge"; -import { startContinuePythonServer } from "../activation/environmentSetup"; +import { ideProtocolClient } from "../activation/activate"; import fetch from "node-fetch"; +import fkill from "fkill"; describe("Can start python server", () => { test("Can start python server in under 10 seconds", async function () { - this.timeout(17_000); - await startContinuePythonServer(); + fkill(65432, { force: true, silent: true }); + const allowedTime = 10_000; + this.timeout(allowedTime + 1000); - await new Promise((resolve) => setTimeout(resolve, 15_000)); + // If successful, the server is started by the extension while we wait + await new Promise((resolve) => setTimeout(resolve, allowedTime)); // Check if server is running const serverUrl = getContinueServerUrl(); + console.log("Server URL: ", serverUrl); const response = await fetch(`${serverUrl}/health`); assert.equal(response.status, 200); }); -- cgit v1.2.3-70-g09d2 From a1fada4e7f0be2d5aa661aee483a59ba93bacb40 Mon Sep 17 00:00:00 2001 From: Nate Sesti Date: Wed, 9 Aug 2023 18:49:13 -0700 Subject: ci: :green_heart: install Xvfb to run headless electron on Linux --- .github/workflows/main.yaml | 20 ++++++++++++++++++++ extension/src/test-runner/runTestOnVSCodeHost.ts | 5 ++++- 2 files changed, 24 insertions(+), 1 deletion(-) (limited to 'extension/src') diff --git a/.github/workflows/main.yaml b/.github/workflows/main.yaml index 4f1e538c..8249b576 100644 --- a/.github/workflows/main.yaml +++ b/.github/workflows/main.yaml @@ -14,6 +14,8 @@ jobs: runs-on: ${{ matrix.os }} steps: + # Install Python requirements and build+upload binaries for each platform + - name: Check-out repository uses: actions/checkout@v3 @@ -55,6 +57,8 @@ jobs: - name: Checkout uses: actions/checkout@v2 + # Download corresponding binary artifact for the platform + - name: Create exe directory run: | mkdir extension/server/exe @@ -80,6 +84,8 @@ jobs: path: extension/server/exe/windows if: matrix.os == 'windows-latest' + # Setup Node.js and install dependencies + - name: Use Node.js 19.0.0 uses: actions/setup-node@v3 with: @@ -107,16 +113,26 @@ jobs: cd extension/react-app npm ci --legacy-peer-deps + # Run tests + - name: Package the extension run: | cd extension npm run package + - name: Install Xvfb for Linux + run: | + sudo apt-get install -y xvfb # Install Xvfb + Xvfb :99 & # Start Xvfb + export DISPLAY=:99 # Export the display number to the environment + if: matrix.os == 'ubuntu-20.04' + - name: Run extension tests run: | cd extension npm run test + # Package again and build+upload the .vsix - name: Remove exe directory and re-package run: | cd extension @@ -137,6 +153,8 @@ jobs: contents: write steps: + # Checkout and download .vsix artifact + - name: Checkout uses: actions/checkout@v2 @@ -146,6 +164,8 @@ jobs: name: vsix-artifact path: extension/build + # Publish the extension and commit/push the version change + - name: Publish run: | cd extension diff --git a/extension/src/test-runner/runTestOnVSCodeHost.ts b/extension/src/test-runner/runTestOnVSCodeHost.ts index 2a542ffc..21267c2d 100644 --- a/extension/src/test-runner/runTestOnVSCodeHost.ts +++ b/extension/src/test-runner/runTestOnVSCodeHost.ts @@ -11,7 +11,10 @@ async function main() { // The path to test runner // Passed to --extensionTestsPath - const extensionTestsPath = path.resolve(extensionDevelopmentPath, "out/test-runner/mochaRunner"); + const extensionTestsPath = path.resolve( + extensionDevelopmentPath, + "out/test-runner/mochaRunner" + ); // Download VS Code, unzip it and run the integration test await runTests({ extensionDevelopmentPath, extensionTestsPath }); -- cgit v1.2.3-70-g09d2 From 4636c9590154d6b5995948003da212eb25003750 Mon Sep 17 00:00:00 2001 From: Nate Sesti Date: Wed, 9 Aug 2023 20:56:11 -0700 Subject: fix: :bug: write out npm run package as package.js --- extension/package.json | 2 +- extension/scripts/package.js | 40 +++++++++++++++++++++++ extension/src/test-suite/environmentSetup.test.ts | 2 +- 3 files changed, 42 insertions(+), 2 deletions(-) create mode 100644 extension/scripts/package.js (limited to 'extension/src') diff --git a/extension/package.json b/extension/package.json index ea4d8c16..7cf2bc7d 100644 --- a/extension/package.json +++ b/extension/package.json @@ -195,7 +195,7 @@ "lint": "eslint src --ext ts", "build-test": "tsc && node esbuild.test.mjs", "test": "npm run build-test && node ./out/test-runner/runTestOnVSCodeHost.js", - "package": "npm install && npm run typegen && npm run clientgen && cd react-app && npm install && npm run build && cd .. && mkdir build && vsce package --out ./build" + "package": "node scripts/package.js" }, "devDependencies": { "@nestjs/common": "^8.4.7", diff --git a/extension/scripts/package.js b/extension/scripts/package.js new file mode 100644 index 00000000..4703ebc2 --- /dev/null +++ b/extension/scripts/package.js @@ -0,0 +1,40 @@ +const { exec } = require("child_process"); +const fs = require("fs"); + +exec("npm install", (error) => { + if (error) throw error; + console.log("npm install completed"); + + exec("npm run typegen", (error) => { + if (error) throw error; + console.log("npm run typegen completed"); + + exec("npm run clientgen", (error) => { + if (error) throw error; + console.log("npm run clientgen completed"); + + process.chdir("react-app"); + + exec("npm install", (error) => { + if (error) throw error; + console.log("npm install in react-app completed"); + + exec("npm run build", (error) => { + if (error) throw error; + console.log("npm run build in react-app completed"); + + process.chdir(".."); + + if (!fs.existsSync("build")) { + fs.mkdirSync("build"); + } + + exec("vsce package --out ./build", (error) => { + if (error) throw error; + console.log("vsce package completed"); + }); + }); + }); + }); + }); +}); diff --git a/extension/src/test-suite/environmentSetup.test.ts b/extension/src/test-suite/environmentSetup.test.ts index a6aa3433..a0d6cbaa 100644 --- a/extension/src/test-suite/environmentSetup.test.ts +++ b/extension/src/test-suite/environmentSetup.test.ts @@ -9,7 +9,7 @@ import fkill from "fkill"; describe("Can start python server", () => { test("Can start python server in under 10 seconds", async function () { fkill(65432, { force: true, silent: true }); - const allowedTime = 10_000; + const allowedTime = 15_000; this.timeout(allowedTime + 1000); // If successful, the server is started by the extension while we wait -- cgit v1.2.3-70-g09d2 From 08b1cfdd2f6f456df7344c16f5d229a0ccfb841b Mon Sep 17 00:00:00 2001 From: Nate Sesti Date: Wed, 9 Aug 2023 21:14:13 -0700 Subject: fix: :green_heart: increase testing timeout to allow for fkill --- extension/src/test-suite/environmentSetup.test.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'extension/src') diff --git a/extension/src/test-suite/environmentSetup.test.ts b/extension/src/test-suite/environmentSetup.test.ts index a0d6cbaa..8099e9ac 100644 --- a/extension/src/test-suite/environmentSetup.test.ts +++ b/extension/src/test-suite/environmentSetup.test.ts @@ -8,9 +8,9 @@ import fkill from "fkill"; describe("Can start python server", () => { test("Can start python server in under 10 seconds", async function () { - fkill(65432, { force: true, silent: true }); const allowedTime = 15_000; - this.timeout(allowedTime + 1000); + this.timeout(allowedTime + 10_000); + fkill(65432, { force: true, silent: true }); // If successful, the server is started by the extension while we wait await new Promise((resolve) => setTimeout(resolve, allowedTime)); -- cgit v1.2.3-70-g09d2 From ee4701dc45cd540728302ca8a09e9b7ce842597f Mon Sep 17 00:00:00 2001 From: Nate Sesti Date: Thu, 10 Aug 2023 01:59:02 -0700 Subject: fix: :bug: don't log stdout to console --- extension/src/activation/environmentSetup.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'extension/src') diff --git a/extension/src/activation/environmentSetup.ts b/extension/src/activation/environmentSetup.ts index f0e41ca9..748a5984 100644 --- a/extension/src/activation/environmentSetup.ts +++ b/extension/src/activation/environmentSetup.ts @@ -240,7 +240,7 @@ export async function startContinuePythonServer() { windowsHide: true, }); child.stdout.on("data", (data: any) => { - console.log(`stdout: ${data}`); + // console.log(`stdout: ${data}`); }); child.stderr.on("data", (data: any) => { console.log(`stderr: ${data}`); -- cgit v1.2.3-70-g09d2 From 40ec1a31a7cd37da8b75bbabf1f0d160bb7bec5d Mon Sep 17 00:00:00 2001 From: Nate Sesti Date: Thu, 10 Aug 2023 11:24:46 -0700 Subject: fix: :white_check_mark: allow longer wait in test --- extension/src/test-suite/environmentSetup.test.ts | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) (limited to 'extension/src') diff --git a/extension/src/test-suite/environmentSetup.test.ts b/extension/src/test-suite/environmentSetup.test.ts index 8099e9ac..d0406340 100644 --- a/extension/src/test-suite/environmentSetup.test.ts +++ b/extension/src/test-suite/environmentSetup.test.ts @@ -8,9 +8,14 @@ import fkill from "fkill"; describe("Can start python server", () => { test("Can start python server in under 10 seconds", async function () { - const allowedTime = 15_000; + const allowedTime = 25_000; this.timeout(allowedTime + 10_000); - fkill(65432, { force: true, silent: true }); + try { + fkill(65432, { force: true, silent: true }); + console.log("Killed existing server"); + } catch (e) { + console.log("No existing server: ", e); + } // If successful, the server is started by the extension while we wait await new Promise((resolve) => setTimeout(resolve, allowedTime)); -- cgit v1.2.3-70-g09d2