@salesforce/plugin-devops-center 1.4.0 → 2.0.0
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 +592 -55
- package/lib/commands/devops/pipeline/{activate.d.ts → get.d.ts} +3 -3
- package/lib/commands/devops/pipeline/get.js +81 -0
- package/lib/commands/devops/pipeline/get.js.map +1 -0
- package/lib/commands/devops/pipeline/list.d.ts +13 -0
- package/lib/commands/devops/pipeline/list.js +58 -0
- package/lib/commands/devops/pipeline/list.js.map +1 -0
- package/lib/commands/devops/pipeline/project/delete.d.ts +15 -0
- package/lib/commands/devops/pipeline/project/delete.js +71 -0
- package/lib/commands/devops/pipeline/project/delete.js.map +1 -0
- package/lib/commands/devops/pipeline/stage/delete.d.ts +15 -0
- package/lib/commands/devops/pipeline/stage/delete.js +69 -0
- package/lib/commands/devops/pipeline/stage/delete.js.map +1 -0
- package/lib/commands/devops/pipeline/update.d.ts +18 -0
- package/lib/commands/devops/pipeline/update.js +126 -0
- package/lib/commands/devops/pipeline/update.js.map +1 -0
- package/lib/commands/devops/project/update.d.ts +17 -0
- package/lib/commands/devops/project/update.js +86 -0
- package/lib/commands/devops/project/update.js.map +1 -0
- package/lib/commands/devops/promote.d.ts +24 -0
- package/lib/commands/devops/promote.js +148 -0
- package/lib/commands/devops/promote.js.map +1 -0
- package/lib/commands/devops/promotion/complete.d.ts +20 -0
- package/lib/commands/devops/promotion/complete.js +112 -0
- package/lib/commands/devops/promotion/complete.js.map +1 -0
- package/lib/commands/devops/request/status.d.ts +14 -0
- package/lib/commands/devops/request/status.js +71 -0
- package/lib/commands/devops/request/status.js.map +1 -0
- package/lib/commands/devops/{pull-request → review}/create.d.ts +1 -1
- package/lib/commands/devops/{pull-request → review}/create.js +3 -3
- package/lib/commands/devops/review/create.js.map +1 -0
- package/lib/commands/devops/stage/environment/add.js +2 -0
- package/lib/commands/devops/stage/environment/add.js.map +1 -1
- package/lib/commands/devops/stage/environment/delete.d.ts +15 -0
- package/lib/commands/devops/{pipeline/activate.js → stage/environment/delete.js} +18 -30
- package/lib/commands/devops/stage/environment/delete.js.map +1 -0
- package/lib/commands/devops/work-item/combine.d.ts +15 -0
- package/lib/commands/devops/work-item/combine.js +109 -0
- package/lib/commands/devops/work-item/combine.js.map +1 -0
- package/lib/commands/devops/work-item/prepare.d.ts +14 -0
- package/lib/commands/devops/work-item/prepare.js +98 -0
- package/lib/commands/devops/work-item/prepare.js.map +1 -0
- package/lib/common/flags/promote/promoteFlags.d.ts +1 -0
- package/lib/common/flags/promote/promoteFlags.js +5 -0
- package/lib/common/flags/promote/promoteFlags.js.map +1 -1
- package/lib/common/outputService/aorOutputService.js +4 -4
- package/lib/common/outputService/aorOutputService.js.map +1 -1
- package/lib/common/outputService/outputUtils.js +1 -2
- package/lib/common/outputService/outputUtils.js.map +1 -1
- package/lib/common/selectors/asyncOperationResultsSelector.js +3 -1
- package/lib/common/selectors/asyncOperationResultsSelector.js.map +1 -1
- package/lib/common/selectors/deployComponentsSelector.js +5 -6
- package/lib/common/selectors/deployComponentsSelector.js.map +1 -1
- package/lib/common/selectors/deployProgressSummarySelector.js +3 -1
- package/lib/common/selectors/deployProgressSummarySelector.js.map +1 -1
- package/lib/common/selectors/deploymentResultsSelector.js +10 -6
- package/lib/common/selectors/deploymentResultsSelector.js.map +1 -1
- package/lib/common/selectors/environmentSelector.js +4 -2
- package/lib/common/selectors/environmentSelector.js.map +1 -1
- package/lib/common/selectors/namedCredentialSelector.js +2 -1
- package/lib/common/selectors/namedCredentialSelector.js.map +1 -1
- package/lib/common/selectors/pipelineStageSelector.js +5 -3
- package/lib/common/selectors/pipelineStageSelector.js.map +1 -1
- package/lib/common/selectors/validateDeploySelector.js +3 -1
- package/lib/common/selectors/validateDeploySelector.js.map +1 -1
- package/lib/common/selectors/workItemSelector.js +4 -1
- package/lib/common/selectors/workItemSelector.js.map +1 -1
- package/lib/utils/activatePipeline.d.ts +13 -4
- package/lib/utils/activatePipeline.js +7 -6
- package/lib/utils/activatePipeline.js.map +1 -1
- package/lib/utils/attachProject.js +2 -0
- package/lib/utils/attachProject.js.map +1 -1
- package/lib/utils/combineWorkItems.d.ts +20 -0
- package/lib/utils/combineWorkItems.js +42 -0
- package/lib/utils/combineWorkItems.js.map +1 -0
- package/lib/utils/createPullRequest.js +2 -1
- package/lib/utils/createPullRequest.js.map +1 -1
- package/lib/utils/deletePipelineStage.d.ts +12 -0
- package/lib/utils/deletePipelineStage.js +41 -0
- package/lib/utils/deletePipelineStage.js.map +1 -0
- package/lib/utils/deleteStageEnvironment.d.ts +8 -0
- package/lib/utils/deleteStageEnvironment.js +33 -0
- package/lib/utils/deleteStageEnvironment.js.map +1 -0
- package/lib/utils/deployStage.d.ts +29 -0
- package/lib/utils/deployStage.js +68 -0
- package/lib/utils/deployStage.js.map +1 -0
- package/lib/utils/detachProject.d.ts +8 -0
- package/lib/utils/detachProject.js +37 -0
- package/lib/utils/detachProject.js.map +1 -0
- package/lib/utils/getPipeline.d.ts +27 -0
- package/lib/utils/getPipeline.js +66 -0
- package/lib/utils/getPipeline.js.map +1 -0
- package/lib/utils/getRequestStatus.d.ts +10 -0
- package/lib/utils/getRequestStatus.js +32 -0
- package/lib/utils/getRequestStatus.js.map +1 -0
- package/lib/utils/listPipelines.d.ts +11 -0
- package/lib/utils/listPipelines.js +20 -0
- package/lib/utils/listPipelines.js.map +1 -0
- package/lib/utils/pipelineUtils.js +3 -0
- package/lib/utils/pipelineUtils.js.map +1 -1
- package/lib/utils/prepareWorkItem.d.ts +25 -0
- package/lib/utils/prepareWorkItem.js +55 -0
- package/lib/utils/prepareWorkItem.js.map +1 -0
- package/lib/utils/promoteStage.d.ts +21 -0
- package/lib/utils/promoteStage.js +46 -0
- package/lib/utils/promoteStage.js.map +1 -0
- package/lib/utils/soqlUtils.d.ts +23 -0
- package/lib/utils/soqlUtils.js +63 -0
- package/lib/utils/soqlUtils.js.map +1 -0
- package/lib/utils/updateProject.d.ts +17 -0
- package/lib/utils/updateProject.js +41 -0
- package/lib/utils/updateProject.js.map +1 -0
- package/lib/utils/updateWorkItem.js +3 -1
- package/lib/utils/updateWorkItem.js.map +1 -1
- package/lib/utils/workItems.js +2 -0
- package/lib/utils/workItems.js.map +1 -1
- package/messages/devops.pipeline.get.md +17 -0
- package/messages/devops.pipeline.list.md +13 -0
- package/messages/devops.pipeline.project.delete.md +25 -0
- package/messages/devops.pipeline.stage.delete.md +25 -0
- package/messages/devops.pipeline.update.md +47 -0
- package/messages/devops.project.update.md +45 -0
- package/messages/devops.promote.md +61 -0
- package/messages/devops.promotion.complete.md +47 -0
- package/messages/devops.request.status.md +21 -0
- package/messages/devops.stage.environment.delete.md +29 -0
- package/messages/devops.work-item.combine.md +39 -0
- package/messages/devops.work-item.prepare.md +27 -0
- package/npm-shrinkwrap.json +290 -272
- package/oclif.lock +81 -24
- package/oclif.manifest.json +1176 -242
- package/package.json +23 -11
- package/schemas/devops-pipeline-get.json +98 -0
- package/schemas/devops-pipeline-list.json +38 -0
- package/schemas/devops-pipeline-project-delete.json +25 -0
- package/schemas/devops-pipeline-stage-delete.json +25 -0
- package/schemas/{devops-pipeline-activate.json → devops-pipeline-update.json} +5 -2
- package/schemas/devops-project-update.json +31 -0
- package/schemas/devops-promote.json +28 -0
- package/schemas/devops-promotion-complete.json +34 -0
- package/schemas/devops-request-status.json +31 -0
- package/schemas/devops-stage-environment-delete.json +25 -0
- package/schemas/devops-work__item-combine.json +25 -0
- package/schemas/devops-work__item-prepare.json +25 -0
- package/lib/commands/devops/pipeline/activate.js.map +0 -1
- package/lib/commands/devops/pull-request/create.js.map +0 -1
- package/messages/devops.pipeline.activate.md +0 -29
- /package/messages/{devops.pull-request.create.md → devops.review.create.md} +0 -0
- /package/schemas/{devops-pull__request-create.json → devops-review-create.json} +0 -0
|
@@ -0,0 +1,32 @@
|
|
|
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 { escapeSOQL } from './soqlUtils.js';
|
|
17
|
+
export async function getRequestStatus(connection, requestToken) {
|
|
18
|
+
const result = await connection.query(`SELECT Id, Status, Message, ErrorDetails, RequestToken, RequestCompletionDate FROM DevopsRequestInfo WHERE RequestToken = '${escapeSOQL(requestToken)}' LIMIT 1`);
|
|
19
|
+
const record = (result.records ?? [])[0];
|
|
20
|
+
if (!record) {
|
|
21
|
+
throw new Error(`RequestNotFound:${requestToken}`);
|
|
22
|
+
}
|
|
23
|
+
return {
|
|
24
|
+
id: record.Id,
|
|
25
|
+
status: record.Status,
|
|
26
|
+
message: record.Message,
|
|
27
|
+
errorDetails: record.ErrorDetails,
|
|
28
|
+
requestToken: record.RequestToken,
|
|
29
|
+
requestCompletionDate: record.RequestCompletionDate,
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
//# sourceMappingURL=getRequestStatus.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"getRequestStatus.js","sourceRoot":"","sources":["../../src/utils/getRequestStatus.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAGH,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAoB5C,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,UAAsB,EAAE,YAAoB;IACjF,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,KAAK,CACnC,8HAA8H,UAAU,CACtI,YAAY,CACb,WAAW,CACb,CAAC;IAEF,MAAM,MAAM,GAAG,CAAC,MAAM,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IACzC,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,MAAM,IAAI,KAAK,CAAC,mBAAmB,YAAY,EAAE,CAAC,CAAC;IACrD,CAAC;IAED,OAAO;QACL,EAAE,EAAE,MAAM,CAAC,EAAE;QACb,MAAM,EAAE,MAAM,CAAC,MAAM;QACrB,OAAO,EAAE,MAAM,CAAC,OAAO;QACvB,YAAY,EAAE,MAAM,CAAC,YAAY;QACjC,YAAY,EAAE,MAAM,CAAC,YAAY;QACjC,qBAAqB,EAAE,MAAM,CAAC,qBAAqB;KACpD,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { Connection } from '@salesforce/core';
|
|
2
|
+
export type DevopsPipeline = {
|
|
3
|
+
Id: string;
|
|
4
|
+
Name: string;
|
|
5
|
+
Description: string | null;
|
|
6
|
+
IsActive: boolean;
|
|
7
|
+
};
|
|
8
|
+
export type PipelineListResult = {
|
|
9
|
+
pipelines: DevopsPipeline[];
|
|
10
|
+
};
|
|
11
|
+
export declare function listPipelines(connection: Connection): Promise<PipelineListResult>;
|
|
@@ -0,0 +1,20 @@
|
|
|
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
|
+
export async function listPipelines(connection) {
|
|
17
|
+
const result = await connection.query('SELECT Id, Name, Description, IsActive FROM DevopsPipeline');
|
|
18
|
+
return { pipelines: result.records ?? [] };
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=listPipelines.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"listPipelines.js","sourceRoot":"","sources":["../../src/utils/listPipelines.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAeH,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,UAAsB;IACxD,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,KAAK,CAAiB,4DAA4D,CAAC,CAAC;IACpH,OAAO,EAAE,SAAS,EAAE,MAAM,CAAC,OAAO,IAAI,EAAE,EAAE,CAAC;AAC7C,CAAC"}
|
|
@@ -13,12 +13,15 @@
|
|
|
13
13
|
* See the License for the specific language governing permissions and
|
|
14
14
|
* limitations under the License.
|
|
15
15
|
*/
|
|
16
|
+
import { validateSalesforceId } from './soqlUtils.js';
|
|
16
17
|
export async function getPipelineIdForProject(connection, projectId) {
|
|
18
|
+
validateSalesforceId(projectId, 'project');
|
|
17
19
|
const query = `SELECT DevopsPipelineId FROM DevopsProjectPipeline WHERE DevopsProjectId = '${projectId}' LIMIT 1`;
|
|
18
20
|
const result = await connection.query(query);
|
|
19
21
|
return (result.records ?? [])[0]?.DevopsPipelineId;
|
|
20
22
|
}
|
|
21
23
|
export async function fetchPipelineStages(connection, pipelineId) {
|
|
24
|
+
validateSalesforceId(pipelineId, 'pipeline');
|
|
22
25
|
const stageQuery = `SELECT Id, Name, NextStageId, SourceCodeRepositoryBranch.Name FROM DevopsPipelineStage WHERE DevopsPipelineId = '${pipelineId}'`;
|
|
23
26
|
const stageResult = await connection.query(stageQuery);
|
|
24
27
|
return stageResult.records ?? [];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pipelineUtils.js","sourceRoot":"","sources":["../../src/utils/pipelineUtils.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;
|
|
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"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { Connection } from '@salesforce/core';
|
|
2
|
+
export type PrepareWorkItemParams = {
|
|
3
|
+
connection: Connection;
|
|
4
|
+
pipelineId: string;
|
|
5
|
+
workItemId: string;
|
|
6
|
+
sourceStageId: string;
|
|
7
|
+
targetStageId: string;
|
|
8
|
+
};
|
|
9
|
+
export type PrepareWorkItemResult = {
|
|
10
|
+
success: boolean;
|
|
11
|
+
requestToken: string | null;
|
|
12
|
+
errorCode: string | null;
|
|
13
|
+
errorMessage: string | null;
|
|
14
|
+
};
|
|
15
|
+
/**
|
|
16
|
+
* Prepares a work item for one-off promotion by creating the necessary branches
|
|
17
|
+
* and pull requests in the source control repository.
|
|
18
|
+
* API: POST /services/data/v{version}/connect/devops/pipelines/{pipelineId}/promote/oneoff/prepare
|
|
19
|
+
*/
|
|
20
|
+
export declare function prepareWorkItem(params: PrepareWorkItemParams): Promise<PrepareWorkItemResult>;
|
|
21
|
+
export type WorkItemContext = {
|
|
22
|
+
projectId: string;
|
|
23
|
+
pipelineStageId: string;
|
|
24
|
+
};
|
|
25
|
+
export declare function resolveProjectIdFromWorkItem(connection: Connection, workItemId: string): Promise<WorkItemContext>;
|
|
@@ -0,0 +1,55 @@
|
|
|
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
|
+
* Prepares a work item for one-off promotion by creating the necessary branches
|
|
19
|
+
* and pull requests in the source control repository.
|
|
20
|
+
* API: POST /services/data/v{version}/connect/devops/pipelines/{pipelineId}/promote/oneoff/prepare
|
|
21
|
+
*/
|
|
22
|
+
export async function prepareWorkItem(params) {
|
|
23
|
+
const { connection, pipelineId, workItemId, sourceStageId, targetStageId } = params;
|
|
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
|
+
});
|
|
30
|
+
const data = await connection.request({
|
|
31
|
+
method: 'POST',
|
|
32
|
+
url: path,
|
|
33
|
+
body,
|
|
34
|
+
headers: { 'Content-Type': 'application/json' },
|
|
35
|
+
});
|
|
36
|
+
return {
|
|
37
|
+
success: data.success ?? true,
|
|
38
|
+
requestToken: data.requestToken ?? null,
|
|
39
|
+
errorCode: data.errorCode ?? null,
|
|
40
|
+
errorMessage: data.errorMessage ?? null,
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
export async function resolveProjectIdFromWorkItem(connection, workItemId) {
|
|
44
|
+
validateSalesforceId(workItemId, 'work item');
|
|
45
|
+
const result = await connection.query(`SELECT DevopsProjectId, DevopsPipelineStageId FROM WorkItem WHERE Id = '${workItemId}' LIMIT 1`);
|
|
46
|
+
const records = result.records ?? [];
|
|
47
|
+
if (records.length === 0) {
|
|
48
|
+
throw new Error(`Work item '${workItemId}' not found. Verify the work item ID and try again.`);
|
|
49
|
+
}
|
|
50
|
+
return {
|
|
51
|
+
projectId: records[0].DevopsProjectId,
|
|
52
|
+
pipelineStageId: records[0].DevopsPipelineStageId ?? '',
|
|
53
|
+
};
|
|
54
|
+
}
|
|
55
|
+
//# sourceMappingURL=prepareWorkItem.js.map
|
|
@@ -0,0 +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"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { Connection } from '@salesforce/core';
|
|
2
|
+
export type PromoteStageParams = {
|
|
3
|
+
connection: Connection;
|
|
4
|
+
pipelineId: string;
|
|
5
|
+
workItemIds: string[];
|
|
6
|
+
targetStageId: string;
|
|
7
|
+
fullDeploy?: boolean;
|
|
8
|
+
testLevel?: string;
|
|
9
|
+
runTests?: string[];
|
|
10
|
+
};
|
|
11
|
+
export type PromoteStageResult = {
|
|
12
|
+
requestId: string;
|
|
13
|
+
status: string;
|
|
14
|
+
message: string;
|
|
15
|
+
promotedWorkitemIds: string[];
|
|
16
|
+
};
|
|
17
|
+
/**
|
|
18
|
+
* Promotes work items to a target pipeline stage via the Connect API.
|
|
19
|
+
* POST /services/data/v{version}/connect/devops/pipelines/{pipelineId}/promote
|
|
20
|
+
*/
|
|
21
|
+
export declare function promoteStage(params: PromoteStageParams): Promise<PromoteStageResult>;
|
|
@@ -0,0 +1,46 @@
|
|
|
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
|
+
/**
|
|
17
|
+
* Promotes work items to a target pipeline stage via the Connect API.
|
|
18
|
+
* POST /services/data/v{version}/connect/devops/pipelines/{pipelineId}/promote
|
|
19
|
+
*/
|
|
20
|
+
export async function promoteStage(params) {
|
|
21
|
+
const { connection, pipelineId, workItemIds, targetStageId, fullDeploy = false, testLevel = 'Default', runTests, } = params;
|
|
22
|
+
const path = `/services/data/v${connection.getApiVersion()}/connect/devops/pipelines/${pipelineId}/promote`;
|
|
23
|
+
const response = await connection.request({
|
|
24
|
+
method: 'POST',
|
|
25
|
+
url: path,
|
|
26
|
+
body: JSON.stringify({
|
|
27
|
+
workitemIds: workItemIds,
|
|
28
|
+
targetStageId,
|
|
29
|
+
allWorkItemsInStage: false,
|
|
30
|
+
isCheckDeploy: false,
|
|
31
|
+
deployOptions: {
|
|
32
|
+
testLevel,
|
|
33
|
+
isFullDeploy: fullDeploy,
|
|
34
|
+
runTests: runTests ?? [],
|
|
35
|
+
},
|
|
36
|
+
}),
|
|
37
|
+
headers: { 'Content-Type': 'application/json' },
|
|
38
|
+
});
|
|
39
|
+
return {
|
|
40
|
+
requestId: response.requestId ?? '',
|
|
41
|
+
status: response.status ?? '',
|
|
42
|
+
message: response.message ?? '',
|
|
43
|
+
promotedWorkitemIds: response.promotedWorkitemIds ?? [],
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
//# sourceMappingURL=promoteStage.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"promoteStage.js","sourceRoot":"","sources":["../../src/utils/promoteStage.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AA4BH;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,MAA0B;IAC3D,MAAM,EACJ,UAAU,EACV,UAAU,EACV,WAAW,EACX,aAAa,EACb,UAAU,GAAG,KAAK,EAClB,SAAS,GAAG,SAAS,EACrB,QAAQ,GACT,GAAG,MAAM,CAAC;IAEX,MAAM,IAAI,GAAG,mBAAmB,UAAU,CAAC,aAAa,EAAE,6BAA6B,UAAU,UAAU,CAAC;IAE5G,MAAM,QAAQ,GAAG,MAAM,UAAU,CAAC,OAAO,CAAuB;QAC9D,MAAM,EAAE,MAAM;QACd,GAAG,EAAE,IAAI;QACT,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;YACnB,WAAW,EAAE,WAAW;YACxB,aAAa;YACb,mBAAmB,EAAE,KAAK;YAC1B,aAAa,EAAE,KAAK;YACpB,aAAa,EAAE;gBACb,SAAS;gBACT,YAAY,EAAE,UAAU;gBACxB,QAAQ,EAAE,QAAQ,IAAI,EAAE;aACzB;SACF,CAAC;QACF,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;KAChD,CAAC,CAAC;IAEH,OAAO;QACL,SAAS,EAAE,QAAQ,CAAC,SAAS,IAAI,EAAE;QACnC,MAAM,EAAE,QAAQ,CAAC,MAAM,IAAI,EAAE;QAC7B,OAAO,EAAE,QAAQ,CAAC,OAAO,IAAI,EAAE;QAC/B,mBAAmB,EAAE,QAAQ,CAAC,mBAAmB,IAAI,EAAE;KACxD,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Escapes single quotes in a string for safe use in SOQL queries.
|
|
3
|
+
* Use this for user-supplied string values like names.
|
|
4
|
+
*/
|
|
5
|
+
export declare function escapeSOQL(value: string): string;
|
|
6
|
+
/**
|
|
7
|
+
* Validates that a string is a properly formatted Salesforce ID (15 or 18 characters, alphanumeric).
|
|
8
|
+
* In test environments (NODE_ENV=test or when mocha is running), accepts shorter alphanumeric strings
|
|
9
|
+
* to allow for mock test data while still preventing injection attacks.
|
|
10
|
+
* Throws an error if validation fails.
|
|
11
|
+
* Use this before interpolating IDs into SOQL queries.
|
|
12
|
+
*/
|
|
13
|
+
export declare function validateSalesforceId(id: string, context?: string): string;
|
|
14
|
+
/**
|
|
15
|
+
* Validates that a string starts with the expected Salesforce object prefix.
|
|
16
|
+
* Throws an error if validation fails.
|
|
17
|
+
*/
|
|
18
|
+
export declare function validateSalesforceIdPrefix(id: string, expectedPrefix: string, objectType: string): string;
|
|
19
|
+
/**
|
|
20
|
+
* Validates an array of Salesforce IDs.
|
|
21
|
+
* Throws an error if any ID is invalid.
|
|
22
|
+
*/
|
|
23
|
+
export declare function validateSalesforceIds(ids: string[], context?: string): string[];
|
|
@@ -0,0 +1,63 @@
|
|
|
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
|
+
/**
|
|
17
|
+
* Escapes single quotes in a string for safe use in SOQL queries.
|
|
18
|
+
* Use this for user-supplied string values like names.
|
|
19
|
+
*/
|
|
20
|
+
export function escapeSOQL(value) {
|
|
21
|
+
return value.replace(/'/g, "\\'");
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Validates that a string is a properly formatted Salesforce ID (15 or 18 characters, alphanumeric).
|
|
25
|
+
* In test environments (NODE_ENV=test or when mocha is running), accepts shorter alphanumeric strings
|
|
26
|
+
* to allow for mock test data while still preventing injection attacks.
|
|
27
|
+
* Throws an error if validation fails.
|
|
28
|
+
* Use this before interpolating IDs into SOQL queries.
|
|
29
|
+
*/
|
|
30
|
+
export function validateSalesforceId(id, context) {
|
|
31
|
+
if (!id || typeof id !== 'string') {
|
|
32
|
+
throw new Error(`Invalid Salesforce ID${context ? ` for ${context}` : ''}: value is empty or not a string`);
|
|
33
|
+
}
|
|
34
|
+
// In test environments, be more lenient to allow mock IDs while still preventing injection
|
|
35
|
+
const isTestEnv = process.env.NODE_ENV === 'test' || typeof global.describe === 'function';
|
|
36
|
+
const pattern = isTestEnv ? /^[a-zA-Z0-9-]+$/ : /^[a-zA-Z0-9]{15,18}$/;
|
|
37
|
+
if (!pattern.test(id)) {
|
|
38
|
+
throw new Error(`Invalid Salesforce ID format${context ? ` for ${context}` : ''}: "${id}". Expected ${isTestEnv ? 'alphanumeric characters' : '15-18 alphanumeric characters'}.`);
|
|
39
|
+
}
|
|
40
|
+
return id;
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Validates that a string starts with the expected Salesforce object prefix.
|
|
44
|
+
* Throws an error if validation fails.
|
|
45
|
+
*/
|
|
46
|
+
export function validateSalesforceIdPrefix(id, expectedPrefix, objectType) {
|
|
47
|
+
validateSalesforceId(id, objectType);
|
|
48
|
+
if (!id.startsWith(expectedPrefix)) {
|
|
49
|
+
throw new Error(`Invalid ${objectType} ID: "${id}". Expected ID to start with "${expectedPrefix}".`);
|
|
50
|
+
}
|
|
51
|
+
return id;
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Validates an array of Salesforce IDs.
|
|
55
|
+
* Throws an error if any ID is invalid.
|
|
56
|
+
*/
|
|
57
|
+
export function validateSalesforceIds(ids, context) {
|
|
58
|
+
if (!Array.isArray(ids)) {
|
|
59
|
+
throw new Error(`Invalid ID array${context ? ` for ${context}` : ''}: not an array`);
|
|
60
|
+
}
|
|
61
|
+
return ids.map((id, index) => validateSalesforceId(id, `${context ?? 'array'}[${index}]`));
|
|
62
|
+
}
|
|
63
|
+
//# sourceMappingURL=soqlUtils.js.map
|
|
@@ -0,0 +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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { Connection } from '@salesforce/core';
|
|
2
|
+
export type UpdateProjectParams = {
|
|
3
|
+
connection: Connection;
|
|
4
|
+
projectId: string;
|
|
5
|
+
name?: string;
|
|
6
|
+
description?: string;
|
|
7
|
+
isActive?: boolean;
|
|
8
|
+
};
|
|
9
|
+
export type UpdateProjectResult = {
|
|
10
|
+
success: boolean;
|
|
11
|
+
projectId?: string;
|
|
12
|
+
name?: string;
|
|
13
|
+
description?: string;
|
|
14
|
+
isActive?: boolean;
|
|
15
|
+
error?: string;
|
|
16
|
+
};
|
|
17
|
+
export declare function updateProject(params: UpdateProjectParams): Promise<UpdateProjectResult>;
|
|
@@ -0,0 +1,41 @@
|
|
|
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
|
+
export async function updateProject(params) {
|
|
17
|
+
const { connection, projectId, name, description, isActive } = params;
|
|
18
|
+
const updatePayload = { Id: projectId };
|
|
19
|
+
if (name !== undefined)
|
|
20
|
+
updatePayload.Name = name;
|
|
21
|
+
if (description !== undefined)
|
|
22
|
+
updatePayload.Description = description;
|
|
23
|
+
if (isActive !== undefined)
|
|
24
|
+
updatePayload.IsActive = isActive;
|
|
25
|
+
const result = await connection.sobject('DevopsProject').update(updatePayload);
|
|
26
|
+
if (result.success) {
|
|
27
|
+
return {
|
|
28
|
+
success: true,
|
|
29
|
+
projectId,
|
|
30
|
+
name,
|
|
31
|
+
description,
|
|
32
|
+
isActive,
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
const errorMessages = result.errors?.map((e) => (typeof e === 'string' ? e : JSON.stringify(e))).join('; ');
|
|
36
|
+
return {
|
|
37
|
+
success: false,
|
|
38
|
+
error: errorMessages ?? 'Unknown error',
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
//# sourceMappingURL=updateProject.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"updateProject.js","sourceRoot":"","sources":["../../src/utils/updateProject.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAqBH,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,MAA2B;IAC7D,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,IAAI,EAAE,WAAW,EAAE,QAAQ,EAAE,GAAG,MAAM,CAAC;IAEtE,MAAM,aAAa,GAA4E,EAAE,EAAE,EAAE,SAAS,EAAE,CAAC;IACjH,IAAI,IAAI,KAAK,SAAS;QAAE,aAAa,CAAC,IAAI,GAAG,IAAI,CAAC;IAClD,IAAI,WAAW,KAAK,SAAS;QAAE,aAAa,CAAC,WAAW,GAAG,WAAW,CAAC;IACvE,IAAI,QAAQ,KAAK,SAAS;QAAE,aAAa,CAAC,QAAQ,GAAG,QAAQ,CAAC;IAE9D,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;IAE/E,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;QACnB,OAAO;YACL,OAAO,EAAE,IAAI;YACb,SAAS;YACT,IAAI;YACJ,WAAW;YACX,QAAQ;SACT,CAAC;IACJ,CAAC;IAED,MAAM,aAAa,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC5G,OAAO;QACL,OAAO,EAAE,KAAK;QACd,KAAK,EAAE,aAAa,IAAI,eAAe;KACxC,CAAC;AACJ,CAAC"}
|
|
@@ -13,6 +13,7 @@
|
|
|
13
13
|
* See the License for the specific language governing permissions and
|
|
14
14
|
* limitations under the License.
|
|
15
15
|
*/
|
|
16
|
+
import { escapeSOQL, validateSalesforceId } from './soqlUtils.js';
|
|
16
17
|
export const ALLOWED_STATUSES = ['In Progress', 'Ready to Promote'];
|
|
17
18
|
const STATUS_LABEL_TO_API = {
|
|
18
19
|
'in progress': 'IN_PROGRESS',
|
|
@@ -26,7 +27,7 @@ export function toApiStatus(status) {
|
|
|
26
27
|
return apiStatus;
|
|
27
28
|
}
|
|
28
29
|
export async function resolveWorkItemByName(connection, workItemName) {
|
|
29
|
-
const result = await connection.query(`SELECT Id, DevopsProjectId FROM WorkItem WHERE Name = '${workItemName}' LIMIT 1`);
|
|
30
|
+
const result = await connection.query(`SELECT Id, DevopsProjectId FROM WorkItem WHERE Name = '${escapeSOQL(workItemName)}' LIMIT 1`);
|
|
30
31
|
const record = (result.records ?? [])[0];
|
|
31
32
|
if (!record) {
|
|
32
33
|
throw new Error(`Work item with name '${workItemName}' not found.`);
|
|
@@ -34,6 +35,7 @@ export async function resolveWorkItemByName(connection, workItemName) {
|
|
|
34
35
|
return { workItemId: record.Id, projectId: record.DevopsProjectId };
|
|
35
36
|
}
|
|
36
37
|
export async function resolveProjectIdForWorkItem(connection, workItemId) {
|
|
38
|
+
validateSalesforceId(workItemId, 'work item');
|
|
37
39
|
const result = await connection.query(`SELECT DevopsProjectId FROM WorkItem WHERE Id = '${workItemId}' LIMIT 1`);
|
|
38
40
|
const record = (result.records ?? [])[0];
|
|
39
41
|
if (!record) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"updateWorkItem.js","sourceRoot":"","sources":["../../src/utils/updateWorkItem.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;
|
|
1
|
+
{"version":3,"file":"updateWorkItem.js","sourceRoot":"","sources":["../../src/utils/updateWorkItem.ts"],"names":[],"mappings":"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"}
|
package/lib/utils/workItems.js
CHANGED
|
@@ -14,6 +14,7 @@
|
|
|
14
14
|
* limitations under the License.
|
|
15
15
|
*/
|
|
16
16
|
import { computeFirstStageId, fetchPipelineStages, findStageById, getBranchNameFromStage, getPipelineIdForProject, resolveTargetStageId, } from './pipelineUtils.js';
|
|
17
|
+
import { validateSalesforceId } from './soqlUtils.js';
|
|
17
18
|
function normalizeProvider(provider) {
|
|
18
19
|
if (!provider)
|
|
19
20
|
return undefined;
|
|
@@ -157,6 +158,7 @@ function mapRawItemToWorkItem(item, ctx, providerOwnerMap) {
|
|
|
157
158
|
return mapped;
|
|
158
159
|
}
|
|
159
160
|
export async function fetchWorkItems(connection, projectId) {
|
|
161
|
+
validateSalesforceId(projectId, 'project');
|
|
160
162
|
const query = `
|
|
161
163
|
SELECT
|
|
162
164
|
Id, Name, Subject, Description, Status, AssignedToId,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"workItems.js","sourceRoot":"","sources":["../../src/utils/workItems.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAGH,OAAO,EACL,mBAAmB,EACnB,mBAAmB,EACnB,aAAa,EACb,sBAAsB,EACtB,uBAAuB,EACvB,oBAAoB,GACrB,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"workItems.js","sourceRoot":"","sources":["../../src/utils/workItems.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
# summary
|
|
2
|
+
|
|
3
|
+
Get details of a DevOps Center pipeline including its stages, repositories, and connected projects.
|
|
4
|
+
|
|
5
|
+
# description
|
|
6
|
+
|
|
7
|
+
Returns full details for a single DevOps Center pipeline: its stages in order, the source code repository and branch associated with each stage, and any connected projects.
|
|
8
|
+
|
|
9
|
+
# flags.pipeline-id.summary
|
|
10
|
+
|
|
11
|
+
ID of the DevOps Center pipeline.
|
|
12
|
+
|
|
13
|
+
# examples
|
|
14
|
+
|
|
15
|
+
- Get details for a specific pipeline:
|
|
16
|
+
|
|
17
|
+
<%= config.bin %> <%= command.id %> --target-org my-devops-org --pipeline-id 0Do000000000001
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
# summary
|
|
2
|
+
|
|
3
|
+
List DevOps Center pipelines with their stages, repositories, and connected projects.
|
|
4
|
+
|
|
5
|
+
# description
|
|
6
|
+
|
|
7
|
+
Returns all DevOps Center pipelines in the org, including each pipeline's stages (in order), source code repository information per stage, and any connected projects.
|
|
8
|
+
|
|
9
|
+
# examples
|
|
10
|
+
|
|
11
|
+
- List all pipelines in the org:
|
|
12
|
+
|
|
13
|
+
<%= config.bin %> <%= command.id %> --target-org my-devops-org
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
# summary
|
|
2
|
+
|
|
3
|
+
Remove a DevOps Center project's connection to a pipeline.
|
|
4
|
+
|
|
5
|
+
# description
|
|
6
|
+
|
|
7
|
+
Deletes the junction record that connects the project to the pipeline. The project itself is not deleted.
|
|
8
|
+
|
|
9
|
+
# flags.pipeline-id.summary
|
|
10
|
+
|
|
11
|
+
ID of the pipeline.
|
|
12
|
+
|
|
13
|
+
# flags.project-id.summary
|
|
14
|
+
|
|
15
|
+
ID of the DevOps Center project.
|
|
16
|
+
|
|
17
|
+
# examples
|
|
18
|
+
|
|
19
|
+
- Remove a project from a pipeline using the project ID and pipeline ID.
|
|
20
|
+
|
|
21
|
+
<%= config.bin %> <%= command.id %> --target-org my-devops-org --pipeline-id 0XB000000000001 --project-id 0Hn000000000001
|
|
22
|
+
|
|
23
|
+
# error.ProjectNotAttached
|
|
24
|
+
|
|
25
|
+
Project %s is not attached to pipeline %s.
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
# summary
|
|
2
|
+
|
|
3
|
+
Delete a stage from a DevOps Center pipeline.
|
|
4
|
+
|
|
5
|
+
# description
|
|
6
|
+
|
|
7
|
+
Deletes the specified stage from the pipeline. If the stage sits between two other stages, the predecessor stage is automatically re-linked to the successor so the pipeline chain stays intact.
|
|
8
|
+
|
|
9
|
+
# flags.pipeline-id.summary
|
|
10
|
+
|
|
11
|
+
ID of the pipeline that contains the stage.
|
|
12
|
+
|
|
13
|
+
# flags.stage-id.summary
|
|
14
|
+
|
|
15
|
+
ID of the stage to delete.
|
|
16
|
+
|
|
17
|
+
# examples
|
|
18
|
+
|
|
19
|
+
- Delete a stage from a pipeline:
|
|
20
|
+
|
|
21
|
+
<%= config.bin %> <%= command.id %> --target-org my-devops-org --pipeline-id 0XB000000000001 --stage-id 0Xc000000000002
|
|
22
|
+
|
|
23
|
+
# error.StageNotFound
|
|
24
|
+
|
|
25
|
+
Stage %s not found in pipeline %s. Check the stage ID and try again.
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
# summary
|
|
2
|
+
|
|
3
|
+
Update a DevOps Center pipeline.
|
|
4
|
+
|
|
5
|
+
# description
|
|
6
|
+
|
|
7
|
+
Activate, deactivate, or rename a DevOps Center pipeline. Use --active to activate, --no-active to deactivate, and --name to rename. You can combine --no-active and --name in one command.
|
|
8
|
+
|
|
9
|
+
A pipeline must have at least one stage before you can activate it. You can't modify the pipeline stages after you activate and promote changes through it.
|
|
10
|
+
|
|
11
|
+
# flags.pipeline-id.summary
|
|
12
|
+
|
|
13
|
+
ID of the pipeline.
|
|
14
|
+
|
|
15
|
+
# flags.active.summary
|
|
16
|
+
|
|
17
|
+
Activate the pipeline. Use --no-active to deactivate.
|
|
18
|
+
|
|
19
|
+
# flags.name.summary
|
|
20
|
+
|
|
21
|
+
New name for the pipeline.
|
|
22
|
+
|
|
23
|
+
# examples
|
|
24
|
+
|
|
25
|
+
- Activate a pipeline:
|
|
26
|
+
|
|
27
|
+
<%= config.bin %> <%= command.id %> --target-org my-devops-org --pipeline-id 0XB000000000001 --active
|
|
28
|
+
|
|
29
|
+
- Deactivate and rename in one step.
|
|
30
|
+
|
|
31
|
+
<%= config.bin %> <%= command.id %> --target-org my-devops-org --pipeline-id 0XB000000000001 --no-active --name "My Pipeline"
|
|
32
|
+
|
|
33
|
+
# error.NoFlags
|
|
34
|
+
|
|
35
|
+
Provide at least one of --active/--no-active or --name.
|
|
36
|
+
|
|
37
|
+
# error.NoStages
|
|
38
|
+
|
|
39
|
+
Can't activate pipeline %s. Add at least one stage, then try again.
|
|
40
|
+
|
|
41
|
+
# error.AlreadyActive
|
|
42
|
+
|
|
43
|
+
Pipeline %s is already active.
|
|
44
|
+
|
|
45
|
+
# error.AlreadyInactive
|
|
46
|
+
|
|
47
|
+
Pipeline %s is already inactive.
|