diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index 8bef3db6d..914ad5672 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -35,7 +35,6 @@ jobs: uses: ./ci/images/debian10 with: args: ./ci/steps/test-unit.sh - test-e2e: needs: linux-amd64 runs-on: ubuntu-latest @@ -53,15 +52,17 @@ jobs: run: | cd release-packages && tar -xzf code-server*-linux-amd64.tar.gz - uses: microsoft/playwright-github-action@v1 - - name: Install dependencies and run tests - with: - args: ./ci/steps/test-e2e.sh + - name: Install dependencies and run end-to-end tests + run: | + ./release-packages/code-server*-linux-amd64/bin/code-server --home $CODE_SERVER_ADDRESS/healthz & + yarn --frozen-lockfile + yarn test:e2e - name: Upload test artifacts if: always() uses: actions/upload-artifact@v2 with: name: test-videos - path: ./test/e2e//videos + path: ./test/e2e/videos - name: Remove release packages and test artifacts run: rm -rf ./release-packages ./test/e2e/videos diff --git a/.gitignore b/.gitignore index e49888f40..45da9b42c 100644 --- a/.gitignore +++ b/.gitignore @@ -16,5 +16,5 @@ node-* .home coverage **/.DS_Store -test/videos -test/screenshots +test/e2e/videos +test/e2e/screenshots diff --git a/ci/steps/test-e2e.sh b/ci/steps/test-e2e.sh index c1aa148a2..c43fbd07d 100755 --- a/ci/steps/test-e2e.sh +++ b/ci/steps/test-e2e.sh @@ -4,7 +4,7 @@ set -euo pipefail main() { cd "$(dirname "$0")/../.." - ./release-packages/code-server*-linux-amd64/bin/code-server --home $CODE_SERVER_ADDRESS/healthz & + "./release-packages/code-server*-linux-amd64/bin/code-server" --home "$CODE_SERVER_ADDRESS"/healthz & yarn --frozen-lockfile yarn test:e2e } diff --git a/test/utils/integration.ts b/test/utils/integration.ts new file mode 100644 index 000000000..c5101d0fb --- /dev/null +++ b/test/utils/integration.ts @@ -0,0 +1,21 @@ +import * as express from "express" +import { createApp } from "../../src/node/app" +import { parse, setDefaults, parseConfigFile, DefaultedArgs } from "../../src/node/cli" +import { register } from "../../src/node/routes" +import * as httpserver from "./httpserver" + +export async function setup( + argv: string[], + configFile?: string, +): Promise<[express.Application, express.Application, httpserver.HttpServer, DefaultedArgs]> { + argv = ["--bind-addr=localhost:0", ...argv] + + const cliArgs = parse(argv) + const configArgs = parseConfigFile(configFile || "", "test/integration.ts") + const args = await setDefaults(cliArgs, configArgs) + + const [app, wsApp, server] = await createApp(args) + await register(app, wsApp, server, args) + + return [app, wsApp, new httpserver.HttpServer(server), args] +}