|
1 | 1 | /* eslint-disable turbo/no-undeclared-env-vars */ |
2 | 2 |
|
3 | | -import os from 'node:os'; |
4 | 3 | import path from 'node:path'; |
5 | 4 |
|
6 | | -import { constants } from '../constants'; |
7 | 5 | import { stateFile } from '../models/stateFile'; |
8 | | -import { awaitableTreekill, fs, waitForServer } from '.'; |
9 | | -import { run } from './run'; |
| 6 | +import { getTempDir, killHttpServer, startHttpServer } from './httpServer'; |
10 | 7 |
|
11 | | -export const startClerkJsHttpServer = async () => { |
| 8 | +export const startClerkJsHttpServer = async (): Promise<void> => { |
12 | 9 | if (process.env.E2E_APP_CLERK_JS) { |
13 | 10 | return; |
14 | 11 | } |
15 | | - if (!process.env.CI) { |
16 | | - await copyClerkJsToTempDir(); |
17 | | - } |
18 | | - return serveFromTempDir(); |
19 | | -}; |
20 | | - |
21 | | -export const killClerkJsHttpServer = async () => { |
22 | | - const clerkJsHttpServerPid = stateFile.getClerkJsHttpServerPid(); |
23 | | - if (clerkJsHttpServerPid) { |
24 | | - console.log('Killing clerkJsHttpServer', clerkJsHttpServerPid); |
25 | | - await awaitableTreekill(clerkJsHttpServerPid, 'SIGKILL'); |
26 | | - } |
27 | | -}; |
28 | 12 |
|
29 | | -// If we are running the tests locally, then clerk.browser.js should be built already |
30 | | -// so we simply copy it from packages/clerk to the same location as CICD would install it |
31 | | -const copyClerkJsToTempDir = async () => { |
32 | | - const clerkJsTempDir = getClerkJsTempDir(); |
33 | | - await fs.remove(clerkJsTempDir); |
34 | | - await fs.ensureDir(clerkJsTempDir); |
35 | | - const packagesClerkJsDistPath = path.join(process.cwd(), 'packages/clerk-js/dist'); |
36 | | - fs.copySync(packagesClerkJsDistPath, clerkJsTempDir); |
37 | | -}; |
| 13 | + const clerkJsTempDir = getTempDir('clerk-js/node_modules/@clerk/clerk-js/dist', 'E2E_APP_CLERK_JS_DIR'); |
| 14 | + const sourceDir = path.join(process.cwd(), 'packages/clerk-js/dist'); |
38 | 15 |
|
39 | | -const serveFromTempDir = async () => { |
40 | | - console.log('Serving clerkJs from temp dir'); |
41 | | - const port = 18211; |
42 | | - const serverUrl = `http://localhost:${port}`; |
43 | | - const now = Date.now(); |
44 | | - const stdoutFilePath = path.resolve(constants.TMP_DIR, `clerkJsHttpServer.${now}.log`); |
45 | | - const stderrFilePath = path.resolve(constants.TMP_DIR, `clerkJsHttpServer.${now}.err.log`); |
46 | | - const clerkJsTempDir = getClerkJsTempDir(); |
47 | | - const proc = run(`node_modules/.bin/http-server ${clerkJsTempDir} -d --gzip --cors -a localhost`, { |
48 | | - cwd: process.cwd(), |
49 | | - env: { PORT: port.toString() }, |
50 | | - detached: true, |
51 | | - stdout: fs.openSync(stdoutFilePath, 'a'), |
52 | | - stderr: fs.openSync(stderrFilePath, 'a'), |
| 16 | + const { pid } = await startHttpServer({ |
| 17 | + name: 'clerkJs', |
| 18 | + port: 18211, |
| 19 | + sourceDir, |
| 20 | + targetTempDir: clerkJsTempDir, |
| 21 | + envVarOverride: 'E2E_APP_CLERK_JS', |
| 22 | + envVarDirOverride: 'E2E_APP_CLERK_JS_DIR', |
| 23 | + shouldCopyInLocal: true, |
53 | 24 | }); |
54 | | - stateFile.setClerkJsHttpServerPid(proc.pid); |
55 | | - await waitForServer(serverUrl, { log: console.log, maxAttempts: Infinity }); |
56 | | - console.log('clerk.browser.js is being served from', serverUrl); |
| 25 | + |
| 26 | + stateFile.setClerkJsHttpServerPid(pid); |
57 | 27 | }; |
58 | 28 |
|
59 | | -// The location where the clerk.browser.js is served from |
60 | | -// For simplicity, on CICD we install `@clerk/clerk-js` on osTemp |
61 | | -// so the actual clerk.browser.file is at osTemp/clerk-js/node_modules/@clerk/clerk-js/dist |
62 | | -// Locally, it's the osTemp/clerk-js/node_modules/@clerk/clerk-js/dist |
63 | | -// You can override it by setting the `E2E_APP_CLERK_JS_DIR` env variable |
64 | | -const getClerkJsTempDir = () => { |
65 | | - const osTempDir = process.env.E2E_APP_CLERK_JS_DIR || os.tmpdir(); |
66 | | - return path.join(osTempDir, ...'clerk-js/node_modules/@clerk/clerk-js/dist'.split('/')); |
| 29 | +export const killClerkJsHttpServer = async (): Promise<void> => { |
| 30 | + const clerkJsHttpServerPid = stateFile.getClerkJsHttpServerPid(); |
| 31 | + if (clerkJsHttpServerPid) { |
| 32 | + await killHttpServer(clerkJsHttpServerPid, 'clerkJs'); |
| 33 | + } |
67 | 34 | }; |
0 commit comments