Skip to content
Merged
Show file tree
Hide file tree
Changes from 2 commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 0 additions & 1 deletion packages/ci/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,6 @@
"ansis": "^3.3.2",
"glob": "^11.0.1",
"simple-git": "^3.20.0",
"yaml": "^2.5.1",
"zod": "^4.2.1"
},
"files": [
Expand Down
5 changes: 0 additions & 5 deletions packages/ci/src/index.ts
Original file line number Diff line number Diff line change
@@ -1,10 +1,5 @@
export type { SourceFileIssue } from './lib/issues.js';
export type * from './lib/models.js';
export {
isMonorepoTool,
MONOREPO_TOOLS,
type MonorepoTool,
} from './lib/monorepo/index.js';
export { runInCI } from './lib/run.js';
export { configPatternsSchema } from './lib/schemas.js';
export {
Expand Down
2 changes: 1 addition & 1 deletion packages/ci/src/lib/models.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import type { Format, PersistConfig, UploadConfig } from '@code-pushup/models';
import type { MonorepoTool } from '@code-pushup/utils';
import type { SourceFileIssue } from './issues.js';
import type { MonorepoTool } from './monorepo/index.js';

/**
* Customization options for {@link runInCI}
Expand Down
14 changes: 0 additions & 14 deletions packages/ci/src/lib/monorepo/detect-tool.ts

This file was deleted.

3 changes: 2 additions & 1 deletion packages/ci/src/lib/monorepo/handlers/index.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import type { MonorepoTool, MonorepoToolHandler } from '../tools.js';
import type { MonorepoTool } from '@code-pushup/utils';
import type { MonorepoToolHandler } from '../tools.js';
import { npmHandler } from './npm.js';
import { nxHandler } from './nx.js';
import { pnpmHandler } from './pnpm.js';
Expand Down
11 changes: 3 additions & 8 deletions packages/ci/src/lib/monorepo/handlers/npm.ts
Original file line number Diff line number Diff line change
@@ -1,21 +1,16 @@
import path from 'node:path';
import { fileExists } from '@code-pushup/utils';
import {
MONOREPO_TOOL_DETECTORS,
hasCodePushUpDependency,
hasScript,
hasWorkspacesEnabled,
listWorkspaces,
} from '../packages.js';
} from '@code-pushup/utils';
import type { MonorepoToolHandler } from '../tools.js';

export const npmHandler: MonorepoToolHandler = {
tool: 'npm',

async isConfigured(options) {
return (
(await fileExists(path.join(options.cwd, 'package-lock.json'))) &&
(await hasWorkspacesEnabled(options.cwd))
);
return MONOREPO_TOOL_DETECTORS.npm(options.cwd);
},

async listProjects(options) {
Expand Down
5 changes: 2 additions & 3 deletions packages/ci/src/lib/monorepo/handlers/nx.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
import path from 'node:path';
import {
MONOREPO_TOOL_DETECTORS,
executeProcess,
fileExists,
interpolate,
stringifyError,
toArray,
Expand All @@ -13,7 +12,7 @@ export const nxHandler: MonorepoToolHandler = {

async isConfigured(options) {
return (
(await fileExists(path.join(options.cwd, 'nx.json'))) &&
(await MONOREPO_TOOL_DETECTORS.nx(options.cwd)) &&
(
await executeProcess({
command: 'npx',
Expand Down
19 changes: 6 additions & 13 deletions packages/ci/src/lib/monorepo/handlers/pnpm.ts
Original file line number Diff line number Diff line change
@@ -1,30 +1,23 @@
import path from 'node:path';
import * as YAML from 'yaml';
import { fileExists, readTextFile } from '@code-pushup/utils';
import {
MONOREPO_TOOL_DETECTORS,
hasCodePushUpDependency,
hasScript,
listPackages,
readPnpmWorkspacePatterns,
readRootPackageJson,
} from '../packages.js';
} from '@code-pushup/utils';
import type { MonorepoToolHandler } from '../tools.js';

const WORKSPACE_FILE = 'pnpm-workspace.yaml';

export const pnpmHandler: MonorepoToolHandler = {
tool: 'pnpm',

async isConfigured(options) {
return (
(await fileExists(path.join(options.cwd, WORKSPACE_FILE))) &&
(await fileExists(path.join(options.cwd, 'package.json')))
);
return MONOREPO_TOOL_DETECTORS.pnpm(options.cwd);
},

async listProjects(options) {
const yaml = await readTextFile(path.join(options.cwd, WORKSPACE_FILE));
const workspace = YAML.parse(yaml) as { packages?: string[] };
const packages = await listPackages(options.cwd, workspace.packages);
const patterns = await readPnpmWorkspacePatterns(options.cwd);
const packages = await listPackages(options.cwd, patterns);
const rootPackageJson = await readRootPackageJson(options.cwd);
return packages
.filter(
Expand Down
4 changes: 2 additions & 2 deletions packages/ci/src/lib/monorepo/handlers/turbo.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import path from 'node:path';
import { fileExists, readJsonFile } from '@code-pushup/utils';
import { MONOREPO_TOOL_DETECTORS, readJsonFile } from '@code-pushup/utils';
import type { MonorepoToolHandler } from '../tools.js';
import { npmHandler } from './npm.js';
import { pnpmHandler } from './pnpm.js';
Expand All @@ -17,7 +17,7 @@ export const turboHandler: MonorepoToolHandler = {
async isConfigured(options) {
const configPath = path.join(options.cwd, 'turbo.json');
return (
(await fileExists(configPath)) &&
(await MONOREPO_TOOL_DETECTORS.turbo(options.cwd)) &&
options.task in (await readJsonFile<TurboConfig>(configPath)).tasks
);
},
Expand Down
12 changes: 4 additions & 8 deletions packages/ci/src/lib/monorepo/handlers/yarn.ts
Original file line number Diff line number Diff line change
@@ -1,21 +1,17 @@
import path from 'node:path';
import { executeProcess, fileExists } from '@code-pushup/utils';
import {
MONOREPO_TOOL_DETECTORS,
executeProcess,
hasCodePushUpDependency,
hasScript,
hasWorkspacesEnabled,
listWorkspaces,
} from '../packages.js';
} from '@code-pushup/utils';
import type { MonorepoToolHandler } from '../tools.js';

export const yarnHandler: MonorepoToolHandler = {
tool: 'yarn',

async isConfigured(options) {
return (
(await fileExists(path.join(options.cwd, 'yarn.lock'))) &&
(await hasWorkspacesEnabled(options.cwd))
);
return MONOREPO_TOOL_DETECTORS.yarn(options.cwd);
},

async listProjects(options) {
Expand Down
7 changes: 1 addition & 6 deletions packages/ci/src/lib/monorepo/index.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,2 @@
export { listMonorepoProjects, type RunManyCommand } from './list-projects.js';
export {
isMonorepoTool,
MONOREPO_TOOLS,
type MonorepoTool,
type ProjectConfig,
} from './tools.js';
export type { ProjectConfig } from './tools.js';
15 changes: 7 additions & 8 deletions packages/ci/src/lib/monorepo/list-projects.ts
Original file line number Diff line number Diff line change
@@ -1,15 +1,14 @@
import { glob } from 'glob';
import path from 'node:path';
import {
type MonorepoTool,
detectMonorepoTool,
listPackages,
} from '@code-pushup/utils';
import { logDebug, logInfo } from '../log.js';
import type { Settings } from '../models.js';
import { detectMonorepoTool } from './detect-tool.js';
import { getToolHandler } from './handlers/index.js';
import { listPackages } from './packages.js';
import type {
MonorepoHandlerOptions,
MonorepoTool,
ProjectConfig,
} from './tools.js';
import type { MonorepoHandlerOptions, ProjectConfig } from './tools.js';

export type MonorepoProjects = {
tool: MonorepoTool | null;
Expand Down Expand Up @@ -74,7 +73,7 @@ async function resolveMonorepoTool(
return settings.monorepo;
}

const tool = await detectMonorepoTool(options);
const tool = await detectMonorepoTool(options.cwd);
if (tool) {
logInfo(`Auto-detected monorepo tool ${tool}`);
} else {
Expand Down
7 changes: 1 addition & 6 deletions packages/ci/src/lib/monorepo/tools.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
export const MONOREPO_TOOLS = ['nx', 'turbo', 'yarn', 'pnpm', 'npm'] as const;
export type MonorepoTool = (typeof MONOREPO_TOOLS)[number];
import type { MonorepoTool } from '@code-pushup/utils';

export type MonorepoToolHandler = {
tool: MonorepoTool;
Expand Down Expand Up @@ -28,7 +27,3 @@ export type ProjectConfig = {
bin: string;
directory?: string;
};

export function isMonorepoTool(value: string): value is MonorepoTool {
return MONOREPO_TOOLS.includes(value as MonorepoTool);
}
3 changes: 1 addition & 2 deletions packages/ci/src/lib/run.int.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ import {
teardownTestFolder,
} from '@code-pushup/test-utils';
import * as utils from '@code-pushup/utils';
import { logger } from '@code-pushup/utils';
import { type MonorepoTool, logger } from '@code-pushup/utils';
import type {
Comment,
GitBranch,
Expand All @@ -37,7 +37,6 @@ import type {
ProviderAPIClient,
RunResult,
} from './models.js';
import type { MonorepoTool } from './monorepo/index.js';
import { runInCI } from './run.js';

vi.mock('@code-pushup/portal-client', async importOriginal => {
Expand Down
6 changes: 6 additions & 0 deletions packages/create-cli/src/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ import { parsePluginSlugs, validatePluginSlugs } from './lib/setup/plugins.js';
import {
CONFIG_FILE_FORMATS,
type PluginSetupBinding,
SETUP_MODES,
} from './lib/setup/types.js';
import { runSetupWizard } from './lib/setup/wizard.js';

Expand Down Expand Up @@ -33,6 +34,11 @@ const argv = await yargs(hideBin(process.argv))
describe: 'Comma-separated plugin slugs to include (e.g. eslint,coverage)',
coerce: parsePluginSlugs,
})
.option('mode', {
type: 'string',
choices: SETUP_MODES,
describe: 'Setup mode (default: auto-detected from project)',
})
.check(parsed => {
validatePluginSlugs(bindings, parsed.plugins);
return true;
Expand Down
Loading