Skip to content

Commit 972c5df

Browse files
codenemericallam
authored andcommitted
Some fixtures will only use 1 package manager
1 parent 517c704 commit 972c5df

File tree

4 files changed

+70
-43
lines changed

4 files changed

+70
-43
lines changed

packages/cli-v3/e2e/fixtures/dep-to-add-scope-parsing/yarn.lock

Whitespace-only changes.

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

Lines changed: 51 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,21 @@
11
import { execa, execaNode } from "execa";
2-
import { readFileSync } from "node:fs";
2+
import { existsSync, readFileSync } from "node:fs";
33
import { mkdir, rename, rm } from "node:fs/promises";
44
import { join, resolve } from "node:path";
55

66
import { typecheckProject } from "../src/commands/deploy";
77
import { readConfig, ReadConfigFileResult } from "../src/utilities/configFiles";
8-
import { PackageManager } from "../src/utilities/getUserPackageManager";
8+
import {
9+
detectPackageManagerFromArtifacts,
10+
LOCKFILES,
11+
PackageManager,
12+
} from "../src/utilities/getUserPackageManager";
913
import { logger } from "../src/utilities/logger";
1014
import { compile } from "./compile";
1115
import { createContainerFile } from "./createContainerFile";
1216
import { createDeployHash } from "./createDeployHash";
1317
import { handleDependencies } from "./handleDependencies";
14-
import { Loglevel, LogLevelSchema, PackageManagerSchema } from "./schemas";
18+
import { E2EOptions, E2EOptionsSchema } from "./schemas";
1519
import allTestCases from "./testCases.json";
1620

