Skip to content

Commit

Permalink
fix(apps) - pass deploy context correctly from build app to deploy app (
Browse files Browse the repository at this point in the history
  • Loading branch information
GiladShoham authored Jul 27, 2023
1 parent 1912bf8 commit 00de731
Show file tree
Hide file tree
Showing 2 changed files with 62 additions and 37 deletions.
11 changes: 9 additions & 2 deletions scopes/harmony/application/build-application.task.ts
Original file line number Diff line number Diff line change
Expand Up @@ -106,7 +106,7 @@ export class AppsBuildTask implements BuildTask {
* or create new deploy context on builder
*/
// @ts-ignore
_metadata: { deployContext },
_metadata: { deployContext, name: app.name, appType: app.applicationType },
},
};
}
Expand All @@ -120,7 +120,9 @@ export class AppsBuildTask implements BuildTask {
errors: [],
warnings: [],
// @ts-ignore
_metadata: {},
_metadata: {
buildDeployContexts: [],
},
},
};
appsResults.forEach((appResult) => {
Expand All @@ -131,6 +133,11 @@ export class AppsBuildTask implements BuildTask {
merged.componentResult.warnings = (merged.componentResult.warnings || []).concat(
appResult.componentResult.warnings || []
);
// @ts-ignore
merged.componentResult._metadata.buildDeployContexts = // @ts-ignore
(merged.componentResult._metadata.buildDeployContexts || [])
// @ts-ignore
.concat(appResult.componentResult._metadata || []);
});
return merged;
}
Expand Down
88 changes: 53 additions & 35 deletions scopes/harmony/application/deploy.task.ts
Original file line number Diff line number Diff line change
@@ -1,10 +1,13 @@
import mapSeries from 'p-map-series';
import { BuilderMain, BuildTask, BuildContext, ComponentResult, TaskResults } from '@teambit/builder';
import { BuilderMain, BuildTask, BuildContext, ComponentResult, TaskResults, BuiltTaskResult } from '@teambit/builder';
import { compact } from 'lodash';
import { Capsule } from '@teambit/isolator';
import { ComponentID } from '@teambit/component';
import { ApplicationAspect } from './application.aspect';
import { ApplicationMain } from './application.main.runtime';
import { BUILD_TASK } from './build-application.task';
import { AppDeployContext } from './app-deploy-context';
import { Application } from './application';

export const DEPLOY_TASK = 'deploy_application';

Expand All @@ -14,49 +17,64 @@ export class DeployTask implements BuildTask {
readonly location = 'end';
constructor(private application: ApplicationMain, private builder: BuilderMain) {}

async execute(context: BuildContext): Promise<any> {
const apps = this.application.listApps();
const componentsResults = await mapSeries(apps, async (app): Promise<any> => {
const aspectId = this.application.getAppAspect(app.name);
if (!aspectId) return undefined;
const capsule = context.capsuleNetwork.seedersCapsules.getCapsuleIgnoreVersion(ComponentID.fromString(aspectId));
if (!capsule || !capsule?.component) return undefined;
const buildTask = this.getBuildTask(context.previousTasksResults, context.envRuntime.id);
if (!buildTask) return undefined;
const componentResults = buildTask.componentsResults.find((res) =>
res.component.id.isEqual(capsule.component.id, { ignoreVersion: true })
);
/**
* @guysaar223
* @ram8
* TODO: we need to think how to pass private metadata between build pipes, maybe create shared context
* or create new deploy context on builder
*/
// @ts-ignore
const _metadata = componentResults?._metadata?.deployContext || {};
const appDeployContext: AppDeployContext = Object.assign(context, _metadata, {
capsule,
appComponent: capsule.component,
});
if (!app.deploy) return undefined;
await app.deploy(appDeployContext);
async execute(context: BuildContext): Promise<BuiltTaskResult> {
const originalSeedersIds = context.capsuleNetwork.originalSeedersCapsules.map((c) => c.component.id.toString());
const { capsuleNetwork } = context;

return {
componentResult: { component: capsule.component },
};
const components = await mapSeries(capsuleNetwork.originalSeedersCapsules, async (capsule) => {
const component = capsule.component;
if (originalSeedersIds && originalSeedersIds.length && !originalSeedersIds.includes(component.id.toString())) {
return undefined;
}

const apps = await this.application.loadAppsFromComponent(component, capsule.path);
if (!apps || !apps.length) return undefined;
await mapSeries(compact(apps), async (app) => this.runForOneApp(app, capsule, context));
return component;
});

const _componentsResults = componentsResults
.map((res) => {
return res?.componentResult;
})
.filter((a) => !!a) as ComponentResult[];
const _componentsResults: ComponentResult[] = compact(components).map((component) => {
return { component };
});

return {
componentsResults: _componentsResults,
};
}

private async runForOneApp(app: Application, capsule: Capsule, context: BuildContext): Promise<void> {
const aspectId = this.application.getAppAspect(app.name);
if (!aspectId) return;
if (!capsule || !capsule?.component) return;
const buildTask = this.getBuildTask(context.previousTasksResults, context.envRuntime.id);
if (!buildTask) return;
const _metadata = this.getBuildMetadata(buildTask, capsule.component.id, app);
const appDeployContext: AppDeployContext = Object.assign(context, _metadata.deployContext, {
capsule,
appComponent: capsule.component,
});
if (!app.deploy) return;
await app.deploy(appDeployContext);
}

private getBuildMetadata(buildTask: TaskResults, componentId: ComponentID, app: Application) {
const componentResults = buildTask.componentsResults.find((res) =>
res.component.id.isEqual(componentId, { ignoreVersion: true })
);
/**
* @guysaar223
* @ram8
* TODO: we need to think how to pass private metadata between build pipes, maybe create shared context
* or create new deploy context on builder
*/
// @ts-ignore
const metadata = componentResults?._metadata.buildDeployContexts.find(
(ctx) => ctx.name === app.name && ctx.appType === app.applicationType
);

return metadata;
}

private getBuildTask(taskResults: TaskResults[], runtime: string) {
return taskResults.find(
({ task, env }) => task.aspectId === ApplicationAspect.id && task.name === BUILD_TASK && env.id === runtime
Expand Down

0 comments on commit 00de731

Please sign in to comment.