@salesforce/plugin-devops-center 2.0.0 → 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.
Files changed (50) hide show
  1. package/README.md +150 -31
  2. package/lib/commands/devops/pipeline/stage/update.d.ts +19 -0
  3. package/lib/commands/devops/pipeline/stage/update.js +66 -0
  4. package/lib/commands/devops/pipeline/stage/update.js.map +1 -0
  5. package/lib/commands/devops/promote.d.ts +5 -0
  6. package/lib/commands/devops/promote.js +49 -3
  7. package/lib/commands/devops/promote.js.map +1 -1
  8. package/lib/commands/devops/promotion/complete.d.ts +1 -1
  9. package/lib/commands/devops/promotion/complete.js +1 -1
  10. package/lib/commands/devops/promotion/complete.js.map +1 -1
  11. package/lib/commands/devops/promotion/validate.d.ts +21 -0
  12. package/lib/commands/devops/promotion/validate.js +137 -0
  13. package/lib/commands/devops/promotion/validate.js.map +1 -0
  14. package/lib/commands/devops/stage/branch/delete.d.ts +15 -0
  15. package/lib/commands/devops/stage/branch/delete.js +107 -0
  16. package/lib/commands/devops/stage/branch/delete.js.map +1 -0
  17. package/lib/commands/devops/work-item/prepare.js +0 -3
  18. package/lib/commands/devops/work-item/prepare.js.map +1 -1
  19. package/lib/utils/addPipelineStage.js +1 -0
  20. package/lib/utils/addPipelineStage.js.map +1 -1
  21. package/lib/utils/createPipeline.js +24 -12
  22. package/lib/utils/createPipeline.js.map +1 -1
  23. package/lib/utils/deleteStageBranch.d.ts +22 -0
  24. package/lib/utils/deleteStageBranch.js +44 -0
  25. package/lib/utils/deleteStageBranch.js.map +1 -0
  26. package/lib/utils/pipelineUtils.d.ts +9 -0
  27. package/lib/utils/pipelineUtils.js +32 -0
  28. package/lib/utils/pipelineUtils.js.map +1 -1
  29. package/lib/utils/prepareWorkItem.d.ts +1 -1
  30. package/lib/utils/prepareWorkItem.js +4 -5
  31. package/lib/utils/prepareWorkItem.js.map +1 -1
  32. package/lib/utils/{deployStage.d.ts → promotionUtils.d.ts} +24 -0
  33. package/lib/utils/{deployStage.js → promotionUtils.js} +65 -1
  34. package/lib/utils/promotionUtils.js.map +1 -0
  35. package/lib/utils/soqlUtils.d.ts +5 -0
  36. package/lib/utils/soqlUtils.js +7 -0
  37. package/lib/utils/soqlUtils.js.map +1 -1
  38. package/messages/devops.pipeline.stage.update.md +25 -0
  39. package/messages/devops.promote.md +16 -0
  40. package/messages/devops.promotion.complete.md +3 -3
  41. package/messages/devops.promotion.validate.md +64 -0
  42. package/messages/devops.stage.branch.delete.md +37 -0
  43. package/npm-shrinkwrap.json +2 -2
  44. package/oclif.manifest.json +294 -56
  45. package/package.json +3 -3
  46. package/schemas/devops-pipeline-stage-update.json +22 -0
  47. package/schemas/devops-promote.json +38 -0
  48. package/schemas/devops-promotion-validate.json +66 -0
  49. package/schemas/devops-stage-branch-delete.json +47 -0
  50. package/lib/utils/deployStage.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"pipelineUtils.js","sourceRoot":"","sources":["../../src/utils/pipelineUtils.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAIH,OAAO,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AAEtD,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAAC,UAAsB,EAAE,SAAiB;IACrF,oBAAoB,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;IAC3C,MAAM,KAAK,GAAG,+EAA+E,SAAS,WAAW,CAAC;IAClH,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,KAAK,CAAmC,KAAK,CAAC,CAAC;IAC/E,OAAO,CAAC,MAAM,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,gBAAgB,CAAC;AACrD,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,mBAAmB,CAAC,UAAsB,EAAE,UAAkB;IAClF,oBAAoB,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;IAC7C,MAAM,UAAU,GAAG,oHAAoH,UAAU,GAAG,CAAC;IACrJ,MAAM,WAAW,GAAG,MAAM,UAAU,CAAC,KAAK,CAAsB,UAAU,CAAC,CAAC;IAC5E,OAAO,WAAW,CAAC,OAAO,IAAI,EAAE,CAAC;AACnC,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,MAA6B;IAC/D,MAAM,WAAW,GAAG,IAAI,GAAG,CAAS,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAC7D,MAAM,YAAY,GAAG,IAAI,GAAG,CAAS,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,MAAM,CAAC,OAAO,CAAa,CAAC,CAAC;IACnG,MAAM,aAAa,GAAa,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,YAAY,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;IAC9F,IAAI,aAAa,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,SAAS,CAAC;IACjD,OAAO,aAAa,CAAC,CAAC,CAAC,CAAC;AAC1B,CAAC;AAED,MAAM,UAAU,oBAAoB,CAClC,cAAkC,EAClC,MAA6B;IAE7B,IAAI,CAAC,MAAM,CAAC,MAAM;QAAE,OAAO,SAAS,CAAC;IACrC,IAAI,cAAc,EAAE,CAAC;QACnB,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,cAAc,CAAC,CAAC;QAC5D,OAAO,OAAO,EAAE,WAAW,IAAI,SAAS,CAAC;IAC3C,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,MAAM,UAAU,aAAa,CAC3B,MAA6B,EAC7B,OAA2B;IAE3B,IAAI,CAAC,OAAO;QAAE,OAAO,SAAS,CAAC;IAC/B,OAAO,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,OAAO,CAAC,CAAC;AAC9C,CAAC;AAED,MAAM,UAAU,sBAAsB,CAAC,KAAsC;IAC3E,OAAO,KAAK,EAAE,0BAA0B,EAAE,IAAI,IAAI,SAAS,CAAC;AAC9D,CAAC"}
