Skip to content

Commit d61311f

Browse files
codenemericallam
authored andcommitted
Get rid of global namespace, fix parallelism
1 parent f0e391d commit d61311f

File tree

6 files changed

+63
-99
lines changed

6 files changed

+63
-99
lines changed

packages/cli-v3/e2e/createDeployHash.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ type CreateDeployHashOptions = {
88
};
99

1010
export async function createDeployHash(options: CreateDeployHashOptions) {
11-
const { entryPointOutputFile, workerOutputFile } = options;
11+
const { dependencies, entryPointOutputFile, workerOutputFile } = options;
1212

1313
// COPIED FROM compileProject()
1414
const contentHasher = createHash("sha256");

packages/cli-v3/e2e/fixtures.config.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,5 +57,7 @@ export const fixturesConfig: TestCase[] = [
5757
{
5858
id: "trigger-dir-not-found",
5959
skipTypecheck: true,
60+
// Should fail way before
61+
wantCompilationError: true,
6062
},
6163
];

packages/cli-v3/e2e/handleDependencies.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -110,5 +110,5 @@ export async function handleDependencies(options: HandleDependenciesOptions) {
110110
throw new SkipLoggingError("Failed to resolve dependencies");
111111
}
112112

113-
return { dependencies };
113+
return dependencies;
114114
}

packages/cli-v3/e2e/index.test.ts

Lines changed: 59 additions & 83 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ import { join, resolve } from "node:path";
55
import { rimraf } from "rimraf";
66

77
import { typecheckProject } from "../src/commands/deploy";
8-
import { readConfig, ReadConfigFileResult } from "../src/utilities/configFiles";
8+
import { readConfig, ReadConfigFileResult, ReadConfigResult } from "../src/utilities/configFiles";
99
import {
1010
detectPackageManagerFromArtifacts,
1111
LOCKFILES,
@@ -18,14 +18,15 @@ import { createDeployHash } from "./createDeployHash";
1818
import { handleDependencies } from "./handleDependencies";
1919
import { E2EOptions, E2EOptionsSchema } from "./schemas";
2020
import { fixturesConfig, TestCase } from "./fixtures.config";
21+
import { Metafile, OutputFile } from "esbuild";
2122

2223
interface E2EFixtureTest extends TestCase {
2324
dir: string;
24-
tempDir: string;
2525
packageManager: PackageManager;
26+
tempDir: string;
2627
}
2728

28-
const TIMEOUT = 180_000;
29+
const TIMEOUT = 120_000;
2930

3031
const testCases: TestCase[] = process.env.MOD
3132
? fixturesConfig.filter(({ id }) => process.env.MOD === id)
@@ -65,18 +66,11 @@ if (testCases.length > 0) {
6566
await rename(resolve(join(dir, "yarn.lock.copy")), resolve(join(dir, "yarn.lock")));
6667
}
6768
}
68-
});
69-
70-
afterEach<E2EFixtureTest>(async ({ dir, packageManager }) => {
71-
delete global.resolvedConfig;
72-
73-
delete global.entryPointMetaOutput;
74-
delete global.entryPointOutputFile;
75-
delete global.workerMetaOutput;
76-
delete global.workerOutputFile;
7769

78-
delete global.dependencies;
70+
await installFixtureDeps(dir, packageManager);
71+
}, TIMEOUT);
7972

