aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/packages/turbo-ignore/src/ignore.ts
diff options
context:
space:
mode:
Diffstat (limited to 'packages/turbo-ignore/src/ignore.ts')
-rw-r--r--packages/turbo-ignore/src/ignore.ts125
1 files changed, 0 insertions, 125 deletions
diff --git a/packages/turbo-ignore/src/ignore.ts b/packages/turbo-ignore/src/ignore.ts
deleted file mode 100644
index a6f8f2e..0000000
--- a/packages/turbo-ignore/src/ignore.ts
+++ /dev/null
@@ -1,125 +0,0 @@
-import { exec } from "child_process";
-import path from "path";
-import { getTurboRoot } from "@turbo/utils";
-import { getComparison } from "./getComparison";
-import { getTask } from "./getTask";
-import { getWorkspace } from "./getWorkspace";
-import { info, warn, error } from "./logger";
-import { shouldWarn } from "./errors";
-import { TurboIgnoreArgs } from "./types";
-import { checkCommit } from "./checkCommit";
-
-function ignoreBuild() {
- console.log("⏭ Ignoring the change");
- return process.exit(0);
-}
-
-function continueBuild() {
- console.log("✓ Proceeding with deployment");
- return process.exit(1);
-}
-
-export default function turboIgnore({ args }: { args: TurboIgnoreArgs }) {
- info(
- `Using Turborepo to determine if this project is affected by the commit...\n`
- );
-
- // set default directory
- args.directory = args.directory
- ? path.resolve(args.directory)
- : process.cwd();
-
- // check for TURBO_FORCE and bail early if it's set
- if (process.env.TURBO_FORCE === "true") {
- info("`TURBO_FORCE` detected");
- return continueBuild();
- }
-
- // find the monorepo root
- const root = getTurboRoot(args.directory);
- if (!root) {
- error("Monorepo root not found. turbo-ignore inferencing failed");
- return continueBuild();
- }
-
- // Find the workspace from the command-line args, or the package.json at the current directory
- const workspace = getWorkspace(args);
- if (!workspace) {
- return continueBuild();
- }
-
- // Identify which task to execute from the command-line args
- let task = getTask(args);
-
- // check the commit message
- const parsedCommit = checkCommit({ workspace });
- if (parsedCommit.result === "skip") {
- info(parsedCommit.reason);
- return ignoreBuild();
- }
- if (parsedCommit.result === "deploy") {
- info(parsedCommit.reason);
- return continueBuild();
- }
- if (parsedCommit.result === "conflict") {
- info(parsedCommit.reason);
- }
-
- // Get the start of the comparison (previous deployment when available, or previous commit by default)
- const comparison = getComparison({ workspace, fallback: args.fallback });
- if (!comparison) {
- // This is either the first deploy of the project, or the first deploy for the branch, either way - build it.
- return continueBuild();
- }
-
- // Build, and execute the command
- const command = `npx turbo run ${task} --filter=${workspace}...[${comparison.ref}] --dry=json`;
- info(`Analyzing results of \`${command}\``);
- exec(
- command,
- {
- cwd: root,
- },
- (err, stdout) => {
- if (err) {
- const { level, code, message } = shouldWarn({ err: err.message });
- if (level === "warn") {
- warn(message);
- } else {
- error(`${code}: ${err}`);
- }
- return continueBuild();
- }
-
- try {
- const parsed = JSON.parse(stdout);
- if (parsed == null) {
- error(`Failed to parse JSON output from \`${command}\`.`);
- return continueBuild();
- }
- const { packages } = parsed;
- if (packages && packages.length > 0) {
- if (packages.length === 1) {
- info(`This commit affects "${workspace}"`);
- } else {
- // subtract 1 because the first package is the workspace itself
- info(
- `This commit affects "${workspace}" and ${packages.length - 1} ${
- packages.length - 1 === 1 ? "dependency" : "dependencies"
- } (${packages.slice(1).join(", ")})`
- );
- }
-
- return continueBuild();
- } else {
- info(`This project and its dependencies are not affected`);
- return ignoreBuild();
- }
- } catch (e) {
- error(`Failed to parse JSON output from \`${command}\`.`);
- error(e);
- return continueBuild();
- }
- }
- );
-}