@salesforce/plugin-devops-center 1.4.1 → 2.0.1
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.
- package/README.md +150 -31
- package/lib/commands/devops/pipeline/stage/update.d.ts +19 -0
- package/lib/commands/devops/pipeline/stage/update.js +66 -0
- package/lib/commands/devops/pipeline/stage/update.js.map +1 -0
- package/lib/commands/devops/promote.d.ts +5 -0
- package/lib/commands/devops/promote.js +49 -3
- package/lib/commands/devops/promote.js.map +1 -1
- package/lib/commands/devops/promotion/complete.d.ts +1 -1
- package/lib/commands/devops/promotion/complete.js +1 -1
- package/lib/commands/devops/promotion/complete.js.map +1 -1
- package/lib/commands/devops/promotion/validate.d.ts +21 -0
- package/lib/commands/devops/promotion/validate.js +137 -0
- package/lib/commands/devops/promotion/validate.js.map +1 -0
- package/lib/commands/devops/stage/branch/delete.d.ts +15 -0
- package/lib/commands/devops/stage/branch/delete.js +107 -0
- package/lib/commands/devops/stage/branch/delete.js.map +1 -0
- package/lib/commands/devops/work-item/prepare.js +0 -3
- package/lib/commands/devops/work-item/prepare.js.map +1 -1
- package/lib/utils/addPipelineStage.js +1 -0
- package/lib/utils/addPipelineStage.js.map +1 -1
- package/lib/utils/createPipeline.js +24 -12
- package/lib/utils/createPipeline.js.map +1 -1
- package/lib/utils/deleteStageBranch.d.ts +22 -0
- package/lib/utils/deleteStageBranch.js +44 -0
- package/lib/utils/deleteStageBranch.js.map +1 -0
- package/lib/utils/pipelineUtils.d.ts +9 -0
- package/lib/utils/pipelineUtils.js +32 -0
- package/lib/utils/pipelineUtils.js.map +1 -1
- package/lib/utils/prepareWorkItem.d.ts +1 -1
- package/lib/utils/prepareWorkItem.js +4 -5
- package/lib/utils/prepareWorkItem.js.map +1 -1
- package/lib/utils/{deployStage.d.ts → promotionUtils.d.ts} +24 -0
- package/lib/utils/{deployStage.js → promotionUtils.js} +65 -1
- package/lib/utils/promotionUtils.js.map +1 -0
- package/lib/utils/soqlUtils.d.ts +5 -0
- package/lib/utils/soqlUtils.js +7 -0
- package/lib/utils/soqlUtils.js.map +1 -1
- package/messages/devops.pipeline.stage.update.md +25 -0
- package/messages/devops.promote.md +16 -0
- package/messages/devops.promotion.complete.md +3 -3
- package/messages/devops.promotion.validate.md +64 -0
- package/messages/devops.stage.branch.delete.md +37 -0
- package/npm-shrinkwrap.json +263 -108
- package/oclif.lock +80 -23
- package/oclif.manifest.json +398 -160
- package/package.json +7 -7
- package/schemas/devops-pipeline-stage-update.json +22 -0
- package/schemas/devops-promote.json +38 -0
- package/schemas/devops-promotion-validate.json +66 -0
- package/schemas/devops-stage-branch-delete.json +47 -0
- package/lib/utils/deployStage.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"promote.js","sourceRoot":"","sources":["../../../src/commands/devops/promote.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EAAc,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AACxD,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,6BAA6B,CAAC;AAC/D,OAAO,EAAE,YAAY,EAAsB,MAAM,6BAA6B,CAAC;AAC/E,OAAO,EAAE,4BAA4B,EAAE,MAAM,gCAAgC,CAAC;AAC9E,OAAO,EAAE,uBAAuB,EAAE,MAAM,8BAA8B,CAAC;AACvE,OAAO,EAAE,SAAS,EAAE,SAAS,IAAI,aAAa,EAAE,mBAAmB,EAAE,MAAM,4CAA4C,CAAC;AACxH,OAAO,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;
|
|
1
|
+
{"version":3,"file":"promote.js","sourceRoot":"","sources":["../../../src/commands/devops/promote.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { SfCommand } from '@salesforce/sf-plugins-core';
|
|
2
|
-
import { DeployStageResult } from '../../../utils/
|
|
2
|
+
import { DeployStageResult } from '../../../utils/promotionUtils.js';
|
|
3
3
|
export type PromotionCompleteResult = DeployStageResult & {
|
|
4
4
|
undeployedWorkitemIds: string[];
|
|
5
5
|
};
|
|
@@ -15,7 +15,7 @@
|
|
|
15
15
|
*/
|
|
16
16
|
import { Messages } from '@salesforce/core';
|
|
17
17
|
import { SfCommand, Flags } from '@salesforce/sf-plugins-core';
|
|
18
|
-
import { getUndeployedWorkItems, validateDeploy, executeDeploy, } from '../../../utils/
|
|
18
|
+
import { getUndeployedWorkItems, validateDeploy, executeDeploy, } from '../../../utils/promotionUtils.js';
|
|
19
19
|
import { deployAll, testLevel, specificTestsNoChar } from '../../../common/flags/promote/promoteFlags.js';
|
|
20
20
|
import { validateSalesforceId } from '../../../utils/soqlUtils.js';
|
|
21
21
|
Messages.importMessagesDirectoryFromMetaUrl(import.meta.url);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"complete.js","sourceRoot":"","sources":["../../../../src/commands/devops/promotion/complete.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,6BAA6B,CAAC;AAC/D,OAAO,EACL,sBAAsB,EACtB,cAAc,EACd,aAAa,GAEd,MAAM
|
|
1
|
+
{"version":3,"file":"complete.js","sourceRoot":"","sources":["../../../../src/commands/devops/promotion/complete.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { SfCommand } from '@salesforce/sf-plugins-core';
|
|
2
|
+
import { CombineDetails } from '../../../utils/promotionUtils.js';
|
|
3
|
+
export type PromotionValidateResult = {
|
|
4
|
+
success: boolean;
|
|
5
|
+
errorType: string | null;
|
|
6
|
+
errorDetails: string | null;
|
|
7
|
+
combineDetails: CombineDetails | null;
|
|
8
|
+
suggestions: string[];
|
|
9
|
+
};
|
|
10
|
+
export default class DevopsPromotionValidate extends SfCommand<PromotionValidateResult> {
|
|
11
|
+
static readonly summary: string;
|
|
12
|
+
static readonly description: string;
|
|
13
|
+
static readonly examples: string[];
|
|
14
|
+
static readonly flags: {
|
|
15
|
+
'target-org': import("@oclif/core/interfaces").OptionFlag<import("@salesforce/core").Org, import("@oclif/core/interfaces").CustomOptions>;
|
|
16
|
+
'api-version': import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
17
|
+
'target-stage-id': import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
|
|
18
|
+
'work-item-id': import("@oclif/core/interfaces").OptionFlag<string[], import("@oclif/core/interfaces").CustomOptions>;
|
|
19
|
+
};
|
|
20
|
+
run(): Promise<PromotionValidateResult>;
|
|
21
|
+
}
|
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright 2026, Salesforce, Inc.
|
|
3
|
+
*
|
|
4
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
+
* you may not use this file except in compliance with the License.
|
|
6
|
+
* You may obtain a copy of the License at
|
|
7
|
+
*
|
|
8
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
*
|
|
10
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
* See the License for the specific language governing permissions and
|
|
14
|
+
* limitations under the License.
|
|
15
|
+
*/
|
|
16
|
+
import { Messages } from '@salesforce/core';
|
|
17
|
+
import { SfCommand, Flags } from '@salesforce/sf-plugins-core';
|
|
18
|
+
import { validatePromotion, formatValidationDetails, hasSharedComponents, } from '../../../utils/promotionUtils.js';
|
|
19
|
+
import { validateSalesforceId } from '../../../utils/soqlUtils.js';
|
|
20
|
+
import { resolveProjectIdFromWorkItem } from '../../../utils/prepareWorkItem.js';
|
|
21
|
+
import { getPipelineIdForProject } from '../../../utils/pipelineUtils.js';
|
|
22
|
+
Messages.importMessagesDirectoryFromMetaUrl(import.meta.url);
|
|
23
|
+
const messages = Messages.loadMessages('@salesforce/plugin-devops-center', 'devops.promotion.validate');
|
|
24
|
+
const commonErrorMessages = Messages.loadMessages('@salesforce/plugin-devops-center', 'commonErrors');
|
|
25
|
+
export default class DevopsPromotionValidate extends SfCommand {
|
|
26
|
+
static summary = messages.getMessage('summary');
|
|
27
|
+
static description = messages.getMessage('description');
|
|
28
|
+
static examples = messages.getMessages('examples');
|
|
29
|
+
static flags = {
|
|
30
|
+
'target-org': Flags.requiredOrg(),
|
|
31
|
+
'api-version': Flags.orgApiVersion(),
|
|
32
|
+
'target-stage-id': Flags.salesforceId({
|
|
33
|
+
char: 't',
|
|
34
|
+
summary: messages.getMessage('flags.target-stage-id.summary'),
|
|
35
|
+
required: true,
|
|
36
|
+
startsWith: '1QV',
|
|
37
|
+
}),
|
|
38
|
+
'work-item-id': Flags.salesforceId({
|
|
39
|
+
char: 'i',
|
|
40
|
+
summary: messages.getMessage('flags.work-item-id.summary'),
|
|
41
|
+
required: true,
|
|
42
|
+
multiple: true,
|
|
43
|
+
startsWith: '1fk',
|
|
44
|
+
}),
|
|
45
|
+
};
|
|
46
|
+
async run() {
|
|
47
|
+
const { flags } = await this.parse(DevopsPromotionValidate);
|
|
48
|
+
const connection = flags['target-org'].getConnection(flags['api-version']);
|
|
49
|
+
const targetStageId = flags['target-stage-id'];
|
|
50
|
+
const workItemIds = flags['work-item-id'];
|
|
51
|
+
validateSalesforceId(targetStageId, 'target stage');
|
|
52
|
+
for (const id of workItemIds) {
|
|
53
|
+
validateSalesforceId(id, 'work item');
|
|
54
|
+
}
|
|
55
|
+
let pipelineId;
|
|
56
|
+
try {
|
|
57
|
+
const { projectId } = await resolveProjectIdFromWorkItem(connection, workItemIds[0]);
|
|
58
|
+
const pid = await getPipelineIdForProject(connection, projectId);
|
|
59
|
+
if (!pid) {
|
|
60
|
+
this.error(messages.getMessage('error.NoPipeline', [workItemIds[0]]));
|
|
61
|
+
}
|
|
62
|
+
pipelineId = pid;
|
|
63
|
+
}
|
|
64
|
+
catch (error) {
|
|
65
|
+
const errMsg = error instanceof Error ? error.message : String(error);
|
|
66
|
+
if (errMsg.includes('sObject type') && errMsg.includes('is not supported')) {
|
|
67
|
+
this.error(commonErrorMessages.getMessage('error.DevopsCenterNotEnabled'));
|
|
68
|
+
}
|
|
69
|
+
throw error;
|
|
70
|
+
}
|
|
71
|
+
let result;
|
|
72
|
+
try {
|
|
73
|
+
result = await validatePromotion(connection, pipelineId, workItemIds, targetStageId, true);
|
|
74
|
+
}
|
|
75
|
+
catch (error) {
|
|
76
|
+
const errMsg = error instanceof Error ? error.message : String(error);
|
|
77
|
+
if (errMsg.includes('sObject type') && errMsg.includes('is not supported')) {
|
|
78
|
+
this.error(commonErrorMessages.getMessage('error.DevopsCenterNotEnabled'));
|
|
79
|
+
}
|
|
80
|
+
const cleanMsg = errMsg.split('<')[0].trim();
|
|
81
|
+
this.error(messages.getMessage('error.ValidationRequestFailed', [cleanMsg]));
|
|
82
|
+
}
|
|
83
|
+
if (!result.success) {
|
|
84
|
+
this.error(messages.getMessage('error.ValidationFailed', [
|
|
85
|
+
result.errorType ?? '',
|
|
86
|
+
formatValidationDetails(result.errorDetails),
|
|
87
|
+
]));
|
|
88
|
+
}
|
|
89
|
+
this.log(`Success: ${result.success}`);
|
|
90
|
+
if (result.combineDetails) {
|
|
91
|
+
this.log('Combine Details:');
|
|
92
|
+
this.log(JSON.stringify(result.combineDetails, null, 2));
|
|
93
|
+
}
|
|
94
|
+
// Validation succeeded, which means a pull request already exists for each work item, so they
|
|
95
|
+
// can be promoted directly. When the work items also share components, the user has two choices:
|
|
96
|
+
// 1. combine them and promote the combined parent as a single unit, or
|
|
97
|
+
// 2. promote them as they are, without combining.
|
|
98
|
+
const suggestions = [];
|
|
99
|
+
if (hasSharedComponents(result.combineDetails)) {
|
|
100
|
+
suggestions.push(messages.getMessage('suggestion.SharedComponents'));
|
|
101
|
+
// Option 1 — combine + promote. combineDetails carries the parent/child IDs to combine.
|
|
102
|
+
const parentId = result.combineDetails?.parentWorkitemId;
|
|
103
|
+
const childIds = result.combineDetails?.childWorkitemsId ?? [];
|
|
104
|
+
if (parentId && childIds.length > 0) {
|
|
105
|
+
const combineArgs = [
|
|
106
|
+
`--parent-work-item-id ${parentId}`,
|
|
107
|
+
...childIds.map((id) => `--child-work-item-id ${id}`),
|
|
108
|
+
`--target-stage-id ${targetStageId}`,
|
|
109
|
+
].join(' ');
|
|
110
|
+
suggestions.push(messages.getMessage('suggestion.CombineOption'));
|
|
111
|
+
suggestions.push(messages.getMessage('suggestion.CombineStepPrepare', [`sf devops work-item combine ${combineArgs}`]));
|
|
112
|
+
// Combine merges the children into the parent, so only the parent is promoted.
|
|
113
|
+
suggestions.push(messages.getMessage('suggestion.CombineStepPromote', [
|
|
114
|
+
`sf devops promote --work-item-id ${parentId} --target-stage-id ${targetStageId}`,
|
|
115
|
+
]));
|
|
116
|
+
}
|
|
117
|
+
// Option 2 — promote the work items as-is. Their PRs already exist (validation passed).
|
|
118
|
+
const promoteArgs = [
|
|
119
|
+
...workItemIds.map((id) => `--work-item-id ${id}`),
|
|
120
|
+
`--target-stage-id ${targetStageId}`,
|
|
121
|
+
].join(' ');
|
|
122
|
+
suggestions.push(messages.getMessage('suggestion.PromoteOption'));
|
|
123
|
+
suggestions.push(messages.getMessage('suggestion.PromoteStep', [`sf devops promote ${promoteArgs}`]));
|
|
124
|
+
this.log('');
|
|
125
|
+
this.log('Suggestions:');
|
|
126
|
+
suggestions.forEach((s) => this.log(` ${s}`));
|
|
127
|
+
}
|
|
128
|
+
return {
|
|
129
|
+
success: result.success,
|
|
130
|
+
errorType: result.errorType,
|
|
131
|
+
errorDetails: result.errorDetails,
|
|
132
|
+
combineDetails: result.combineDetails,
|
|
133
|
+
suggestions,
|
|
134
|
+
};
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
//# sourceMappingURL=validate.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validate.js","sourceRoot":"","sources":["../../../../src/commands/devops/promotion/validate.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { Org } from '@salesforce/core';
|
|
2
|
+
import { SfCommand } from '@salesforce/sf-plugins-core';
|
|
3
|
+
import { DeleteStageBranchResult } from '../../../../utils/deleteStageBranch.js';
|
|
4
|
+
export default class DevopsStageBranchDelete extends SfCommand<DeleteStageBranchResult> {
|
|
5
|
+
static readonly summary: string;
|
|
6
|
+
static readonly description: string;
|
|
7
|
+
static readonly examples: string[];
|
|
8
|
+
static readonly flags: {
|
|
9
|
+
'target-org': import("@oclif/core/interfaces").OptionFlag<Org, import("@oclif/core/interfaces").CustomOptions>;
|
|
10
|
+
'api-version': import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
11
|
+
'pipeline-id': import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
|
|
12
|
+
'stage-id': import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
|
|
13
|
+
};
|
|
14
|
+
run(): Promise<DeleteStageBranchResult>;
|
|
15
|
+
}
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright 2026, Salesforce, Inc.
|
|
3
|
+
*
|
|
4
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
+
* you may not use this file except in compliance with the License.
|
|
6
|
+
* You may obtain a copy of the License at
|
|
7
|
+
*
|
|
8
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
*
|
|
10
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
* See the License for the specific language governing permissions and
|
|
14
|
+
* limitations under the License.
|
|
15
|
+
*/
|
|
16
|
+
import { Messages } from '@salesforce/core';
|
|
17
|
+
import { SfCommand, Flags } from '@salesforce/sf-plugins-core';
|
|
18
|
+
import { deleteStageBranch } from '../../../../utils/deleteStageBranch.js';
|
|
19
|
+
import { computeUpstreamStageIds, fetchPipelineStages } from '../../../../utils/pipelineUtils.js';
|
|
20
|
+
Messages.importMessagesDirectoryFromMetaUrl(import.meta.url);
|
|
21
|
+
const messages = Messages.loadMessages('@salesforce/plugin-devops-center', 'devops.stage.branch.delete');
|
|
22
|
+
const commonErrorMessages = Messages.loadMessages('@salesforce/plugin-devops-center', 'commonErrors');
|
|
23
|
+
export default class DevopsStageBranchDelete extends SfCommand {
|
|
24
|
+
static summary = messages.getMessage('summary');
|
|
25
|
+
static description = messages.getMessage('description');
|
|
26
|
+
static examples = messages.getMessages('examples');
|
|
27
|
+
static flags = {
|
|
28
|
+
'target-org': Flags.requiredOrg(),
|
|
29
|
+
'api-version': Flags.orgApiVersion(),
|
|
30
|
+
'pipeline-id': Flags.salesforceId({
|
|
31
|
+
summary: messages.getMessage('flags.pipeline-id.summary'),
|
|
32
|
+
required: true,
|
|
33
|
+
char: undefined,
|
|
34
|
+
}),
|
|
35
|
+
'stage-id': Flags.salesforceId({
|
|
36
|
+
summary: messages.getMessage('flags.stage-id.summary'),
|
|
37
|
+
required: true,
|
|
38
|
+
char: undefined,
|
|
39
|
+
}),
|
|
40
|
+
};
|
|
41
|
+
async run() {
|
|
42
|
+
const { flags } = await this.parse(DevopsStageBranchDelete);
|
|
43
|
+
const org = flags['target-org'];
|
|
44
|
+
const connection = org.getConnection(flags['api-version']);
|
|
45
|
+
const pipelineId = flags['pipeline-id'];
|
|
46
|
+
const stageId = flags['stage-id'];
|
|
47
|
+
// The branch can only be removed while the pipeline is inactive.
|
|
48
|
+
const pipelineQueryResult = await connection.query(`SELECT IsActive FROM DevopsPipeline WHERE Id = '${pipelineId}' LIMIT 1`);
|
|
49
|
+
const pipelineRecord = (pipelineQueryResult.records ?? [])[0];
|
|
50
|
+
if (pipelineRecord?.IsActive) {
|
|
51
|
+
this.error(messages.getMessage('error.PipelineAlreadyActive', [pipelineId]));
|
|
52
|
+
}
|
|
53
|
+
let stages;
|
|
54
|
+
try {
|
|
55
|
+
stages = await fetchPipelineStages(connection, pipelineId);
|
|
56
|
+
}
|
|
57
|
+
catch (error) {
|
|
58
|
+
const errMsg = error instanceof Error ? error.message : String(error);
|
|
59
|
+
if (errMsg.includes('sObject type') && errMsg.includes('is not supported')) {
|
|
60
|
+
this.error(commonErrorMessages.getMessage('error.DevopsCenterNotEnabled'));
|
|
61
|
+
}
|
|
62
|
+
throw error;
|
|
63
|
+
}
|
|
64
|
+
const targetStage = stages.find((s) => s.Id === stageId);
|
|
65
|
+
if (!targetStage) {
|
|
66
|
+
this.error(messages.getMessage('error.StageNotFound', [stageId, pipelineId]));
|
|
67
|
+
}
|
|
68
|
+
const branchName = targetStage.SourceCodeRepositoryBranch?.Name;
|
|
69
|
+
if (!branchName) {
|
|
70
|
+
this.error(messages.getMessage('error.NoBranch', [targetStage.Name ?? stageId]));
|
|
71
|
+
}
|
|
72
|
+
// Branches are configured right-to-left, so removing this stage's branch must also remove the
|
|
73
|
+
// branch from every upstream (left) stage to keep the pipeline in a valid state.
|
|
74
|
+
const upstreamStageIds = computeUpstreamStageIds(stages, stageId);
|
|
75
|
+
const stagesById = new Map(stages.map((s) => [s.Id, s]));
|
|
76
|
+
const stagesToClear = [targetStage, ...upstreamStageIds.map((id) => stagesById.get(id))]
|
|
77
|
+
.filter((s) => Boolean(s?.SourceCodeRepositoryBranch?.Name))
|
|
78
|
+
.map((s) => ({ stageId: s.Id, stageName: s.Name, branchName: s.SourceCodeRepositoryBranch?.Name }));
|
|
79
|
+
let result;
|
|
80
|
+
try {
|
|
81
|
+
result = await deleteStageBranch(connection, stageId, stagesToClear);
|
|
82
|
+
}
|
|
83
|
+
catch (error) {
|
|
84
|
+
const errMsg = error instanceof Error ? error.message : String(error);
|
|
85
|
+
if (errMsg.includes('sObject type') && errMsg.includes('is not supported')) {
|
|
86
|
+
this.error(commonErrorMessages.getMessage('error.DevopsCenterNotEnabled'));
|
|
87
|
+
}
|
|
88
|
+
throw error;
|
|
89
|
+
}
|
|
90
|
+
if (result.success) {
|
|
91
|
+
this.log(`Successfully deleted branch "${result.branchName ?? ''}" from the stage.`);
|
|
92
|
+
this.log(` Stage ID: ${stageId}`);
|
|
93
|
+
this.log(` Pipeline ID: ${pipelineId}`);
|
|
94
|
+
const cascaded = (result.clearedStages ?? []).filter((s) => s.stageId !== stageId);
|
|
95
|
+
if (cascaded.length > 0) {
|
|
96
|
+
this.log('');
|
|
97
|
+
this.log('Also removed branches from upstream stages:');
|
|
98
|
+
cascaded.forEach((s) => this.log(` - ${s.stageName ?? s.stageId}: "${s.branchName ?? ''}"`));
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
else {
|
|
102
|
+
this.error(messages.getMessage('error.BranchDeleteFailed', [result.error ?? '']));
|
|
103
|
+
}
|
|
104
|
+
return result;
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
//# sourceMappingURL=delete.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"delete.js","sourceRoot":"","sources":["../../../../../src/commands/devops/stage/branch/delete.ts"],"names":[],"mappings":"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"}
|
|
@@ -59,9 +59,6 @@ export default class DevopsWorkItemPrepare extends SfCommand {
|
|
|
59
59
|
}
|
|
60
60
|
throw error;
|
|
61
61
|
}
|
|
62
|
-
if (!sourceStageId) {
|
|
63
|
-
this.error(`Work item '${workItemId}' is not currently assigned to a pipeline stage.`);
|
|
64
|
-
}
|
|
65
62
|
const pipelineId = await getPipelineIdForProject(connection, projectId);
|
|
66
63
|
if (!pipelineId) {
|
|
67
64
|
this.error(`No pipeline found for work item ${workItemId}. Ensure the project has an associated pipeline.`);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prepare.js","sourceRoot":"","sources":["../../../../src/commands/devops/work-item/prepare.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,6BAA6B,CAAC;AAC/D,OAAO,EACL,eAAe,EAEf,4BAA4B,GAC7B,MAAM,mCAAmC,CAAC;AAC3C,OAAO,EAAE,uBAAuB,EAAE,MAAM,iCAAiC,CAAC;AAE1E,QAAQ,CAAC,kCAAkC,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC7D,MAAM,QAAQ,GAAG,QAAQ,CAAC,YAAY,CAAC,kCAAkC,EAAE,0BAA0B,CAAC,CAAC;AACvG,MAAM,mBAAmB,GAAG,QAAQ,CAAC,YAAY,CAAC,kCAAkC,EAAE,cAAc,CAAC,CAAC;AAEtG,MAAM,CAAC,OAAO,OAAO,qBAAsB,SAAQ,SAAgC;IAC1E,MAAM,CAAU,OAAO,GAAG,QAAQ,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;IACzD,MAAM,CAAU,WAAW,GAAG,QAAQ,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;IACjE,MAAM,CAAU,QAAQ,GAAG,QAAQ,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC;IAE5D,MAAM,CAAU,KAAK,GAAG;QAC7B,YAAY,EAAE,KAAK,CAAC,WAAW,EAAE;QACjC,aAAa,EAAE,KAAK,CAAC,aAAa,EAAE;QACpC,cAAc,EAAE,KAAK,CAAC,YAAY,CAAC;YACjC,OAAO,EAAE,QAAQ,CAAC,UAAU,CAAC,4BAA4B,CAAC;YAC1D,IAAI,EAAE,GAAG;YACT,QAAQ,EAAE,IAAI;YACd,UAAU,EAAE,KAAK;SAClB,CAAC;QACF,iBAAiB,EAAE,KAAK,CAAC,YAAY,CAAC;YACpC,OAAO,EAAE,QAAQ,CAAC,UAAU,CAAC,+BAA+B,CAAC;YAC7D,IAAI,EAAE,GAAG;YACT,QAAQ,EAAE,IAAI;YACd,UAAU,EAAE,KAAK;SAClB,CAAC;KACH,CAAC;IAEK,KAAK,CAAC,GAAG;QACd,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,qBAAqB,CAAC,CAAC;QAC1D,MAAM,GAAG,GAAG,KAAK,CAAC,YAAY,CAAC,CAAC;QAChC,MAAM,UAAU,GAAG,GAAG,CAAC,aAAa,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC;QAC3D,MAAM,UAAU,GAAG,KAAK,CAAC,cAAc,CAAC,CAAC;QAEzC,IAAI,SAAiB,CAAC;QACtB,IAAI,aAAqB,CAAC;QAC1B,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,4BAA4B,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;YAC5E,SAAS,GAAG,QAAQ,CAAC,SAAS,CAAC;YAC/B,aAAa,GAAG,QAAQ,CAAC,eAAe,CAAC;QAC3C,CAAC;QAAC,OAAO,KAAc,EAAE,CAAC;YACxB,MAAM,MAAM,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YACtE,IAAI,MAAM,CAAC,QAAQ,CAAC,cAAc,CAAC,IAAI,MAAM,CAAC,QAAQ,CAAC,kBAAkB,CAAC,EAAE,CAAC;gBAC3E,IAAI,CAAC,KAAK,CAAC,mBAAmB,CAAC,UAAU,CAAC,8BAA8B,CAAC,CAAC,CAAC;YAC7E,CAAC;YACD,MAAM,KAAK,CAAC;QACd,CAAC;QAED,
|
|
1
|
+
{"version":3,"file":"prepare.js","sourceRoot":"","sources":["../../../../src/commands/devops/work-item/prepare.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"addPipelineStage.js","sourceRoot":"","sources":["../../src/utils/addPipelineStage.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AA0BH;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,MAA8B;IACnE,MAAM,EAAE,UAAU,EAAE,UAAU,EAAE,IAAI,EAAE,WAAW,EAAE,GAAG,MAAM,CAAC;IAE7D,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,OAAO,CAAC,qBAAqB,CAAC,CAAC,MAAM,CAAC;QACpE,IAAI,EAAE,IAAI;QACV,gBAAgB,EAAE,UAAU;QAC5B,WAAW,EAAE,WAAW;
|
|
1
|
+
{"version":3,"file":"addPipelineStage.js","sourceRoot":"","sources":["../../src/utils/addPipelineStage.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AA0BH;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,MAA8B;IACnE,MAAM,EAAE,UAAU,EAAE,UAAU,EAAE,IAAI,EAAE,WAAW,EAAE,GAAG,MAAM,CAAC;IAE7D,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,OAAO,CAAC,qBAAqB,CAAC,CAAC,MAAM,CAAC;QACpE,IAAI,EAAE,IAAI;QACV,gBAAgB,EAAE,UAAU;QAC5B,WAAW,EAAE,WAAW;QACxB,SAAS,EAAE,IAAI;KAChB,CAAC,CAAC;IAEH,MAAM,YAAY,GAAG,MAAwC,CAAC;IAE9D,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,CAAC;QAC1B,MAAM,QAAQ,GAAG,YAAY,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,eAAe,CAAC;QAC1F,OAAO;YACL,OAAO,EAAE,KAAK;YACd,KAAK,EAAE,QAAQ;SAChB,CAAC;IACJ,CAAC;IAED,OAAO;QACL,OAAO,EAAE,IAAI;QACb,OAAO,EAAE,YAAY,CAAC,EAAE;QACxB,IAAI;QACJ,WAAW;QACX,UAAU;KACX,CAAC;AACJ,CAAC"}
|
|
@@ -34,11 +34,21 @@ export function detectRepoType(repoUrl) {
|
|
|
34
34
|
* don't block the command when the check itself is unavailable.
|
|
35
35
|
*/
|
|
36
36
|
export async function validateGitHubOwner(owner, token, fetchFn = fetch) {
|
|
37
|
+
const encoded = encodeURIComponent(owner);
|
|
37
38
|
try {
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
stdio: ['pipe', 'pipe', 'pipe']
|
|
41
|
-
|
|
39
|
+
// Try user first, then org — owner may be either a personal account or an organization
|
|
40
|
+
try {
|
|
41
|
+
execSync(`gh api users/${encoded}`, { encoding: 'utf-8', stdio: ['pipe', 'pipe', 'pipe'] });
|
|
42
|
+
return;
|
|
43
|
+
}
|
|
44
|
+
catch (e) {
|
|
45
|
+
const stderr = String(e.stderr ?? '');
|
|
46
|
+
const stdout = String(e.stdout ?? '');
|
|
47
|
+
if (!stderr.includes('404') && !stdout.includes('"Not Found"'))
|
|
48
|
+
throw e;
|
|
49
|
+
// 404 on users/ — try orgs/
|
|
50
|
+
}
|
|
51
|
+
execSync(`gh api orgs/${encoded}`, { encoding: 'utf-8', stdio: ['pipe', 'pipe', 'pipe'] });
|
|
42
52
|
return;
|
|
43
53
|
}
|
|
44
54
|
catch (e) {
|
|
@@ -51,14 +61,16 @@ export async function validateGitHubOwner(owner, token, fetchFn = fetch) {
|
|
|
51
61
|
}
|
|
52
62
|
if (!token)
|
|
53
63
|
return;
|
|
54
|
-
const
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
64
|
+
const headers = {
|
|
65
|
+
Accept: 'application/vnd.github+json',
|
|
66
|
+
'X-GitHub-Api-Version': '2022-11-28',
|
|
67
|
+
Authorization: `Bearer ${token}`,
|
|
68
|
+
};
|
|
69
|
+
const userRes = await fetchFn(`https://api.github.com/users/${encoded}`, { headers });
|
|
70
|
+
if (userRes.status !== 404)
|
|
71
|
+
return;
|
|
72
|
+
const orgRes = await fetchFn(`https://api.github.com/orgs/${encoded}`, { headers });
|
|
73
|
+
if (orgRes.status === 404)
|
|
62
74
|
throw new GitHubOwnerNotFoundError(owner);
|
|
63
75
|
// 403 or other non-404: skip validation
|
|
64
76
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"createPipeline.js","sourceRoot":"","sources":["../../src/utils/createPipeline.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAqC9C,MAAM,cAAc,GAAG,CAAC,EAAE,IAAI,EAAE,aAAa,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC,CAAC;AAE/G;;GAEG;AACH,MAAM,UAAU,cAAc,CAAC,OAAe;IAC5C,MAAM,KAAK,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;IACpC,IAAI,KAAK,CAAC,QAAQ,CAAC,YAAY,CAAC;QAAE,OAAO,QAAQ,CAAC;IAClD,IAAI,KAAK,CAAC,QAAQ,CAAC,eAAe,CAAC;QAAE,OAAO,WAAW,CAAC;IACxD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,mBAAmB,CAAC,KAAa,EAAE,KAAc,EAAE,UAAwB,KAAK;IACpG,IAAI,CAAC;QACH,QAAQ,CAAC,gBAAgB,
|
|
1
|
+
{"version":3,"file":"createPipeline.js","sourceRoot":"","sources":["../../src/utils/createPipeline.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { Connection } from '@salesforce/core';
|
|
2
|
+
export type ClearedStage = {
|
|
3
|
+
stageId: string;
|
|
4
|
+
stageName?: string;
|
|
5
|
+
branchName?: string;
|
|
6
|
+
};
|
|
7
|
+
export type DeleteStageBranchResult = {
|
|
8
|
+
success: boolean;
|
|
9
|
+
stageId: string;
|
|
10
|
+
branchName?: string;
|
|
11
|
+
clearedStages?: ClearedStage[];
|
|
12
|
+
error?: string;
|
|
13
|
+
};
|
|
14
|
+
/**
|
|
15
|
+
* Removes the branch associated with a pipeline stage, cascading to every upstream (left) stage.
|
|
16
|
+
*
|
|
17
|
+
* Branches are configured right-to-left, so a stage can only have a branch once the stage to its
|
|
18
|
+
* right does. Clearing a branch therefore also clears the branch on every upstream stage to keep
|
|
19
|
+
* the pipeline in a valid state. Each stage's SourceCodeRepositoryBranchId lookup is cleared; the
|
|
20
|
+
* branch records themselves are left untouched.
|
|
21
|
+
*/
|
|
22
|
+
export declare function deleteStageBranch(connection: Connection, targetStageId: string, stagesToClear: ClearedStage[]): Promise<DeleteStageBranchResult>;
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright 2026, Salesforce, Inc.
|
|
3
|
+
*
|
|
4
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
+
* you may not use this file except in compliance with the License.
|
|
6
|
+
* You may obtain a copy of the License at
|
|
7
|
+
*
|
|
8
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
*
|
|
10
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
* See the License for the specific language governing permissions and
|
|
14
|
+
* limitations under the License.
|
|
15
|
+
*/
|
|
16
|
+
import { validateSalesforceId } from './soqlUtils.js';
|
|
17
|
+
/**
|
|
18
|
+
* Removes the branch associated with a pipeline stage, cascading to every upstream (left) stage.
|
|
19
|
+
*
|
|
20
|
+
* Branches are configured right-to-left, so a stage can only have a branch once the stage to its
|
|
21
|
+
* right does. Clearing a branch therefore also clears the branch on every upstream stage to keep
|
|
22
|
+
* the pipeline in a valid state. Each stage's SourceCodeRepositoryBranchId lookup is cleared; the
|
|
23
|
+
* branch records themselves are left untouched.
|
|
24
|
+
*/
|
|
25
|
+
export async function deleteStageBranch(connection, targetStageId, stagesToClear) {
|
|
26
|
+
validateSalesforceId(targetStageId, 'stage');
|
|
27
|
+
stagesToClear.forEach((s) => validateSalesforceId(s.stageId, 'stage'));
|
|
28
|
+
const updates = stagesToClear.map((s) => ({ Id: s.stageId, SourceCodeRepositoryBranchId: null }));
|
|
29
|
+
const rawResults = await connection.sobject('DevopsPipelineStage').update(updates);
|
|
30
|
+
const results = (Array.isArray(rawResults) ? rawResults : [rawResults]);
|
|
31
|
+
const failures = results.filter((r) => !r.success);
|
|
32
|
+
if (failures.length > 0) {
|
|
33
|
+
const errorMsg = failures.flatMap((r) => r.errors?.map((e) => e.message) ?? ['Unknown error']).join('; ');
|
|
34
|
+
return { success: false, stageId: targetStageId, error: errorMsg };
|
|
35
|
+
}
|
|
36
|
+
const target = stagesToClear.find((s) => s.stageId === targetStageId);
|
|
37
|
+
return {
|
|
38
|
+
success: true,
|
|
39
|
+
stageId: targetStageId,
|
|
40
|
+
branchName: target?.branchName,
|
|
41
|
+
clearedStages: stagesToClear,
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
//# sourceMappingURL=deleteStageBranch.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"deleteStageBranch.js","sourceRoot":"","sources":["../../src/utils/deleteStageBranch.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAGH,OAAO,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AAgBtD;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,UAAsB,EACtB,aAAqB,EACrB,aAA6B;IAE7B,oBAAoB,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC;IAC7C,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,oBAAoB,CAAC,CAAC,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC;IAEvE,MAAM,OAAO,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,OAAO,EAAE,4BAA4B,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;IAClG,MAAM,UAAU,GAAG,MAAM,UAAU,CAAC,OAAO,CAAC,qBAAqB,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IACnF,MAAM,OAAO,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAGpE,CAAC;IAEH,MAAM,QAAQ,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;IACnD,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACxB,MAAM,QAAQ,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC1G,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,aAAa,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC;IACrE,CAAC;IAED,MAAM,MAAM,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,KAAK,aAAa,CAAC,CAAC;IACtE,OAAO;QACL,OAAO,EAAE,IAAI;QACb,OAAO,EAAE,aAAa;QACtB,UAAU,EAAE,MAAM,EAAE,UAAU;QAC9B,aAAa,EAAE,aAAa;KAC7B,CAAC;AACJ,CAAC"}
|
|
@@ -6,3 +6,12 @@ export declare function computeFirstStageId(stages: PipelineStageRecord[]): stri
|
|
|
6
6
|
export declare function resolveTargetStageId(currentStageId: string | undefined, stages: PipelineStageRecord[]): string | undefined;
|
|
7
7
|
export declare function findStageById(stages: PipelineStageRecord[], stageId: string | undefined): PipelineStageRecord | undefined;
|
|
8
8
|
export declare function getBranchNameFromStage(stage: PipelineStageRecord | undefined): string | undefined;
|
|
9
|
+
/**
|
|
10
|
+
* Returns the IDs of all stages upstream (to the left) of the given stage, i.e. every stage
|
|
11
|
+
* whose promotion path eventually reaches it by following NextStageId. The target stage itself
|
|
12
|
+
* is not included. Order is nearest-to-farthest from the target.
|
|
13
|
+
*
|
|
14
|
+
* Branches are configured right-to-left (a stage can only have a branch once the stage to its
|
|
15
|
+
* right does), so removing a branch must cascade to every upstream stage to keep the pipeline valid.
|
|
16
|
+
*/
|
|
17
|
+
export declare function computeUpstreamStageIds(stages: PipelineStageRecord[], stageId: string): string[];
|
|
@@ -51,4 +51,36 @@ export function findStageById(stages, stageId) {
|
|
|
51
51
|
export function getBranchNameFromStage(stage) {
|
|
52
52
|
return stage?.SourceCodeRepositoryBranch?.Name ?? undefined;
|
|
53
53
|
}
|
|
54
|
+
/**
|
|
55
|
+
* Returns the IDs of all stages upstream (to the left) of the given stage, i.e. every stage
|
|
56
|
+
* whose promotion path eventually reaches it by following NextStageId. The target stage itself
|
|
57
|
+
* is not included. Order is nearest-to-farthest from the target.
|
|
58
|
+
*
|
|
59
|
+
* Branches are configured right-to-left (a stage can only have a branch once the stage to its
|
|
60
|
+
* right does), so removing a branch must cascade to every upstream stage to keep the pipeline valid.
|
|
61
|
+
*/
|
|
62
|
+
export function computeUpstreamStageIds(stages, stageId) {
|
|
63
|
+
const predecessorsByStageId = new Map();
|
|
64
|
+
for (const stage of stages) {
|
|
65
|
+
if (stage.NextStageId) {
|
|
66
|
+
const predecessors = predecessorsByStageId.get(stage.NextStageId) ?? [];
|
|
67
|
+
predecessors.push(stage.Id);
|
|
68
|
+
predecessorsByStageId.set(stage.NextStageId, predecessors);
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
const upstream = [];
|
|
72
|
+
const seen = new Set([stageId]);
|
|
73
|
+
const queue = [stageId];
|
|
74
|
+
while (queue.length > 0) {
|
|
75
|
+
const current = queue.shift();
|
|
76
|
+
for (const predecessorId of predecessorsByStageId.get(current) ?? []) {
|
|
77
|
+
if (!seen.has(predecessorId)) {
|
|
78
|
+
seen.add(predecessorId);
|
|
79
|
+
upstream.push(predecessorId);
|
|
80
|
+
queue.push(predecessorId);
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
return upstream;
|
|
85
|
+
}
|
|
54
86
|
//# sourceMappingURL=pipelineUtils.js.map
|