73+
afterEach<E2EFixtureTest>(async ({ dir, packageManager }) => {
8074
if (packageManager === "npm") {
8175
try {
8276
await rename(resolve(join(dir, "yarn.lock.copy")), resolve(join(dir, "yarn.lock")));
@@ -123,86 +117,53 @@ if (testCases.length > 0) {
123117
skip();
124118
}
125119

126-
await expect(
127-
(async () => {
128-
if (["pnpm", "yarn"].includes(packageManager)) {
129-
const buffer = readFileSync(resolve(join(dir, "package.json")), "utf8");
130-
const pkgJSON = JSON.parse(buffer.toString());
131-
const version = pkgJSON.engines[packageManager];
132-
console.log(
133-
`Detected ${packageManager}@${version} from package.json 'engines' field`
134-
);
135-
const { stdout, stderr } = await execa(
136-
"corepack",
137-
["use", `${packageManager}@${version}`],
138-
{
139-
cwd: dir,
140-
}
141-
);
142-
console.log(stdout);
143-
if (stderr) console.error(stderr);
144-
} else {
145-
const { stdout, stderr } = await execa(
146-
packageManager,
147-
installArgs(packageManager),
148-
{
149-
cwd: dir,
150-
NODE_PATH: resolve(join(dir, "node_modules")),
151-
}
152-
);
153-
console.log(stdout);
154-
if (stderr) console.error(stderr);
155-
}
156-
})(),
157-
"installs fixture dependencies"
158-
).resolves.not.toThrowError();
159-
120+
let resolvedConfig: ReadConfigResult;
160121
const configExpect = expect(
161122
(async () => {
162-
global.resolvedConfig = await readConfig(dir, { cwd: dir });
123+
resolvedConfig = await readConfig(dir, { cwd: dir });
163124
})(),
164125
wantConfigNotFoundError || wantConfigInvalidError
165126
? "does not resolve config"
166127
: "resolves config"
167128
);
129+
168130
if (wantConfigNotFoundError) {
169131
await configExpect.rejects.toThrowError();
170-
} else {
171-
await configExpect.resolves.not.toThrowError();
132+
return;
172133
}
173134

174-
if (wantConfigNotFoundError || wantConfigInvalidError) {
175-
if (wantConfigInvalidError) {
176-
expect(global.resolvedConfig!.status).toBe("error");
177-
}
135+
await configExpect.resolves.not.toThrowError();
136+
137+
if (wantConfigInvalidError) {
138+
expect(resolvedConfig!.status).toBe("error");
178139
return;
179140
}
180141

181-
expect(global.resolvedConfig).not.toBe("error");
142+
expect(resolvedConfig!).not.toBe("error");
182143

183144
if (!skipTypecheck) {
184145
await expect(
185146
(async () =>
186-
await typecheckProject((global.resolvedConfig as ReadConfigFileResult).config))(),
147+
await typecheckProject((resolvedConfig! as ReadConfigFileResult).config))(),
187148
"typechecks"
188149
).resolves.not.toThrowError();
189150
}
190151

152+
let entryPointMetaOutput: Metafile["outputs"]["out/stdin.js"];
153+
let entryPointOutputFile: OutputFile;
154+
let workerMetaOutput: Metafile["outputs"]["out/stdin.js"];
155+
let workerOutputFile: OutputFile;
156+
191157
const compileExpect = expect(
192158
(async () => {
193-
const {
194-
workerMetaOutput,
195-
workerOutputFile,
196-
entryPointMetaOutput,
197-
entryPointOutputFile,
198-
} = await compile({
199-
resolvedConfig: global.resolvedConfig!,
159+
const compilationResult = await compile({
160+
resolvedConfig: resolvedConfig!,
200161
tempDir,
201162
});
202-
global.entryPointMetaOutput = entryPointMetaOutput;
203-
global.entryPointOutputFile = entryPointOutputFile;
204-
global.workerMetaOutput = workerMetaOutput;
205-
global.workerOutputFile = workerOutputFile;
163+
entryPointMetaOutput = compilationResult.entryPointMetaOutput;
164+
entryPointOutputFile = compilationResult.entryPointOutputFile;
165+
workerMetaOutput = compilationResult.workerMetaOutput;
166+
workerOutputFile = compilationResult.workerOutputFile;
206167
})(),
207168
wantCompilationError ? "does not compile" : "compiles"
208169
);
@@ -214,6 +175,8 @@ if (testCases.length > 0) {
214175

215176
await compileExpect.resolves.not.toThrowError();
216177

178+
let dependencies: { [k: string]: string };
179+
217180
if (resolveEnv) {
218181
for (let envKey in resolveEnv) {
219182
vi.stubEnv(envKey, resolveEnv[envKey]!);
@@ -222,14 +185,13 @@ if (testCases.length > 0) {
222185

223186
const depsExpectation = expect(
224187
(async () => {
225-
const { dependencies } = await handleDependencies({
226-
entryPointMetaOutput: global.entryPointMetaOutput!,
227-
metaOutput: global.workerMetaOutput!,
228-
resolvedConfig: global.resolvedConfig!,
188+
dependencies = await handleDependencies({
189+
entryPointMetaOutput: entryPointMetaOutput!,
190+
metaOutput: workerMetaOutput!,
191+
resolvedConfig: resolvedConfig!,
229192
tempDir,
230193
packageManager,
231194
});
232-
global.dependencies = dependencies;
233195
})(),
234196
wantDependenciesError ? "does not resolve dependencies" : "resolves dependencies"
235197
);
@@ -248,7 +210,7 @@ if (testCases.length > 0) {
248210
await expect(
249211
(async () => {
250212
await createContainerFile({
251-
resolvedConfig: global.resolvedConfig!,
213+
resolvedConfig: resolvedConfig!,
252214
tempDir,
253215
});
254216
})(),
@@ -258,9 +220,9 @@ if (testCases.length > 0) {
258220
await expect(
259221
(async () => {
260222
await createDeployHash({
261-
dependencies: global.dependencies!,
262-
entryPointOutputFile: global.entryPointOutputFile!,
263-
workerOutputFile: global.workerOutputFile!,
223+
dependencies: dependencies!,
224+
entryPointOutputFile: entryPointOutputFile!,
225+
workerOutputFile: workerOutputFile!,
264226
});
265227
})(),
266228
"creates deploy hash"
@@ -278,13 +240,6 @@ if (testCases.length > 0) {
278240
);
279241
console.log(installStdout);
280242
if (installStderr) console.error(installStderr);
281-
282-
const { stdout, stderr } = await execa("npm", ["cache", "clean", "--force"], {
283-
cwd: tempDir,
284-
NODE_PATH: resolve(join(tempDir, "node_modules")),
285-
});
286-
console.log(stdout);
287-
if (stderr) console.error(stderr);
288243
})(),
289244
wantInstallationError ? "does not install dependencies" : "installs dependencies"
290245
);
@@ -327,6 +282,27 @@ if (testCases.length > 0) {
327282
throw new Error("Nothing to test");
328283
}
329284

285+
async function installFixtureDeps(dir: string, packageManager: PackageManager) {
286+
if (["pnpm", "yarn"].includes(packageManager)) {
287+
const buffer = readFileSync(resolve(join(dir, "package.json")), "utf8");
288+
const pkgJSON = JSON.parse(buffer.toString());
289+
const version = pkgJSON.engines[packageManager];
290+
console.log(`Detected ${packageManager}@${version} from package.json 'engines' field`);
291+
const { stdout, stderr } = await execa("corepack", ["use", `${packageManager}@${version}`], {
292+
cwd: dir,
293+
});
294+
console.log(stdout);
295+
if (stderr) console.error(stderr);
296+
} else {
297+
const { stdout, stderr } = await execa(packageManager, installArgs(packageManager), {
298+
cwd: dir,
299+
NODE_PATH: resolve(join(dir, "node_modules")),
300+
});
301+
console.log(stdout);
302+
if (stderr) console.error(stderr);
303+
}
304+
}
305+
330306
function installArgs(packageManager: string) {
331307
switch (packageManager) {
332308
case "bun":

packages/cli-v3/e2e/vite.config.js

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@ import { configDefaults, defineConfig } from "vitest/config";
22

33
export default defineConfig({
44
test: {
5-
setupFiles: ["e2e/vitest.d.ts"],
65
globals: true,
76
exclude: [...configDefaults.exclude, "src/**/*"],
87
},

packages/cli-v3/e2e/vitest.d.ts

Lines changed: 0 additions & 13 deletions
This file was deleted.

0 commit comments

Comments
 (0)