UNPKG

@turbo/types

Version:
288 lines (263 loc) 9.11 kB
export type OutputModeV1 = | "full" | "hash-only" | "new-only" | "errors-only" | "none"; /** * This is a relative Unix-style path (e.g. `./src/index.ts` or `src/index.ts`). Absolute paths (e.g. `/tmp/foo`) are not valid. */ export type RelativeUnixPathV1 = string; export type EnvWildcardV1 = string; export type AnchoredUnixPath = string; export interface PipelineV1 { /** * The list of tasks that this task depends on. * * Prefixing an item in dependsOn with a ^ prefix tells turbo that this task depends * on the package's topological dependencies completing the task first. * (e.g. "A package's build tasks should only run once all of its workspace dependencies * have completed their own build commands.") * * Items in dependsOn without a ^ prefix express the relationships between tasks within the * same package (e.g. "A package's test and lint commands depend on its own build being * completed first.") * * Documentation: https://turborepo.com/docs/reference/configuration#dependson * * @defaultValue `[]` */ dependsOn?: Array<string>; /** * A list of environment variables that this task depends on. * * Note: If you are migrating from a turbo version 1.5 or below, * you may be used to prefixing your variables with a $. * You no longer need to use the $ prefix. * (e.g. $GITHUB_TOKEN → GITHUB_TOKEN) * * Documentation: https://turborepo.com/docs/reference/configuration#env * * @defaultValue `[]` */ env?: Array<EnvWildcardV1>; /** * An allowlist of environment variables that should be made available in this * task's environment, but should not contribute to the task's cache key, * e.g. `AWS_SECRET_KEY`. * * Documentation: https://turborepo.com/docs/reference/configuration#passthroughenv * * @defaultValue `null` */ passThroughEnv?: null | Array<EnvWildcardV1>; /** * A priority-ordered (most-significant to least-significant) array of workspace-anchored * Unix-style paths to `.env` files to include in the task hash. * * @defaultValue `null` */ dotEnv?: null | Array<AnchoredUnixPath>; /** * The set of glob patterns indicating a task's cacheable filesystem outputs. * * Turborepo captures task logs for all tasks. This enables us to cache tasks whose runs * produce no artifacts other than logs (such as linters). Logs are always treated as a * cacheable artifact and never need to be specified. * * Documentation: https://turborepo.com/docs/reference/configuration#outputs * * @defaultValue `[]` */ outputs?: Array<string>; /** * Whether or not to cache the outputs of the task. * * Setting cache to false is useful for long-running "watch" or development mode tasks. * * Documentation: https://turborepo.com/docs/reference/configuration#cache * * @defaultValue `true` */ cache?: boolean; /** * The set of glob patterns to consider as inputs to this task. * * Changes to files covered by these globs will cause a cache miss and * the task will be rerun. * * If a file has been changed that is **not** included in the set of globs, * it will not cause a cache miss. * * If omitted or empty, all files in the package are considered as inputs. * * Documentation: https://turborepo.com/docs/reference/configuration#inputs * * @defaultValue `[]` */ inputs?: Array<string>; /** * Output mode for the task. * * "full": Displays all output * * "hash-only": Show only the hashes of the tasks * * "new-only": Only show output from cache misses * * "errors-only": Only show output from task failures * * "none": Hides all task output * * Documentation: https://turborepo.com/docs/reference/run#--output-logs-option * * @defaultValue `"full"` */ outputMode?: OutputModeV1; /** * Indicates whether the task exits or not. Setting `persistent` to `true` tells * turbo that this is a long-running task and will ensure that other tasks * cannot depend on it. * * Documentation: https://turborepo.com/docs/reference/configuration#persistent * * @defaultValue `false` */ persistent?: boolean; /** * Mark a task as interactive allowing it to receive input from stdin. * Interactive tasks must be marked with "cache": false as the input * they receive from stdin can change the outcome of the task. * * Documentation: https://turborepo.com/docs/reference/configuration#interactive * * @defaultValue `false` */ interactive?: boolean; } export interface BaseSchemaV1 { /** @defaultValue `https://turborepo.com/schema.v1.json` */ $schema?: string; /** * An object representing the task dependency graph of your project. turbo interprets * these conventions to schedule, execute, and cache the outputs of tasks in * your project. * * Documentation: https://turborepo.com/docs/reference/configuration#tasks * * @defaultValue `{}` */ // eslint-disable-next-line @typescript-eslint/consistent-indexed-object-style -- it's more readable to specify a name for the key pipeline: { /** * The name of a task that can be executed by turbo. If turbo finds a workspace * package with a package.json scripts object with a matching key, it will apply the * pipeline task configuration to that npm script during execution. */ [script: string]: PipelineV1; }; } export interface WorkspaceSchemaV1 extends BaseSchemaV1 { /** * This key is only available in Workspace Configs * and cannot be used in your root turbo.json. * * Tells turbo to extend your root `turbo.json` * and overrides with the keys provided * in your Workspace Configs. * * Currently, only the "//" value is allowed. * * @defaultValue `["//"]` */ extends: Array<string>; } export interface RemoteCacheV1 { /** * Indicates if signature verification is enabled for requests to the remote cache. When * `true`, Turborepo will sign every uploaded artifact using the value of the environment * variable `TURBO_REMOTE_CACHE_SIGNATURE_KEY`. Turborepo will reject any downloaded artifacts * that have an invalid signature or are missing a signature. * * @defaultValue `false` */ signature?: boolean; /** * Indicates if the remote cache is enabled. When `false`, Turborepo will disable * all remote cache operations, even if the repo has a valid token. If true, remote caching * is enabled, but still requires the user to login and link their repo to a remote cache. * Documentation: https://turborepo.com/docs/core-concepts/remote-caching * * @defaultValue `true` */ enabled?: boolean; } export interface RootSchemaV1 extends BaseSchemaV1 { /** * A list of globs to include in the set of implicit global hash dependencies. * * The contents of these files will be included in the global hashing * algorithm and affect the hashes of all tasks. * * This is useful for busting the cache based on: * * - .env files (not in Git) * * - any root level file that impacts package tasks * that are not represented in the traditional dependency graph * (e.g. a root tsconfig.json, jest.config.ts, .eslintrc, etc.) * * Documentation: https://turborepo.com/docs/reference/configuration#globaldependencies * * @defaultValue `[]` */ globalDependencies?: Array<string>; /** * A list of environment variables for implicit global hash dependencies. * * The variables included in this list will affect all task hashes. * * Documentation: https://turborepo.com/docs/reference/configuration#globalenv * * @defaultValue `[]` */ globalEnv?: Array<EnvWildcardV1>; /** * An allowlist of environment variables that should be made to all tasks, but * should not contribute to the task's cache key, e.g. `AWS_SECRET_KEY`. * * Documentation: https://turborepo.com/docs/reference/configuration#globalpassthroughenv * * @defaultValue `null` */ globalPassThroughEnv?: null | Array<EnvWildcardV1>; /** * A priority-ordered (most-significant to least-significant) array of project-anchored * Unix-style paths to `.env` files to include in the global hash. * * @defaultValue `null` */ globalDotEnv?: null | Array<AnchoredUnixPath>; /** * Configuration options that control how turbo interfaces with the remote cache. * * Documentation: https://turborepo.com/docs/core-concepts/remote-caching * * @defaultValue `{}` */ remoteCache?: RemoteCacheV1; /** * Enable use of the new UI for `turbo` * * Documentation: https://turborepo.com/docs/reference/configuration#ui * * @defaultValue `false` */ experimentalUI?: boolean; } export const isRootSchemaV1 = (schema: SchemaV1): schema is RootSchemaV1 => !("extends" in schema); export const isWorkspaceSchemaV1 = ( schema: SchemaV1 ): schema is WorkspaceSchemaV1 => !isRootSchemaV1(schema); export type SchemaV1 = WorkspaceSchemaV1 | RootSchemaV1;