@teambit/builder 0.0.625 → 0.0.631

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1 @@
1
+ export const overview = [require('/home/circleci/Library/Caches/Bit/capsules/8891be5ad3d35bfc38b9cd90c0e05b598a5a55af/teambit.pipelines_builder@0.0.631/dist/builder.docs.mdx')]
@@ -15,7 +15,7 @@ export const DEFAULT_CONTEXT = 'component';
15
15
  export type ArtifactMap = ComponentMap<ArtifactList>;
16
16
 
17
17
  export class ArtifactFactory {
18
- private resolvePaths(root: string, def: ArtifactDefinition): string[] {
18
+ resolvePaths(root: string, def: ArtifactDefinition): string[] {
19
19
  const patternsFlattened = flatten(def.globPatterns);
20
20
  const paths = globby.sync(patternsFlattened, { cwd: root });
21
21
  return paths;
@@ -43,8 +43,9 @@ export class ArtifactFactory {
43
43
  task: BuildTask
44
44
  ): Artifact | undefined {
45
45
  const storageResolver = this.getStorageResolver(def);
46
- const rootDir = this.getArtifactContextPath(context, component, def);
47
- const paths = this.resolvePaths(this.getRootDir(rootDir, def), def);
46
+ const contextPath = this.getArtifactContextPath(context, component, def);
47
+ const rootDir = this.getRootDir(contextPath, def);
48
+ const paths = this.resolvePaths(rootDir, def);
48
49
  if (!paths || !paths.length) {
49
50
  return undefined;
50
51
  }
@@ -64,7 +65,7 @@ export class ArtifactFactory {
64
65
  });
65
66
  }
66
67
 
67
- private getRootDir(rootDir: string, def: ArtifactDefinition) {
68
+ getRootDir(rootDir: string, def: ArtifactDefinition) {
68
69
  if (!def.rootDir) return rootDir;
69
70
  return join(rootDir, def.rootDir);
70
71
  }
@@ -25,6 +25,7 @@ export type BuilderServiceOptions = {
25
25
  tasks?: string[];
26
26
  skipTests?: boolean;
27
27
  previousTasksResults?: TaskResults[];
28
+ dev?: boolean;
28
29
  };
29
30
 
30
31
  export type EnvsBuildContext = { [envId: string]: BuildContext };
@@ -103,6 +104,7 @@ export class BuilderService implements EnvService<BuildServiceResults, BuilderDe
103
104
  const buildContext = Object.assign(executionContext, {
104
105
  capsuleNetwork,
105
106
  previousTasksResults: [],
107
+ dev: options.dev,
106
108
  });
107
109
  envsBuildContext[executionContext.id] = buildContext;
108
110
  })
@@ -6,13 +6,13 @@ import type { BuildContext, BuildTask } from '../build-task';
6
6
  export declare const DEFAULT_CONTEXT = "component";
7
7
  export declare type ArtifactMap = ComponentMap<ArtifactList>;
8
8
  export declare class ArtifactFactory {
9
- private resolvePaths;
9
+ resolvePaths(root: string, def: ArtifactDefinition): string[];
10
10
  private getArtifactContextPath;
11
11
  private getArtifactContext;
12
12
  createFromComponent(context: BuildContext, component: Component, def: ArtifactDefinition, task: BuildTask): Artifact | undefined;
13
13
  private getStorageResolver;
14
14
  private toComponentMap;
15
- private getRootDir;
15
+ getRootDir(rootDir: string, def: ArtifactDefinition): string;
16
16
  /**
17
17
  * generate artifacts from a build context according to the spec defined in the artifact definitions.
18
18
  */
@@ -133,8 +133,9 @@ class ArtifactFactory {
133
133
 
134
134
  createFromComponent(context, component, def, task) {
135
135
  const storageResolver = this.getStorageResolver(def);
136
- const rootDir = this.getArtifactContextPath(context, component, def);
137
- const paths = this.resolvePaths(this.getRootDir(rootDir, def), def);
136
+ const contextPath = this.getArtifactContextPath(context, component, def);
137
+ const rootDir = this.getRootDir(contextPath, def);
138
+ const paths = this.resolvePaths(rootDir, def);
138
139
 
139
140
  if (!paths || !paths.length) {
140
141
  return undefined;
@@ -1 +1 @@
1
- {"version":3,"sources":["artifact-factory.ts"],"names":["DEFAULT_CONTEXT","ArtifactFactory","resolvePaths","root","def","patternsFlattened","globPatterns","paths","globby","sync","cwd","getArtifactContextPath","context","component","artifactContext","getArtifactContext","capsulePath","capsuleNetwork","graphCapsules","getCapsule","id","path","CapsuleNotFound","capsulesRootDir","createFromComponent","task","storageResolver","getStorageResolver","rootDir","getRootDir","length","undefined","Artifact","ArtifactFiles","DefaultResolver","toComponentMap","artifactMap","ComponentMap","as","components","toString","artifacts","filter","targetId","map","artifact","ArtifactList","generate","defs","tupleArr","forEach","capsuleDir","push"],"mappings":"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","sourcesContent":["import { join } from 'path';\nimport globby from 'globby';\nimport { flatten } from 'lodash';\nimport { ArtifactFiles } from '@teambit/legacy/dist/consumer/component/sources/artifact-files';\nimport { Component, ComponentMap } from '@teambit/component';\nimport { ArtifactDefinition } from './artifact-definition';\nimport { DefaultResolver } from '../storage';\nimport { ArtifactList } from './artifact-list';\nimport { Artifact } from './artifact';\nimport type { BuildContext, BuildTask } from '../build-task';\nimport { CapsuleNotFound } from '../exceptions';\n\nexport const DEFAULT_CONTEXT = 'component';\n\nexport type ArtifactMap = ComponentMap<ArtifactList>;\n\nexport class ArtifactFactory {\n private resolvePaths(root: string, def: ArtifactDefinition): string[] {\n const patternsFlattened = flatten(def.globPatterns);\n const paths = globby.sync(patternsFlattened, { cwd: root });\n return paths;\n }\n\n private getArtifactContextPath(context: BuildContext, component: Component, def: ArtifactDefinition) {\n const artifactContext = this.getArtifactContext(def);\n if (artifactContext === 'component') {\n const capsulePath = context.capsuleNetwork.graphCapsules.getCapsule(component.id)?.path;\n if (!capsulePath) throw new CapsuleNotFound(component.id);\n return capsulePath;\n }\n\n return context.capsuleNetwork.capsulesRootDir;\n }\n\n private getArtifactContext(def: ArtifactDefinition) {\n return def.context || DEFAULT_CONTEXT;\n }\n\n createFromComponent(\n context: BuildContext,\n component: Component,\n def: ArtifactDefinition,\n task: BuildTask\n ): Artifact | undefined {\n const storageResolver = this.getStorageResolver(def);\n const rootDir = this.getArtifactContextPath(context, component, def);\n const paths = this.resolvePaths(this.getRootDir(rootDir, def), def);\n if (!paths || !paths.length) {\n return undefined;\n }\n return new Artifact(def, storageResolver, new ArtifactFiles(paths), rootDir, task);\n }\n\n private getStorageResolver(def: ArtifactDefinition) {\n return def.storageResolver || new DefaultResolver();\n }\n\n private toComponentMap(context: BuildContext, artifactMap: [string, Artifact][]) {\n return ComponentMap.as<ArtifactList>(context.components, (component) => {\n const id = component.id.toString();\n const artifacts = artifactMap.filter(([targetId]) => targetId === id).map(([, artifact]) => artifact);\n\n return new ArtifactList(artifacts);\n });\n }\n\n private getRootDir(rootDir: string, def: ArtifactDefinition) {\n if (!def.rootDir) return rootDir;\n return join(rootDir, def.rootDir);\n }\n\n /**\n * generate artifacts from a build context according to the spec defined in the artifact definitions.\n */\n generate(context: BuildContext, defs: ArtifactDefinition[], task: BuildTask): ComponentMap<ArtifactList> {\n const tupleArr: [string, Artifact][] = [];\n\n defs.forEach((def) => {\n const artifactContext = this.getArtifactContext(def);\n if (artifactContext === 'env') {\n const capsuleDir = context.capsuleNetwork.capsulesRootDir;\n const rootDir = this.getRootDir(capsuleDir, def);\n const paths = this.resolvePaths(rootDir, def);\n if (paths && paths.length) {\n const artifact = new Artifact(\n def,\n this.getStorageResolver(def),\n new ArtifactFiles(this.resolvePaths(rootDir, def)),\n rootDir,\n task\n );\n\n return context.components.forEach((component) => {\n tupleArr.push([component.id.toString(), artifact]);\n });\n }\n }\n\n return context.components.forEach((component) => {\n const artifact = this.createFromComponent(context, component, def, task);\n if (artifact) {\n tupleArr.push([component.id.toString(), artifact]);\n }\n });\n });\n\n return this.toComponentMap(context, tupleArr);\n }\n}\n"]}
1
+ {"version":3,"sources":["artifact-factory.ts"],"names":["DEFAULT_CONTEXT","ArtifactFactory","resolvePaths","root","def","patternsFlattened","globPatterns","paths","globby","sync","cwd","getArtifactContextPath","context","component","artifactContext","getArtifactContext","capsulePath","capsuleNetwork","graphCapsules","getCapsule","id","path","CapsuleNotFound","capsulesRootDir","createFromComponent","task","storageResolver","getStorageResolver","contextPath","rootDir","getRootDir","length","undefined","Artifact","ArtifactFiles","DefaultResolver","toComponentMap","artifactMap","ComponentMap","as","components","toString","artifacts","filter","targetId","map","artifact","ArtifactList","generate","defs","tupleArr","forEach","capsuleDir","push"],"mappings":"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","sourcesContent":["import { join } from 'path';\nimport globby from 'globby';\nimport { flatten } from 'lodash';\nimport { ArtifactFiles } from '@teambit/legacy/dist/consumer/component/sources/artifact-files';\nimport { Component, ComponentMap } from '@teambit/component';\nimport { ArtifactDefinition } from './artifact-definition';\nimport { DefaultResolver } from '../storage';\nimport { ArtifactList } from './artifact-list';\nimport { Artifact } from './artifact';\nimport type { BuildContext, BuildTask } from '../build-task';\nimport { CapsuleNotFound } from '../exceptions';\n\nexport const DEFAULT_CONTEXT = 'component';\n\nexport type ArtifactMap = ComponentMap<ArtifactList>;\n\nexport class ArtifactFactory {\n resolvePaths(root: string, def: ArtifactDefinition): string[] {\n const patternsFlattened = flatten(def.globPatterns);\n const paths = globby.sync(patternsFlattened, { cwd: root });\n return paths;\n }\n\n private getArtifactContextPath(context: BuildContext, component: Component, def: ArtifactDefinition) {\n const artifactContext = this.getArtifactContext(def);\n if (artifactContext === 'component') {\n const capsulePath = context.capsuleNetwork.graphCapsules.getCapsule(component.id)?.path;\n if (!capsulePath) throw new CapsuleNotFound(component.id);\n return capsulePath;\n }\n\n return context.capsuleNetwork.capsulesRootDir;\n }\n\n private getArtifactContext(def: ArtifactDefinition) {\n return def.context || DEFAULT_CONTEXT;\n }\n\n createFromComponent(\n context: BuildContext,\n component: Component,\n def: ArtifactDefinition,\n task: BuildTask\n ): Artifact | undefined {\n const storageResolver = this.getStorageResolver(def);\n const contextPath = this.getArtifactContextPath(context, component, def);\n const rootDir = this.getRootDir(contextPath, def);\n const paths = this.resolvePaths(rootDir, def);\n if (!paths || !paths.length) {\n return undefined;\n }\n return new Artifact(def, storageResolver, new ArtifactFiles(paths), rootDir, task);\n }\n\n private getStorageResolver(def: ArtifactDefinition) {\n return def.storageResolver || new DefaultResolver();\n }\n\n private toComponentMap(context: BuildContext, artifactMap: [string, Artifact][]) {\n return ComponentMap.as<ArtifactList>(context.components, (component) => {\n const id = component.id.toString();\n const artifacts = artifactMap.filter(([targetId]) => targetId === id).map(([, artifact]) => artifact);\n\n return new ArtifactList(artifacts);\n });\n }\n\n getRootDir(rootDir: string, def: ArtifactDefinition) {\n if (!def.rootDir) return rootDir;\n return join(rootDir, def.rootDir);\n }\n\n /**\n * generate artifacts from a build context according to the spec defined in the artifact definitions.\n */\n generate(context: BuildContext, defs: ArtifactDefinition[], task: BuildTask): ComponentMap<ArtifactList> {\n const tupleArr: [string, Artifact][] = [];\n\n defs.forEach((def) => {\n const artifactContext = this.getArtifactContext(def);\n if (artifactContext === 'env') {\n const capsuleDir = context.capsuleNetwork.capsulesRootDir;\n const rootDir = this.getRootDir(capsuleDir, def);\n const paths = this.resolvePaths(rootDir, def);\n if (paths && paths.length) {\n const artifact = new Artifact(\n def,\n this.getStorageResolver(def),\n new ArtifactFiles(this.resolvePaths(rootDir, def)),\n rootDir,\n task\n );\n\n return context.components.forEach((component) => {\n tupleArr.push([component.id.toString(), artifact]);\n });\n }\n }\n\n return context.components.forEach((component) => {\n const artifact = this.createFromComponent(context, component, def, task);\n if (artifact) {\n tupleArr.push([component.id.toString(), artifact]);\n }\n });\n });\n\n return this.toComponentMap(context, tupleArr);\n }\n}\n"]}
@@ -42,6 +42,7 @@ export declare class BuildPipe {
42
42
  readonly envsBuildContext: EnvsBuildContext;
43
43
  readonly logger: Logger;
44
44
  readonly artifactFactory: ArtifactFactory;
45
+ private previousTaskResults?;
45
46
  private failedTasks;
46
47
  private failedDependencyTask;
47
48
  private longProcessLogger;
@@ -50,7 +51,8 @@ export declare class BuildPipe {
50
51
  /**
51
52
  * array of services to apply on the components.
52
53
  */
53
- tasksQueue: TasksQueue, envsBuildContext: EnvsBuildContext, logger: Logger, artifactFactory: ArtifactFactory, previousTaskResults?: TaskResults[]);
54
+ tasksQueue: TasksQueue, envsBuildContext: EnvsBuildContext, logger: Logger, artifactFactory: ArtifactFactory, previousTaskResults?: TaskResults[] | undefined);
55
+ get allTasksResults(): TaskResults[];
54
56
  /**
55
57
  * execute a pipeline of build tasks.
56
58
  */
@@ -4,6 +4,8 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
4
4
 
5
5
  require("core-js/modules/es.symbol.description.js");
6
6
 
7
+ require("core-js/modules/es.array.iterator.js");
8
+
7
9
  require("core-js/modules/es.promise.js");
8
10
 
9
11
  Object.defineProperty(exports, "__esModule", {
@@ -71,11 +73,15 @@ class BuildPipe {
71
73
  this.envsBuildContext = envsBuildContext;
72
74
  this.logger = logger;
73
75
  this.artifactFactory = artifactFactory;
76
+ this.previousTaskResults = previousTaskResults;
74
77
  (0, _defineProperty2().default)(this, "failedTasks", []);
75
78
  (0, _defineProperty2().default)(this, "failedDependencyTask", void 0);
76
79
  (0, _defineProperty2().default)(this, "longProcessLogger", void 0);
77
- (0, _defineProperty2().default)(this, "taskResults", void 0);
78
- this.taskResults = previousTaskResults || [];
80
+ (0, _defineProperty2().default)(this, "taskResults", []);
81
+ }
82
+
83
+ get allTasksResults() {
84
+ return [...(this.previousTaskResults || []), ...(this.taskResults || [])];
79
85
  }
80
86
  /**
81
87
  * execute a pipeline of build tasks.
@@ -191,7 +197,7 @@ class BuildPipe {
191
197
  getBuildContext(envId) {
192
198
  const buildContext = this.envsBuildContext[envId];
193
199
  if (!buildContext) throw new Error(`unable to find buildContext for ${envId}`);
194
- buildContext.previousTasksResults = this.taskResults;
200
+ buildContext.previousTasksResults = this.allTasksResults;
195
201
  return buildContext;
196
202
  }
197
203
  /**
@@ -1 +1 @@
1
- {"version":3,"sources":["build-pipe.ts"],"names":["BuildPipe","constructor","tasksQueue","envsBuildContext","logger","artifactFactory","previousTaskResults","taskResults","execute","executePreBuild","longProcessLogger","createLongProcessLogger","length","task","env","executeTask","end","tasksResultsList","TaskResultsList","executePostBuild","setStatusLine","preBuild","getBuildContext","id","consoleSuccess","taskId","BuildTaskHelper","serializeId","taskName","description","logProgress","updateFailedDependencyTask","shouldSkipTask","startTask","process","hrtime","taskStartTime","Date","now","buildContext","buildTaskResult","endTime","compsWithErrors","componentsResults","filter","c","errors","artifacts","consoleFailure","failedTasks","push","duration","defs","generate","startTime","tasksResults","postBuild","failedDependencyTask","dependencies","forEach","dependency","aspectId","name","deserializeId","find","failedTask","envId","failedTaskId","consoleWarning","Error","previousTasksResults","from"],"mappings":"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","sourcesContent":["import { EnvDefinition } from '@teambit/envs';\nimport { ComponentMap } from '@teambit/component';\nimport { Logger, LongProcessLogger } from '@teambit/logger';\nimport mapSeries from 'p-map-series';\nimport prettyTime from 'pretty-time';\nimport { ArtifactFactory, ArtifactList } from './artifact';\nimport { BuildTask, BuildTaskHelper } from './build-task';\nimport { ComponentResult } from './types';\nimport { TasksQueue } from './tasks-queue';\nimport { EnvsBuildContext } from './builder.service';\nimport { TaskResultsList } from './task-results-list';\n\nexport type TaskResults = {\n /**\n * task itself. useful for getting its id/description later on.\n */\n task: BuildTask;\n\n /**\n * environment were the task was running\n */\n env: EnvDefinition;\n\n /**\n * component build results.\n */\n componentsResults: ComponentResult[];\n\n /**\n * artifacts generated by the build pipeline.\n * in case the task finished with errors, this prop is undefined.\n */\n artifacts: ComponentMap<ArtifactList> | undefined;\n\n /**\n * timestamp of start initiation.\n */\n startTime: number;\n\n /**\n * timestamp of task completion.\n */\n endTime: number;\n};\n\nexport class BuildPipe {\n private failedTasks: BuildTask[] = [];\n private failedDependencyTask: BuildTask | undefined;\n private longProcessLogger: LongProcessLogger;\n private taskResults: TaskResults[];\n constructor(\n /**\n * array of services to apply on the components.\n */\n readonly tasksQueue: TasksQueue,\n readonly envsBuildContext: EnvsBuildContext,\n readonly logger: Logger,\n readonly artifactFactory: ArtifactFactory,\n previousTaskResults?: TaskResults[]\n ) {\n this.taskResults = previousTaskResults || [];\n }\n\n /**\n * execute a pipeline of build tasks.\n */\n async execute(): Promise<TaskResultsList> {\n await this.executePreBuild();\n this.longProcessLogger = this.logger.createLongProcessLogger('running tasks', this.tasksQueue.length);\n await mapSeries(this.tasksQueue, async ({ task, env }) => this.executeTask(task, env));\n this.longProcessLogger.end();\n const tasksResultsList = new TaskResultsList(this.tasksQueue, this.taskResults);\n await this.executePostBuild(tasksResultsList);\n\n return tasksResultsList;\n }\n\n private async executePreBuild() {\n this.logger.setStatusLine('executing pre-build for all tasks');\n await mapSeries(this.tasksQueue, async ({ task, env }) => {\n if (!task.preBuild) return;\n await task.preBuild(this.getBuildContext(env.id));\n });\n this.logger.consoleSuccess();\n }\n\n private async executeTask(task: BuildTask, env: EnvDefinition): Promise<void> {\n const taskId = BuildTaskHelper.serializeId(task);\n const taskName = `${taskId}${task.description ? ` (${task.description})` : ''}`;\n this.longProcessLogger.logProgress(`env \"${env.id}\", task \"${taskName}\"`);\n this.updateFailedDependencyTask(task);\n if (this.shouldSkipTask(taskId, env.id)) {\n return;\n }\n const startTask = process.hrtime();\n const taskStartTime = Date.now();\n const buildContext = this.getBuildContext(env.id);\n const buildTaskResult = await task.execute(buildContext);\n const endTime = Date.now();\n const compsWithErrors = buildTaskResult.componentsResults.filter((c) => c.errors?.length);\n let artifacts;\n if (compsWithErrors.length) {\n this.logger.consoleFailure(`env: ${env.id}, task \"${taskId}\" has failed`);\n this.failedTasks.push(task);\n } else {\n const duration = prettyTime(process.hrtime(startTask));\n this.logger.consoleSuccess(`env \"${env.id}\", task \"${taskName}\" has completed successfully in ${duration}`);\n const defs = buildTaskResult.artifacts || [];\n artifacts = this.artifactFactory.generate(buildContext, defs, task);\n }\n\n const taskResults: TaskResults = {\n task,\n env,\n componentsResults: buildTaskResult.componentsResults,\n artifacts,\n startTime: taskStartTime,\n endTime,\n };\n\n this.taskResults.push(taskResults);\n }\n\n private async executePostBuild(tasksResults: TaskResultsList) {\n this.logger.setStatusLine('executing post-build for all tasks');\n await mapSeries(this.tasksQueue, async ({ task, env }) => {\n if (!task.postBuild) return;\n await task.postBuild(this.getBuildContext(env.id), tasksResults);\n });\n this.logger.consoleSuccess();\n }\n\n private updateFailedDependencyTask(task: BuildTask) {\n if (!this.failedDependencyTask && this.failedTasks.length && task.dependencies) {\n task.dependencies.forEach((dependency) => {\n const { aspectId, name } = BuildTaskHelper.deserializeId(dependency);\n this.failedDependencyTask = this.failedTasks.find((failedTask) => {\n if (name && name !== failedTask.name) return false;\n return aspectId === failedTask.aspectId;\n });\n });\n }\n }\n\n private shouldSkipTask(taskId: string, envId: string): boolean {\n if (!this.failedDependencyTask) return false;\n const failedTaskId = BuildTaskHelper.serializeId(this.failedDependencyTask);\n this.logger.consoleWarning(`env: ${envId}, task \"${taskId}\" has skipped due to \"${failedTaskId}\" failure`);\n return true;\n }\n\n private getBuildContext(envId: string) {\n const buildContext = this.envsBuildContext[envId];\n if (!buildContext) throw new Error(`unable to find buildContext for ${envId}`);\n buildContext.previousTasksResults = this.taskResults;\n return buildContext;\n }\n\n /**\n * create a build pipe from an array of tasks.\n */\n static from(\n tasksQueue: TasksQueue,\n envsBuildContext: EnvsBuildContext,\n logger: Logger,\n artifactFactory: ArtifactFactory,\n previousTaskResults?: TaskResults[]\n ) {\n return new BuildPipe(tasksQueue, envsBuildContext, logger, artifactFactory, previousTaskResults);\n }\n}\n"]}
1
+ {"version":3,"sources":["build-pipe.ts"],"names":["BuildPipe","constructor","tasksQueue","envsBuildContext","logger","artifactFactory","previousTaskResults","allTasksResults","taskResults","execute","executePreBuild","longProcessLogger","createLongProcessLogger","length","task","env","executeTask","end","tasksResultsList","TaskResultsList","executePostBuild","setStatusLine","preBuild","getBuildContext","id","consoleSuccess","taskId","BuildTaskHelper","serializeId","taskName","description","logProgress","updateFailedDependencyTask","shouldSkipTask","startTask","process","hrtime","taskStartTime","Date","now","buildContext","buildTaskResult","endTime","compsWithErrors","componentsResults","filter","c","errors","artifacts","consoleFailure","failedTasks","push","duration","defs","generate","startTime","tasksResults","postBuild","failedDependencyTask","dependencies","forEach","dependency","aspectId","name","deserializeId","find","failedTask","envId","failedTaskId","consoleWarning","Error","previousTasksResults","from"],"mappings":"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","sourcesContent":["import { EnvDefinition } from '@teambit/envs';\nimport { ComponentMap } from '@teambit/component';\nimport { Logger, LongProcessLogger } from '@teambit/logger';\nimport mapSeries from 'p-map-series';\nimport prettyTime from 'pretty-time';\nimport { ArtifactFactory, ArtifactList } from './artifact';\nimport { BuildTask, BuildTaskHelper } from './build-task';\nimport { ComponentResult } from './types';\nimport { TasksQueue } from './tasks-queue';\nimport { EnvsBuildContext } from './builder.service';\nimport { TaskResultsList } from './task-results-list';\n\nexport type TaskResults = {\n /**\n * task itself. useful for getting its id/description later on.\n */\n task: BuildTask;\n\n /**\n * environment were the task was running\n */\n env: EnvDefinition;\n\n /**\n * component build results.\n */\n componentsResults: ComponentResult[];\n\n /**\n * artifacts generated by the build pipeline.\n * in case the task finished with errors, this prop is undefined.\n */\n artifacts: ComponentMap<ArtifactList> | undefined;\n\n /**\n * timestamp of start initiation.\n */\n startTime: number;\n\n /**\n * timestamp of task completion.\n */\n endTime: number;\n};\n\nexport class BuildPipe {\n private failedTasks: BuildTask[] = [];\n private failedDependencyTask: BuildTask | undefined;\n private longProcessLogger: LongProcessLogger;\n private taskResults: TaskResults[] = [];\n constructor(\n /**\n * array of services to apply on the components.\n */\n readonly tasksQueue: TasksQueue,\n readonly envsBuildContext: EnvsBuildContext,\n readonly logger: Logger,\n readonly artifactFactory: ArtifactFactory,\n private previousTaskResults?: TaskResults[]\n ) {}\n\n get allTasksResults(): TaskResults[] {\n return [...(this.previousTaskResults || []), ...(this.taskResults || [])];\n }\n\n /**\n * execute a pipeline of build tasks.\n */\n async execute(): Promise<TaskResultsList> {\n await this.executePreBuild();\n this.longProcessLogger = this.logger.createLongProcessLogger('running tasks', this.tasksQueue.length);\n await mapSeries(this.tasksQueue, async ({ task, env }) => this.executeTask(task, env));\n this.longProcessLogger.end();\n const tasksResultsList = new TaskResultsList(this.tasksQueue, this.taskResults);\n await this.executePostBuild(tasksResultsList);\n\n return tasksResultsList;\n }\n\n private async executePreBuild() {\n this.logger.setStatusLine('executing pre-build for all tasks');\n await mapSeries(this.tasksQueue, async ({ task, env }) => {\n if (!task.preBuild) return;\n await task.preBuild(this.getBuildContext(env.id));\n });\n this.logger.consoleSuccess();\n }\n\n private async executeTask(task: BuildTask, env: EnvDefinition): Promise<void> {\n const taskId = BuildTaskHelper.serializeId(task);\n const taskName = `${taskId}${task.description ? ` (${task.description})` : ''}`;\n this.longProcessLogger.logProgress(`env \"${env.id}\", task \"${taskName}\"`);\n this.updateFailedDependencyTask(task);\n if (this.shouldSkipTask(taskId, env.id)) {\n return;\n }\n const startTask = process.hrtime();\n const taskStartTime = Date.now();\n const buildContext = this.getBuildContext(env.id);\n const buildTaskResult = await task.execute(buildContext);\n const endTime = Date.now();\n const compsWithErrors = buildTaskResult.componentsResults.filter((c) => c.errors?.length);\n let artifacts;\n if (compsWithErrors.length) {\n this.logger.consoleFailure(`env: ${env.id}, task \"${taskId}\" has failed`);\n this.failedTasks.push(task);\n } else {\n const duration = prettyTime(process.hrtime(startTask));\n this.logger.consoleSuccess(`env \"${env.id}\", task \"${taskName}\" has completed successfully in ${duration}`);\n const defs = buildTaskResult.artifacts || [];\n artifacts = this.artifactFactory.generate(buildContext, defs, task);\n }\n\n const taskResults: TaskResults = {\n task,\n env,\n componentsResults: buildTaskResult.componentsResults,\n artifacts,\n startTime: taskStartTime,\n endTime,\n };\n\n this.taskResults.push(taskResults);\n }\n\n private async executePostBuild(tasksResults: TaskResultsList) {\n this.logger.setStatusLine('executing post-build for all tasks');\n await mapSeries(this.tasksQueue, async ({ task, env }) => {\n if (!task.postBuild) return;\n await task.postBuild(this.getBuildContext(env.id), tasksResults);\n });\n this.logger.consoleSuccess();\n }\n\n private updateFailedDependencyTask(task: BuildTask) {\n if (!this.failedDependencyTask && this.failedTasks.length && task.dependencies) {\n task.dependencies.forEach((dependency) => {\n const { aspectId, name } = BuildTaskHelper.deserializeId(dependency);\n this.failedDependencyTask = this.failedTasks.find((failedTask) => {\n if (name && name !== failedTask.name) return false;\n return aspectId === failedTask.aspectId;\n });\n });\n }\n }\n\n private shouldSkipTask(taskId: string, envId: string): boolean {\n if (!this.failedDependencyTask) return false;\n const failedTaskId = BuildTaskHelper.serializeId(this.failedDependencyTask);\n this.logger.consoleWarning(`env: ${envId}, task \"${taskId}\" has skipped due to \"${failedTaskId}\" failure`);\n return true;\n }\n\n private getBuildContext(envId: string) {\n const buildContext = this.envsBuildContext[envId];\n if (!buildContext) throw new Error(`unable to find buildContext for ${envId}`);\n buildContext.previousTasksResults = this.allTasksResults;\n return buildContext;\n }\n\n /**\n * create a build pipe from an array of tasks.\n */\n static from(\n tasksQueue: TasksQueue,\n envsBuildContext: EnvsBuildContext,\n logger: Logger,\n artifactFactory: ArtifactFactory,\n previousTaskResults?: TaskResults[]\n ) {\n return new BuildPipe(tasksQueue, envsBuildContext, logger, artifactFactory, previousTaskResults);\n }\n}\n"]}
@@ -95,11 +95,6 @@ function calculatePipelineOrder(taskSlot, envs, pipeNameOnEnv = 'getBuildPipe',
95
95
  });
96
96
  const pipelineEnvs = [];
97
97
  envs.forEach(envDefinition => {
98
- if (envDefinition.env.getPipe) {
99
- // @todo: remove once this confusion is over
100
- throw new Error(`Fatal: a breaking API has introduced. Please change "getPipe()" method on "${envDefinition.id}" to "getBuildPipe()"`);
101
- }
102
-
103
98
  const pipeline = getPipelineForEnv(taskSlot, envDefinition.env, pipeNameOnEnv);
104
99
  pipelineEnvs.push({
105
100
  env: envDefinition,
@@ -189,8 +184,10 @@ function addDependenciesToGraph(graphs, pipeline, task) {
189
184
  const {
190
185
  aspectId,
191
186
  name
192
- } = _buildTask().BuildTaskHelper.deserializeId(dependency);
193
-
187
+ } = dependency.includes(_buildTask().TaskIdDelimiter) ? _buildTask().BuildTaskHelper.deserializeId(dependency) : {
188
+ aspectId: dependency,
189
+ name: undefined
190
+ };
194
191
  const dependencyTasks = pipeline.filter(pipelineTask => {
195
192
  if (pipelineTask.aspectId !== aspectId) return false;
196
193
  return name ? name === pipelineTask.name : true;
@@ -1 +1 @@
1
- {"version":3,"sources":["build-pipeline-order.ts"],"names":["calculatePipelineOrder","taskSlot","envs","pipeNameOnEnv","tasks","skipTests","graphs","locations","forEach","location","push","graph","Graph","pipelineEnvs","envDefinition","env","getPipe","Error","id","pipeline","getPipelineForEnv","flattenedPipeline","map","pipelineEnv","flat","task","addDependenciesToGraph","dataPerLocation","pipelineEnvsPerLocation","filter","tasksQueue","TasksQueue","addTasksToGraph","length","includes","name","aspectId","TesterAspect","data","find","d","sorted","toposort","taskNode","BuildTaskHelper","deserializeId","attr","taskIndex","findIndex","pipelineTask","splice","dependencies","taskId","serializeId","dependency","dependencyTasks","dependencyTask","getLocation","graphLocation","g","dependencyId","setNode","setEdge","taskLocation","dependencyLocation","isDependencyAhead","isDependencyEqual","buildTasks","slotsTasks","values","tasksAtStart","tasksAtEnd","mergedTasks"],"mappings":"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","sourcesContent":["import { Graph } from 'cleargraph';\nimport TesterAspect from '@teambit/tester';\nimport { EnvDefinition, Environment } from '@teambit/envs';\nimport { BuildTask, BuildTaskHelper } from './build-task';\nimport type { TaskSlot } from './builder.main.runtime';\nimport { TasksQueue } from './tasks-queue';\n\ntype TaskDependenciesGraph = Graph<string, string>;\ntype Location = 'start' | 'middle' | 'end';\ntype TasksLocationGraph = { location: Location; graph: TaskDependenciesGraph };\ntype PipelineEnv = { env: EnvDefinition; pipeline: BuildTask[] };\ntype DataPerLocation = { location: Location; graph: TaskDependenciesGraph; pipelineEnvs: PipelineEnv[] };\n\n/**\n * there are two ways how to add tasks to build pipeline.\n * 1. `getBuildPipe()` method of the env.\n * 2. registering to the `builder.registerBuildTask()`.\n *\n * in the option #1, it's possible to determine the order. e.g. `getBuildPipe() { return [taskA, taskB, taskC]; }`\n * in the option #2, the register happens once the extension is loaded, so there is no way to put\n * one task before/after another task.\n *\n * To be able to determine the order, you can do the following\n * 1. \"task.location\", it has two options \"start\" and \"end\". the rest are \"middle\".\n * 2. \"task.dependencies\", the dependencies must be completed for all envs before this task starts.\n * the dependencies are applicable inside a location and not across locations. see getLocation()\n * or/and continue reading for more info about this.\n *\n * to determine the final order of the tasks, the following is done:\n * 1. split all tasks to three groups: start, middle and end.\n * 2. for each group define a dependencies graph for the tasks with \"dependencies\" prop and the pipeline.\n * 3. start with the first group \"start\", toposort the dependencies graph and push the found tasks\n * to a queue. once completed, iterate the pipeline and add all tasks to the queue.\n * 4. do the same for the \"middle\" and \"end\" groups.\n *\n * the reason for splitting the tasks to the three groups and not using the \"dependencies\" field\n * alone to determine the order is that the \"start\" and \"end\" groups are mostly core and \"middle\"\n * is mostly the user entering tasks to the pipeline and we as the core don't know about the users\n * tasks. For example, a core task \"PublishComponent\" must happen after the compiler, however, a\n * user might have an env without a compiler. if we determine the order only by the dependencies\n * field, the \"PublishComponent\" would have a dependency \"compiler\" and because in this case there\n * is no compiler task, it would throw an error about missing dependencies.\n */\nexport function calculatePipelineOrder(\n taskSlot: TaskSlot,\n envs: EnvDefinition[],\n pipeNameOnEnv = 'getBuildPipe',\n tasks: string[] = [],\n skipTests = false\n): TasksQueue {\n const graphs: TasksLocationGraph[] = [];\n const locations: Location[] = ['start', 'middle', 'end']; // the order is important here!\n locations.forEach((location) => {\n graphs.push({ location, graph: new Graph<string, string>() });\n });\n const pipelineEnvs: PipelineEnv[] = [];\n envs.forEach((envDefinition) => {\n if (envDefinition.env.getPipe) {\n // @todo: remove once this confusion is over\n throw new Error(\n `Fatal: a breaking API has introduced. Please change \"getPipe()\" method on \"${envDefinition.id}\" to \"getBuildPipe()\"`\n );\n }\n const pipeline = getPipelineForEnv(taskSlot, envDefinition.env, pipeNameOnEnv);\n pipelineEnvs.push({ env: envDefinition, pipeline });\n });\n\n const flattenedPipeline: BuildTask[] = pipelineEnvs.map((pipelineEnv) => pipelineEnv.pipeline).flat();\n flattenedPipeline.forEach((task) => addDependenciesToGraph(graphs, flattenedPipeline, task));\n\n const dataPerLocation: DataPerLocation[] = graphs.map(({ location, graph }) => {\n const pipelineEnvsPerLocation: PipelineEnv[] = pipelineEnvs.map(({ env, pipeline }) => {\n return { env, pipeline: pipeline.filter((task) => (task.location || 'middle') === location) };\n });\n return { location, graph, pipelineEnvs: pipelineEnvsPerLocation };\n });\n\n const tasksQueue = new TasksQueue();\n locations.forEach((location) => addTasksToGraph(tasksQueue, dataPerLocation, location));\n if (tasks.length) {\n return new TasksQueue(\n ...tasksQueue.filter(({ task }) => tasks.includes(task.name) || tasks.includes(task.aspectId))\n );\n }\n if (skipTests) {\n return new TasksQueue(...tasksQueue.filter(({ task }) => task.aspectId !== TesterAspect.id));\n }\n return tasksQueue;\n}\n\nfunction addTasksToGraph(tasksQueue: TasksQueue, dataPerLocation: DataPerLocation[], location: Location) {\n const data = dataPerLocation.find((d) => d.location === location);\n if (!data) return;\n const sorted = data.graph.toposort();\n sorted.forEach((taskNode) => {\n const { aspectId, name } = BuildTaskHelper.deserializeId(taskNode.attr);\n data.pipelineEnvs.forEach(({ env, pipeline }) => {\n const taskIndex = pipeline.findIndex(\n (pipelineTask) => pipelineTask.aspectId === aspectId && pipelineTask.name === name\n );\n if (taskIndex < 0) return;\n const task = pipeline[taskIndex];\n tasksQueue.push({ env, task });\n pipeline.splice(taskIndex, 1); // delete the task from the pipeline\n });\n });\n data.pipelineEnvs.forEach(({ env, pipeline }) => {\n pipeline.forEach((task) => tasksQueue.push({ env, task }));\n });\n}\n\nfunction addDependenciesToGraph(graphs: TasksLocationGraph[], pipeline: BuildTask[], task: BuildTask) {\n if (!task.dependencies || !task.dependencies.length) return;\n const taskId = BuildTaskHelper.serializeId(task);\n task.dependencies.forEach((dependency) => {\n const { aspectId, name } = BuildTaskHelper.deserializeId(dependency);\n const dependencyTasks = pipeline.filter((pipelineTask) => {\n if (pipelineTask.aspectId !== aspectId) return false;\n return name ? name === pipelineTask.name : true;\n });\n if (dependencyTasks.length === 0) {\n throw new Error(\n `unable to find dependency \"${dependency}\" of \"${BuildTaskHelper.serializeId(task)}\" in the pipeline`\n );\n }\n dependencyTasks.forEach((dependencyTask) => {\n const location = getLocation(task, dependencyTask);\n if (!location) {\n // the dependency is behind and will be in the correct order regardless the graph.\n return;\n }\n const graphLocation = graphs.find((g) => g.location === location);\n if (!graphLocation) throw new Error(`unable to find graph for location ${location}`);\n const dependencyId = BuildTaskHelper.serializeId(dependencyTask);\n const graph = graphLocation.graph;\n graph.setNode(taskId, taskId);\n graph.setNode(dependencyId, dependencyId);\n graph.setEdge(dependencyId, taskId, 'dependency');\n });\n });\n}\n\n/**\n * since the task execution is happening per group: \"start\", \"middle\" and \"end\", the dependencies\n * need to be inside the same group.\n * e.g. if a dependency located at \"end\" group and the task located at \"start\", it's impossible to\n * complete the dependency before the task, there it throws an error.\n * it's ok to have the dependency located earlier, e.g. \"start\" and the task at \"end\", and in this\n * case, it will not be part of the graph because there is no need to do any special calculation.\n */\nfunction getLocation(task: BuildTask, dependencyTask: BuildTask): Location | null {\n const taskLocation = task.location || 'middle';\n const dependencyLocation = dependencyTask.location || 'middle';\n\n const isDependencyAhead =\n (taskLocation === 'start' && dependencyLocation !== 'start') ||\n (taskLocation === 'middle' && dependencyLocation === 'end');\n\n const isDependencyEqual = taskLocation === dependencyLocation;\n\n if (isDependencyAhead) {\n throw new Error(`a task \"${BuildTaskHelper.serializeId(task)}\" located at ${taskLocation}\nhas a dependency \"${BuildTaskHelper.serializeId(dependencyTask)} located at ${dependencyLocation},\nwhich is invalid. the dependency must be located earlier or in the same location as the task\"`);\n }\n\n if (isDependencyEqual) {\n return taskLocation;\n }\n\n // dependency is behind. e.g. task is \"end\" and dependency is \"start\". no need to enter to the\n // graph as it's going to be executed in the right order regardless the graph.\n return null;\n}\n\nfunction getPipelineForEnv(taskSlot: TaskSlot, env: Environment, pipeNameOnEnv: string): BuildTask[] {\n const buildTasks: BuildTask[] = env[pipeNameOnEnv] ? env[pipeNameOnEnv]() : [];\n const slotsTasks = taskSlot.values().flat();\n const tasksAtStart: BuildTask[] = [];\n const tasksAtEnd: BuildTask[] = [];\n slotsTasks.forEach((task) => {\n if (task.location === 'start') {\n tasksAtStart.push(task);\n return;\n }\n if (task.location === 'end') {\n tasksAtEnd.push(task);\n return;\n }\n tasksAtStart.push(task);\n });\n\n // merge with extension registered tasks.\n const mergedTasks = [...tasksAtStart, ...buildTasks, ...tasksAtEnd];\n\n return mergedTasks;\n}\n"]}
1
+ {"version":3,"sources":["build-pipeline-order.ts"],"names":["calculatePipelineOrder","taskSlot","envs","pipeNameOnEnv","tasks","skipTests","graphs","locations","forEach","location","push","graph","Graph","pipelineEnvs","envDefinition","pipeline","getPipelineForEnv","env","flattenedPipeline","map","pipelineEnv","flat","task","addDependenciesToGraph","dataPerLocation","pipelineEnvsPerLocation","filter","tasksQueue","TasksQueue","addTasksToGraph","length","includes","name","aspectId","TesterAspect","id","data","find","d","sorted","toposort","taskNode","BuildTaskHelper","deserializeId","attr","taskIndex","findIndex","pipelineTask","splice","dependencies","taskId","serializeId","dependency","TaskIdDelimiter","undefined","dependencyTasks","Error","dependencyTask","getLocation","graphLocation","g","dependencyId","setNode","setEdge","taskLocation","dependencyLocation","isDependencyAhead","isDependencyEqual","buildTasks","slotsTasks","values","tasksAtStart","tasksAtEnd","mergedTasks"],"mappings":"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","sourcesContent":["import { Graph } from 'cleargraph';\nimport TesterAspect from '@teambit/tester';\nimport { EnvDefinition, Environment } from '@teambit/envs';\nimport { BuildTask, BuildTaskHelper, TaskIdDelimiter } from './build-task';\nimport type { TaskSlot } from './builder.main.runtime';\nimport { TasksQueue } from './tasks-queue';\n\ntype TaskDependenciesGraph = Graph<string, string>;\ntype Location = 'start' | 'middle' | 'end';\ntype TasksLocationGraph = { location: Location; graph: TaskDependenciesGraph };\ntype PipelineEnv = { env: EnvDefinition; pipeline: BuildTask[] };\ntype DataPerLocation = { location: Location; graph: TaskDependenciesGraph; pipelineEnvs: PipelineEnv[] };\n\n/**\n * there are two ways how to add tasks to build pipeline.\n * 1. `getBuildPipe()` method of the env.\n * 2. registering to the `builder.registerBuildTask()`.\n *\n * in the option #1, it's possible to determine the order. e.g. `getBuildPipe() { return [taskA, taskB, taskC]; }`\n * in the option #2, the register happens once the extension is loaded, so there is no way to put\n * one task before/after another task.\n *\n * To be able to determine the order, you can do the following\n * 1. \"task.location\", it has two options \"start\" and \"end\". the rest are \"middle\".\n * 2. \"task.dependencies\", the dependencies must be completed for all envs before this task starts.\n * the dependencies are applicable inside a location and not across locations. see getLocation()\n * or/and continue reading for more info about this.\n *\n * to determine the final order of the tasks, the following is done:\n * 1. split all tasks to three groups: start, middle and end.\n * 2. for each group define a dependencies graph for the tasks with \"dependencies\" prop and the pipeline.\n * 3. start with the first group \"start\", toposort the dependencies graph and push the found tasks\n * to a queue. once completed, iterate the pipeline and add all tasks to the queue.\n * 4. do the same for the \"middle\" and \"end\" groups.\n *\n * the reason for splitting the tasks to the three groups and not using the \"dependencies\" field\n * alone to determine the order is that the \"start\" and \"end\" groups are mostly core and \"middle\"\n * is mostly the user entering tasks to the pipeline and we as the core don't know about the users\n * tasks. For example, a core task \"PublishComponent\" must happen after the compiler, however, a\n * user might have an env without a compiler. if we determine the order only by the dependencies\n * field, the \"PublishComponent\" would have a dependency \"compiler\" and because in this case there\n * is no compiler task, it would throw an error about missing dependencies.\n */\nexport function calculatePipelineOrder(\n taskSlot: TaskSlot,\n envs: EnvDefinition[],\n pipeNameOnEnv = 'getBuildPipe',\n tasks: string[] = [],\n skipTests = false\n): TasksQueue {\n const graphs: TasksLocationGraph[] = [];\n const locations: Location[] = ['start', 'middle', 'end']; // the order is important here!\n locations.forEach((location) => {\n graphs.push({ location, graph: new Graph<string, string>() });\n });\n const pipelineEnvs: PipelineEnv[] = [];\n envs.forEach((envDefinition) => {\n const pipeline = getPipelineForEnv(taskSlot, envDefinition.env, pipeNameOnEnv);\n pipelineEnvs.push({ env: envDefinition, pipeline });\n });\n\n const flattenedPipeline: BuildTask[] = pipelineEnvs.map((pipelineEnv) => pipelineEnv.pipeline).flat();\n flattenedPipeline.forEach((task) => addDependenciesToGraph(graphs, flattenedPipeline, task));\n\n const dataPerLocation: DataPerLocation[] = graphs.map(({ location, graph }) => {\n const pipelineEnvsPerLocation: PipelineEnv[] = pipelineEnvs.map(({ env, pipeline }) => {\n return { env, pipeline: pipeline.filter((task) => (task.location || 'middle') === location) };\n });\n return { location, graph, pipelineEnvs: pipelineEnvsPerLocation };\n });\n\n const tasksQueue = new TasksQueue();\n locations.forEach((location) => addTasksToGraph(tasksQueue, dataPerLocation, location));\n if (tasks.length) {\n return new TasksQueue(\n ...tasksQueue.filter(({ task }) => tasks.includes(task.name) || tasks.includes(task.aspectId))\n );\n }\n if (skipTests) {\n return new TasksQueue(...tasksQueue.filter(({ task }) => task.aspectId !== TesterAspect.id));\n }\n return tasksQueue;\n}\n\nfunction addTasksToGraph(tasksQueue: TasksQueue, dataPerLocation: DataPerLocation[], location: Location) {\n const data = dataPerLocation.find((d) => d.location === location);\n if (!data) return;\n const sorted = data.graph.toposort();\n sorted.forEach((taskNode) => {\n const { aspectId, name } = BuildTaskHelper.deserializeId(taskNode.attr);\n data.pipelineEnvs.forEach(({ env, pipeline }) => {\n const taskIndex = pipeline.findIndex(\n (pipelineTask) => pipelineTask.aspectId === aspectId && pipelineTask.name === name\n );\n if (taskIndex < 0) return;\n const task = pipeline[taskIndex];\n tasksQueue.push({ env, task });\n pipeline.splice(taskIndex, 1); // delete the task from the pipeline\n });\n });\n data.pipelineEnvs.forEach(({ env, pipeline }) => {\n pipeline.forEach((task) => tasksQueue.push({ env, task }));\n });\n}\n\nfunction addDependenciesToGraph(graphs: TasksLocationGraph[], pipeline: BuildTask[], task: BuildTask) {\n if (!task.dependencies || !task.dependencies.length) return;\n const taskId = BuildTaskHelper.serializeId(task);\n task.dependencies.forEach((dependency) => {\n const { aspectId, name } = dependency.includes(TaskIdDelimiter)\n ? BuildTaskHelper.deserializeId(dependency)\n : { aspectId: dependency, name: undefined };\n const dependencyTasks = pipeline.filter((pipelineTask) => {\n if (pipelineTask.aspectId !== aspectId) return false;\n return name ? name === pipelineTask.name : true;\n });\n if (dependencyTasks.length === 0) {\n throw new Error(\n `unable to find dependency \"${dependency}\" of \"${BuildTaskHelper.serializeId(task)}\" in the pipeline`\n );\n }\n dependencyTasks.forEach((dependencyTask) => {\n const location = getLocation(task, dependencyTask);\n if (!location) {\n // the dependency is behind and will be in the correct order regardless the graph.\n return;\n }\n const graphLocation = graphs.find((g) => g.location === location);\n if (!graphLocation) throw new Error(`unable to find graph for location ${location}`);\n const dependencyId = BuildTaskHelper.serializeId(dependencyTask);\n const graph = graphLocation.graph;\n graph.setNode(taskId, taskId);\n graph.setNode(dependencyId, dependencyId);\n graph.setEdge(dependencyId, taskId, 'dependency');\n });\n });\n}\n\n/**\n * since the task execution is happening per group: \"start\", \"middle\" and \"end\", the dependencies\n * need to be inside the same group.\n * e.g. if a dependency located at \"end\" group and the task located at \"start\", it's impossible to\n * complete the dependency before the task, there it throws an error.\n * it's ok to have the dependency located earlier, e.g. \"start\" and the task at \"end\", and in this\n * case, it will not be part of the graph because there is no need to do any special calculation.\n */\nfunction getLocation(task: BuildTask, dependencyTask: BuildTask): Location | null {\n const taskLocation = task.location || 'middle';\n const dependencyLocation = dependencyTask.location || 'middle';\n\n const isDependencyAhead =\n (taskLocation === 'start' && dependencyLocation !== 'start') ||\n (taskLocation === 'middle' && dependencyLocation === 'end');\n\n const isDependencyEqual = taskLocation === dependencyLocation;\n\n if (isDependencyAhead) {\n throw new Error(`a task \"${BuildTaskHelper.serializeId(task)}\" located at ${taskLocation}\nhas a dependency \"${BuildTaskHelper.serializeId(dependencyTask)} located at ${dependencyLocation},\nwhich is invalid. the dependency must be located earlier or in the same location as the task\"`);\n }\n\n if (isDependencyEqual) {\n return taskLocation;\n }\n\n // dependency is behind. e.g. task is \"end\" and dependency is \"start\". no need to enter to the\n // graph as it's going to be executed in the right order regardless the graph.\n return null;\n}\n\nfunction getPipelineForEnv(taskSlot: TaskSlot, env: Environment, pipeNameOnEnv: string): BuildTask[] {\n const buildTasks: BuildTask[] = env[pipeNameOnEnv] ? env[pipeNameOnEnv]() : [];\n const slotsTasks = taskSlot.values().flat();\n const tasksAtStart: BuildTask[] = [];\n const tasksAtEnd: BuildTask[] = [];\n slotsTasks.forEach((task) => {\n if (task.location === 'start') {\n tasksAtStart.push(task);\n return;\n }\n if (task.location === 'end') {\n tasksAtEnd.push(task);\n return;\n }\n tasksAtStart.push(task);\n });\n\n // merge with extension registered tasks.\n const mergedTasks = [...tasksAtStart, ...buildTasks, ...tasksAtEnd];\n\n return mergedTasks;\n}\n"]}
@@ -4,7 +4,7 @@ import { TaskResults } from './build-pipe';
4
4
  import { Serializable, TaskMetadata } from './types';
5
5
  export declare type PipelineReport = {
6
6
  taskId: string;
7
- taskName?: string;
7
+ taskName: string;
8
8
  taskDescription?: string;
9
9
  startTime?: number;
10
10
  endTime?: number;
@@ -1 +1 @@
1
- {"version":3,"sources":["build-pipeline-result-list.ts"],"names":["BuildPipelineResultList","constructor","tasksResults","components","artifactListsMap","getFlattenedArtifactListsMapFromAllTasks","artifactListsMaps","flatMap","t","artifacts","ComponentMap","as","component","forEach","artifactListMap","artifactList","getValueByComponentId","id","push","toArray","ArtifactList","getMetadataFromTaskResults","componentId","compResults","reduce","acc","current","foundComponent","componentsResults","find","c","isEqual","taskId","task","aspectId","metadata","mergeDataIfPossible","getPipelineReportOfComponent","map","taskResults","pipelineReport","taskName","name","taskDescription","description","errors","warnings","startTime","endTime","getDataOfComponent","tasksData","Object","keys","data","getArtifactsDataOfComponent","toObject","currentData","existingData","Error","Array","isArray"],"mappings":"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","sourcesContent":["import { ComponentID, ComponentMap, Component } from '@teambit/component';\nimport { isEmpty, compact } from 'lodash';\nimport type { ArtifactObject } from '@teambit/legacy/dist/consumer/component/sources/artifact-files';\nimport { Artifact, ArtifactList } from './artifact';\nimport { TaskResults } from './build-pipe';\nimport { Serializable, TaskMetadata } from './types';\n\nexport type PipelineReport = {\n taskId: string;\n taskName?: string;\n taskDescription?: string;\n startTime?: number;\n endTime?: number;\n errors?: Array<Error | string>;\n warnings?: string[];\n};\n\nexport type AspectData = {\n aspectId: string;\n data: Serializable;\n};\n\n/**\n * Helper to get the data and artifacts from the TasksResultsList before saving during the tag\n */\nexport class BuildPipelineResultList {\n private artifactListsMap: ComponentMap<ArtifactList>;\n constructor(private tasksResults: TaskResults[], private components: Component[]) {\n this.artifactListsMap = this.getFlattenedArtifactListsMapFromAllTasks();\n }\n\n private getFlattenedArtifactListsMapFromAllTasks(): ComponentMap<ArtifactList> {\n const artifactListsMaps = this.tasksResults.flatMap((t) => (t.artifacts ? [t.artifacts] : []));\n return ComponentMap.as<ArtifactList>(this.components, (component) => {\n const artifacts: Artifact[] = [];\n artifactListsMaps.forEach((artifactListMap) => {\n const artifactList = artifactListMap.getValueByComponentId(component.id);\n if (artifactList) artifacts.push(...artifactList.toArray());\n });\n return new ArtifactList(artifacts);\n });\n }\n\n public getMetadataFromTaskResults(componentId: ComponentID): { [taskId: string]: TaskMetadata } {\n const compResults = this.tasksResults.reduce((acc, current: TaskResults) => {\n const foundComponent = current.componentsResults.find((c) => c.component.id.isEqual(componentId));\n const taskId = current.task.aspectId;\n if (foundComponent && foundComponent.metadata) {\n acc[taskId] = this.mergeDataIfPossible(foundComponent.metadata, acc[taskId], taskId);\n }\n return acc;\n }, {});\n return compResults;\n }\n\n public getPipelineReportOfComponent(componentId: ComponentID): PipelineReport[] {\n const compResults = this.tasksResults.map((taskResults: TaskResults) => {\n const foundComponent = taskResults.componentsResults.find((c) => c.component.id.isEqual(componentId));\n if (!foundComponent) return null;\n const pipelineReport: PipelineReport = {\n taskId: taskResults.task.aspectId,\n taskName: taskResults.task.name,\n taskDescription: taskResults.task.description,\n errors: foundComponent.errors,\n warnings: foundComponent.warnings,\n startTime: foundComponent.startTime,\n endTime: foundComponent.endTime,\n };\n return pipelineReport;\n });\n return compact(compResults);\n }\n\n public getDataOfComponent(componentId: ComponentID): AspectData[] {\n const tasksData = this.getMetadataFromTaskResults(componentId);\n return Object.keys(tasksData).map((taskId) => ({\n aspectId: taskId,\n data: tasksData[taskId],\n }));\n }\n\n public getArtifactsDataOfComponent(componentId: ComponentID): ArtifactObject[] | undefined {\n return this.artifactListsMap.getValueByComponentId(componentId)?.toObject();\n }\n\n private mergeDataIfPossible(currentData: Serializable, existingData: Serializable | undefined, taskId: string) {\n if (!existingData || isEmpty(existingData)) return currentData;\n // both exist\n if (typeof currentData !== 'object') {\n throw new Error(`task data must be \"object\", get ${typeof currentData} for ${taskId}`);\n }\n if (Array.isArray(currentData)) {\n throw new Error(`task data must be \"object\", get Array for ${taskId}`);\n }\n return { ...currentData, ...existingData };\n }\n}\n"]}
1
+ {"version":3,"sources":["build-pipeline-result-list.ts"],"names":["BuildPipelineResultList","constructor","tasksResults","components","artifactListsMap","getFlattenedArtifactListsMapFromAllTasks","artifactListsMaps","flatMap","t","artifacts","ComponentMap","as","component","forEach","artifactListMap","artifactList","getValueByComponentId","id","push","toArray","ArtifactList","getMetadataFromTaskResults","componentId","compResults","reduce","acc","current","foundComponent","componentsResults","find","c","isEqual","taskId","task","aspectId","metadata","mergeDataIfPossible","getPipelineReportOfComponent","map","taskResults","pipelineReport","taskName","name","taskDescription","description","errors","warnings","startTime","endTime","getDataOfComponent","tasksData","Object","keys","data","getArtifactsDataOfComponent","toObject","currentData","existingData","Error","Array","isArray"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AACA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AAEA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;;;;;AAmBA;AACA;AACA;AACO,MAAMA,uBAAN,CAA8B;AAEnCC,EAAAA,WAAW,CAASC,YAAT,EAA8CC,UAA9C,EAAuE;AAAA,SAA9DD,YAA8D,GAA9DA,YAA8D;AAAA,SAAzBC,UAAyB,GAAzBA,UAAyB;AAAA;AAChF,SAAKC,gBAAL,GAAwB,KAAKC,wCAAL,EAAxB;AACD;;AAEOA,EAAAA,wCAAwC,GAA+B;AAC7E,UAAMC,iBAAiB,GAAG,KAAKJ,YAAL,CAAkBK,OAAlB,CAA2BC,CAAD,IAAQA,CAAC,CAACC,SAAF,GAAc,CAACD,CAAC,CAACC,SAAH,CAAd,GAA8B,EAAhE,CAA1B;AACA,WAAOC,0BAAaC,EAAb,CAA8B,KAAKR,UAAnC,EAAgDS,SAAD,IAAe;AACnE,YAAMH,SAAqB,GAAG,EAA9B;AACAH,MAAAA,iBAAiB,CAACO,OAAlB,CAA2BC,eAAD,IAAqB;AAC7C,cAAMC,YAAY,GAAGD,eAAe,CAACE,qBAAhB,CAAsCJ,SAAS,CAACK,EAAhD,CAArB;AACA,YAAIF,YAAJ,EAAkBN,SAAS,CAACS,IAAV,CAAe,GAAGH,YAAY,CAACI,OAAb,EAAlB;AACnB,OAHD;AAIA,aAAO,KAAIC,wBAAJ,EAAiBX,SAAjB,CAAP;AACD,KAPM,CAAP;AAQD;;AAEMY,EAAAA,0BAA0B,CAACC,WAAD,EAA+D;AAC9F,UAAMC,WAAW,GAAG,KAAKrB,YAAL,CAAkBsB,MAAlB,CAAyB,CAACC,GAAD,EAAMC,OAAN,KAA+B;AAC1E,YAAMC,cAAc,GAAGD,OAAO,CAACE,iBAAR,CAA0BC,IAA1B,CAAgCC,CAAD,IAAOA,CAAC,CAAClB,SAAF,CAAYK,EAAZ,CAAec,OAAf,CAAuBT,WAAvB,CAAtC,CAAvB;AACA,YAAMU,MAAM,GAAGN,OAAO,CAACO,IAAR,CAAaC,QAA5B;;AACA,UAAIP,cAAc,IAAIA,cAAc,CAACQ,QAArC,EAA+C;AAC7CV,QAAAA,GAAG,CAACO,MAAD,CAAH,GAAc,KAAKI,mBAAL,CAAyBT,cAAc,CAACQ,QAAxC,EAAkDV,GAAG,CAACO,MAAD,CAArD,EAA+DA,MAA/D,CAAd;AACD;;AACD,aAAOP,GAAP;AACD,KAPmB,EAOjB,EAPiB,CAApB;AAQA,WAAOF,WAAP;AACD;;AAEMc,EAAAA,4BAA4B,CAACf,WAAD,EAA6C;AAC9E,UAAMC,WAAW,GAAG,KAAKrB,YAAL,CAAkBoC,GAAlB,CAAuBC,WAAD,IAA8B;AACtE,YAAMZ,cAAc,GAAGY,WAAW,CAACX,iBAAZ,CAA8BC,IAA9B,CAAoCC,CAAD,IAAOA,CAAC,CAAClB,SAAF,CAAYK,EAAZ,CAAec,OAAf,CAAuBT,WAAvB,CAA1C,CAAvB;AACA,UAAI,CAACK,cAAL,EAAqB,OAAO,IAAP;AACrB,YAAMa,cAA8B,GAAG;AACrCR,QAAAA,MAAM,EAAEO,WAAW,CAACN,IAAZ,CAAiBC,QADY;AAErCO,QAAAA,QAAQ,EAAEF,WAAW,CAACN,IAAZ,CAAiBS,IAFU;AAGrCC,QAAAA,eAAe,EAAEJ,WAAW,CAACN,IAAZ,CAAiBW,WAHG;AAIrCC,QAAAA,MAAM,EAAElB,cAAc,CAACkB,MAJc;AAKrCC,QAAAA,QAAQ,EAAEnB,cAAc,CAACmB,QALY;AAMrCC,QAAAA,SAAS,EAAEpB,cAAc,CAACoB,SANW;AAOrCC,QAAAA,OAAO,EAAErB,cAAc,CAACqB;AAPa,OAAvC;AASA,aAAOR,cAAP;AACD,KAbmB,CAApB;AAcA,WAAO,uBAAQjB,WAAR,CAAP;AACD;;AAEM0B,EAAAA,kBAAkB,CAAC3B,WAAD,EAAyC;AAChE,UAAM4B,SAAS,GAAG,KAAK7B,0BAAL,CAAgCC,WAAhC,CAAlB;AACA,WAAO6B,MAAM,CAACC,IAAP,CAAYF,SAAZ,EAAuBZ,GAAvB,CAA4BN,MAAD,KAAa;AAC7CE,MAAAA,QAAQ,EAAEF,MADmC;AAE7CqB,MAAAA,IAAI,EAAEH,SAAS,CAAClB,MAAD;AAF8B,KAAb,CAA3B,CAAP;AAID;;AAEMsB,EAAAA,2BAA2B,CAAChC,WAAD,EAAyD;AAAA;;AACzF,oCAAO,KAAKlB,gBAAL,CAAsBY,qBAAtB,CAA4CM,WAA5C,CAAP,0DAAO,sBAA0DiC,QAA1D,EAAP;AACD;;AAEOnB,EAAAA,mBAAmB,CAACoB,WAAD,EAA4BC,YAA5B,EAAoEzB,MAApE,EAAoF;AAC7G,QAAI,CAACyB,YAAD,IAAiB,uBAAQA,YAAR,CAArB,EAA4C,OAAOD,WAAP,CADiE,CAE7G;;AACA,QAAI,OAAOA,WAAP,KAAuB,QAA3B,EAAqC;AACnC,YAAM,IAAIE,KAAJ,CAAW,mCAAkC,OAAOF,WAAY,QAAOxB,MAAO,EAA9E,CAAN;AACD;;AACD,QAAI2B,KAAK,CAACC,OAAN,CAAcJ,WAAd,CAAJ,EAAgC;AAC9B,YAAM,IAAIE,KAAJ,CAAW,6CAA4C1B,MAAO,EAA9D,CAAN;AACD;;AACD,2CAAYwB,WAAZ,GAA4BC,YAA5B;AACD;;AAtEkC","sourcesContent":["import { ComponentID, ComponentMap, Component } from '@teambit/component';\nimport { isEmpty, compact } from 'lodash';\nimport type { ArtifactObject } from '@teambit/legacy/dist/consumer/component/sources/artifact-files';\nimport { Artifact, ArtifactList } from './artifact';\nimport { TaskResults } from './build-pipe';\nimport { Serializable, TaskMetadata } from './types';\n\nexport type PipelineReport = {\n taskId: string; // task aspect-id\n taskName: string;\n taskDescription?: string;\n startTime?: number;\n endTime?: number;\n errors?: Array<Error | string>;\n warnings?: string[];\n};\n\nexport type AspectData = {\n aspectId: string;\n data: Serializable;\n};\n\n/**\n * Helper to get the data and artifacts from the TasksResultsList before saving during the tag\n */\nexport class BuildPipelineResultList {\n private artifactListsMap: ComponentMap<ArtifactList>;\n constructor(private tasksResults: TaskResults[], private components: Component[]) {\n this.artifactListsMap = this.getFlattenedArtifactListsMapFromAllTasks();\n }\n\n private getFlattenedArtifactListsMapFromAllTasks(): ComponentMap<ArtifactList> {\n const artifactListsMaps = this.tasksResults.flatMap((t) => (t.artifacts ? [t.artifacts] : []));\n return ComponentMap.as<ArtifactList>(this.components, (component) => {\n const artifacts: Artifact[] = [];\n artifactListsMaps.forEach((artifactListMap) => {\n const artifactList = artifactListMap.getValueByComponentId(component.id);\n if (artifactList) artifacts.push(...artifactList.toArray());\n });\n return new ArtifactList(artifacts);\n });\n }\n\n public getMetadataFromTaskResults(componentId: ComponentID): { [taskId: string]: TaskMetadata } {\n const compResults = this.tasksResults.reduce((acc, current: TaskResults) => {\n const foundComponent = current.componentsResults.find((c) => c.component.id.isEqual(componentId));\n const taskId = current.task.aspectId;\n if (foundComponent && foundComponent.metadata) {\n acc[taskId] = this.mergeDataIfPossible(foundComponent.metadata, acc[taskId], taskId);\n }\n return acc;\n }, {});\n return compResults;\n }\n\n public getPipelineReportOfComponent(componentId: ComponentID): PipelineReport[] {\n const compResults = this.tasksResults.map((taskResults: TaskResults) => {\n const foundComponent = taskResults.componentsResults.find((c) => c.component.id.isEqual(componentId));\n if (!foundComponent) return null;\n const pipelineReport: PipelineReport = {\n taskId: taskResults.task.aspectId,\n taskName: taskResults.task.name,\n taskDescription: taskResults.task.description,\n errors: foundComponent.errors,\n warnings: foundComponent.warnings,\n startTime: foundComponent.startTime,\n endTime: foundComponent.endTime,\n };\n return pipelineReport;\n });\n return compact(compResults);\n }\n\n public getDataOfComponent(componentId: ComponentID): AspectData[] {\n const tasksData = this.getMetadataFromTaskResults(componentId);\n return Object.keys(tasksData).map((taskId) => ({\n aspectId: taskId,\n data: tasksData[taskId],\n }));\n }\n\n public getArtifactsDataOfComponent(componentId: ComponentID): ArtifactObject[] | undefined {\n return this.artifactListsMap.getValueByComponentId(componentId)?.toObject();\n }\n\n private mergeDataIfPossible(currentData: Serializable, existingData: Serializable | undefined, taskId: string) {\n if (!existingData || isEmpty(existingData)) return currentData;\n // both exist\n if (typeof currentData !== 'object') {\n throw new Error(`task data must be \"object\", get ${typeof currentData} for ${taskId}`);\n }\n if (Array.isArray(currentData)) {\n throw new Error(`task data must be \"object\", get Array for ${taskId}`);\n }\n return { ...currentData, ...existingData };\n }\n}\n"]}
@@ -10,6 +10,11 @@ export declare type TaskLocation = 'start' | 'end';
10
10
  * delimiter between task.aspectId and task.name
11
11
  */
12
12
  export declare const TaskIdDelimiter = ":";
13
+ /**
14
+ * A folder to write artifacts generated during a build task
15
+ * This folder is used in the core envs and excluded by default from the package tar file (the core envs is writing this into the npmignore file)
16
+ */
17
+ export declare const CAPSULE_ARTIFACTS_DIR = "artifacts";
13
18
  export interface BuildContext extends ExecutionContext {
14
19
  /**
15
20
  * all components about to be built/tagged.
@@ -23,6 +28,10 @@ export interface BuildContext extends ExecutionContext {
23
28
  * data generated by tasks that were running before this task
24
29
  */
25
30
  previousTasksResults: TaskResults[];
31
+ /**
32
+ * Run the build pipeline in dev mode
33
+ */
34
+ dev?: boolean;
26
35
  }
27
36
  export interface BuildTask {
28
37
  /**
@@ -84,9 +93,12 @@ export interface BuiltTaskResult {
84
93
  artifacts?: ArtifactDefinition[];
85
94
  }
86
95
  export declare class BuildTaskHelper {
87
- static serializeId({ aspectId, name }: BuildTask): string;
96
+ static serializeId({ aspectId, name }: {
97
+ aspectId: string;
98
+ name: string;
99
+ }): string;
88
100
  static deserializeId(id: string): {
89
101
  aspectId: string;
90
- name?: string;
102
+ name: string;
91
103
  };
92
104
  }
@@ -5,13 +5,20 @@ require("core-js/modules/es.regexp.exec.js");
5
5
  Object.defineProperty(exports, "__esModule", {
6
6
  value: true
7
7
  });
8
- exports.TaskIdDelimiter = exports.BuildTaskHelper = void 0;
8
+ exports.TaskIdDelimiter = exports.CAPSULE_ARTIFACTS_DIR = exports.BuildTaskHelper = void 0;
9
9
 
10
10
  /**
11
11
  * delimiter between task.aspectId and task.name
12
12
  */
13
13
  const TaskIdDelimiter = ':';
14
+ /**
15
+ * A folder to write artifacts generated during a build task
16
+ * This folder is used in the core envs and excluded by default from the package tar file (the core envs is writing this into the npmignore file)
17
+ */
18
+
14
19
  exports.TaskIdDelimiter = TaskIdDelimiter;
20
+ const CAPSULE_ARTIFACTS_DIR = 'artifacts';
21
+ exports.CAPSULE_ARTIFACTS_DIR = CAPSULE_ARTIFACTS_DIR;
15
22
 
16
23
  class BuildTaskHelper {
17
24
  static serializeId({
@@ -24,9 +31,7 @@ class BuildTaskHelper {
24
31
  static deserializeId(id) {
25
32
  const split = id.split(TaskIdDelimiter);
26
33
  if (split.length === 0) throw new Error(`deserializeId, ${id} is empty`);
27
- if (split.length === 1) return {
28
- aspectId: split[0]
29
- };
34
+ if (split.length === 1) throw new Error(`deserializeId, ${id} has only aspect-id without name`);
30
35
  if (split.length === 2) return {
31
36
  aspectId: split[0],
32
37
  name: split[1]
@@ -1 +1 @@
1
- {"version":3,"sources":["build-task.ts"],"names":["TaskIdDelimiter","BuildTaskHelper","serializeId","aspectId","name","deserializeId","id","split","length","Error"],"mappings":";;;;;;;;;AAUA;AACA;AACA;AACO,MAAMA,eAAe,GAAG,GAAxB;;;AAyFA,MAAMC,eAAN,CAAsB;AACT,SAAXC,WAAW,CAAC;AAAEC,IAAAA,QAAF;AAAYC,IAAAA;AAAZ,GAAD,EAAwC;AACxD,WAAOD,QAAQ,GAAGH,eAAX,GAA6BI,IAApC;AACD;;AACmB,SAAbC,aAAa,CAACC,EAAD,EAAkD;AACpE,UAAMC,KAAK,GAAGD,EAAE,CAACC,KAAH,CAASP,eAAT,CAAd;AACA,QAAIO,KAAK,CAACC,MAAN,KAAiB,CAArB,EAAwB,MAAM,IAAIC,KAAJ,CAAW,kBAAiBH,EAAG,WAA/B,CAAN;AACxB,QAAIC,KAAK,CAACC,MAAN,KAAiB,CAArB,EAAwB,OAAO;AAAEL,MAAAA,QAAQ,EAAEI,KAAK,CAAC,CAAD;AAAjB,KAAP;AACxB,QAAIA,KAAK,CAACC,MAAN,KAAiB,CAArB,EAAwB,OAAO;AAAEL,MAAAA,QAAQ,EAAEI,KAAK,CAAC,CAAD,CAAjB;AAAsBH,MAAAA,IAAI,EAAEG,KAAK,CAAC,CAAD;AAAjC,KAAP;AACxB,UAAM,IAAIE,KAAJ,CAAW,qBAAoBH,EAAG,sBAAqBN,eAAgB,EAAvE,CAAN;AACD;;AAV0B","sourcesContent":["import type { Component } from '@teambit/component';\nimport { ExecutionContext } from '@teambit/envs';\nimport type { Network } from '@teambit/isolator';\nimport type { ComponentResult } from './types';\nimport type { ArtifactDefinition } from './artifact';\nimport { TaskResultsList } from './task-results-list';\nimport { TaskResults } from './build-pipe';\n\nexport type TaskLocation = 'start' | 'end';\n\n/**\n * delimiter between task.aspectId and task.name\n */\nexport const TaskIdDelimiter = ':';\n\nexport interface BuildContext extends ExecutionContext {\n /**\n * all components about to be built/tagged.\n */\n components: Component[];\n\n /**\n * network of capsules ready to be built.\n */\n capsuleNetwork: Network;\n\n /**\n * data generated by tasks that were running before this task\n */\n previousTasksResults: TaskResults[];\n}\n\nexport interface BuildTask {\n /**\n * aspect id serialized of the creator of the task.\n * todo: automate this so then it won't be needed to pass manually.\n */\n aspectId: string;\n\n /**\n * name of the task. function as an identifier among other tasks of the same aspectId.\n * spaces and special characters are not allowed. as a convention, use UpperCamelCase style.\n * (e.g. TypescriptCompiler).\n */\n name: string;\n\n /**\n * description of what the task does.\n * if available, the logger will log it show it in the status-line.\n */\n description?: string;\n\n /**\n * where to put the task, before the env pipeline or after\n */\n location?: TaskLocation;\n\n /**\n * execute a task in a build context\n */\n execute(context: BuildContext): Promise<BuiltTaskResult>;\n\n /**\n * run before the build pipeline has started. this is useful when some preparation are needed to\n * be done on all envs before the build starts.\n * e.g. typescript compiler needs to write the tsconfig file. doing it during the task, will\n * cause dependencies from other envs to get this tsconfig written.\n */\n preBuild?(context: BuildContext): Promise<void>;\n\n /**\n * run after the build pipeline completed for all envs. useful for doing some cleanup on the\n * capsules before the deployment starts.\n */\n postBuild?(context: BuildContext, tasksResults: TaskResultsList): Promise<void>;\n\n /**\n * needed if you want the task to be running only after the dependencies were completed\n * for *all* envs.\n * normally this is not needed because the build-pipeline runs the tasks in the same order\n * they're located in the `getBuildPipe()` array and according to the task.location.\n * the case where this is useful is when a task not only needs to be after another task, but also\n * after all environments were running that task.\n * a dependency is task.aspectId. if an aspect has multiple tasks, to be more specific, use\n * \"aspectId:name\", e.g. \"teambit.compilation/compiler:TypescriptCompiler\".\n */\n dependencies?: string[];\n}\n\n// TODO: rename to BuildTaskResults\nexport interface BuiltTaskResult {\n /**\n * build results for each of the components in the build context.\n */\n componentsResults: ComponentResult[];\n\n /**\n * array of artifact definitions to generate after a successful build.\n */\n artifacts?: ArtifactDefinition[];\n}\n\nexport class BuildTaskHelper {\n static serializeId({ aspectId, name }: BuildTask): string {\n return aspectId + TaskIdDelimiter + name;\n }\n static deserializeId(id: string): { aspectId: string; name?: string } {\n const split = id.split(TaskIdDelimiter);\n if (split.length === 0) throw new Error(`deserializeId, ${id} is empty`);\n if (split.length === 1) return { aspectId: split[0] };\n if (split.length === 2) return { aspectId: split[0], name: split[1] };\n throw new Error(`deserializeId, id ${id} has more than one ${TaskIdDelimiter}`);\n }\n}\n"]}
1
+ {"version":3,"sources":["build-task.ts"],"names":["TaskIdDelimiter","CAPSULE_ARTIFACTS_DIR","BuildTaskHelper","serializeId","aspectId","name","deserializeId","id","split","length","Error"],"mappings":";;;;;;;;;AAUA;AACA;AACA;AACO,MAAMA,eAAe,GAAG,GAAxB;AAEP;AACA;AACA;AACA;;;AACO,MAAMC,qBAAqB,GAAG,WAA9B;;;AA8FA,MAAMC,eAAN,CAAsB;AACT,SAAXC,WAAW,CAAC;AAAEC,IAAAA,QAAF;AAAYC,IAAAA;AAAZ,GAAD,EAAiE;AACjF,WAAOD,QAAQ,GAAGJ,eAAX,GAA6BK,IAApC;AACD;;AACmB,SAAbC,aAAa,CAACC,EAAD,EAAiD;AACnE,UAAMC,KAAK,GAAGD,EAAE,CAACC,KAAH,CAASR,eAAT,CAAd;AACA,QAAIQ,KAAK,CAACC,MAAN,KAAiB,CAArB,EAAwB,MAAM,IAAIC,KAAJ,CAAW,kBAAiBH,EAAG,WAA/B,CAAN;AACxB,QAAIC,KAAK,CAACC,MAAN,KAAiB,CAArB,EAAwB,MAAM,IAAIC,KAAJ,CAAW,kBAAiBH,EAAG,kCAA/B,CAAN;AACxB,QAAIC,KAAK,CAACC,MAAN,KAAiB,CAArB,EAAwB,OAAO;AAAEL,MAAAA,QAAQ,EAAEI,KAAK,CAAC,CAAD,CAAjB;AAAsBH,MAAAA,IAAI,EAAEG,KAAK,CAAC,CAAD;AAAjC,KAAP;AACxB,UAAM,IAAIE,KAAJ,CAAW,qBAAoBH,EAAG,sBAAqBP,eAAgB,EAAvE,CAAN;AACD;;AAV0B","sourcesContent":["import type { Component } from '@teambit/component';\nimport { ExecutionContext } from '@teambit/envs';\nimport type { Network } from '@teambit/isolator';\nimport type { ComponentResult } from './types';\nimport type { ArtifactDefinition } from './artifact';\nimport { TaskResultsList } from './task-results-list';\nimport { TaskResults } from './build-pipe';\n\nexport type TaskLocation = 'start' | 'end';\n\n/**\n * delimiter between task.aspectId and task.name\n */\nexport const TaskIdDelimiter = ':';\n\n/**\n * A folder to write artifacts generated during a build task\n * This folder is used in the core envs and excluded by default from the package tar file (the core envs is writing this into the npmignore file)\n */\nexport const CAPSULE_ARTIFACTS_DIR = 'artifacts';\n\nexport interface BuildContext extends ExecutionContext {\n /**\n * all components about to be built/tagged.\n */\n components: Component[];\n\n /**\n * network of capsules ready to be built.\n */\n capsuleNetwork: Network;\n\n /**\n * data generated by tasks that were running before this task\n */\n previousTasksResults: TaskResults[];\n\n /**\n * Run the build pipeline in dev mode\n */\n dev?: boolean;\n}\n\nexport interface BuildTask {\n /**\n * aspect id serialized of the creator of the task.\n * todo: automate this so then it won't be needed to pass manually.\n */\n aspectId: string;\n\n /**\n * name of the task. function as an identifier among other tasks of the same aspectId.\n * spaces and special characters are not allowed. as a convention, use UpperCamelCase style.\n * (e.g. TypescriptCompiler).\n */\n name: string;\n\n /**\n * description of what the task does.\n * if available, the logger will log it show it in the status-line.\n */\n description?: string;\n\n /**\n * where to put the task, before the env pipeline or after\n */\n location?: TaskLocation;\n\n /**\n * execute a task in a build context\n */\n execute(context: BuildContext): Promise<BuiltTaskResult>;\n\n /**\n * run before the build pipeline has started. this is useful when some preparation are needed to\n * be done on all envs before the build starts.\n * e.g. typescript compiler needs to write the tsconfig file. doing it during the task, will\n * cause dependencies from other envs to get this tsconfig written.\n */\n preBuild?(context: BuildContext): Promise<void>;\n\n /**\n * run after the build pipeline completed for all envs. useful for doing some cleanup on the\n * capsules before the deployment starts.\n */\n postBuild?(context: BuildContext, tasksResults: TaskResultsList): Promise<void>;\n\n /**\n * needed if you want the task to be running only after the dependencies were completed\n * for *all* envs.\n * normally this is not needed because the build-pipeline runs the tasks in the same order\n * they're located in the `getBuildPipe()` array and according to the task.location.\n * the case where this is useful is when a task not only needs to be after another task, but also\n * after all environments were running that task.\n * a dependency is task.aspectId. if an aspect has multiple tasks, to be more specific, use\n * \"aspectId:name\", e.g. \"teambit.compilation/compiler:TypescriptCompiler\".\n */\n dependencies?: string[];\n}\n\n// TODO: rename to BuildTaskResults\nexport interface BuiltTaskResult {\n /**\n * build results for each of the components in the build context.\n */\n componentsResults: ComponentResult[];\n\n /**\n * array of artifact definitions to generate after a successful build.\n */\n artifacts?: ArtifactDefinition[];\n}\n\nexport class BuildTaskHelper {\n static serializeId({ aspectId, name }: { aspectId: string; name: string }): string {\n return aspectId + TaskIdDelimiter + name;\n }\n static deserializeId(id: string): { aspectId: string; name: string } {\n const split = id.split(TaskIdDelimiter);\n if (split.length === 0) throw new Error(`deserializeId, ${id} is empty`);\n if (split.length === 1) throw new Error(`deserializeId, ${id} has only aspect-id without name`);\n if (split.length === 2) return { aspectId: split[0], name: split[1] };\n throw new Error(`deserializeId, id ${id} has more than one ${TaskIdDelimiter}`);\n }\n}\n"]}
@@ -4,6 +4,7 @@ import { Workspace } from '@teambit/workspace';
4
4
  import { BuilderMain } from './builder.main.runtime';
5
5
  declare type BuildOpts = {
6
6
  all: boolean;
7
+ dev: boolean;
7
8
  rebuild: boolean;
8
9
  install: boolean;
9
10
  cachePackagesOnCapsulesRoot: boolean;
@@ -21,7 +22,7 @@ export declare class BuilderCmd implements Command {
21
22
  group: string;
22
23
  options: CommandOptions;
23
24
  constructor(builder: BuilderMain, workspace: Workspace, logger: Logger);
24
- report([userPattern]: [string], { all, install, cachePackagesOnCapsulesRoot, reuseCapsules, tasks, listTasks, }: BuildOpts): Promise<string>;
25
+ report([userPattern]: [string], { all, dev, install, cachePackagesOnCapsulesRoot, reuseCapsules, tasks, listTasks, }: BuildOpts): Promise<string>;
25
26
  private getListTasks;
26
27
  }
27
28
  export {};
package/dist/build.cmd.js CHANGED
@@ -54,12 +54,13 @@ class BuilderCmd {
54
54
  (0, _defineProperty2().default)(this, "description", 'run set of tasks for build');
55
55
  (0, _defineProperty2().default)(this, "alias", '');
56
56
  (0, _defineProperty2().default)(this, "group", 'development');
57
- (0, _defineProperty2().default)(this, "options", [['a', 'all', 'build all components, not only modified and new'], ['', 'install', 'install core aspects in capsules'], ['', 'reuse-capsules', 'avoid deleting the capsules root-dir before starting the build'], ['', 'tasks <string>', `build the specified task(s) only. for multiple tasks, separate by a comma and wrap with quotes.
57
+ (0, _defineProperty2().default)(this, "options", [['a', 'all', 'build all components, not only modified and new'], ['d', 'dev', 'run the pipeline in dev mode'], ['', 'install', 'install core aspects in capsules'], ['', 'reuse-capsules', 'avoid deleting the capsules root-dir before starting the build'], ['', 'tasks <string>', `build the specified task(s) only. for multiple tasks, separate by a comma and wrap with quotes.
58
58
  specify the task-name (e.g. "TypescriptCompiler") or the task-aspect-id (e.g. teambit.compilation/compiler)`], ['', 'cache-packages-on-capsule-root', 'set the package-manager cache on the capsule root'], ['', 'list-tasks <string>', 'list tasks of an env or a component-id for each one of the pipelines: build, tag and snap']]);
59
59
  }
60
60
 
61
61
  async report([userPattern], {
62
62
  all = false,
63
+ dev = false,
63
64
  install = false,
64
65
  cachePackagesOnCapsulesRoot = false,
65
66
  reuseCapsules = false,
@@ -91,6 +92,7 @@ specify the task-name (e.g. "TypescriptCompiler") or the task-aspect-id (e.g. te
91
92
  getExistingAsIs: reuseCapsules,
92
93
  cachePackagesOnCapsulesRoot
93
94
  }, {
95
+ dev,
94
96
  tasks: tasks ? tasks.split(',').map(task => task.trim()) : []
95
97
  });
96
98
  longProcessLogger.end();
@@ -1 +1 @@
1
- {"version":3,"sources":["build.cmd.ts"],"names":["BuilderCmd","constructor","builder","workspace","logger","report","userPattern","all","install","cachePackagesOnCapsulesRoot","reuseCapsules","tasks","listTasks","ConsumerNotFound","getListTasks","longProcessLogger","createLongProcessLogger","components","getComponentsByUserInput","length","chalk","bold","consoleSuccess","envsExecutionResults","build","installOptions","installTeambitBit","linkingOptions","linkTeambitBit","emptyRootDir","getExistingAsIs","split","map","task","trim","end","throwErrorsIfExist","green","tasksQueue","componentIdStr","compId","resolveComponentId","component","get","results","id","toString","envId","buildTasks","join","tagTasks","snapTasks"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;AAGA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AACA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AAaO,MAAMA,UAAN,CAAoC;AAuBzCC,EAAAA,WAAW,CAASC,OAAT,EAAuCC,SAAvC,EAAqEC,MAArE,EAAqF;AAAA,SAA5EF,OAA4E,GAA5EA,OAA4E;AAAA,SAA9CC,SAA8C,GAA9CA,SAA8C;AAAA,SAAhBC,MAAgB,GAAhBA,MAAgB;AAAA,kDAtBzF,iBAsByF;AAAA,yDArBlF,4BAqBkF;AAAA,mDApBxF,EAoBwF;AAAA,mDAnBxF,aAmBwF;AAAA,qDAlBtF,CACR,CAAC,GAAD,EAAM,KAAN,EAAa,iDAAb,CADQ,EAER,CAAC,EAAD,EAAK,SAAL,EAAgB,kCAAhB,CAFQ,EAGR,CAAC,EAAD,EAAK,gBAAL,EAAuB,gEAAvB,CAHQ,EAIR,CACE,EADF,EAEE,gBAFF,EAGG;AACP,4GAJI,CAJQ,EAUR,CAAC,EAAD,EAAK,gCAAL,EAAuC,mDAAvC,CAVQ,EAWR,CACE,EADF,EAEE,qBAFF,EAGE,2FAHF,CAXQ,CAkBsF;AAAE;;AAEtF,QAANC,MAAM,CACV,CAACC,WAAD,CADU,EAEV;AACEC,IAAAA,GAAG,GAAG,KADR;AAEEC,IAAAA,OAAO,GAAG,KAFZ;AAGEC,IAAAA,2BAA2B,GAAG,KAHhC;AAIEC,IAAAA,aAAa,GAAG,KAJlB;AAKEC,IAAAA,KALF;AAMEC,IAAAA;AANF,GAFU,EAUO;AACjB,QAAI,CAAC,KAAKT,SAAV,EAAqB,MAAM,KAAIU,8BAAJ,GAAN;;AACrB,QAAID,SAAJ,EAAe;AACb,aAAO,KAAKE,YAAL,CAAkBF,SAAlB,CAAP;AACD;;AAED,UAAMG,iBAAiB,GAAG,KAAKX,MAAL,CAAYY,uBAAZ,CAAoC,OAApC,CAA1B;AACA,UAAMC,UAAU,GAAG,MAAM,KAAKd,SAAL,CAAee,wBAAf,CAAwCX,GAAxC,EAA6CD,WAA7C,EAA0D,IAA1D,CAAzB;;AACA,QAAI,CAACW,UAAU,CAACE,MAAhB,EAAwB;AACtB,aAAOC,iBAAMC,IAAN,CACJ,+JADI,CAAP;AAGD;;AACD,SAAKjB,MAAL,CAAYkB,cAAZ,CAA4B,SAAQL,UAAU,CAACE,MAAO,sBAAtD;AAEA,UAAMI,oBAAoB,GAAG,MAAM,KAAKrB,OAAL,CAAasB,KAAb,CACjCP,UADiC,EAEjC;AACEQ,MAAAA,cAAc,EAAE;AACdC,QAAAA,iBAAiB,EAAElB;AADL,OADlB;AAIEmB,MAAAA,cAAc,EAAE;AAAEC,QAAAA,cAAc,EAAE,CAACpB;AAAnB,OAJlB;AAKEqB,MAAAA,YAAY,EAAE,CAACnB,aALjB;AAMEoB,MAAAA,eAAe,EAAEpB,aANnB;AAOED,MAAAA;AAPF,KAFiC,EAWjC;AACEE,MAAAA,KAAK,EAAEA,KAAK,GAAGA,KAAK,CAACoB,KAAN,CAAY,GAAZ,EAAiBC,GAAjB,CAAsBC,IAAD,IAAUA,IAAI,CAACC,IAAL,EAA/B,CAAH,GAAiD;AAD/D,KAXiC,CAAnC;AAeAnB,IAAAA,iBAAiB,CAACoB,GAAlB;AACAZ,IAAAA,oBAAoB,CAACa,kBAArB;AACA,SAAKhC,MAAL,CAAYkB,cAAZ;AACA,WAAOF,iBAAMiB,KAAN,CAAa,wCAAuCd,oBAAoB,CAACe,UAArB,CAAgCnB,MAAO,QAA3F,CAAP;AACD;;AAEyB,QAAZL,YAAY,CAACyB,cAAD,EAA0C;AAClE,UAAMC,MAAM,GAAG,MAAM,KAAKrC,SAAL,CAAesC,kBAAf,CAAkCF,cAAlC,CAArB;AACA,UAAMG,SAAS,GAAG,MAAM,KAAKvC,SAAL,CAAewC,GAAf,CAAmBH,MAAnB,CAAxB;AACA,UAAMI,OAAO,GAAG,KAAK1C,OAAL,CAAaU,SAAb,CAAuB8B,SAAvB,CAAhB;AACA,WAAQ,GAAEtB,iBAAMiB,KAAN,CAAY,YAAZ,CAA0B;AACxC,SAASO,OAAO,CAACC,EAAR,CAAWC,QAAX,EAAsB;AAC/B,SAASF,OAAO,CAACG,KAAM;AACvB;AACA,EAAE3B,iBAAMC,IAAN,CAAW,uBAAX,CAAoC;AACtC,EAAEuB,OAAO,CAACI,UAAR,CAAmBC,IAAnB,CAAwB,IAAxB,CAA8B;AAChC;AACA,EAAE7B,iBAAMC,IAAN,CAAW,qBAAX,CAAkC;AACpC,EAAEuB,OAAO,CAACM,QAAR,CAAiBD,IAAjB,CAAsB,IAAtB,CAA4B;AAC9B;AACA,EAAE7B,iBAAMC,IAAN,CAAW,sBAAX,CAAmC;AACrC,EAAEuB,OAAO,CAACO,SAAR,CAAkBF,IAAlB,CAAuB,IAAvB,KAAgC,OAAQ,EAXtC;AAYD;;AAvFwC","sourcesContent":["import { Command, CommandOptions } from '@teambit/cli';\nimport { Logger } from '@teambit/logger';\nimport { Workspace } from '@teambit/workspace';\nimport { ConsumerNotFound } from '@teambit/legacy/dist/consumer/exceptions';\nimport chalk from 'chalk';\nimport { BuilderMain } from './builder.main.runtime';\n\ntype BuildOpts = {\n all: boolean;\n rebuild: boolean;\n install: boolean;\n cachePackagesOnCapsulesRoot: boolean;\n reuseCapsules: boolean;\n tasks: string;\n listTasks?: string;\n};\n\nexport class BuilderCmd implements Command {\n name = 'build [pattern]';\n description = 'run set of tasks for build';\n alias = '';\n group = 'development';\n options = [\n ['a', 'all', 'build all components, not only modified and new'],\n ['', 'install', 'install core aspects in capsules'],\n ['', 'reuse-capsules', 'avoid deleting the capsules root-dir before starting the build'],\n [\n '',\n 'tasks <string>',\n `build the specified task(s) only. for multiple tasks, separate by a comma and wrap with quotes.\nspecify the task-name (e.g. \"TypescriptCompiler\") or the task-aspect-id (e.g. teambit.compilation/compiler)`,\n ],\n ['', 'cache-packages-on-capsule-root', 'set the package-manager cache on the capsule root'],\n [\n '',\n 'list-tasks <string>',\n 'list tasks of an env or a component-id for each one of the pipelines: build, tag and snap',\n ],\n ] as CommandOptions;\n\n constructor(private builder: BuilderMain, private workspace: Workspace, private logger: Logger) {}\n\n async report(\n [userPattern]: [string],\n {\n all = false,\n install = false,\n cachePackagesOnCapsulesRoot = false,\n reuseCapsules = false,\n tasks,\n listTasks,\n }: BuildOpts\n ): Promise<string> {\n if (!this.workspace) throw new ConsumerNotFound();\n if (listTasks) {\n return this.getListTasks(listTasks);\n }\n\n const longProcessLogger = this.logger.createLongProcessLogger('build');\n const components = await this.workspace.getComponentsByUserInput(all, userPattern, true);\n if (!components.length) {\n return chalk.bold(\n `no components found to build. use \"--all\" flag to build all components or specify the ids to build, otherwise, only new and modified components will be built`\n );\n }\n this.logger.consoleSuccess(`found ${components.length} components to build`);\n\n const envsExecutionResults = await this.builder.build(\n components,\n {\n installOptions: {\n installTeambitBit: install,\n },\n linkingOptions: { linkTeambitBit: !install },\n emptyRootDir: !reuseCapsules,\n getExistingAsIs: reuseCapsules,\n cachePackagesOnCapsulesRoot,\n },\n {\n tasks: tasks ? tasks.split(',').map((task) => task.trim()) : [],\n }\n );\n longProcessLogger.end();\n envsExecutionResults.throwErrorsIfExist();\n this.logger.consoleSuccess();\n return chalk.green(`the build has been completed. total: ${envsExecutionResults.tasksQueue.length} tasks`);\n }\n\n private async getListTasks(componentIdStr: string): Promise<string> {\n const compId = await this.workspace.resolveComponentId(componentIdStr);\n const component = await this.workspace.get(compId);\n const results = this.builder.listTasks(component);\n return `${chalk.green('Tasks List')}\nid: ${results.id.toString()}\nenvId: ${results.envId}\n\n${chalk.bold('Build Pipeline Tasks:')}\n${results.buildTasks.join('\\n')}\n\n${chalk.bold('Tag Pipeline Tasks:')}\n${results.tagTasks.join('\\n')}\n\n${chalk.bold('Snap Pipeline Tasks:')}\n${results.snapTasks.join('\\n') || '<N/A>'}`;\n }\n}\n"]}
1
+ {"version":3,"sources":["build.cmd.ts"],"names":["BuilderCmd","constructor","builder","workspace","logger","report","userPattern","all","dev","install","cachePackagesOnCapsulesRoot","reuseCapsules","tasks","listTasks","ConsumerNotFound","getListTasks","longProcessLogger","createLongProcessLogger","components","getComponentsByUserInput","length","chalk","bold","consoleSuccess","envsExecutionResults","build","installOptions","installTeambitBit","linkingOptions","linkTeambitBit","emptyRootDir","getExistingAsIs","split","map","task","trim","end","throwErrorsIfExist","green","tasksQueue","componentIdStr","compId","resolveComponentId","component","get","results","id","toString","envId","buildTasks","join","tagTasks","snapTasks"],"mappings":"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","sourcesContent":["import { Command, CommandOptions } from '@teambit/cli';\nimport { Logger } from '@teambit/logger';\nimport { Workspace } from '@teambit/workspace';\nimport { ConsumerNotFound } from '@teambit/legacy/dist/consumer/exceptions';\nimport chalk from 'chalk';\nimport { BuilderMain } from './builder.main.runtime';\n\ntype BuildOpts = {\n all: boolean;\n dev: boolean;\n rebuild: boolean;\n install: boolean;\n cachePackagesOnCapsulesRoot: boolean;\n reuseCapsules: boolean;\n tasks: string;\n listTasks?: string;\n};\n\nexport class BuilderCmd implements Command {\n name = 'build [pattern]';\n description = 'run set of tasks for build';\n alias = '';\n group = 'development';\n options = [\n ['a', 'all', 'build all components, not only modified and new'],\n ['d', 'dev', 'run the pipeline in dev mode'],\n ['', 'install', 'install core aspects in capsules'],\n ['', 'reuse-capsules', 'avoid deleting the capsules root-dir before starting the build'],\n [\n '',\n 'tasks <string>',\n `build the specified task(s) only. for multiple tasks, separate by a comma and wrap with quotes.\nspecify the task-name (e.g. \"TypescriptCompiler\") or the task-aspect-id (e.g. teambit.compilation/compiler)`,\n ],\n ['', 'cache-packages-on-capsule-root', 'set the package-manager cache on the capsule root'],\n [\n '',\n 'list-tasks <string>',\n 'list tasks of an env or a component-id for each one of the pipelines: build, tag and snap',\n ],\n ] as CommandOptions;\n\n constructor(private builder: BuilderMain, private workspace: Workspace, private logger: Logger) {}\n\n async report(\n [userPattern]: [string],\n {\n all = false,\n dev = false,\n install = false,\n cachePackagesOnCapsulesRoot = false,\n reuseCapsules = false,\n tasks,\n listTasks,\n }: BuildOpts\n ): Promise<string> {\n if (!this.workspace) throw new ConsumerNotFound();\n if (listTasks) {\n return this.getListTasks(listTasks);\n }\n\n const longProcessLogger = this.logger.createLongProcessLogger('build');\n const components = await this.workspace.getComponentsByUserInput(all, userPattern, true);\n if (!components.length) {\n return chalk.bold(\n `no components found to build. use \"--all\" flag to build all components or specify the ids to build, otherwise, only new and modified components will be built`\n );\n }\n this.logger.consoleSuccess(`found ${components.length} components to build`);\n\n const envsExecutionResults = await this.builder.build(\n components,\n {\n installOptions: {\n installTeambitBit: install,\n },\n linkingOptions: { linkTeambitBit: !install },\n emptyRootDir: !reuseCapsules,\n getExistingAsIs: reuseCapsules,\n cachePackagesOnCapsulesRoot,\n },\n {\n dev,\n tasks: tasks ? tasks.split(',').map((task) => task.trim()) : [],\n }\n );\n longProcessLogger.end();\n envsExecutionResults.throwErrorsIfExist();\n this.logger.consoleSuccess();\n return chalk.green(`the build has been completed. total: ${envsExecutionResults.tasksQueue.length} tasks`);\n }\n\n private async getListTasks(componentIdStr: string): Promise<string> {\n const compId = await this.workspace.resolveComponentId(componentIdStr);\n const component = await this.workspace.get(compId);\n const results = this.builder.listTasks(component);\n return `${chalk.green('Tasks List')}\nid: ${results.id.toString()}\nenvId: ${results.envId}\n\n${chalk.bold('Build Pipeline Tasks:')}\n${results.buildTasks.join('\\n')}\n\n${chalk.bold('Tag Pipeline Tasks:')}\n${results.tagTasks.join('\\n')}\n\n${chalk.bold('Snap Pipeline Tasks:')}\n${results.snapTasks.join('\\n') || '<N/A>'}`;\n }\n}\n"]}
@@ -40,11 +40,14 @@ export declare class BuilderMain {
40
40
  private storeArtifacts;
41
41
  private pipelineResultsToBuilderData;
42
42
  tagListener(components: Component[], options?: OnTagOpts, isolateOptions?: IsolateComponentsOptions): Promise<OnTagResults>;
43
+ private validateBuilderDataMap;
43
44
  getArtifactsVinylByExtension(component: Component, aspectName: string): Promise<ArtifactVinyl[]>;
44
45
  getArtifactsVinylByExtensionAndName(component: Component, aspectName: string, name: string): Promise<ArtifactVinyl[]>;
46
+ getArtifactsVinylByExtensionAndTaskName(component: Component, aspectName: string, taskName: string): Promise<ArtifactVinyl[]>;
45
47
  getArtifactsByName(component: Component, name: string): ArtifactObject[] | undefined;
46
48
  getArtifactsByExtension(component: Component, aspectName: string): ArtifactObject[] | undefined;
47
49
  getArtifactsByExtensionAndName(component: Component, aspectName: string, name: string): ArtifactObject[] | undefined;
50
+ getArtifactsByExtensionAndTaskName(component: Component, aspectName: string, taskName: string): ArtifactObject[] | undefined;
48
51
  getDataByAspect(component: Component, aspectName: string): Serializable | undefined;
49
52
  getArtifacts(component: Component): ArtifactObject[] | undefined;
50
53
  getBuilderData(component: Component): BuilderData | undefined;
@@ -135,6 +135,16 @@ function _isolator() {
135
135
  return data;
136
136
  }
137
137
 
138
+ function _findDuplications() {
139
+ const data = _interopRequireDefault(require("@teambit/legacy/dist/utils/array/find-duplications"));
140
+
141
+ _findDuplications = function () {
142
+ return data;
143
+ };
144
+
145
+ return data;
146
+ }
147
+
138
148
  function _artifactFiles() {
139
149
  const data = require("@teambit/legacy/dist/consumer/component/sources/artifact-files");
140
150
 
@@ -205,6 +215,16 @@ function _build() {
205
215
  return data;
206
216
  }
207
217
 
218
+ function _buildTask() {
219
+ const data = require("./build-task");
220
+
221
+ _buildTask = function () {
222
+ return data;
223
+ };
224
+
225
+ return data;
226
+ }
227
+
208
228
  function _exceptions() {
209
229
  const data = require("./exceptions");
210
230
 
@@ -235,10 +255,10 @@ function _artifacts() {
235
255
  return data;
236
256
  }
237
257
 
238
- function _buildTask() {
258
+ function _buildTask2() {
239
259
  const data = require("./templates/build-task");
240
260
 
241
- _buildTask = function () {
261
+ _buildTask2 = function () {
242
262
  return data;
243
263
  };
244
264
 
@@ -318,10 +338,25 @@ class BuilderMain {
318
338
 
319
339
  await this.storeArtifacts(allTasksResults);
320
340
  const builderDataMap = this.pipelineResultsToBuilderData(components, allTasksResults);
341
+ this.validateBuilderDataMap(builderDataMap);
321
342
  return {
322
343
  builderDataMap,
323
344
  pipeResults
324
345
  };
346
+ }
347
+
348
+ validateBuilderDataMap(builderDataMap) {
349
+ builderDataMap.forEach((buildData, component) => {
350
+ const taskSerializedIds = buildData.pipeline.map(t => _buildTask().BuildTaskHelper.serializeId({
351
+ aspectId: t.taskId,
352
+ name: t.taskName
353
+ }));
354
+ const duplications = (0, _findDuplications().default)(taskSerializedIds);
355
+
356
+ if (duplications.length) {
357
+ throw new Error(`build-task-results validation has failed. the following task(s) of "${component.id.toString()}" are duplicated: ${duplications.join(', ')}`);
358
+ }
359
+ });
325
360
  } // TODO: merge with getArtifactsVinylByExtensionAndName by getting aspect name and name as object with optional props
326
361
 
327
362
 
@@ -337,6 +372,12 @@ class BuilderMain {
337
372
  return (0, _lodash().flatten)(vinyls);
338
373
  }
339
374
 
375
+ async getArtifactsVinylByExtensionAndTaskName(component, aspectName, taskName) {
376
+ const artifactsObjects = this.getArtifactsByExtensionAndTaskName(component, aspectName, taskName);
377
+ const vinyls = await Promise.all((artifactsObjects || []).map(artifactObject => artifactObject.files.getVinylsAndImportIfMissing(component.id.scope, this.scope.legacyScope)));
378
+ return (0, _lodash().flatten)(vinyls);
379
+ }
380
+
340
381
  getArtifactsByName(component, name) {
341
382
  const artifacts = this.getArtifacts(component);
342
383
  return artifacts === null || artifacts === void 0 ? void 0 : artifacts.filter(artifact => artifact.name === name);
@@ -352,6 +393,11 @@ class BuilderMain {
352
393
  return artifacts === null || artifacts === void 0 ? void 0 : artifacts.filter(artifact => artifact.task.id === aspectName && artifact.name === name);
353
394
  }
354
395
 
396
+ getArtifactsByExtensionAndTaskName(component, aspectName, taskName) {
397
+ const artifacts = this.getArtifacts(component);
398
+ return artifacts === null || artifacts === void 0 ? void 0 : artifacts.filter(artifact => artifact.task.id === aspectName && artifact.task.name === taskName);
399
+ }
400
+
355
401
  getDataByAspect(component, aspectName) {
356
402
  var _this$getBuilderData;
357
403
 
@@ -479,7 +525,7 @@ class BuilderMain {
479
525
  const snapService = new (_builder3().BuilderService)(isolator, logger, snapTaskSlot, 'getSnapPipe', 'snap', artifactFactory, scope);
480
526
  const builder = new BuilderMain(envs, workspace, buildService, tagService, snapService, scope, isolator, aspectLoader, buildTaskSlot, tagTaskSlot, snapTaskSlot);
481
527
  graphql.register((0, _builder2().builderSchema)(builder));
482
- generator.registerComponentTemplate([_buildTask().buildTaskTemplate]);
528
+ generator.registerComponentTemplate([_buildTask2().buildTaskTemplate]);
483
529
  const func = builder.tagListener.bind(builder);
484
530
  if (scope) scope.onTag(func);
485
531
 
@@ -1 +1 @@
1
- {"version":3,"sources":["builder.main.runtime.ts"],"names":["BuilderMain","constructor","envs","workspace","buildService","tagService","snapService","scope","isolator","aspectLoader","buildTaskSlot","tagTaskSlot","snapTaskSlot","storeArtifacts","tasksResults","artifacts","flatMap","t","storeP","map","artifactMap","Promise","all","toArray","component","artifactList","store","err","ArtifactStorageError","pipelineResultsToBuilderData","components","buildPipelineResults","buildPipelineResultList","BuildPipelineResultList","ComponentMap","as","aspectsData","getDataOfComponent","id","pipelineReport","getPipelineReportOfComponent","artifactsData","getArtifactsDataOfComponent","pipeline","tagListener","options","isolateOptions","pipeResults","throwOnError","forceDeploy","disableTagAndSnapPipelines","isSnap","envsExecutionResults","build","emptyRootDir","skipTests","throwErrorsIfExist","allTasksResults","push","hasErrors","deployEnvsExecutionResults","runSnapTasks","runTagTasks","builderDataMap","getArtifactsVinylByExtension","aspectName","artifactsObjects","getArtifactsByExtension","vinyls","artifactObject","files","getVinylsAndImportIfMissing","legacyScope","getArtifactsVinylByExtensionAndName","name","getArtifactsByExtensionAndName","getArtifactsByName","getArtifacts","filter","artifact","task","getDataByAspect","getBuilderData","data","find","aspectData","aspectId","state","aspects","get","BuilderAspect","undefined","forEach","ArtifactFiles","fromObject","builderOptions","ids","c","network","isolateComponents","createEnvironment","graphCapsules","getAllComponents","builderServiceOptions","seedersOnly","buildResult","runOnce","previousTasksResults","listTasks","compEnv","getEnv","buildTasks","getCurrentPipeTasks","tagTasks","snapTasks","envId","registerBuildTasks","tasks","register","registerDeployTasks","registerTagTasks","registerSnapTasks","provider","cli","loggerExt","graphql","generator","config","artifactFactory","ArtifactFactory","logger","createLogger","BuilderService","registerService","builder","registerComponentTemplate","buildTaskTemplate","func","bind","onTag","consumer","isLegacy","commands","BuilderCmd","ArtifactsCmd","unregister","Slot","withType","MainRuntime","CLIAspect","EnvsAspect","WorkspaceAspect","ScopeAspect","IsolatorAspect","LoggerAspect","AspectLoaderAspect","GraphqlAspect","GeneratorAspect","addRuntime"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AAEA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AACA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AACA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AACA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AACA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AACA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AACA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AACA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AACA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AACA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AAEA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AACA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AAEA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AACA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AACA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AACA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AACA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AAIA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AACA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AAEA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AACA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;;;;;AAUO,MAAMA,WAAN,CAAkB;AACvBC,EAAAA,WAAW,CACDC,IADC,EAEDC,SAFC,EAGDC,YAHC,EAIDC,UAJC,EAKDC,WALC,EAMDC,KANC,EAODC,QAPC,EAQDC,YARC,EASDC,aATC,EAUDC,WAVC,EAWDC,YAXC,EAYT;AAAA,SAXQV,IAWR,GAXQA,IAWR;AAAA,SAVQC,SAUR,GAVQA,SAUR;AAAA,SATQC,YASR,GATQA,YASR;AAAA,SARQC,UAQR,GARQA,UAQR;AAAA,SAPQC,WAOR,GAPQA,WAOR;AAAA,SANQC,KAMR,GANQA,KAMR;AAAA,SALQC,QAKR,GALQA,QAKR;AAAA,SAJQC,YAIR,GAJQA,YAIR;AAAA,SAHQC,aAGR,GAHQA,aAGR;AAAA,SAFQC,WAER,GAFQA,WAER;AAAA,SADQC,YACR,GADQA,YACR;AAAE;;AAEwB,QAAdC,cAAc,CAACC,YAAD,EAA8B;AACxD,UAAMC,SAAS,GAAGD,YAAY,CAACE,OAAb,CAAsBC,CAAD,IAAQA,CAAC,CAACF,SAAF,GAAc,CAACE,CAAC,CAACF,SAAH,CAAd,GAA8B,EAA3D,CAAlB;AACA,UAAMG,MAAM,GAAGH,SAAS,CAACI,GAAV,CAAc,MAAOC,WAAP,IAAmD;AAC9E,aAAOC,OAAO,CAACC,GAAR,CACLF,WAAW,CAACG,OAAZ,GAAsBJ,GAAtB,CAA0B,OAAO,CAACK,SAAD,EAAYC,YAAZ,CAAP,KAAqC;AAC7D,YAAI;AACF,iBAAO,MAAMA,YAAY,CAACC,KAAb,CAAmBF,SAAnB,CAAb;AACD,SAFD,CAEE,OAAOG,GAAP,EAAiB;AACjB,gBAAM,KAAIC,kCAAJ,EAAyBD,GAAzB,EAA8BH,SAA9B,CAAN;AACD;AACF,OAND,CADK,CAAP;AASD,KAVc,CAAf;AAWA,UAAMH,OAAO,CAACC,GAAR,CAAYJ,MAAZ,CAAN;AACD;;AAEOW,EAAAA,4BAA4B,CAClCC,UADkC,EAElCC,oBAFkC,EAGP;AAC3B,UAAMC,uBAAuB,GAAG,KAAIC,kDAAJ,EAA4BF,oBAA5B,EAAkDD,UAAlD,CAAhC;AACA,WAAOI,0BAAaC,EAAb,CAA6BL,UAA7B,EAA0CN,SAAD,IAAe;AAC7D,YAAMY,WAAW,GAAGJ,uBAAuB,CAACK,kBAAxB,CAA2Cb,SAAS,CAACc,EAArD,CAApB;AACA,YAAMC,cAAc,GAAGP,uBAAuB,CAACQ,4BAAxB,CAAqDhB,SAAS,CAACc,EAA/D,CAAvB;AACA,YAAMG,aAAa,GAAGT,uBAAuB,CAACU,2BAAxB,CAAoDlB,SAAS,CAACc,EAA9D,CAAtB;AACA,aAAO;AAAEK,QAAAA,QAAQ,EAAEJ,cAAZ;AAA4BxB,QAAAA,SAAS,EAAE0B,aAAvC;AAAsDL,QAAAA;AAAtD,OAAP;AACD,KALM,CAAP;AAMD;;AAEgB,QAAXQ,WAAW,CACfd,UADe,EAEfe,OAAkB,GAAG,EAFN,EAGfC,cAAwC,GAAG,EAH5B,EAIQ;AACvB,UAAMC,WAA8B,GAAG,EAAvC;AACA,UAAM;AAAEC,MAAAA,YAAF;AAAgBC,MAAAA,WAAhB;AAA6BC,MAAAA,0BAA7B;AAAyDC,MAAAA;AAAzD,QAAoEN,OAA1E;AACA,UAAMO,oBAAoB,GAAG,MAAM,KAAKC,KAAL,CACjCvB,UADiC;AAE/BwB,MAAAA,YAAY,EAAE;AAFiB,OAERR,cAFQ,GAGjC;AAAES,MAAAA,SAAS,EAAEV,OAAO,CAACU;AAArB,KAHiC,CAAnC;AAKA,QAAIP,YAAY,IAAI,CAACC,WAArB,EAAkCG,oBAAoB,CAACI,kBAArB;AAClC,UAAMC,eAAe,GAAG,CAAC,GAAGL,oBAAoB,CAACtC,YAAzB,CAAxB;AACAiC,IAAAA,WAAW,CAACW,IAAZ,CAAiBN,oBAAjB;;AACA,QAAIH,WAAW,IAAK,CAACC,0BAAD,IAA+B,CAACE,oBAAoB,CAACO,SAArB,EAApD,EAAuF;AACrF,YAAMC,0BAA0B,GAAGT,MAAM,GACrC,MAAM,KAAKU,YAAL,CAAkB/B,UAAlB,EAA8BgB,cAA9B,EAA8CM,oBAAoB,CAACtC,YAAnE,CAD+B,GAErC,MAAM,KAAKgD,WAAL,CAAiBhC,UAAjB,EAA6BgB,cAA7B,EAA6CM,oBAAoB,CAACtC,YAAlE,CAFV;AAGA,UAAIkC,YAAY,IAAI,CAACC,WAArB,EAAkCW,0BAA0B,CAACJ,kBAA3B;AAClCC,MAAAA,eAAe,CAACC,IAAhB,CAAqB,GAAGE,0BAA0B,CAAC9C,YAAnD;AACAiC,MAAAA,WAAW,CAACW,IAAZ,CAAiBE,0BAAjB;AACD;;AACD,UAAM,KAAK/C,cAAL,CAAoB4C,eAApB,CAAN;AACA,UAAMM,cAAc,GAAG,KAAKlC,4BAAL,CAAkCC,UAAlC,EAA8C2B,eAA9C,CAAvB;AACA,WAAO;AAAEM,MAAAA,cAAF;AAAkBhB,MAAAA;AAAlB,KAAP;AACD,GAtEsB,CAwEvB;;;AACkC,QAA5BiB,4BAA4B,CAACxC,SAAD,EAAuByC,UAAvB,EAAqE;AACrG,UAAMC,gBAAgB,GAAG,KAAKC,uBAAL,CAA6B3C,SAA7B,EAAwCyC,UAAxC,CAAzB;AACA,UAAMG,MAAM,GAAG,MAAM/C,OAAO,CAACC,GAAR,CACnB,CAAC4C,gBAAgB,IAAI,EAArB,EAAyB/C,GAAzB,CAA8BkD,cAAD,IAC3BA,cAAc,CAACC,KAAf,CAAqBC,2BAArB,CAAiD/C,SAAS,CAACc,EAAV,CAAa/B,KAA9D,EAA+E,KAAKA,KAAL,CAAWiE,WAA1F,CADF,CADmB,CAArB;AAKA,WAAO,uBAAQJ,MAAR,CAAP;AACD;;AAEwC,QAAnCK,mCAAmC,CACvCjD,SADuC,EAEvCyC,UAFuC,EAGvCS,IAHuC,EAIb;AAC1B,UAAMR,gBAAgB,GAAG,KAAKS,8BAAL,CAAoCnD,SAApC,EAA+CyC,UAA/C,EAA2DS,IAA3D,CAAzB;AACA,UAAMN,MAAM,GAAG,MAAM/C,OAAO,CAACC,GAAR,CACnB,CAAC4C,gBAAgB,IAAI,EAArB,EAAyB/C,GAAzB,CAA8BkD,cAAD,IAC3BA,cAAc,CAACC,KAAf,CAAqBC,2BAArB,CAAiD/C,SAAS,CAACc,EAAV,CAAa/B,KAA9D,EAA+E,KAAKA,KAAL,CAAWiE,WAA1F,CADF,CADmB,CAArB;AAKA,WAAO,uBAAQJ,MAAR,CAAP;AACD;;AAEDQ,EAAAA,kBAAkB,CAACpD,SAAD,EAAuBkD,IAAvB,EAAmE;AACnF,UAAM3D,SAAS,GAAG,KAAK8D,YAAL,CAAkBrD,SAAlB,CAAlB;AACA,WAAOT,SAAP,aAAOA,SAAP,uBAAOA,SAAS,CAAE+D,MAAX,CAAmBC,QAAD,IAAcA,QAAQ,CAACL,IAAT,KAAkBA,IAAlD,CAAP;AACD;;AAEDP,EAAAA,uBAAuB,CAAC3C,SAAD,EAAuByC,UAAvB,EAAyE;AAC9F,UAAMlD,SAAS,GAAG,KAAK8D,YAAL,CAAkBrD,SAAlB,CAAlB;AACA,WAAOT,SAAP,aAAOA,SAAP,uBAAOA,SAAS,CAAE+D,MAAX,CAAmBC,QAAD,IAAcA,QAAQ,CAACC,IAAT,CAAc1C,EAAd,KAAqB2B,UAArD,CAAP;AACD;;AAEDU,EAAAA,8BAA8B,CAACnD,SAAD,EAAuByC,UAAvB,EAA2CS,IAA3C,EAAuF;AACnH,UAAM3D,SAAS,GAAG,KAAK8D,YAAL,CAAkBrD,SAAlB,CAAlB;AACA,WAAOT,SAAP,aAAOA,SAAP,uBAAOA,SAAS,CAAE+D,MAAX,CAAmBC,QAAD,IAAcA,QAAQ,CAACC,IAAT,CAAc1C,EAAd,KAAqB2B,UAArB,IAAmCc,QAAQ,CAACL,IAAT,KAAkBA,IAArF,CAAP;AACD;;AAEDO,EAAAA,eAAe,CAACzD,SAAD,EAAuByC,UAAvB,EAAqE;AAAA;;AAClF,UAAM7B,WAAW,2BAAG,KAAK8C,cAAL,CAAoB1D,SAApB,CAAH,yDAAG,qBAAgCY,WAApD;AACA,UAAM+C,IAAI,GAAG/C,WAAH,aAAGA,WAAH,uBAAGA,WAAW,CAAEgD,IAAb,CAAmBC,UAAD,IAAgBA,UAAU,CAACC,QAAX,KAAwBrB,UAA1D,CAAb;AACA,WAAOkB,IAAP,aAAOA,IAAP,uBAAOA,IAAI,CAAEA,IAAb;AACD;;AAEDN,EAAAA,YAAY,CAACrD,SAAD,EAAqD;AAAA;;AAC/D,oCAAO,KAAK0D,cAAL,CAAoB1D,SAApB,CAAP,0DAAO,sBAAgCT,SAAvC;AACD;;AAEDmE,EAAAA,cAAc,CAAC1D,SAAD,EAAgD;AAAA;;AAC5D,UAAM2D,IAAI,4BAAG3D,SAAS,CAAC+D,KAAV,CAAgBC,OAAhB,CAAwBC,GAAxB,CAA4BC,yBAAcpD,EAA1C,CAAH,0DAAG,sBAA+C6C,IAA5D;AACA,QAAI,CAACA,IAAL,EAAW,OAAOQ,SAAP;AACX,uBAAAR,IAAI,CAACpE,SAAL,oEAAgB6E,OAAhB,CAAyBb,QAAD,IAAc;AACpC,UAAI,EAAEA,QAAQ,CAACT,KAAT,YAA0BuB,8BAA5B,CAAJ,EAAgD;AAC9Cd,QAAAA,QAAQ,CAACT,KAAT,GAAiBuB,+BAAcC,UAAd,CAAyBf,QAAQ,CAACT,KAAlC,CAAjB;AACD;AACF,KAJD;AAKA,WAAOa,IAAP;AACD;AAED;AACF;AACA;AACA;AACA;AACA;;;AACa,QAAL9B,KAAK,CACTvB,UADS,EAETgB,cAFS,EAGTiD,cAHS,EAIiB;AAC1B,UAAMC,GAAG,GAAGlE,UAAU,CAACX,GAAX,CAAgB8E,CAAD,IAAOA,CAAC,CAAC3D,EAAxB,CAAZ;AACA,UAAM4D,OAAO,GAAG,MAAM,KAAK1F,QAAL,CAAc2F,iBAAd,CAAgCH,GAAhC,EAAqClD,cAArC,CAAtB;AACA,UAAM5C,IAAI,GAAG,MAAM,KAAKA,IAAL,CAAUkG,iBAAV,CAA4BF,OAAO,CAACG,aAAR,CAAsBC,gBAAtB,EAA5B,CAAnB;;AACA,UAAMC,qBAAqB;AAAKC,MAAAA,WAAW,EAAE1D,cAAF,aAAEA,cAAF,uBAAEA,cAAc,CAAE0D;AAAlC,OAAmDT,cAAc,IAAI,EAArE,CAA3B;;AACA,UAAMU,WAAW,GAAG,MAAMvG,IAAI,CAACwG,OAAL,CAAa,KAAKtG,YAAlB,EAAgCmG,qBAAhC,CAA1B;AACA,WAAOE,WAAP;AACD;;AAEgB,QAAX3C,WAAW,CACfhC,UADe,EAEfgB,cAFe,EAGf6D,oBAHe,EAIW;AAC1B,UAAMzG,IAAI,GAAG,MAAM,KAAKA,IAAL,CAAUkG,iBAAV,CAA4BtE,UAA5B,CAAnB;AACA,UAAM2E,WAAW,GAAG,MAAMvG,IAAI,CAACwG,OAAL,CAAa,KAAKrG,UAAlB,EAA8B;AACtDmG,MAAAA,WAAW,EAAE1D,cAAF,aAAEA,cAAF,uBAAEA,cAAc,CAAE0D,WADyB;AAEtDG,MAAAA;AAFsD,KAA9B,CAA1B;AAKA,WAAOF,WAAP;AACD;;AAEiB,QAAZ5C,YAAY,CAChB/B,UADgB,EAEhBgB,cAFgB,EAGhB6D,oBAHgB,EAIU;AAC1B,UAAMzG,IAAI,GAAG,MAAM,KAAKA,IAAL,CAAUkG,iBAAV,CAA4BtE,UAA5B,CAAnB;AACA,UAAM2E,WAAW,GAAG,MAAMvG,IAAI,CAACwG,OAAL,CAAa,KAAKpG,WAAlB,EAA+B;AACvDkG,MAAAA,WAAW,EAAE1D,cAAF,aAAEA,cAAF,uBAAEA,cAAc,CAAE0D,WAD0B;AAEvDG,MAAAA;AAFuD,KAA/B,CAA1B;AAKA,WAAOF,WAAP;AACD;;AAEDG,EAAAA,SAAS,CAACpF,SAAD,EAAuB;AAC9B,UAAMqF,OAAO,GAAG,KAAK3G,IAAL,CAAU4G,MAAV,CAAiBtF,SAAjB,CAAhB;AACA,UAAMuF,UAAU,GAAG,KAAK3G,YAAL,CAAkB4G,mBAAlB,CAAsCH,OAAtC,CAAnB;AACA,UAAMI,QAAQ,GAAG,KAAK5G,UAAL,CAAgB2G,mBAAhB,CAAoCH,OAApC,CAAjB;AACA,UAAMK,SAAS,GAAG,KAAK5G,WAAL,CAAiB0G,mBAAjB,CAAqCH,OAArC,CAAlB;AACA,WAAO;AAAEvE,MAAAA,EAAE,EAAEd,SAAS,CAACc,EAAhB;AAAoB6E,MAAAA,KAAK,EAAEN,OAAO,CAACvE,EAAnC;AAAuCyE,MAAAA,UAAvC;AAAmDE,MAAAA,QAAnD;AAA6DC,MAAAA;AAA7D,KAAP;AACD;AAED;AACF;AACA;AACA;;;AACEE,EAAAA,kBAAkB,CAACC,KAAD,EAAqB;AACrC,SAAK3G,aAAL,CAAmB4G,QAAnB,CAA4BD,KAA5B;AACA,WAAO,IAAP;AACD;AAED;AACF;AACA;;;AACEE,EAAAA,mBAAmB,CAACF,KAAD,EAAqB;AACtC,SAAK1G,WAAL,CAAiB2G,QAAjB,CAA0BD,KAA1B;AACA,WAAO,IAAP;AACD;AAED;AACF;AACA;AACA;;;AACEG,EAAAA,gBAAgB,CAACH,KAAD,EAAqB;AACnC,SAAK1G,WAAL,CAAiB2G,QAAjB,CAA0BD,KAA1B;AACA,WAAO,IAAP;AACD;AAED;AACF;AACA;AACA;;;AACEI,EAAAA,iBAAiB,CAACJ,KAAD,EAAqB;AACpC,SAAKzG,YAAL,CAAkB0G,QAAlB,CAA2BD,KAA3B;AACA,WAAO,IAAP;AACD;;AAiBoB,eAARK,QAAQ,CACnB,CAACC,GAAD,EAAMzH,IAAN,EAAYC,SAAZ,EAAuBI,KAAvB,EAA8BC,QAA9B,EAAwCoH,SAAxC,EAAmDnH,YAAnD,EAAiEoH,OAAjE,EAA0EC,SAA1E,CADmB,EAYnBC,MAZmB,EAanB,CAACrH,aAAD,EAAgBC,WAAhB,EAA6BC,YAA7B,CAbmB,EAcnB;AACA,UAAMoH,eAAe,GAAG,KAAIC,kCAAJ,GAAxB;AACA,UAAMC,MAAM,GAAGN,SAAS,CAACO,YAAV,CAAuBzC,yBAAcpD,EAArC,CAAf;AACA,UAAMlC,YAAY,GAAG,KAAIgI,0BAAJ,EACnB5H,QADmB,EAEnB0H,MAFmB,EAGnBxH,aAHmB,EAInB,cAJmB,EAKnB,OALmB,EAMnBsH,eANmB,EAOnBzH,KAPmB,CAArB;AASAL,IAAAA,IAAI,CAACmI,eAAL,CAAqBjI,YAArB;AACA,UAAMC,UAAU,GAAG,KAAI+H,0BAAJ,EAAmB5H,QAAnB,EAA6B0H,MAA7B,EAAqCvH,WAArC,EAAkD,YAAlD,EAAgE,KAAhE,EAAuEqH,eAAvE,EAAwFzH,KAAxF,CAAnB;AACA,UAAMD,WAAW,GAAG,KAAI8H,0BAAJ,EAClB5H,QADkB,EAElB0H,MAFkB,EAGlBtH,YAHkB,EAIlB,aAJkB,EAKlB,MALkB,EAMlBoH,eANkB,EAOlBzH,KAPkB,CAApB;AASA,UAAM+H,OAAO,GAAG,IAAItI,WAAJ,CACdE,IADc,EAEdC,SAFc,EAGdC,YAHc,EAIdC,UAJc,EAKdC,WALc,EAMdC,KANc,EAOdC,QAPc,EAQdC,YARc,EASdC,aATc,EAUdC,WAVc,EAWdC,YAXc,CAAhB;AAcAiH,IAAAA,OAAO,CAACP,QAAR,CAAiB,+BAAcgB,OAAd,CAAjB;AACAR,IAAAA,SAAS,CAACS,yBAAV,CAAoC,CAACC,8BAAD,CAApC;AACA,UAAMC,IAAI,GAAGH,OAAO,CAAC1F,WAAR,CAAoB8F,IAApB,CAAyBJ,OAAzB,CAAb;AACA,QAAI/H,KAAJ,EAAWA,KAAK,CAACoI,KAAN,CAAYF,IAAZ;;AACX,QAAItI,SAAS,IAAI,CAACA,SAAS,CAACyI,QAAV,CAAmBC,QAArC,EAA+C;AAC7C,YAAMC,QAAQ,GAAG,CAAC,KAAIC,mBAAJ,EAAeT,OAAf,EAAwBnI,SAAxB,EAAmC+H,MAAnC,CAAD,EAA6C,KAAIc,yBAAJ,EAAiBV,OAAjB,EAA0B/H,KAA1B,CAA7C,CAAjB;AACAoH,MAAAA,GAAG,CAACsB,UAAJ,CAAe,OAAf;AACAtB,MAAAA,GAAG,CAACL,QAAJ,CAAa,GAAGwB,QAAhB;AACD;;AACD,WAAOR,OAAP;AACD;;AA3SsB;;;gCAAZtI,W,WA+NI,CAACkJ,gBAAKC,QAAL,EAAD,EAA6BD,gBAAKC,QAAL,EAA7B,EAAyDD,gBAAKC,QAAL,EAAzD,C;gCA/NJnJ,W,aAiOMoJ,kB;gCAjONpJ,W,kBAkOW,CACpBqJ,gBADoB,EAEpBC,kBAFoB,EAGpBC,4BAHoB,EAIpBC,oBAJoB,EAKpBC,0BALoB,EAMpBC,sBANoB,EAOpBC,kCAPoB,EAQpBC,wBARoB,EASpBC,4BAToB,C;;AA4ExBnE,yBAAcoE,UAAd,CAAyB9J,WAAzB","sourcesContent":["import { flatten } from 'lodash';\nimport { ArtifactVinyl } from '@teambit/legacy/dist/consumer/component/sources/artifact';\nimport { AspectLoaderAspect, AspectLoaderMain } from '@teambit/aspect-loader';\nimport { CLIAspect, CLIMain, MainRuntime } from '@teambit/cli';\nimport { Component, ComponentMap } from '@teambit/component';\nimport { EnvsAspect, EnvsMain } from '@teambit/envs';\nimport { GraphqlAspect, GraphqlMain } from '@teambit/graphql';\nimport { Slot, SlotRegistry } from '@teambit/harmony';\nimport { LoggerAspect, LoggerMain } from '@teambit/logger';\nimport { ScopeAspect, ScopeMain, OnTagResults } from '@teambit/scope';\nimport { Workspace, WorkspaceAspect } from '@teambit/workspace';\nimport { IsolateComponentsOptions, IsolatorAspect, IsolatorMain } from '@teambit/isolator';\nimport { OnTagOpts } from '@teambit/legacy/dist/scope/scope';\nimport { ArtifactFiles, ArtifactObject } from '@teambit/legacy/dist/consumer/component/sources/artifact-files';\nimport { GeneratorAspect, GeneratorMain } from '@teambit/generator';\nimport { ArtifactList } from './artifact';\nimport { ArtifactFactory } from './artifact/artifact-factory'; // it gets undefined when importing it from './artifact'\nimport { BuilderAspect } from './builder.aspect';\nimport { builderSchema } from './builder.graphql';\nimport { BuilderService, BuilderServiceOptions } from './builder.service';\nimport { BuilderCmd } from './build.cmd';\nimport { BuildTask } from './build-task';\nimport { TaskResults } from './build-pipe';\nimport { TaskResultsList } from './task-results-list';\nimport { ArtifactStorageError } from './exceptions';\nimport { BuildPipelineResultList, AspectData, PipelineReport } from './build-pipeline-result-list';\nimport { Serializable } from './types';\nimport { ArtifactsCmd } from './artifact/artifacts.cmd';\nimport { buildTaskTemplate } from './templates/build-task';\n\nexport type TaskSlot = SlotRegistry<BuildTask[]>;\n\nexport type BuilderData = {\n pipeline: PipelineReport[];\n artifacts: ArtifactObject[] | undefined;\n aspectsData: AspectData[];\n};\n\nexport class BuilderMain {\n constructor(\n private envs: EnvsMain,\n private workspace: Workspace,\n private buildService: BuilderService,\n private tagService: BuilderService,\n private snapService: BuilderService,\n private scope: ScopeMain,\n private isolator: IsolatorMain,\n private aspectLoader: AspectLoaderMain,\n private buildTaskSlot: TaskSlot,\n private tagTaskSlot: TaskSlot,\n private snapTaskSlot: TaskSlot\n ) {}\n\n private async storeArtifacts(tasksResults: TaskResults[]) {\n const artifacts = tasksResults.flatMap((t) => (t.artifacts ? [t.artifacts] : []));\n const storeP = artifacts.map(async (artifactMap: ComponentMap<ArtifactList>) => {\n return Promise.all(\n artifactMap.toArray().map(async ([component, artifactList]) => {\n try {\n return await artifactList.store(component);\n } catch (err: any) {\n throw new ArtifactStorageError(err, component);\n }\n })\n );\n });\n await Promise.all(storeP);\n }\n\n private pipelineResultsToBuilderData(\n components: Component[],\n buildPipelineResults: TaskResults[]\n ): ComponentMap<BuilderData> {\n const buildPipelineResultList = new BuildPipelineResultList(buildPipelineResults, components);\n return ComponentMap.as<BuilderData>(components, (component) => {\n const aspectsData = buildPipelineResultList.getDataOfComponent(component.id);\n const pipelineReport = buildPipelineResultList.getPipelineReportOfComponent(component.id);\n const artifactsData = buildPipelineResultList.getArtifactsDataOfComponent(component.id);\n return { pipeline: pipelineReport, artifacts: artifactsData, aspectsData };\n });\n }\n\n async tagListener(\n components: Component[],\n options: OnTagOpts = {},\n isolateOptions: IsolateComponentsOptions = {}\n ): Promise<OnTagResults> {\n const pipeResults: TaskResultsList[] = [];\n const { throwOnError, forceDeploy, disableTagAndSnapPipelines, isSnap } = options;\n const envsExecutionResults = await this.build(\n components,\n { emptyRootDir: true, ...isolateOptions },\n { skipTests: options.skipTests }\n );\n if (throwOnError && !forceDeploy) envsExecutionResults.throwErrorsIfExist();\n const allTasksResults = [...envsExecutionResults.tasksResults];\n pipeResults.push(envsExecutionResults);\n if (forceDeploy || (!disableTagAndSnapPipelines && !envsExecutionResults.hasErrors())) {\n const deployEnvsExecutionResults = isSnap\n ? await this.runSnapTasks(components, isolateOptions, envsExecutionResults.tasksResults)\n : await this.runTagTasks(components, isolateOptions, envsExecutionResults.tasksResults);\n if (throwOnError && !forceDeploy) deployEnvsExecutionResults.throwErrorsIfExist();\n allTasksResults.push(...deployEnvsExecutionResults.tasksResults);\n pipeResults.push(deployEnvsExecutionResults);\n }\n await this.storeArtifacts(allTasksResults);\n const builderDataMap = this.pipelineResultsToBuilderData(components, allTasksResults);\n return { builderDataMap, pipeResults };\n }\n\n // TODO: merge with getArtifactsVinylByExtensionAndName by getting aspect name and name as object with optional props\n async getArtifactsVinylByExtension(component: Component, aspectName: string): Promise<ArtifactVinyl[]> {\n const artifactsObjects = this.getArtifactsByExtension(component, aspectName);\n const vinyls = await Promise.all(\n (artifactsObjects || []).map((artifactObject) =>\n artifactObject.files.getVinylsAndImportIfMissing(component.id.scope as string, this.scope.legacyScope)\n )\n );\n return flatten(vinyls);\n }\n\n async getArtifactsVinylByExtensionAndName(\n component: Component,\n aspectName: string,\n name: string\n ): Promise<ArtifactVinyl[]> {\n const artifactsObjects = this.getArtifactsByExtensionAndName(component, aspectName, name);\n const vinyls = await Promise.all(\n (artifactsObjects || []).map((artifactObject) =>\n artifactObject.files.getVinylsAndImportIfMissing(component.id.scope as string, this.scope.legacyScope)\n )\n );\n return flatten(vinyls);\n }\n\n getArtifactsByName(component: Component, name: string): ArtifactObject[] | undefined {\n const artifacts = this.getArtifacts(component);\n return artifacts?.filter((artifact) => artifact.name === name);\n }\n\n getArtifactsByExtension(component: Component, aspectName: string): ArtifactObject[] | undefined {\n const artifacts = this.getArtifacts(component);\n return artifacts?.filter((artifact) => artifact.task.id === aspectName);\n }\n\n getArtifactsByExtensionAndName(component: Component, aspectName: string, name: string): ArtifactObject[] | undefined {\n const artifacts = this.getArtifacts(component);\n return artifacts?.filter((artifact) => artifact.task.id === aspectName && artifact.name === name);\n }\n\n getDataByAspect(component: Component, aspectName: string): Serializable | undefined {\n const aspectsData = this.getBuilderData(component)?.aspectsData;\n const data = aspectsData?.find((aspectData) => aspectData.aspectId === aspectName);\n return data?.data;\n }\n\n getArtifacts(component: Component): ArtifactObject[] | undefined {\n return this.getBuilderData(component)?.artifacts;\n }\n\n getBuilderData(component: Component): BuilderData | undefined {\n const data = component.state.aspects.get(BuilderAspect.id)?.data as BuilderData | undefined;\n if (!data) return undefined;\n data.artifacts?.forEach((artifact) => {\n if (!(artifact.files instanceof ArtifactFiles)) {\n artifact.files = ArtifactFiles.fromObject(artifact.files);\n }\n });\n return data;\n }\n\n /**\n * build given components for release.\n * for each one of the envs it runs a series of tasks.\n * in case of an error in a task, it stops the execution of that env and continue to the next\n * env. at the end, the results contain the data and errors per env.\n */\n async build(\n components: Component[],\n isolateOptions?: IsolateComponentsOptions,\n builderOptions?: BuilderServiceOptions\n ): Promise<TaskResultsList> {\n const ids = components.map((c) => c.id);\n const network = await this.isolator.isolateComponents(ids, isolateOptions);\n const envs = await this.envs.createEnvironment(network.graphCapsules.getAllComponents());\n const builderServiceOptions = { seedersOnly: isolateOptions?.seedersOnly, ...(builderOptions || {}) };\n const buildResult = await envs.runOnce(this.buildService, builderServiceOptions);\n return buildResult;\n }\n\n async runTagTasks(\n components: Component[],\n isolateOptions?: IsolateComponentsOptions,\n previousTasksResults?: TaskResults[]\n ): Promise<TaskResultsList> {\n const envs = await this.envs.createEnvironment(components);\n const buildResult = await envs.runOnce(this.tagService, {\n seedersOnly: isolateOptions?.seedersOnly,\n previousTasksResults,\n });\n\n return buildResult;\n }\n\n async runSnapTasks(\n components: Component[],\n isolateOptions?: IsolateComponentsOptions,\n previousTasksResults?: TaskResults[]\n ): Promise<TaskResultsList> {\n const envs = await this.envs.createEnvironment(components);\n const buildResult = await envs.runOnce(this.snapService, {\n seedersOnly: isolateOptions?.seedersOnly,\n previousTasksResults,\n });\n\n return buildResult;\n }\n\n listTasks(component: Component) {\n const compEnv = this.envs.getEnv(component);\n const buildTasks = this.buildService.getCurrentPipeTasks(compEnv);\n const tagTasks = this.tagService.getCurrentPipeTasks(compEnv);\n const snapTasks = this.snapService.getCurrentPipeTasks(compEnv);\n return { id: component.id, envId: compEnv.id, buildTasks, tagTasks, snapTasks };\n }\n\n /**\n * register a build task to apply on all component build pipelines.\n * build happens on `bit build` and as part of `bit tag --persist`.\n */\n registerBuildTasks(tasks: BuildTask[]) {\n this.buildTaskSlot.register(tasks);\n return this;\n }\n\n /**\n * @deprecated use registerTagTasks or registerSnapTasks\n */\n registerDeployTasks(tasks: BuildTask[]) {\n this.tagTaskSlot.register(tasks);\n return this;\n }\n\n /**\n * tag tasks that don't get executed on `bit build`, only on `bit tag'.\n * this pipeline is running once the build-pipeline has completed.\n */\n registerTagTasks(tasks: BuildTask[]) {\n this.tagTaskSlot.register(tasks);\n return this;\n }\n\n /**\n * tag tasks that don't get executed on `bit build`, only on `bit snap'.\n * this pipeline is running once the build-pipeline has completed.\n */\n registerSnapTasks(tasks: BuildTask[]) {\n this.snapTaskSlot.register(tasks);\n return this;\n }\n\n static slots = [Slot.withType<BuildTask>(), Slot.withType<BuildTask>(), Slot.withType<BuildTask>()];\n\n static runtime = MainRuntime;\n static dependencies = [\n CLIAspect,\n EnvsAspect,\n WorkspaceAspect,\n ScopeAspect,\n IsolatorAspect,\n LoggerAspect,\n AspectLoaderAspect,\n GraphqlAspect,\n GeneratorAspect,\n ];\n\n static async provider(\n [cli, envs, workspace, scope, isolator, loggerExt, aspectLoader, graphql, generator]: [\n CLIMain,\n EnvsMain,\n Workspace,\n ScopeMain,\n IsolatorMain,\n LoggerMain,\n AspectLoaderMain,\n GraphqlMain,\n GeneratorMain\n ],\n config,\n [buildTaskSlot, tagTaskSlot, snapTaskSlot]: [TaskSlot, TaskSlot, TaskSlot]\n ) {\n const artifactFactory = new ArtifactFactory();\n const logger = loggerExt.createLogger(BuilderAspect.id);\n const buildService = new BuilderService(\n isolator,\n logger,\n buildTaskSlot,\n 'getBuildPipe',\n 'build',\n artifactFactory,\n scope\n );\n envs.registerService(buildService);\n const tagService = new BuilderService(isolator, logger, tagTaskSlot, 'getTagPipe', 'tag', artifactFactory, scope);\n const snapService = new BuilderService(\n isolator,\n logger,\n snapTaskSlot,\n 'getSnapPipe',\n 'snap',\n artifactFactory,\n scope\n );\n const builder = new BuilderMain(\n envs,\n workspace,\n buildService,\n tagService,\n snapService,\n scope,\n isolator,\n aspectLoader,\n buildTaskSlot,\n tagTaskSlot,\n snapTaskSlot\n );\n\n graphql.register(builderSchema(builder));\n generator.registerComponentTemplate([buildTaskTemplate]);\n const func = builder.tagListener.bind(builder);\n if (scope) scope.onTag(func);\n if (workspace && !workspace.consumer.isLegacy) {\n const commands = [new BuilderCmd(builder, workspace, logger), new ArtifactsCmd(builder, scope)];\n cli.unregister('build');\n cli.register(...commands);\n }\n return builder;\n }\n}\n\nBuilderAspect.addRuntime(BuilderMain);\n"]}
1
+ {"version":3,"sources":["builder.main.runtime.ts"],"names":["BuilderMain","constructor","envs","workspace","buildService","tagService","snapService","scope","isolator","aspectLoader","buildTaskSlot","tagTaskSlot","snapTaskSlot","storeArtifacts","tasksResults","artifacts","flatMap","t","storeP","map","artifactMap","Promise","all","toArray","component","artifactList","store","err","ArtifactStorageError","pipelineResultsToBuilderData","components","buildPipelineResults","buildPipelineResultList","BuildPipelineResultList","ComponentMap","as","aspectsData","getDataOfComponent","id","pipelineReport","getPipelineReportOfComponent","artifactsData","getArtifactsDataOfComponent","pipeline","tagListener","options","isolateOptions","pipeResults","throwOnError","forceDeploy","disableTagAndSnapPipelines","isSnap","envsExecutionResults","build","emptyRootDir","skipTests","throwErrorsIfExist","allTasksResults","push","hasErrors","deployEnvsExecutionResults","runSnapTasks","runTagTasks","builderDataMap","validateBuilderDataMap","forEach","buildData","taskSerializedIds","BuildTaskHelper","serializeId","aspectId","taskId","name","taskName","duplications","length","Error","toString","join","getArtifactsVinylByExtension","aspectName","artifactsObjects","getArtifactsByExtension","vinyls","artifactObject","files","getVinylsAndImportIfMissing","legacyScope","getArtifactsVinylByExtensionAndName","getArtifactsByExtensionAndName","getArtifactsVinylByExtensionAndTaskName","getArtifactsByExtensionAndTaskName","getArtifactsByName","getArtifacts","filter","artifact","task","getDataByAspect","getBuilderData","data","find","aspectData","state","aspects","get","BuilderAspect","undefined","ArtifactFiles","fromObject","builderOptions","ids","c","network","isolateComponents","createEnvironment","graphCapsules","getAllComponents","builderServiceOptions","seedersOnly","buildResult","runOnce","previousTasksResults","listTasks","compEnv","getEnv","buildTasks","getCurrentPipeTasks","tagTasks","snapTasks","envId","registerBuildTasks","tasks","register","registerDeployTasks","registerTagTasks","registerSnapTasks","provider","cli","loggerExt","graphql","generator","config","artifactFactory","ArtifactFactory","logger","createLogger","BuilderService","registerService","builder","registerComponentTemplate","buildTaskTemplate","func","bind","onTag","consumer","isLegacy","commands","BuilderCmd","ArtifactsCmd","unregister","Slot","withType","MainRuntime","CLIAspect","EnvsAspect","WorkspaceAspect","ScopeAspect","IsolatorAspect","LoggerAspect","AspectLoaderAspect","GraphqlAspect","GeneratorAspect","addRuntime"],"mappings":"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","sourcesContent":["import { flatten } from 'lodash';\nimport { ArtifactVinyl } from '@teambit/legacy/dist/consumer/component/sources/artifact';\nimport { AspectLoaderAspect, AspectLoaderMain } from '@teambit/aspect-loader';\nimport { CLIAspect, CLIMain, MainRuntime } from '@teambit/cli';\nimport { Component, ComponentMap } from '@teambit/component';\nimport { EnvsAspect, EnvsMain } from '@teambit/envs';\nimport { GraphqlAspect, GraphqlMain } from '@teambit/graphql';\nimport { Slot, SlotRegistry } from '@teambit/harmony';\nimport { LoggerAspect, LoggerMain } from '@teambit/logger';\nimport { ScopeAspect, ScopeMain, OnTagResults } from '@teambit/scope';\nimport { Workspace, WorkspaceAspect } from '@teambit/workspace';\nimport { IsolateComponentsOptions, IsolatorAspect, IsolatorMain } from '@teambit/isolator';\nimport { OnTagOpts } from '@teambit/legacy/dist/scope/scope';\nimport findDuplications from '@teambit/legacy/dist/utils/array/find-duplications';\nimport { ArtifactFiles, ArtifactObject } from '@teambit/legacy/dist/consumer/component/sources/artifact-files';\nimport { GeneratorAspect, GeneratorMain } from '@teambit/generator';\nimport { ArtifactList } from './artifact';\nimport { ArtifactFactory } from './artifact/artifact-factory'; // it gets undefined when importing it from './artifact'\nimport { BuilderAspect } from './builder.aspect';\nimport { builderSchema } from './builder.graphql';\nimport { BuilderService, BuilderServiceOptions } from './builder.service';\nimport { BuilderCmd } from './build.cmd';\nimport { BuildTask, BuildTaskHelper } from './build-task';\nimport { TaskResults } from './build-pipe';\nimport { TaskResultsList } from './task-results-list';\nimport { ArtifactStorageError } from './exceptions';\nimport { BuildPipelineResultList, AspectData, PipelineReport } from './build-pipeline-result-list';\nimport { Serializable } from './types';\nimport { ArtifactsCmd } from './artifact/artifacts.cmd';\nimport { buildTaskTemplate } from './templates/build-task';\n\nexport type TaskSlot = SlotRegistry<BuildTask[]>;\n\nexport type BuilderData = {\n pipeline: PipelineReport[];\n artifacts: ArtifactObject[] | undefined;\n aspectsData: AspectData[];\n};\n\nexport class BuilderMain {\n constructor(\n private envs: EnvsMain,\n private workspace: Workspace,\n private buildService: BuilderService,\n private tagService: BuilderService,\n private snapService: BuilderService,\n private scope: ScopeMain,\n private isolator: IsolatorMain,\n private aspectLoader: AspectLoaderMain,\n private buildTaskSlot: TaskSlot,\n private tagTaskSlot: TaskSlot,\n private snapTaskSlot: TaskSlot\n ) {}\n\n private async storeArtifacts(tasksResults: TaskResults[]) {\n const artifacts = tasksResults.flatMap((t) => (t.artifacts ? [t.artifacts] : []));\n const storeP = artifacts.map(async (artifactMap: ComponentMap<ArtifactList>) => {\n return Promise.all(\n artifactMap.toArray().map(async ([component, artifactList]) => {\n try {\n return await artifactList.store(component);\n } catch (err: any) {\n throw new ArtifactStorageError(err, component);\n }\n })\n );\n });\n await Promise.all(storeP);\n }\n\n private pipelineResultsToBuilderData(\n components: Component[],\n buildPipelineResults: TaskResults[]\n ): ComponentMap<BuilderData> {\n const buildPipelineResultList = new BuildPipelineResultList(buildPipelineResults, components);\n return ComponentMap.as<BuilderData>(components, (component) => {\n const aspectsData = buildPipelineResultList.getDataOfComponent(component.id);\n const pipelineReport = buildPipelineResultList.getPipelineReportOfComponent(component.id);\n const artifactsData = buildPipelineResultList.getArtifactsDataOfComponent(component.id);\n return { pipeline: pipelineReport, artifacts: artifactsData, aspectsData };\n });\n }\n\n async tagListener(\n components: Component[],\n options: OnTagOpts = {},\n isolateOptions: IsolateComponentsOptions = {}\n ): Promise<OnTagResults> {\n const pipeResults: TaskResultsList[] = [];\n const { throwOnError, forceDeploy, disableTagAndSnapPipelines, isSnap } = options;\n const envsExecutionResults = await this.build(\n components,\n { emptyRootDir: true, ...isolateOptions },\n { skipTests: options.skipTests }\n );\n if (throwOnError && !forceDeploy) envsExecutionResults.throwErrorsIfExist();\n const allTasksResults = [...envsExecutionResults.tasksResults];\n pipeResults.push(envsExecutionResults);\n if (forceDeploy || (!disableTagAndSnapPipelines && !envsExecutionResults.hasErrors())) {\n const deployEnvsExecutionResults = isSnap\n ? await this.runSnapTasks(components, isolateOptions, envsExecutionResults.tasksResults)\n : await this.runTagTasks(components, isolateOptions, envsExecutionResults.tasksResults);\n if (throwOnError && !forceDeploy) deployEnvsExecutionResults.throwErrorsIfExist();\n allTasksResults.push(...deployEnvsExecutionResults.tasksResults);\n pipeResults.push(deployEnvsExecutionResults);\n }\n await this.storeArtifacts(allTasksResults);\n const builderDataMap = this.pipelineResultsToBuilderData(components, allTasksResults);\n this.validateBuilderDataMap(builderDataMap);\n return { builderDataMap, pipeResults };\n }\n\n private validateBuilderDataMap(builderDataMap: ComponentMap<BuilderData>) {\n builderDataMap.forEach((buildData: BuilderData, component) => {\n const taskSerializedIds = buildData.pipeline.map((t) =>\n BuildTaskHelper.serializeId({ aspectId: t.taskId, name: t.taskName })\n );\n const duplications = findDuplications(taskSerializedIds);\n if (duplications.length) {\n throw new Error(\n `build-task-results validation has failed. the following task(s) of \"${component.id.toString()}\" are duplicated: ${duplications.join(\n ', '\n )}`\n );\n }\n });\n }\n\n // TODO: merge with getArtifactsVinylByExtensionAndName by getting aspect name and name as object with optional props\n async getArtifactsVinylByExtension(component: Component, aspectName: string): Promise<ArtifactVinyl[]> {\n const artifactsObjects = this.getArtifactsByExtension(component, aspectName);\n const vinyls = await Promise.all(\n (artifactsObjects || []).map((artifactObject) =>\n artifactObject.files.getVinylsAndImportIfMissing(component.id.scope as string, this.scope.legacyScope)\n )\n );\n return flatten(vinyls);\n }\n\n async getArtifactsVinylByExtensionAndName(\n component: Component,\n aspectName: string,\n name: string\n ): Promise<ArtifactVinyl[]> {\n const artifactsObjects = this.getArtifactsByExtensionAndName(component, aspectName, name);\n const vinyls = await Promise.all(\n (artifactsObjects || []).map((artifactObject) =>\n artifactObject.files.getVinylsAndImportIfMissing(component.id.scope as string, this.scope.legacyScope)\n )\n );\n return flatten(vinyls);\n }\n\n async getArtifactsVinylByExtensionAndTaskName(\n component: Component,\n aspectName: string,\n taskName: string\n ): Promise<ArtifactVinyl[]> {\n const artifactsObjects = this.getArtifactsByExtensionAndTaskName(component, aspectName, taskName);\n const vinyls = await Promise.all(\n (artifactsObjects || []).map((artifactObject) =>\n artifactObject.files.getVinylsAndImportIfMissing(component.id.scope as string, this.scope.legacyScope)\n )\n );\n return flatten(vinyls);\n }\n\n getArtifactsByName(component: Component, name: string): ArtifactObject[] | undefined {\n const artifacts = this.getArtifacts(component);\n return artifacts?.filter((artifact) => artifact.name === name);\n }\n\n getArtifactsByExtension(component: Component, aspectName: string): ArtifactObject[] | undefined {\n const artifacts = this.getArtifacts(component);\n return artifacts?.filter((artifact) => artifact.task.id === aspectName);\n }\n\n getArtifactsByExtensionAndName(component: Component, aspectName: string, name: string): ArtifactObject[] | undefined {\n const artifacts = this.getArtifacts(component);\n return artifacts?.filter((artifact) => artifact.task.id === aspectName && artifact.name === name);\n }\n\n getArtifactsByExtensionAndTaskName(\n component: Component,\n aspectName: string,\n taskName: string\n ): ArtifactObject[] | undefined {\n const artifacts = this.getArtifacts(component);\n return artifacts?.filter((artifact) => artifact.task.id === aspectName && artifact.task.name === taskName);\n }\n\n getDataByAspect(component: Component, aspectName: string): Serializable | undefined {\n const aspectsData = this.getBuilderData(component)?.aspectsData;\n const data = aspectsData?.find((aspectData) => aspectData.aspectId === aspectName);\n return data?.data;\n }\n\n getArtifacts(component: Component): ArtifactObject[] | undefined {\n return this.getBuilderData(component)?.artifacts;\n }\n\n getBuilderData(component: Component): BuilderData | undefined {\n const data = component.state.aspects.get(BuilderAspect.id)?.data as BuilderData | undefined;\n if (!data) return undefined;\n data.artifacts?.forEach((artifact) => {\n if (!(artifact.files instanceof ArtifactFiles)) {\n artifact.files = ArtifactFiles.fromObject(artifact.files);\n }\n });\n return data;\n }\n\n /**\n * build given components for release.\n * for each one of the envs it runs a series of tasks.\n * in case of an error in a task, it stops the execution of that env and continue to the next\n * env. at the end, the results contain the data and errors per env.\n */\n async build(\n components: Component[],\n isolateOptions?: IsolateComponentsOptions,\n builderOptions?: BuilderServiceOptions\n ): Promise<TaskResultsList> {\n const ids = components.map((c) => c.id);\n const network = await this.isolator.isolateComponents(ids, isolateOptions);\n const envs = await this.envs.createEnvironment(network.graphCapsules.getAllComponents());\n const builderServiceOptions = { seedersOnly: isolateOptions?.seedersOnly, ...(builderOptions || {}) };\n const buildResult = await envs.runOnce(this.buildService, builderServiceOptions);\n return buildResult;\n }\n\n async runTagTasks(\n components: Component[],\n isolateOptions?: IsolateComponentsOptions,\n previousTasksResults?: TaskResults[]\n ): Promise<TaskResultsList> {\n const envs = await this.envs.createEnvironment(components);\n const buildResult = await envs.runOnce(this.tagService, {\n seedersOnly: isolateOptions?.seedersOnly,\n previousTasksResults,\n });\n\n return buildResult;\n }\n\n async runSnapTasks(\n components: Component[],\n isolateOptions?: IsolateComponentsOptions,\n previousTasksResults?: TaskResults[]\n ): Promise<TaskResultsList> {\n const envs = await this.envs.createEnvironment(components);\n const buildResult = await envs.runOnce(this.snapService, {\n seedersOnly: isolateOptions?.seedersOnly,\n previousTasksResults,\n });\n\n return buildResult;\n }\n\n listTasks(component: Component) {\n const compEnv = this.envs.getEnv(component);\n const buildTasks = this.buildService.getCurrentPipeTasks(compEnv);\n const tagTasks = this.tagService.getCurrentPipeTasks(compEnv);\n const snapTasks = this.snapService.getCurrentPipeTasks(compEnv);\n return { id: component.id, envId: compEnv.id, buildTasks, tagTasks, snapTasks };\n }\n\n /**\n * register a build task to apply on all component build pipelines.\n * build happens on `bit build` and as part of `bit tag --persist`.\n */\n registerBuildTasks(tasks: BuildTask[]) {\n this.buildTaskSlot.register(tasks);\n return this;\n }\n\n /**\n * @deprecated use registerTagTasks or registerSnapTasks\n */\n registerDeployTasks(tasks: BuildTask[]) {\n this.tagTaskSlot.register(tasks);\n return this;\n }\n\n /**\n * tag tasks that don't get executed on `bit build`, only on `bit tag'.\n * this pipeline is running once the build-pipeline has completed.\n */\n registerTagTasks(tasks: BuildTask[]) {\n this.tagTaskSlot.register(tasks);\n return this;\n }\n\n /**\n * tag tasks that don't get executed on `bit build`, only on `bit snap'.\n * this pipeline is running once the build-pipeline has completed.\n */\n registerSnapTasks(tasks: BuildTask[]) {\n this.snapTaskSlot.register(tasks);\n return this;\n }\n\n static slots = [Slot.withType<BuildTask>(), Slot.withType<BuildTask>(), Slot.withType<BuildTask>()];\n\n static runtime = MainRuntime;\n static dependencies = [\n CLIAspect,\n EnvsAspect,\n WorkspaceAspect,\n ScopeAspect,\n IsolatorAspect,\n LoggerAspect,\n AspectLoaderAspect,\n GraphqlAspect,\n GeneratorAspect,\n ];\n\n static async provider(\n [cli, envs, workspace, scope, isolator, loggerExt, aspectLoader, graphql, generator]: [\n CLIMain,\n EnvsMain,\n Workspace,\n ScopeMain,\n IsolatorMain,\n LoggerMain,\n AspectLoaderMain,\n GraphqlMain,\n GeneratorMain\n ],\n config,\n [buildTaskSlot, tagTaskSlot, snapTaskSlot]: [TaskSlot, TaskSlot, TaskSlot]\n ) {\n const artifactFactory = new ArtifactFactory();\n const logger = loggerExt.createLogger(BuilderAspect.id);\n const buildService = new BuilderService(\n isolator,\n logger,\n buildTaskSlot,\n 'getBuildPipe',\n 'build',\n artifactFactory,\n scope\n );\n envs.registerService(buildService);\n const tagService = new BuilderService(isolator, logger, tagTaskSlot, 'getTagPipe', 'tag', artifactFactory, scope);\n const snapService = new BuilderService(\n isolator,\n logger,\n snapTaskSlot,\n 'getSnapPipe',\n 'snap',\n artifactFactory,\n scope\n );\n const builder = new BuilderMain(\n envs,\n workspace,\n buildService,\n tagService,\n snapService,\n scope,\n isolator,\n aspectLoader,\n buildTaskSlot,\n tagTaskSlot,\n snapTaskSlot\n );\n\n graphql.register(builderSchema(builder));\n generator.registerComponentTemplate([buildTaskTemplate]);\n const func = builder.tagListener.bind(builder);\n if (scope) scope.onTag(func);\n if (workspace && !workspace.consumer.isLegacy) {\n const commands = [new BuilderCmd(builder, workspace, logger), new ArtifactsCmd(builder, scope)];\n cli.unregister('build');\n cli.register(...commands);\n }\n return builder;\n }\n}\n\nBuilderAspect.addRuntime(BuilderMain);\n"]}
@@ -20,6 +20,7 @@ export declare type BuilderServiceOptions = {
20
20
  tasks?: string[];
21
21
  skipTests?: boolean;
22
22
  previousTasksResults?: TaskResults[];
23
+ dev?: boolean;
23
24
  };
24
25
  export declare type EnvsBuildContext = {
25
26
  [envId: string]: BuildContext;
@@ -141,7 +141,8 @@ class BuilderService {
141
141
  this.logger.console(`generated graph for env "${executionContext.id}", seeders total: ${capsuleNetwork.seedersCapsules.length}, graph total: ${capsuleNetwork.graphCapsules.length}`);
142
142
  const buildContext = Object.assign(executionContext, {
143
143
  capsuleNetwork,
144
- previousTasksResults: []
144
+ previousTasksResults: [],
145
+ dev: options.dev
145
146
  });
146
147
  envsBuildContext[executionContext.id] = buildContext;
147
148
  }));
@@ -1 +1 @@
1
- {"version":3,"sources":["builder.service.tsx"],"names":["pipeNames","getBuildPipe","getTagPipe","getSnapPipe","BuilderService","constructor","isolator","logger","taskSlot","pipeNameOnEnv","displayPipeName","artifactFactory","scope","runOnce","envsExecutionContext","options","envs","map","executionContext","envDefinition","tasksQueue","tasks","skipTests","validate","info","toString","title","length","longProcessLogger","createLongProcessLogger","consoleTitle","envsBuildContext","Promise","all","componentIds","components","component","id","capsuleNetwork","isolateComponents","getExistingAsIs","seedersOnly","console","seedersCapsules","graphCapsules","buildContext","Object","assign","previousTasksResults","buildPipe","BuildPipe","from","buildResults","execute","end","hasErrors","consoleFailure","consoleSuccess","render","env","pipes","getDescriptor","BuilderAspect","pipeName","renderOnePipe","task","index","keys","pipeFuncName","getTasksNamesByPipeFunc","BuildTaskHelper","serializeId","getCurrentPipeTasks"],"mappings":"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","sourcesContent":["import { EnvDefinition, EnvService, ExecutionContext } from '@teambit/envs';\nimport React from 'react';\nimport { ScopeMain } from '@teambit/scope';\nimport { Text, Newline } from 'ink';\nimport { Logger } from '@teambit/logger';\nimport { IsolatorMain } from '@teambit/isolator';\nimport { Component } from '@teambit/component';\nimport { BuildPipe, TaskResults } from './build-pipe';\nimport { TaskResultsList } from './task-results-list';\nimport { TaskSlot } from './builder.main.runtime';\nimport { BuildContext, BuildTaskHelper } from './build-task';\nimport { ArtifactFactory } from './artifact';\nimport { calculatePipelineOrder } from './build-pipeline-order';\nimport { BuilderAspect } from './builder.aspect';\n\nexport type BuildServiceResults = {\n id: string;\n buildResults: TaskResultsList;\n components: Component[];\n errors?: [];\n};\n\nexport type BuilderServiceOptions = {\n seedersOnly?: boolean;\n tasks?: string[];\n skipTests?: boolean;\n previousTasksResults?: TaskResults[];\n};\n\nexport type EnvsBuildContext = { [envId: string]: BuildContext };\n\nconst pipeNames = {\n getBuildPipe: 'build',\n getTagPipe: 'tag',\n getSnapPipe: 'snap',\n};\n\ntype PipeName = 'build' | 'tag' | 'snap';\n\nexport type BuilderDescriptor = Array<{ pipeName: PipeName; tasks: string[] }>;\n\ntype PipeFunctionNames = keyof typeof pipeNames;\nexport class BuilderService implements EnvService<BuildServiceResults, BuilderDescriptor> {\n name = 'builder';\n\n constructor(\n /**\n * isolator extension.\n */\n private isolator: IsolatorMain,\n\n /**\n * logger extension.\n */\n private logger: Logger,\n\n /**\n * task slot (e.g tasks registered by other extensions.).\n */\n private taskSlot: TaskSlot,\n\n /**\n * a method with such name should be implemented on the env in order to run the pipe tasks.\n */\n private pipeNameOnEnv: PipeFunctionNames,\n\n /**\n * pipe name to display on the console during the execution\n */\n private displayPipeName: string,\n private artifactFactory: ArtifactFactory,\n private scope: ScopeMain\n ) {}\n\n /**\n * runs all tasks for all envs\n */\n async runOnce(envsExecutionContext: ExecutionContext[], options: BuilderServiceOptions): Promise<TaskResultsList> {\n const envs = envsExecutionContext.map((executionContext) => executionContext.envDefinition);\n const tasksQueue = calculatePipelineOrder(\n this.taskSlot,\n envs,\n this.pipeNameOnEnv,\n options.tasks,\n options.skipTests\n );\n tasksQueue.validate();\n this.logger.info(`going to run tasks in the following order:\\n${tasksQueue.toString()}`);\n const title = `running ${this.displayPipeName} pipe for ${envs.length} environments, total ${tasksQueue.length} tasks`;\n const longProcessLogger = this.logger.createLongProcessLogger(title);\n this.logger.consoleTitle(title);\n const envsBuildContext: EnvsBuildContext = {};\n await Promise.all(\n envsExecutionContext.map(async (executionContext) => {\n const componentIds = executionContext.components.map((component) => component.id);\n const capsuleNetwork = await this.isolator.isolateComponents(componentIds, {\n getExistingAsIs: true,\n seedersOnly: options.seedersOnly,\n });\n this.logger.console(\n `generated graph for env \"${executionContext.id}\", seeders total: ${capsuleNetwork.seedersCapsules.length}, graph total: ${capsuleNetwork.graphCapsules.length}`\n );\n const buildContext = Object.assign(executionContext, {\n capsuleNetwork,\n previousTasksResults: [],\n });\n envsBuildContext[executionContext.id] = buildContext;\n })\n );\n const buildPipe = BuildPipe.from(\n tasksQueue,\n envsBuildContext,\n this.logger,\n this.artifactFactory,\n options.previousTasksResults\n );\n const buildResults = await buildPipe.execute();\n longProcessLogger.end();\n buildResults.hasErrors() ? this.logger.consoleFailure() : this.logger.consoleSuccess();\n\n return buildResults;\n }\n\n render(env: EnvDefinition) {\n const pipes = this.getDescriptor(env);\n\n return (\n <Text key={BuilderAspect.id}>{pipes.map(({ pipeName, tasks }) => this.renderOnePipe(pipeName, tasks))}</Text>\n );\n }\n\n private renderOnePipe(pipeName, tasks) {\n if (!tasks || !tasks.length) return null;\n return (\n <Text key={pipeName}>\n <Text underline color=\"green\">\n {pipeName} pipe\n </Text>\n <Newline />\n <Text color=\"cyan\">total {tasks.length} tasks are configured to be executed in the following order</Text>\n <Newline />\n {tasks.map((task, index) => (\n <Text key={index}>\n <Text>\n {index + 1}. {task}\n </Text>\n <Newline />\n </Text>\n ))}\n <Newline />\n </Text>\n );\n }\n\n getDescriptor(env: EnvDefinition) {\n // @ts-ignore\n const tasks = Object.keys(pipeNames).map((pipeFuncName: PipeFunctionNames) => {\n const tasksQueue = this.getTasksNamesByPipeFunc(env, pipeFuncName);\n return { pipeName: pipeNames[pipeFuncName], tasks: tasksQueue };\n });\n return tasks as BuilderDescriptor;\n }\n\n private getTasksNamesByPipeFunc(env: EnvDefinition, pipeFuncName: PipeFunctionNames): string[] {\n const tasksQueue = calculatePipelineOrder(this.taskSlot, [env], pipeFuncName).map(({ task }) =>\n BuildTaskHelper.serializeId(task)\n );\n return tasksQueue;\n }\n\n getCurrentPipeTasks(env: EnvDefinition) {\n return this.getTasksNamesByPipeFunc(env, this.pipeNameOnEnv);\n }\n}\n"]}
1
+ {"version":3,"sources":["builder.service.tsx"],"names":["pipeNames","getBuildPipe","getTagPipe","getSnapPipe","BuilderService","constructor","isolator","logger","taskSlot","pipeNameOnEnv","displayPipeName","artifactFactory","scope","runOnce","envsExecutionContext","options","envs","map","executionContext","envDefinition","tasksQueue","tasks","skipTests","validate","info","toString","title","length","longProcessLogger","createLongProcessLogger","consoleTitle","envsBuildContext","Promise","all","componentIds","components","component","id","capsuleNetwork","isolateComponents","getExistingAsIs","seedersOnly","console","seedersCapsules","graphCapsules","buildContext","Object","assign","previousTasksResults","dev","buildPipe","BuildPipe","from","buildResults","execute","end","hasErrors","consoleFailure","consoleSuccess","render","env","pipes","getDescriptor","BuilderAspect","pipeName","renderOnePipe","task","index","keys","pipeFuncName","getTasksNamesByPipeFunc","BuildTaskHelper","serializeId","getCurrentPipeTasks"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;AACA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AAEA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AAIA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AAGA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AAEA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AACA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AAmBA,MAAMA,SAAS,GAAG;AAChBC,EAAAA,YAAY,EAAE,OADE;AAEhBC,EAAAA,UAAU,EAAE,KAFI;AAGhBC,EAAAA,WAAW,EAAE;AAHG,CAAlB;;AAWO,MAAMC,cAAN,CAAmF;AAGxFC,EAAAA,WAAW;AACT;AACJ;AACA;AACYC,EAAAA,QAJC;AAMT;AACJ;AACA;AACYC,EAAAA,MATC;AAWT;AACJ;AACA;AACYC,EAAAA,QAdC;AAgBT;AACJ;AACA;AACYC,EAAAA,aAnBC;AAqBT;AACJ;AACA;AACYC,EAAAA,eAxBC,EAyBDC,eAzBC,EA0BDC,KA1BC,EA2BT;AAAA,SAvBQN,QAuBR,GAvBQA,QAuBR;AAAA,SAlBQC,MAkBR,GAlBQA,MAkBR;AAAA,SAbQC,QAaR,GAbQA,QAaR;AAAA,SARQC,aAQR,GARQA,aAQR;AAAA,SAHQC,eAGR,GAHQA,eAGR;AAAA,SAFQC,eAER,GAFQA,eAER;AAAA,SADQC,KACR,GADQA,KACR;AAAA,kDA7BK,SA6BL;AAAE;AAEJ;AACF;AACA;;;AACe,QAAPC,OAAO,CAACC,oBAAD,EAA2CC,OAA3C,EAAqG;AAChH,UAAMC,IAAI,GAAGF,oBAAoB,CAACG,GAArB,CAA0BC,gBAAD,IAAsBA,gBAAgB,CAACC,aAAhE,CAAb;AACA,UAAMC,UAAU,GAAG,kDACjB,KAAKZ,QADY,EAEjBQ,IAFiB,EAGjB,KAAKP,aAHY,EAIjBM,OAAO,CAACM,KAJS,EAKjBN,OAAO,CAACO,SALS,CAAnB;AAOAF,IAAAA,UAAU,CAACG,QAAX;AACA,SAAKhB,MAAL,CAAYiB,IAAZ,CAAkB,+CAA8CJ,UAAU,CAACK,QAAX,EAAsB,EAAtF;AACA,UAAMC,KAAK,GAAI,WAAU,KAAKhB,eAAgB,aAAYM,IAAI,CAACW,MAAO,wBAAuBP,UAAU,CAACO,MAAO,QAA/G;AACA,UAAMC,iBAAiB,GAAG,KAAKrB,MAAL,CAAYsB,uBAAZ,CAAoCH,KAApC,CAA1B;AACA,SAAKnB,MAAL,CAAYuB,YAAZ,CAAyBJ,KAAzB;AACA,UAAMK,gBAAkC,GAAG,EAA3C;AACA,UAAMC,OAAO,CAACC,GAAR,CACJnB,oBAAoB,CAACG,GAArB,CAAyB,MAAOC,gBAAP,IAA4B;AACnD,YAAMgB,YAAY,GAAGhB,gBAAgB,CAACiB,UAAjB,CAA4BlB,GAA5B,CAAiCmB,SAAD,IAAeA,SAAS,CAACC,EAAzD,CAArB;AACA,YAAMC,cAAc,GAAG,MAAM,KAAKhC,QAAL,CAAciC,iBAAd,CAAgCL,YAAhC,EAA8C;AACzEM,QAAAA,eAAe,EAAE,IADwD;AAEzEC,QAAAA,WAAW,EAAE1B,OAAO,CAAC0B;AAFoD,OAA9C,CAA7B;AAIA,WAAKlC,MAAL,CAAYmC,OAAZ,CACG,4BAA2BxB,gBAAgB,CAACmB,EAAG,qBAAoBC,cAAc,CAACK,eAAf,CAA+BhB,MAAO,kBAAiBW,cAAc,CAACM,aAAf,CAA6BjB,MAAO,EADjK;AAGA,YAAMkB,YAAY,GAAGC,MAAM,CAACC,MAAP,CAAc7B,gBAAd,EAAgC;AACnDoB,QAAAA,cADmD;AAEnDU,QAAAA,oBAAoB,EAAE,EAF6B;AAGnDC,QAAAA,GAAG,EAAElC,OAAO,CAACkC;AAHsC,OAAhC,CAArB;AAKAlB,MAAAA,gBAAgB,CAACb,gBAAgB,CAACmB,EAAlB,CAAhB,GAAwCQ,YAAxC;AACD,KAfD,CADI,CAAN;;AAkBA,UAAMK,SAAS,GAAGC,uBAAUC,IAAV,CAChBhC,UADgB,EAEhBW,gBAFgB,EAGhB,KAAKxB,MAHW,EAIhB,KAAKI,eAJW,EAKhBI,OAAO,CAACiC,oBALQ,CAAlB;;AAOA,UAAMK,YAAY,GAAG,MAAMH,SAAS,CAACI,OAAV,EAA3B;AACA1B,IAAAA,iBAAiB,CAAC2B,GAAlB;AACAF,IAAAA,YAAY,CAACG,SAAb,KAA2B,KAAKjD,MAAL,CAAYkD,cAAZ,EAA3B,GAA0D,KAAKlD,MAAL,CAAYmD,cAAZ,EAA1D;AAEA,WAAOL,YAAP;AACD;;AAEDM,EAAAA,MAAM,CAACC,GAAD,EAAqB;AACzB,UAAMC,KAAK,GAAG,KAAKC,aAAL,CAAmBF,GAAnB,CAAd;AAEA,wBACE,+BAAC,WAAD;AAAM,MAAA,GAAG,EAAEG,yBAAc1B;AAAzB,OAA8BwB,KAAK,CAAC5C,GAAN,CAAU,CAAC;AAAE+C,MAAAA,QAAF;AAAY3C,MAAAA;AAAZ,KAAD,KAAyB,KAAK4C,aAAL,CAAmBD,QAAnB,EAA6B3C,KAA7B,CAAnC,CAA9B,CADF;AAGD;;AAEO4C,EAAAA,aAAa,CAACD,QAAD,EAAW3C,KAAX,EAAkB;AACrC,QAAI,CAACA,KAAD,IAAU,CAACA,KAAK,CAACM,MAArB,EAA6B,OAAO,IAAP;AAC7B,wBACE,+BAAC,WAAD;AAAM,MAAA,GAAG,EAAEqC;AAAX,oBACE,+BAAC,WAAD;AAAM,MAAA,SAAS,MAAf;AAAgB,MAAA,KAAK,EAAC;AAAtB,OACGA,QADH,UADF,eAIE,+BAAC,cAAD,OAJF,eAKE,+BAAC,WAAD;AAAM,MAAA,KAAK,EAAC;AAAZ,iBAA0B3C,KAAK,CAACM,MAAhC,gEALF,eAME,+BAAC,cAAD,OANF,EAOGN,KAAK,CAACJ,GAAN,CAAU,CAACiD,IAAD,EAAOC,KAAP,kBACT,+BAAC,WAAD;AAAM,MAAA,GAAG,EAAEA;AAAX,oBACE,+BAAC,WAAD,QACGA,KAAK,GAAG,CADX,QACgBD,IADhB,CADF,eAIE,+BAAC,cAAD,OAJF,CADD,CAPH,eAeE,+BAAC,cAAD,OAfF,CADF;AAmBD;;AAEDJ,EAAAA,aAAa,CAACF,GAAD,EAAqB;AAChC;AACA,UAAMvC,KAAK,GAAGyB,MAAM,CAACsB,IAAP,CAAYpE,SAAZ,EAAuBiB,GAAvB,CAA4BoD,YAAD,IAAqC;AAC5E,YAAMjD,UAAU,GAAG,KAAKkD,uBAAL,CAA6BV,GAA7B,EAAkCS,YAAlC,CAAnB;AACA,aAAO;AAAEL,QAAAA,QAAQ,EAAEhE,SAAS,CAACqE,YAAD,CAArB;AAAqChD,QAAAA,KAAK,EAAED;AAA5C,OAAP;AACD,KAHa,CAAd;AAIA,WAAOC,KAAP;AACD;;AAEOiD,EAAAA,uBAAuB,CAACV,GAAD,EAAqBS,YAArB,EAAgE;AAC7F,UAAMjD,UAAU,GAAG,kDAAuB,KAAKZ,QAA5B,EAAsC,CAACoD,GAAD,CAAtC,EAA6CS,YAA7C,EAA2DpD,GAA3D,CAA+D,CAAC;AAAEiD,MAAAA;AAAF,KAAD,KAChFK,6BAAgBC,WAAhB,CAA4BN,IAA5B,CADiB,CAAnB;AAGA,WAAO9C,UAAP;AACD;;AAEDqD,EAAAA,mBAAmB,CAACb,GAAD,EAAqB;AACtC,WAAO,KAAKU,uBAAL,CAA6BV,GAA7B,EAAkC,KAAKnD,aAAvC,CAAP;AACD;;AAnIuF","sourcesContent":["import { EnvDefinition, EnvService, ExecutionContext } from '@teambit/envs';\nimport React from 'react';\nimport { ScopeMain } from '@teambit/scope';\nimport { Text, Newline } from 'ink';\nimport { Logger } from '@teambit/logger';\nimport { IsolatorMain } from '@teambit/isolator';\nimport { Component } from '@teambit/component';\nimport { BuildPipe, TaskResults } from './build-pipe';\nimport { TaskResultsList } from './task-results-list';\nimport { TaskSlot } from './builder.main.runtime';\nimport { BuildContext, BuildTaskHelper } from './build-task';\nimport { ArtifactFactory } from './artifact';\nimport { calculatePipelineOrder } from './build-pipeline-order';\nimport { BuilderAspect } from './builder.aspect';\n\nexport type BuildServiceResults = {\n id: string;\n buildResults: TaskResultsList;\n components: Component[];\n errors?: [];\n};\n\nexport type BuilderServiceOptions = {\n seedersOnly?: boolean;\n tasks?: string[];\n skipTests?: boolean;\n previousTasksResults?: TaskResults[];\n dev?: boolean;\n};\n\nexport type EnvsBuildContext = { [envId: string]: BuildContext };\n\nconst pipeNames = {\n getBuildPipe: 'build',\n getTagPipe: 'tag',\n getSnapPipe: 'snap',\n};\n\ntype PipeName = 'build' | 'tag' | 'snap';\n\nexport type BuilderDescriptor = Array<{ pipeName: PipeName; tasks: string[] }>;\n\ntype PipeFunctionNames = keyof typeof pipeNames;\nexport class BuilderService implements EnvService<BuildServiceResults, BuilderDescriptor> {\n name = 'builder';\n\n constructor(\n /**\n * isolator extension.\n */\n private isolator: IsolatorMain,\n\n /**\n * logger extension.\n */\n private logger: Logger,\n\n /**\n * task slot (e.g tasks registered by other extensions.).\n */\n private taskSlot: TaskSlot,\n\n /**\n * a method with such name should be implemented on the env in order to run the pipe tasks.\n */\n private pipeNameOnEnv: PipeFunctionNames,\n\n /**\n * pipe name to display on the console during the execution\n */\n private displayPipeName: string,\n private artifactFactory: ArtifactFactory,\n private scope: ScopeMain\n ) {}\n\n /**\n * runs all tasks for all envs\n */\n async runOnce(envsExecutionContext: ExecutionContext[], options: BuilderServiceOptions): Promise<TaskResultsList> {\n const envs = envsExecutionContext.map((executionContext) => executionContext.envDefinition);\n const tasksQueue = calculatePipelineOrder(\n this.taskSlot,\n envs,\n this.pipeNameOnEnv,\n options.tasks,\n options.skipTests\n );\n tasksQueue.validate();\n this.logger.info(`going to run tasks in the following order:\\n${tasksQueue.toString()}`);\n const title = `running ${this.displayPipeName} pipe for ${envs.length} environments, total ${tasksQueue.length} tasks`;\n const longProcessLogger = this.logger.createLongProcessLogger(title);\n this.logger.consoleTitle(title);\n const envsBuildContext: EnvsBuildContext = {};\n await Promise.all(\n envsExecutionContext.map(async (executionContext) => {\n const componentIds = executionContext.components.map((component) => component.id);\n const capsuleNetwork = await this.isolator.isolateComponents(componentIds, {\n getExistingAsIs: true,\n seedersOnly: options.seedersOnly,\n });\n this.logger.console(\n `generated graph for env \"${executionContext.id}\", seeders total: ${capsuleNetwork.seedersCapsules.length}, graph total: ${capsuleNetwork.graphCapsules.length}`\n );\n const buildContext = Object.assign(executionContext, {\n capsuleNetwork,\n previousTasksResults: [],\n dev: options.dev,\n });\n envsBuildContext[executionContext.id] = buildContext;\n })\n );\n const buildPipe = BuildPipe.from(\n tasksQueue,\n envsBuildContext,\n this.logger,\n this.artifactFactory,\n options.previousTasksResults\n );\n const buildResults = await buildPipe.execute();\n longProcessLogger.end();\n buildResults.hasErrors() ? this.logger.consoleFailure() : this.logger.consoleSuccess();\n\n return buildResults;\n }\n\n render(env: EnvDefinition) {\n const pipes = this.getDescriptor(env);\n\n return (\n <Text key={BuilderAspect.id}>{pipes.map(({ pipeName, tasks }) => this.renderOnePipe(pipeName, tasks))}</Text>\n );\n }\n\n private renderOnePipe(pipeName, tasks) {\n if (!tasks || !tasks.length) return null;\n return (\n <Text key={pipeName}>\n <Text underline color=\"green\">\n {pipeName} pipe\n </Text>\n <Newline />\n <Text color=\"cyan\">total {tasks.length} tasks are configured to be executed in the following order</Text>\n <Newline />\n {tasks.map((task, index) => (\n <Text key={index}>\n <Text>\n {index + 1}. {task}\n </Text>\n <Newline />\n </Text>\n ))}\n <Newline />\n </Text>\n );\n }\n\n getDescriptor(env: EnvDefinition) {\n // @ts-ignore\n const tasks = Object.keys(pipeNames).map((pipeFuncName: PipeFunctionNames) => {\n const tasksQueue = this.getTasksNamesByPipeFunc(env, pipeFuncName);\n return { pipeName: pipeNames[pipeFuncName], tasks: tasksQueue };\n });\n return tasks as BuilderDescriptor;\n }\n\n private getTasksNamesByPipeFunc(env: EnvDefinition, pipeFuncName: PipeFunctionNames): string[] {\n const tasksQueue = calculatePipelineOrder(this.taskSlot, [env], pipeFuncName).map(({ task }) =>\n BuildTaskHelper.serializeId(task)\n );\n return tasksQueue;\n }\n\n getCurrentPipeTasks(env: EnvDefinition) {\n return this.getTasksNamesByPipeFunc(env, this.pipeNameOnEnv);\n }\n}\n"]}
package/dist/index.d.ts CHANGED
@@ -1,6 +1,6 @@
1
1
  export { BuildPipe, TaskResults } from './build-pipe';
2
2
  export { ComponentResult, TaskMetadata } from './types';
3
- export { BuildContext, BuildTask, BuiltTaskResult, TaskLocation, BuildTaskHelper } from './build-task';
3
+ export { BuildContext, BuildTask, BuiltTaskResult, TaskLocation, BuildTaskHelper, CAPSULE_ARTIFACTS_DIR, } from './build-task';
4
4
  export type { BuilderMain, BuilderData } from './builder.main.runtime';
5
5
  export type { PipelineReport } from './build-pipeline-result-list';
6
6
  export { BuilderAspect } from './builder.aspect';
package/dist/index.js CHANGED
@@ -81,6 +81,12 @@ Object.defineProperty(exports, "BuiltTaskResult", {
81
81
  return _buildTask().BuiltTaskResult;
82
82
  }
83
83
  });
84
+ Object.defineProperty(exports, "CAPSULE_ARTIFACTS_DIR", {
85
+ enumerable: true,
86
+ get: function () {
87
+ return _buildTask().CAPSULE_ARTIFACTS_DIR;
88
+ }
89
+ });
84
90
  Object.defineProperty(exports, "ComponentResult", {
85
91
  enumerable: true,
86
92
  get: function () {
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AACA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AACA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AAGA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AACA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AACA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AACA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AACA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA","sourcesContent":["export { BuildPipe, TaskResults } from './build-pipe';\nexport { ComponentResult, TaskMetadata } from './types';\nexport { BuildContext, BuildTask, BuiltTaskResult, TaskLocation, BuildTaskHelper } from './build-task';\nexport type { BuilderMain, BuilderData } from './builder.main.runtime';\nexport type { PipelineReport } from './build-pipeline-result-list';\nexport { BuilderAspect } from './builder.aspect';\nexport { WholeArtifactStorageResolver, FileStorageResolver, ArtifactStorageResolver } from './storage';\nexport { Artifact, ArtifactList, ArtifactFactory, ArtifactDefinition, ArtifactModelDefinition } from './artifact';\nexport { TaskResultsList } from './task-results-list';\nexport { ArtifactVinyl } from '@teambit/legacy/dist/consumer/component/sources/artifact';\n"]}
1
+ {"version":3,"sources":["index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AACA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AACA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AAUA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AACA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AACA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AACA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AACA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA","sourcesContent":["export { BuildPipe, TaskResults } from './build-pipe';\nexport { ComponentResult, TaskMetadata } from './types';\nexport {\n BuildContext,\n BuildTask,\n BuiltTaskResult,\n TaskLocation,\n BuildTaskHelper,\n CAPSULE_ARTIFACTS_DIR,\n} from './build-task';\nexport type { BuilderMain, BuilderData } from './builder.main.runtime';\nexport type { PipelineReport } from './build-pipeline-result-list';\nexport { BuilderAspect } from './builder.aspect';\nexport { WholeArtifactStorageResolver, FileStorageResolver, ArtifactStorageResolver } from './storage';\nexport { Artifact, ArtifactList, ArtifactFactory, ArtifactDefinition, ArtifactModelDefinition } from './artifact';\nexport { TaskResultsList } from './task-results-list';\nexport { ArtifactVinyl } from '@teambit/legacy/dist/consumer/component/sources/artifact';\n"]}
package/package.json CHANGED
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "name": "@teambit/builder",
3
- "version": "0.0.625",
3
+ "version": "0.0.631",
4
4
  "homepage": "https://bit.dev/teambit/pipelines/builder",
5
5
  "main": "dist/index.js",
6
6
  "componentId": {
7
7
  "scope": "teambit.pipelines",
8
8
  "name": "builder",
9
- "version": "0.0.625"
9
+ "version": "0.0.631"
10
10
  },
11
11
  "dependencies": {
12
12
  "p-map-series": "2.1.0",
@@ -22,19 +22,19 @@
22
22
  "globby": "11.0.1",
23
23
  "@babel/runtime": "7.12.18",
24
24
  "core-js": "^3.0.0",
25
- "@teambit/component": "0.0.625",
26
- "@teambit/envs": "0.0.625",
27
- "@teambit/logger": "0.0.518",
28
- "@teambit/tester": "0.0.625",
29
- "@teambit/isolator": "0.0.625",
30
- "@teambit/cli": "0.0.429",
31
- "@teambit/workspace": "0.0.625",
32
- "@teambit/aspect-loader": "0.0.625",
33
- "@teambit/generator": "0.0.625",
34
- "@teambit/graphql": "0.0.625",
35
- "@teambit/scope": "0.0.625",
25
+ "@teambit/component": "0.0.631",
26
+ "@teambit/envs": "0.0.631",
27
+ "@teambit/logger": "0.0.523",
28
+ "@teambit/tester": "0.0.631",
29
+ "@teambit/isolator": "0.0.631",
30
+ "@teambit/cli": "0.0.433",
31
+ "@teambit/workspace": "0.0.631",
32
+ "@teambit/aspect-loader": "0.0.631",
33
+ "@teambit/generator": "0.0.631",
34
+ "@teambit/graphql": "0.0.631",
35
+ "@teambit/scope": "0.0.631",
36
36
  "@teambit/bit-error": "0.0.394",
37
- "@teambit/component-id": "0.0.398"
37
+ "@teambit/component-id": "0.0.400"
38
38
  },
39
39
  "devDependencies": {
40
40
  "@types/lodash": "4.14.165",
@@ -49,7 +49,7 @@
49
49
  "@teambit/pipelines.aspect-docs.builder": "0.0.131"
50
50
  },
51
51
  "peerDependencies": {
52
- "@teambit/legacy": "1.0.207",
52
+ "@teambit/legacy": "1.0.209",
53
53
  "react-dom": "^16.8.0 || ^17.0.0",
54
54
  "react": "^16.8.0 || ^17.0.0"
55
55
  },
@@ -77,7 +77,7 @@
77
77
  "react": "-"
78
78
  },
79
79
  "peerDependencies": {
80
- "@teambit/legacy": "1.0.207",
80
+ "@teambit/legacy": "1.0.209",
81
81
  "react-dom": "^16.8.0 || ^17.0.0",
82
82
  "react": "^16.8.0 || ^17.0.0"
83
83
  }