Skip to content
Open
Show file tree
Hide file tree
Changes from all 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