1
+ {"version":3,"file":"pipelineUtils.js","sourceRoot":"","sources":["../../src/utils/pipelineUtils.ts"],"names":[],"mappings":"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"}
@@ -3,7 +3,7 @@ export type PrepareWorkItemParams = {
3
3
  connection: Connection;
4
4
  pipelineId: string;
5
5
  workItemId: string;
6
- sourceStageId: string;
6
+ sourceStageId?: string;
7
7
  targetStageId: string;
8
8
  };
9
9
  export type PrepareWorkItemResult = {
@@ -22,11 +22,10 @@ import { validateSalesforceId } from './soqlUtils.js';
22
22
  export async function prepareWorkItem(params) {
23
23
  const { connection, pipelineId, workItemId, sourceStageId, targetStageId } = params;
24
24
  const path = `/services/data/v${connection.getApiVersion()}/connect/devops/pipelines/${pipelineId}/promote/oneoff/prepare`;
25
- const body = JSON.stringify({
26
- selectedWorkItemId: workItemId,
27
- sourceStageId,
28
- targetStageId,
29
- });
25
+ const payload = { selectedWorkItemId: workItemId, targetStageId };
26
+ if (sourceStageId)
27
+ payload.sourceStageId = sourceStageId;
28
+ const body = JSON.stringify(payload);
30
29
  const data = await connection.request({
31
30
  method: 'POST',
32
31
  url: path,
@@ -1 +1 @@
1
- {"version":3,"file":"prepareWorkItem.js","sourceRoot":"","sources":["../../src/utils/prepareWorkItem.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAGH,OAAO,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AAwBtD;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,MAA6B;IACjE,MAAM,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,aAAa,EAAE,aAAa,EAAE,GAAG,MAAM,CAAC;IAEpF,MAAM,IAAI,GAAG,mBAAmB,UAAU,CAAC,aAAa,EAAE,6BAA6B,UAAU,yBAAyB,CAAC;IAC3H,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC;QAC1B,kBAAkB,EAAE,UAAU;QAC9B,aAAa;QACb,aAAa;KACd,CAAC,CAAC;IAEH,MAAM,IAAI,GAAG,MAAM,UAAU,CAAC,OAAO,CAAiC;QACpE,MAAM,EAAE,MAAM;QACd,GAAG,EAAE,IAAI;QACT,IAAI;QACJ,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;KAChD,CAAC,CAAC;IAEH,OAAO;QACL,OAAO,EAAE,IAAI,CAAC,OAAO,IAAI,IAAI;QAC7B,YAAY,EAAE,IAAI,CAAC,YAAY,IAAI,IAAI;QACvC,SAAS,EAAE,IAAI,CAAC,SAAS,IAAI,IAAI;QACjC,YAAY,EAAE,IAAI,CAAC,YAAY,IAAI,IAAI;KACxC,CAAC;AACJ,CAAC;AAOD,MAAM,CAAC,KAAK,UAAU,4BAA4B,CAChD,UAAsB,EACtB,UAAkB;IAElB,oBAAoB,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC;IAC9C,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,KAAK,CACnC,2EAA2E,UAAU,WAAW,CACjG,CAAC;IACF,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,IAAI,EAAE,CAAC;IACrC,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzB,MAAM,IAAI,KAAK,CAAC,cAAc,UAAU,qDAAqD,CAAC,CAAC;IACjG,CAAC;IACD,OAAO;QACL,SAAS,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,eAAe;QACrC,eAAe,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,qBAAqB,IAAI,EAAE;KACxD,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"prepareWorkItem.js","sourceRoot":"","sources":["../../src/utils/prepareWorkItem.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAGH,OAAO,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AAwBtD;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,MAA6B;IACjE,MAAM,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,aAAa,EAAE,aAAa,EAAE,GAAG,MAAM,CAAC;IAEpF,MAAM,IAAI,GAAG,mBAAmB,UAAU,CAAC,aAAa,EAAE,6BAA6B,UAAU,yBAAyB,CAAC;IAC3H,MAAM,OAAO,GAA2B,EAAE,kBAAkB,EAAE,UAAU,EAAE,aAAa,EAAE,CAAC;IAC1F,IAAI,aAAa;QAAE,OAAO,CAAC,aAAa,GAAG,aAAa,CAAC;IACzD,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;IAErC,MAAM,IAAI,GAAG,MAAM,UAAU,CAAC,OAAO,CAAiC;QACpE,MAAM,EAAE,MAAM;QACd,GAAG,EAAE,IAAI;QACT,IAAI;QACJ,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;KAChD,CAAC,CAAC;IAEH,OAAO;QACL,OAAO,EAAE,IAAI,CAAC,OAAO,IAAI,IAAI;QAC7B,YAAY,EAAE,IAAI,CAAC,YAAY,IAAI,IAAI;QACvC,SAAS,EAAE,IAAI,CAAC,SAAS,IAAI,IAAI;QACjC,YAAY,EAAE,IAAI,CAAC,YAAY,IAAI,IAAI;KACxC,CAAC;AACJ,CAAC;AAOD,MAAM,CAAC,KAAK,UAAU,4BAA4B,CAChD,UAAsB,EACtB,UAAkB;IAElB,oBAAoB,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC;IAC9C,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,KAAK,CACnC,2EAA2E,UAAU,WAAW,CACjG,CAAC;IACF,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,IAAI,EAAE,CAAC;IACrC,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzB,MAAM,IAAI,KAAK,CAAC,cAAc,UAAU,qDAAqD,CAAC,CAAC;IACjG,CAAC;IACD,OAAO;QACL,SAAS,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,eAAe;QACrC,eAAe,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,qBAAqB,IAAI,EAAE;KACxD,CAAC;AACJ,CAAC"}
@@ -13,6 +13,24 @@ export type DeployStageResult = {
13
13
  message: string;
14
14
  promotedWorkitemIds: string[];
15
15
  };
16
+ /** Maps a comma-separated list of work item names to the components they share. */
17
+ export type SharedComponentsList = Record<string, string[]>;
18
+ export type CombineDetails = {
19
+ childWorkitemsId?: string[];
20
+ parentWorkitemId?: string;
21
+ sharedComponentsList?: SharedComponentsList;
22
+ } & Record<string, unknown>;
23
+ /**
24
+ * Returns true when the combine details describe work items that share one or more components.
25
+ * Shared components mean the work items can optionally be combined before promotion.
26
+ */
27
+ export declare function hasSharedComponents(combineDetails: CombineDetails | null): boolean;
28
+ export type ValidatePromotionResult = {
29
+ success: boolean;
30
+ errorType: string | null;
31
+ errorDetails: string | null;
32
+ combineDetails: CombineDetails | null;
33
+ };
16
34
  /**
17
35
  * GET /services/data/vXX.X/connect/devops/pipelines/{pipelineId}/stages/{stageId}/undeployedWorkitems
18
36
  */
@@ -21,6 +39,12 @@ export declare function getUndeployedWorkItems(connection: Connection, pipelineI
21
39
  * POST /services/data/vXX.X/connect/devops/pipelines/{pipelineId}/validatePromote
22
40
  */
23
41
  export declare function validateDeploy(connection: Connection, pipelineId: string, workItemIds: string[], targetStageId: string): Promise<ValidateDeployResult>;
42
+ export declare function formatValidationDetails(raw: string | null): string;
43
+ /**
44
+ * POST /services/data/vXX.X/connect/devops/pipelines/{pipelineId}/validatePromote
45
+ * Full variant that accepts checkCombineDetails and returns combineDetails.
46
+ */
47
+ export declare function validatePromotion(connection: Connection, pipelineId: string, workItemIds: string[], targetStageId: string, checkCombineDetails?: boolean, allWorkItemsInStage?: boolean): Promise<ValidatePromotionResult>;
24
48
  /**
25
49
  * POST /services/data/vXX.X/connect/devops/pipelines/{pipelineId}/promote
26
50
  * When workItemIds are provided, targets those specific items (allWorkItemsInStage: false).
@@ -13,6 +13,15 @@
13
13
  * See the License for the specific language governing permissions and
14
14
  * limitations under the License.
15
15
  */
16
+ import { normalizeSalesforceId } from './soqlUtils.js';
17
+ /**
18
+ * Returns true when the combine details describe work items that share one or more components.
19
+ * Shared components mean the work items can optionally be combined before promotion.
20
+ */
21
+ export function hasSharedComponents(combineDetails) {
22
+ const shared = combineDetails?.sharedComponentsList;
23
+ return Boolean(shared && Object.keys(shared).length > 0);
24
+ }
16
25
  /**
17
26
  * GET /services/data/vXX.X/connect/devops/pipelines/{pipelineId}/stages/{stageId}/undeployedWorkitems
18
27
  */
@@ -38,6 +47,61 @@ export async function validateDeploy(connection, pipelineId, workItemIds, target
38
47
  errorDetails: response.errorDetails ?? null,
39
48
  };
40
49
  }
50
+ const VALIDATION_REASON_LABELS = {
51
+ PR_DOES_NOT_EXIST: 'no pull request exists',
52
+ PR_NOT_MERGED: 'pull request has not been merged',
53
+ BRANCH_NOT_FOUND: 'source branch not found',
54
+ };
55
+ export function formatValidationDetails(raw) {
56
+ if (!raw)
57
+ return '';
58
+ const decoded = raw
59
+ .replace(/&quot;/g, '"')
60
+ .replace(/&amp;/g, '&')
61
+ .replace(/&lt;/g, '<')
62
+ .replace(/&gt;/g, '>');
63
+ try {
64
+ const parsed = JSON.parse(decoded);
65
+ if (Array.isArray(parsed) && parsed.length > 0) {
66
+ return parsed
67
+ .map((entry) => {
68
+ const label = entry.reason ? VALIDATION_REASON_LABELS[entry.reason] ?? entry.reason : '';
69
+ return entry.workItem ? `${entry.workItem}: ${label}` : label;
70
+ })
71
+ .join(', ');
72
+ }
73
+ }
74
+ catch {
75
+ // not JSON — fall through
76
+ }
77
+ return decoded;
78
+ }
79
+ /**
80
+ * POST /services/data/vXX.X/connect/devops/pipelines/{pipelineId}/validatePromote
81
+ * Full variant that accepts checkCombineDetails and returns combineDetails.
82
+ */
83
+ export async function validatePromotion(connection, pipelineId, workItemIds, targetStageId, checkCombineDetails = false, allWorkItemsInStage = false) {
84
+ const path = `/services/data/v${connection.getApiVersion()}/connect/devops/pipelines/${pipelineId}/validatePromote`;
85
+ const payload = {
86
+ selectedWorkItemIds: workItemIds.map(normalizeSalesforceId),
87
+ targetStageId: normalizeSalesforceId(targetStageId),
88
+ allWorkItemsInStage,
89
+ };
90
+ if (checkCombineDetails)
91
+ payload.checkCombineDetails = true;
92
+ const response = await connection.request({
93
+ method: 'POST',
94
+ url: path,
95
+ body: JSON.stringify(payload),
96
+ headers: { 'Content-Type': 'application/json' },
97
+ });
98
+ return {
99
+ success: response.success ?? true,
100
+ errorType: response.errorType ?? null,
101
+ errorDetails: response.errorDetails ?? null,
102
+ combineDetails: response.combineDetails ?? null,
103
+ };
104
+ }
41
105
  /**
42
106
  * POST /services/data/vXX.X/connect/devops/pipelines/{pipelineId}/promote
43
107
  * When workItemIds are provided, targets those specific items (allWorkItemsInStage: false).
@@ -65,4 +129,4 @@ export async function executeDeploy(connection, pipelineId, targetStageId, fullD
65
129
  promotedWorkitemIds: response.promotedWorkitemIds ?? [],
66
130
  };
67
131
  }
68
- //# sourceMappingURL=deployStage.js.map
132
+ //# sourceMappingURL=promotionUtils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"promotionUtils.js","sourceRoot":"","sources":["../../src/utils/promotionUtils.ts"],"names":[],"mappings":"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"}
@@ -11,6 +11,11 @@ export declare function escapeSOQL(value: string): string;
11
11
  * Use this before interpolating IDs into SOQL queries.
12
12
  */
13
13
  export declare function validateSalesforceId(id: string, context?: string): string;
14
+ /**
15
+ * Trims an 18-character Salesforce ID to its 15-character form.
16
+ * 15-char IDs are returned unchanged. Accepts IDs that have already passed validateSalesforceId.
17
+ */
18
+ export declare function normalizeSalesforceId(id: string): string;
14
19
  /**
15
20
  * Validates that a string starts with the expected Salesforce object prefix.
16
21
  * Throws an error if validation fails.
@@ -39,6 +39,13 @@ export function validateSalesforceId(id, context) {
39
39
  }
40
40
  return id;
41
41
  }
42
+ /**
43
+ * Trims an 18-character Salesforce ID to its 15-character form.
44
+ * 15-char IDs are returned unchanged. Accepts IDs that have already passed validateSalesforceId.
45
+ */
46
+ export function normalizeSalesforceId(id) {
47
+ return id.length === 18 ? id.slice(0, 15) : id;
48
+ }
42
49
  /**
43
50
  * Validates that a string starts with the expected Salesforce object prefix.
44
51
  * Throws an error if validation fails.
@@ -1 +1 @@
1
- {"version":3,"file":"soqlUtils.js","sourceRoot":"","sources":["../../src/utils/soqlUtils.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH;;;GAGG;AACH,MAAM,UAAU,UAAU,CAAC,KAAa;IACtC,OAAO,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;AACpC,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,oBAAoB,CAAC,EAAU,EAAE,OAAgB;IAC/D,IAAI,CAAC,EAAE,IAAI,OAAO,EAAE,KAAK,QAAQ,EAAE,CAAC;QAClC,MAAM,IAAI,KAAK,CAAC,wBAAwB,OAAO,CAAC,CAAC,CAAC,QAAQ,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,kCAAkC,CAAC,CAAC;IAC9G,CAAC;IAED,2FAA2F;IAC3F,MAAM,SAAS,GACb,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,MAAM,IAAI,OAAQ,MAAkC,CAAC,QAAQ,KAAK,UAAU,CAAC;IACxG,MAAM,OAAO,GAAG,SAAS,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,sBAAsB,CAAC;IAEvE,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC;QACtB,MAAM,IAAI,KAAK,CACb,+BAA+B,OAAO,CAAC,CAAC,CAAC,QAAQ,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,eACrE,SAAS,CAAC,CAAC,CAAC,yBAAyB,CAAC,CAAC,CAAC,+BAC1C,GAAG,CACJ,CAAC;IACJ,CAAC;IACD,OAAO,EAAE,CAAC;AACZ,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,0BAA0B,CAAC,EAAU,EAAE,cAAsB,EAAE,UAAkB;IAC/F,oBAAoB,CAAC,EAAE,EAAE,UAAU,CAAC,CAAC;IACrC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,cAAc,CAAC,EAAE,CAAC;QACnC,MAAM,IAAI,KAAK,CAAC,WAAW,UAAU,SAAS,EAAE,iCAAiC,cAAc,IAAI,CAAC,CAAC;IACvG,CAAC;IACD,OAAO,EAAE,CAAC;AACZ,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,qBAAqB,CAAC,GAAa,EAAE,OAAgB;IACnE,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;QACxB,MAAM,IAAI,KAAK,CAAC,mBAAmB,OAAO,CAAC,CAAC,CAAC,QAAQ,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,gBAAgB,CAAC,CAAC;IACvF,CAAC;IACD,OAAO,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,KAAK,EAAE,EAAE,CAAC,oBAAoB,CAAC,EAAE,EAAE,GAAG,OAAO,IAAI,OAAO,IAAI,KAAK,GAAG,CAAC,CAAC,CAAC;AAC7F,CAAC"}
1
+ {"version":3,"file":"soqlUtils.js","sourceRoot":"","sources":["../../src/utils/soqlUtils.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH;;;GAGG;AACH,MAAM,UAAU,UAAU,CAAC,KAAa;IACtC,OAAO,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;AACpC,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,oBAAoB,CAAC,EAAU,EAAE,OAAgB;IAC/D,IAAI,CAAC,EAAE,IAAI,OAAO,EAAE,KAAK,QAAQ,EAAE,CAAC;QAClC,MAAM,IAAI,KAAK,CAAC,wBAAwB,OAAO,CAAC,CAAC,CAAC,QAAQ,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,kCAAkC,CAAC,CAAC;IAC9G,CAAC;IAED,2FAA2F;IAC3F,MAAM,SAAS,GACb,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,MAAM,IAAI,OAAQ,MAAkC,CAAC,QAAQ,KAAK,UAAU,CAAC;IACxG,MAAM,OAAO,GAAG,SAAS,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,sBAAsB,CAAC;IAEvE,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC;QACtB,MAAM,IAAI,KAAK,CACb,+BAA+B,OAAO,CAAC,CAAC,CAAC,QAAQ,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,eACrE,SAAS,CAAC,CAAC,CAAC,yBAAyB,CAAC,CAAC,CAAC,+BAC1C,GAAG,CACJ,CAAC;IACJ,CAAC;IACD,OAAO,EAAE,CAAC;AACZ,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,qBAAqB,CAAC,EAAU;IAC9C,OAAO,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;AACjD,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,0BAA0B,CAAC,EAAU,EAAE,cAAsB,EAAE,UAAkB;IAC/F,oBAAoB,CAAC,EAAE,EAAE,UAAU,CAAC,CAAC;IACrC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,cAAc,CAAC,EAAE,CAAC;QACnC,MAAM,IAAI,KAAK,CAAC,WAAW,UAAU,SAAS,EAAE,iCAAiC,cAAc,IAAI,CAAC,CAAC;IACvG,CAAC;IACD,OAAO,EAAE,CAAC;AACZ,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,qBAAqB,CAAC,GAAa,EAAE,OAAgB;IACnE,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;QACxB,MAAM,IAAI,KAAK,CAAC,mBAAmB,OAAO,CAAC,CAAC,CAAC,QAAQ,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,gBAAgB,CAAC,CAAC;IACvF,CAAC;IACD,OAAO,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,KAAK,EAAE,EAAE,CAAC,oBAAoB,CAAC,EAAE,EAAE,GAAG,OAAO,IAAI,OAAO,IAAI,KAAK,GAAG,CAAC,CAAC,CAAC;AAC7F,CAAC"}
@@ -0,0 +1,25 @@
1
+ # summary
2
+
3
+ Update a DevOps Center pipeline stage.
4
+
5
+ # description
6
+
7
+ Updates the name of a pipeline stage.
8
+
9
+ # flags.stage-id.summary
10
+
11
+ ID of the pipeline stage to update.
12
+
13
+ # flags.name.summary
14
+
15
+ New name for the pipeline stage.
16
+
17
+ # examples
18
+
19
+ - Rename a pipeline stage.
20
+
21
+ <%= config.bin %> <%= command.id %> --target-org my-devops-org --stage-id 1QV000000000001 --name "Integration"
22
+
23
+ # error.StageNotFound
24
+
25
+ Stage "%s" not found. Check the stage ID and try again.
@@ -48,6 +48,10 @@ ID of the source pipeline stage whose approved work items will be promoted. Mutu
48
48
 
49
49
  <%= config.bin %> <%= command.id %> --target-org my-devops-org --stage-id 1QVxx0000000001 --target-stage-id 1QVxx0000000002 --deploy-all
50
50
 
51
+ # flags.skip-validation.summary
52
+
53
+ Skip pre-promote validation. By default, promotion is validated before proceeding to prevent promoting work items without an associated PR. Use this flag to bypass validation.
54
+
51
55
  # error.NoModeFlag
52
56
 
53
57
  Provide either --work-item-id to promote specific work items or --stage-id to promote all approved work items from a stage.
@@ -56,6 +60,18 @@ Provide either --work-item-id to promote specific work items or --stage-id to pr
56
60
 
57
61
  No work items found to promote from the source stage. Make sure there are approved work items before promoting.
58
62
 
63
+ # error.ValidationRequestFailed
64
+
65
+ Failed to run pre-promote validation: %s
66
+
67
+ # error.ValidationFailedCombineRequired
68
+
69
+ Promotion blocked: work items must be combined before promoting. Run the combine command with the following details:
70
+
71
+ # error.ValidationFailed
72
+
73
+ Pre-promote validation failed (%s): %s
74
+
59
75
  # error.PromoteFailed
60
76
 
61
77
  Failed to promote: %s
@@ -18,15 +18,15 @@ ID of a specific work item to deploy. Omit to deploy all undeployed work items f
18
18
 
19
19
  # examples
20
20
 
21
- - Complete a promotion for an out-of-sync pipeline stage.
21
+ - Complete a promotion for an out-of-sync pipeline stage:
22
22
 
23
23
  <%= config.bin %> <%= command.id %> --target-org my-devops-org --target-stage-id 1QV000000000001
24
24
 
25
- - Complete a promotion for a specific work item (e.g. first stage of a pipeline).
25
+ - Complete a promotion for a specific work item (e.g. first stage of a pipeline):
26
26
 
27
27
  <%= config.bin %> <%= command.id %> --target-org my-devops-org --target-stage-id 1QV000000000001 --work-item-id 1fk000000000001
28
28
 
29
- - Complete a promotion with full deploy and a specific test level.
29
+ - Complete a promotion with full deploy and a specific test level:
30
30
 
31
31
  <%= config.bin %> <%= command.id %> --target-org my-devops-org --target-stage-id 1QV000000000001 --deploy-all --test-level RunLocalTests
32
32
 
@@ -0,0 +1,64 @@
1
+ # summary
2
+
3
+ Validate work item promotion for a pipeline stage.
4
+
5
+ # description
6
+
7
+ Validates whether the specified work items can be promoted to the target pipeline stage. Checks for VCS and object permission errors before a promotion is attempted.
8
+
9
+ # flags.target-stage-id.summary
10
+
11
+ ID of the target pipeline stage to validate promotion to.
12
+
13
+ # flags.work-item-id.summary
14
+
15
+ ID of a work item to validate for promotion. Specify multiple times for multiple work items.
16
+
17
+ # examples
18
+
19
+ - Validate promotion of a work item to a target stage:
20
+
21
+ <%= config.bin %> <%= command.id %> --target-org my-devops-org --target-stage-id 1QV000000000001 --work-item-id 1fk000000000001
22
+
23
+ - Validate promotion of multiple work items:
24
+
25
+ <%= config.bin %> <%= command.id %> --target-org my-devops-org --target-stage-id 1QV000000000001 --work-item-id 1fk000000000001 --work-item-id 1fk000000000002
26
+
27
+ # error.NoPipeline
28
+
29
+ No pipeline found for work item "%s". Ensure the project has an associated pipeline.
30
+
31
+ # error.ValidationFailed
32
+
33
+ Validation failed (%s): %s
34
+
35
+ # error.ValidationRequestFailed
36
+
37
+ Validation request failed: %s
38
+
39
+ # suggestion.SharedComponents
40
+
41
+ The selected work items share one or more components. Choose one of these approaches:
42
+
43
+ # suggestion.CombineOption
44
+
45
+ Option 1 - Combine the work items and promote them as a single unit:
46
+
47
+ # suggestion.PromoteOption
48
+
49
+ Option 2 - Promote the work items as they are, without combining:
50
+
51
+ # suggestion.CombineStepPrepare
52
+
53
+ 1. Combine the work items:
54
+ %s
55
+
56
+ # suggestion.CombineStepPromote
57
+
58
+ 2. Promote the combined work item:
59
+ %s
60
+
61
+ # suggestion.PromoteStep
62
+
63
+ Run:
64
+ %s
@@ -0,0 +1,37 @@
1
+ # summary
2
+
3
+ Delete the source code repository branch associated with a pipeline stage.
4
+
5
+ # description
6
+
7
+ Removes the branch linked to the specified pipeline stage. Because branches are configured from right to left (a stage can have a branch only after the stage to its right does), removing a branch also removes the branches from all upstream stages (to the left) in the pipeline, keeping it in a valid state. The branch records in the repository are not deleted; only their association with the stages is removed. The stage must belong to an inactive pipeline.
8
+
9
+ # flags.pipeline-id.summary
10
+
11
+ ID of the pipeline that contains the stage. Used to verify the pipeline is inactive before deleting.
12
+
13
+ # flags.stage-id.summary
14
+
15
+ ID of the pipeline stage whose branch you want to delete.
16
+
17
+ # examples
18
+
19
+ - Delete the branch associated with a pipeline stage:
20
+
21
+ <%= config.bin %> <%= command.id %> --target-org my-devops-org --pipeline-id 0Xo000000000001 --stage-id 0Xp000000000001
22
+
23
+ # error.PipelineAlreadyActive
24
+
25
+ Pipeline %s is already active. A branch can only be removed from a stage in an inactive pipeline.
26
+
27
+ # error.StageNotFound
28
+
29
+ Pipeline stage "%s" doesn't exist in pipeline "%s". Check the stage ID and try again.
30
+
31
+ # error.NoBranch
32
+
33
+ Pipeline stage "%s" doesn't have a branch associated with it. There's nothing to delete.
34
+
35
+ # error.BranchDeleteFailed
36
+
37
+ Failed to delete branch from stage: %s
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "name": "@salesforce/plugin-devops-center",
3
- "version": "2.0.0",
3
+ "version": "2.0.1",
4
4
  "lockfileVersion": 3,
5
5
  "requires": true,
6
6
  "packages": {
7
7
  "": {
8
8
  "name": "@salesforce/plugin-devops-center",
9
- "version": "2.0.0",
9
+ "version": "2.0.1",
10
10
  "license": "Apache-2.0",
11
11
  "dependencies": {
12
12
  "@jsforce/jsforce-node": "^3",