1721
type TestCase = {
@@ -31,36 +35,36 @@ const testCases: TestCase[] = process.env.MOD
3135
? allTestCases.filter(({ name }) => process.env.MOD === name)
3236
: allTestCases;
3337

34-
let logLevel: Loglevel = "log";
35-
let packageManager: PackageManager = "npm";
38+
let options: E2EOptions;
3639

3740
try {
38-
logLevel = LogLevelSchema.parse(process.env.LOG);
41+
options = E2EOptionsSchema.parse({
42+
logLevel: process.env.LOG,
43+
packageManager: process.env.PM,
44+
});
3945
} catch (e) {
40-
console.error(e);
41-
console.log("Using default log level 'log'");
46+
options = {
47+
logLevel: "log",
48+
};
4249
}
4350

44-
logger.loggerLevel = logLevel;
45-
46-
try {
47-
packageManager = PackageManagerSchema.parse(process.env.PM);
48-
} catch (e) {
49-
console.error(e);
50-
console.log("Using default package manager 'npm'");
51-
}
51+
logger.loggerLevel = options.logLevel;
5252

5353
if (testCases.length > 0) {
54-
console.log(`Using ${packageManager}`);
55-
56-
describe.concurrent("bundling", () => {
54+
describe.concurrent("bundling", async () => {
5755
beforeAll(async () => {
5856
for (let testCase of testCases) {
5957
const { name } = testCase;
6058
const fixtureDir = resolve(join(process.cwd(), "e2e/fixtures", name));
6159
await rm(resolve(join(fixtureDir, ".trigger")), { force: true, recursive: true });
6260
await rm(resolve(join(fixtureDir, "node_modules")), { force: true, recursive: true });
63-
if (packageManager === "npm") {
61+
const packageManager: PackageManager = await parsepackageManager(options, fixtureDir);
62+
63+
if (
64+
packageManager === "npm" &&
65+
(existsSync(resolve(join(fixtureDir, "yarn.lock"))) ||
66+
existsSync(resolve(join(fixtureDir, "yarn.lock.copy"))))
67+
) {
6468
// `npm ci` & `npm install` will update an existing yarn.lock
6569
try {
6670
await rename(
@@ -90,10 +94,12 @@ if (testCases.length > 0) {
9094
});
9195

9296
afterAll(async () => {
93-
if (packageManager === "npm") {
94-
for (let testCase of testCases) {
95-
const { name } = testCase;
96-
const fixtureDir = resolve(join(process.cwd(), "e2e/fixtures", name));
97+
for (let testCase of testCases) {
98+
const { name } = testCase;
99+
const fixtureDir = resolve(join(process.cwd(), "e2e/fixtures", name));
100+
const packageManager: PackageManager = await parsepackageManager(options, fixtureDir);
101+
102+
if (packageManager === "npm") {
97103
try {
98104
await rename(
99105
resolve(join(fixtureDir, "yarn.lock.copy")),
@@ -116,8 +122,13 @@ if (testCases.length > 0) {
116122
wantInstallationError,
117123
} = testCase;
118124
const fixtureDir = resolve(join(process.cwd(), "e2e/fixtures", name));
125+
let shouldSkipFixture: boolean = false;
126+
const packageManager: PackageManager = await parsepackageManager(options, fixtureDir);
119127

120-
test(
128+
if (options.packageManager)
129+
shouldSkipFixture = !existsSync(resolve(fixtureDir, LOCKFILES[options.packageManager]));
130+
131+
test.skipIf(shouldSkipFixture)(
121132
`fixture '${name}'`,
122133
async () => {
123134
await expect(
@@ -316,3 +327,18 @@ function installArgs(packageManager: string) {
316327
throw new Error(`Unknown package manager '${packageManager}'`);
317328
}
318329
}
330+
331+
async function parsepackageManager(
332+
options: E2EOptions,
333+
fixtureDir: string
334+
): Promise<PackageManager> {
335+
let packageManager: PackageManager;
336+
337+
if (options.packageManager) {
338+
packageManager = options.packageManager;
339+
} else {
340+
packageManager = await detectPackageManagerFromArtifacts(fixtureDir);
341+
}
342+
343+
return packageManager;
344+
}

packages/cli-v3/e2e/schemas.ts

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,9 @@
11
import { z } from "zod";
22

3-
export const LogLevelSchema = z
4-
.enum(["debug", "info", "log", "warn", "error", "none"])
5-
.default("log");
6-
export type Loglevel = z.infer<typeof LogLevelSchema>;
7-
export const PackageManagerSchema = z.enum(["npm", "pnpm", "yarn"]).default("npm");
3+
const LogLevelSchema = z.enum(["debug", "info", "log", "warn", "error", "none"]).default("log");
4+
const PackageManagerSchema = z.enum(["npm", "pnpm", "yarn"]);
5+
export const E2EOptionsSchema = z.object({
6+
logLevel: LogLevelSchema,
7+
packageManager: PackageManagerSchema.optional(),
8+
});
9+
export type E2EOptions = z.infer<typeof E2EOptionsSchema>;

packages/cli-v3/src/utilities/getUserPackageManager.ts

Lines changed: 12 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,12 @@ import { basename } from "path";
33
import { logger } from "./logger";
44

55
export type PackageManager = "npm" | "pnpm" | "yarn";
6+
export const LOCKFILES = {
7+
yarn: "yarn.lock",
8+
pnpm: "pnpm-lock.yaml",
9+
npm: "package-lock.json",
10+
npmShrinkwrap: "npm-shrinkwrap.json",
11+
};
612

713
export async function getUserPackageManager(path: string): Promise<PackageManager> {
814
const packageManager = await detectPackageManager(path);
@@ -36,15 +42,8 @@ function detectPackageManagerFromCurrentCommand(): PackageManager {
3642
}
3743
}
3844

39-
async function detectPackageManagerFromArtifacts(path: string): Promise<PackageManager> {
40-
const artifacts = {
41-
yarn: "yarn.lock",
42-
pnpm: "pnpm-lock.yaml",
43-
npm: "package-lock.json",
44-
npmShrinkwrap: "npm-shrinkwrap.json",
45-
};
46-
47-
const foundPath = await findUp(Object.values(artifacts), { cwd: path });
45+
export async function detectPackageManagerFromArtifacts(path: string): Promise<PackageManager> {
46+
const foundPath = await findUp(Object.values(LOCKFILES), { cwd: path });
4847

4948
if (!foundPath) {
5049
throw new Error("Could not detect package manager from artifacts");
@@ -53,12 +52,12 @@ async function detectPackageManagerFromArtifacts(path: string): Promise<PackageM
5352
logger.debug("Found path from package manager artifacts", { foundPath });
5453

5554
switch (basename(foundPath)) {
56-
case artifacts.yarn:
55+
case LOCKFILES.yarn:
5756
return "yarn";
58-
case artifacts.pnpm:
57+
case LOCKFILES.pnpm:
5958
return "pnpm";
60-
case artifacts.npm:
61-
case artifacts.npmShrinkwrap:
59+
case LOCKFILES.npm:
60+
case LOCKFILES.npmShrinkwrap:
6261
return "npm";
6362
default:
6463
throw new Error(`Unhandled package manager detection path: ${foundPath}`);

0 commit comments

Comments
 (0)