@salesforce/plugin-devops-center 2.2.0 → 2.3.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 +45 -36
- package/lib/commands/devops/pipeline/create.js +6 -0
- package/lib/commands/devops/pipeline/create.js.map +1 -1
- package/lib/commands/devops/promote.d.ts +8 -0
- package/lib/commands/devops/promote.js +31 -1
- package/lib/commands/devops/promote.js.map +1 -1
- package/lib/commands/devops/stage/branch/add.d.ts +15 -0
- package/lib/commands/devops/stage/branch/add.js +48 -1
- package/lib/commands/devops/stage/branch/add.js.map +1 -1
- package/lib/commands/devops/stage/environment/add.d.ts +15 -0
- package/lib/commands/devops/stage/environment/add.js +51 -1
- package/lib/commands/devops/stage/environment/add.js.map +1 -1
- package/lib/commands/devops/work-item/create.js +1 -0
- package/lib/commands/devops/work-item/create.js.map +1 -1
- package/lib/commands/devops/work-item/list.js +2 -1
- package/lib/commands/devops/work-item/list.js.map +1 -1
- package/lib/utils/addStageBranch.d.ts +20 -0
- package/lib/utils/addStageBranch.js +33 -0
- package/lib/utils/addStageBranch.js.map +1 -1
- package/lib/utils/addStageEnvironment.d.ts +21 -0
- package/lib/utils/addStageEnvironment.js +34 -0
- package/lib/utils/addStageEnvironment.js.map +1 -1
- package/lib/utils/createPipeline.d.ts +5 -0
- package/lib/utils/createPipeline.js +37 -0
- package/lib/utils/createPipeline.js.map +1 -1
- package/lib/utils/createWorkItem.js +22 -18
- package/lib/utils/createWorkItem.js.map +1 -1
- package/lib/utils/promoteStage.d.ts +20 -0
- package/lib/utils/promoteStage.js +25 -0
- package/lib/utils/promoteStage.js.map +1 -1
- package/lib/utils/updateWorkItem.d.ts +22 -2
- package/lib/utils/updateWorkItem.js +98 -20
- package/lib/utils/updateWorkItem.js.map +1 -1
- package/lib/utils/workItems.js +7 -4
- package/lib/utils/workItems.js.map +1 -1
- package/messages/devops.promote.md +12 -0
- package/messages/devops.stage.branch.add.md +17 -1
- package/messages/devops.stage.environment.add.md +16 -0
- package/npm-shrinkwrap.json +2 -2
- package/oclif.manifest.json +20 -2
- package/package.json +3 -3
- package/schemas/devops-pipeline-create.json +19 -0
|
@@ -13,6 +13,21 @@ export default class DevopsStageEnvironmentAdd extends SfCommand<AddStageEnviron
|
|
|
13
13
|
'environment-name': import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
|
|
14
14
|
'org-type': import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
|
|
15
15
|
'no-browser': import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
16
|
+
force: import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
16
17
|
};
|
|
17
18
|
run(): Promise<AddStageEnvironmentResult>;
|
|
19
|
+
/**
|
|
20
|
+
* A stage holds only one environment (DevopsPipelineStage.DevOpsEnvironmentId). Adding a new one
|
|
21
|
+
* re-points the lookup and orphans the old DevopsEnvironment record, so block by default and
|
|
22
|
+
* require --force to replace it. Returns the existing environment (when present) so the caller can
|
|
23
|
+
* remove the orphaned record after the new environment is associated.
|
|
24
|
+
*/
|
|
25
|
+
private guardExistingEnvironment;
|
|
26
|
+
/**
|
|
27
|
+
* Removes the environment record the stage was re-pointed away from, unless another stage still
|
|
28
|
+
* references it. Best-effort: a cleanup failure is surfaced as a warning and does not fail the
|
|
29
|
+
* command, since the new environment has already been associated successfully.
|
|
30
|
+
*/
|
|
31
|
+
private cleanupReplacedEnvironment;
|
|
32
|
+
private logResult;
|
|
18
33
|
}
|
|
@@ -16,7 +16,7 @@
|
|
|
16
16
|
import { execFile } from 'node:child_process';
|
|
17
17
|
import { Messages } from '@salesforce/core';
|
|
18
18
|
import { SfCommand, Flags } from '@salesforce/sf-plugins-core';
|
|
19
|
-
import { addStageEnvironment } from '../../../../utils/addStageEnvironment.js';
|
|
19
|
+
import { addStageEnvironment, getStageEnvironment, deleteOrphanedEnvironment, } from '../../../../utils/addStageEnvironment.js';
|
|
20
20
|
import { fetchPipelineStages } from '../../../../utils/pipelineUtils.js';
|
|
21
21
|
import { validateSalesforceId } from '../../../../utils/soqlUtils.js';
|
|
22
22
|
Messages.importMessagesDirectoryFromMetaUrl(import.meta.url);
|
|
@@ -93,6 +93,10 @@ export default class DevopsStageEnvironmentAdd extends SfCommand {
|
|
|
93
93
|
summary: messages.getMessage('flags.no-browser.summary'),
|
|
94
94
|
default: false,
|
|
95
95
|
}),
|
|
96
|
+
force: Flags.boolean({
|
|
97
|
+
summary: messages.getMessage('flags.force.summary'),
|
|
98
|
+
default: false,
|
|
99
|
+
}),
|
|
96
100
|
};
|
|
97
101
|
async run() {
|
|
98
102
|
const { flags } = await this.parse(DevopsStageEnvironmentAdd);
|
|
@@ -123,6 +127,7 @@ export default class DevopsStageEnvironmentAdd extends SfCommand {
|
|
|
123
127
|
if (pipelineRecord?.IsActive) {
|
|
124
128
|
this.error(messages.getMessage('error.PipelineAlreadyActive', [pipelineId]));
|
|
125
129
|
}
|
|
130
|
+
const existingEnvironment = await this.guardExistingEnvironment(connection, stageId, flags.force);
|
|
126
131
|
let result;
|
|
127
132
|
try {
|
|
128
133
|
result = await addStageEnvironment({
|
|
@@ -157,6 +162,51 @@ export default class DevopsStageEnvironmentAdd extends SfCommand {
|
|
|
157
162
|
finally {
|
|
158
163
|
this.spinner.stop();
|
|
159
164
|
}
|
|
165
|
+
if (existingEnvironment && result.success) {
|
|
166
|
+
await this.cleanupReplacedEnvironment(connection, existingEnvironment);
|
|
167
|
+
}
|
|
168
|
+
return this.logResult(result, stageId, orgType, pipelineId);
|
|
169
|
+
}
|
|
170
|
+
/**
|
|
171
|
+
* A stage holds only one environment (DevopsPipelineStage.DevOpsEnvironmentId). Adding a new one
|
|
172
|
+
* re-points the lookup and orphans the old DevopsEnvironment record, so block by default and
|
|
173
|
+
* require --force to replace it. Returns the existing environment (when present) so the caller can
|
|
174
|
+
* remove the orphaned record after the new environment is associated.
|
|
175
|
+
*/
|
|
176
|
+
async guardExistingEnvironment(connection, stageId, force) {
|
|
177
|
+
const existingEnvironment = await getStageEnvironment(connection, stageId);
|
|
178
|
+
if (!existingEnvironment) {
|
|
179
|
+
return undefined;
|
|
180
|
+
}
|
|
181
|
+
if (!force) {
|
|
182
|
+
this.error(messages.getMessage('error.EnvironmentAlreadyExists', [
|
|
183
|
+
stageId,
|
|
184
|
+
existingEnvironment.environmentName ?? existingEnvironment.environmentId,
|
|
185
|
+
existingEnvironment.environmentId,
|
|
186
|
+
this.config.bin,
|
|
187
|
+
]));
|
|
188
|
+
}
|
|
189
|
+
return existingEnvironment;
|
|
190
|
+
}
|
|
191
|
+
/**
|
|
192
|
+
* Removes the environment record the stage was re-pointed away from, unless another stage still
|
|
193
|
+
* references it. Best-effort: a cleanup failure is surfaced as a warning and does not fail the
|
|
194
|
+
* command, since the new environment has already been associated successfully.
|
|
195
|
+
*/
|
|
196
|
+
async cleanupReplacedEnvironment(connection, existingEnvironment) {
|
|
197
|
+
try {
|
|
198
|
+
const deleted = await deleteOrphanedEnvironment(connection, existingEnvironment.environmentId);
|
|
199
|
+
if (deleted) {
|
|
200
|
+
this.log(messages.getMessage('info.ReplacedEnvironmentRemoved', [
|
|
201
|
+
existingEnvironment.environmentName ?? existingEnvironment.environmentId,
|
|
202
|
+
]));
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
catch {
|
|
206
|
+
this.warn(messages.getMessage('warn.ReplacedEnvironmentCleanupFailed', [existingEnvironment.environmentId]));
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
logResult(result, stageId, orgType, pipelineId) {
|
|
160
210
|
if (result.success) {
|
|
161
211
|
this.log(messages.getMessage('info.Success'));
|
|
162
212
|
this.log(` Stage ID: ${stageId}`);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"add.js","sourceRoot":"","sources":["../../../../../src/commands/devops/stage/environment/add.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,
|
|
1
|
+
{"version":3,"file":"add.js","sourceRoot":"","sources":["../../../../../src/commands/devops/stage/environment/add.ts"],"names":[],"mappings":"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"}
|
|
@@ -65,6 +65,7 @@ export default class DevopsWorkItemCreate extends SfCommand {
|
|
|
65
65
|
if (result.success) {
|
|
66
66
|
this.log(`Successfully created work item: ${result.workItemName ?? result.workItemId ?? ''}`);
|
|
67
67
|
this.log(` ID: ${result.workItemId ?? ''}`);
|
|
68
|
+
this.log(` Name: ${result.workItemName ?? ''}`);
|
|
68
69
|
this.log(` Subject: ${result.subject ?? ''}`);
|
|
69
70
|
}
|
|
70
71
|
else {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"create.js","sourceRoot":"","sources":["../../../../src/commands/devops/work-item/create.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"create.js","sourceRoot":"","sources":["../../../../src/commands/devops/work-item/create.ts"],"names":[],"mappings":"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"}
|
|
@@ -54,6 +54,7 @@ export default class DevopsWorkItemList extends SfCommand {
|
|
|
54
54
|
}
|
|
55
55
|
else {
|
|
56
56
|
const tableData = workItems.map((wi) => ({
|
|
57
|
+
ID: wi.id,
|
|
57
58
|
Name: wi.name,
|
|
58
59
|
Subject: wi.subject ?? '',
|
|
59
60
|
Status: wi.status,
|
|
@@ -63,7 +64,7 @@ export default class DevopsWorkItemList extends SfCommand {
|
|
|
63
64
|
this.styledHeader('DevOps Center Work Items');
|
|
64
65
|
this.table({
|
|
65
66
|
data: tableData,
|
|
66
|
-
columns: ['Name', 'Subject', 'Status', 'Branch', 'Target Branch'],
|
|
67
|
+
columns: ['ID', 'Name', 'Subject', 'Status', 'Branch', 'Target Branch'],
|
|
67
68
|
});
|
|
68
69
|
}
|
|
69
70
|
return { workItems };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"list.js","sourceRoot":"","sources":["../../../../src/commands/devops/work-item/list.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"list.js","sourceRoot":"","sources":["../../../../src/commands/devops/work-item/list.ts"],"names":[],"mappings":"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"}
|
|
@@ -6,6 +6,26 @@ export type AddStageBranchParams = {
|
|
|
6
6
|
branchName: string;
|
|
7
7
|
createVcsBranch: boolean;
|
|
8
8
|
};
|
|
9
|
+
export type ExistingStageBranch = {
|
|
10
|
+
branchId: string;
|
|
11
|
+
branchName?: string;
|
|
12
|
+
};
|
|
13
|
+
/**
|
|
14
|
+
* Returns the branch currently associated with a pipeline stage, if any.
|
|
15
|
+
*
|
|
16
|
+
* A stage references its branch via DevopsPipelineStage.SourceCodeRepositoryBranchId. Adding a new
|
|
17
|
+
* branch re-points that lookup, so callers must check for an existing branch first to avoid
|
|
18
|
+
* orphaning the old SourceCodeRepositoryBranch record.
|
|
19
|
+
*/
|
|
20
|
+
export declare function getStageBranch(connection: Connection, stageId: string): Promise<ExistingStageBranch | undefined>;
|
|
21
|
+
/**
|
|
22
|
+
* Deletes a SourceCodeRepositoryBranch record only when no pipeline stage still references it.
|
|
23
|
+
* Returns true when the record was deleted, false when it is still referenced (left intact).
|
|
24
|
+
*
|
|
25
|
+
* Used to clean up the branch a stage was re-pointed away from during a --force replace, so the old
|
|
26
|
+
* record isn't orphaned in the org. The reference check keeps a branch shared by another stage safe.
|
|
27
|
+
*/
|
|
28
|
+
export declare function deleteOrphanedBranch(connection: Connection, branchId: string): Promise<boolean>;
|
|
9
29
|
export type AddStageBranchResult = {
|
|
10
30
|
success: boolean;
|
|
11
31
|
stageId: string;
|
|
@@ -13,6 +13,39 @@
|
|
|
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';
|
|
17
|
+
/**
|
|
18
|
+
* Returns the branch currently associated with a pipeline stage, if any.
|
|
19
|
+
*
|
|
20
|
+
* A stage references its branch via DevopsPipelineStage.SourceCodeRepositoryBranchId. Adding a new
|
|
21
|
+
* branch re-points that lookup, so callers must check for an existing branch first to avoid
|
|
22
|
+
* orphaning the old SourceCodeRepositoryBranch record.
|
|
23
|
+
*/
|
|
24
|
+
export async function getStageBranch(connection, stageId) {
|
|
25
|
+
validateSalesforceId(stageId, 'stage');
|
|
26
|
+
const result = await connection.query(`SELECT SourceCodeRepositoryBranchId, SourceCodeRepositoryBranch.Name FROM DevopsPipelineStage WHERE Id = '${stageId}' LIMIT 1`);
|
|
27
|
+
const record = (result.records ?? [])[0];
|
|
28
|
+
if (!record?.SourceCodeRepositoryBranchId) {
|
|
29
|
+
return undefined;
|
|
30
|
+
}
|
|
31
|
+
return { branchId: record.SourceCodeRepositoryBranchId, branchName: record.SourceCodeRepositoryBranch?.Name };
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Deletes a SourceCodeRepositoryBranch record only when no pipeline stage still references it.
|
|
35
|
+
* Returns true when the record was deleted, false when it is still referenced (left intact).
|
|
36
|
+
*
|
|
37
|
+
* Used to clean up the branch a stage was re-pointed away from during a --force replace, so the old
|
|
38
|
+
* record isn't orphaned in the org. The reference check keeps a branch shared by another stage safe.
|
|
39
|
+
*/
|
|
40
|
+
export async function deleteOrphanedBranch(connection, branchId) {
|
|
41
|
+
validateSalesforceId(branchId, 'branch');
|
|
42
|
+
const refs = await connection.query(`SELECT Id FROM DevopsPipelineStage WHERE SourceCodeRepositoryBranchId = '${branchId}' LIMIT 1`);
|
|
43
|
+
if ((refs.records ?? []).length > 0) {
|
|
44
|
+
return false;
|
|
45
|
+
}
|
|
46
|
+
await connection.sobject('SourceCodeRepositoryBranch').delete(branchId);
|
|
47
|
+
return true;
|
|
48
|
+
}
|
|
16
49
|
/**
|
|
17
50
|
* Associates a branch with a pipeline stage via the Connect API.
|
|
18
51
|
* PATCH /services/data/v{version}/connect/devops/pipelines/{pipelineId}/stages/{stageId}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"addStageBranch.js","sourceRoot":"","sources":["../../src/utils/addStageBranch.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;
|
|
1
|
+
{"version":3,"file":"addStageBranch.js","sourceRoot":"","sources":["../../src/utils/addStageBranch.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAGH,OAAO,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AAetD;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,UAAsB,EACtB,OAAe;IAEf,oBAAoB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IACvC,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,KAAK,CAInC,6GAA6G,OAAO,WAAW,CAChI,CAAC;IACF,MAAM,MAAM,GAAG,CAAC,MAAM,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IACzC,IAAI,CAAC,MAAM,EAAE,4BAA4B,EAAE,CAAC;QAC1C,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,OAAO,EAAE,QAAQ,EAAE,MAAM,CAAC,4BAA4B,EAAE,UAAU,EAAE,MAAM,CAAC,0BAA0B,EAAE,IAAI,EAAE,CAAC;AAChH,CAAC;AAED;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,oBAAoB,CAAC,UAAsB,EAAE,QAAgB;IACjF,oBAAoB,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;IACzC,MAAM,IAAI,GAAG,MAAM,UAAU,CAAC,KAAK,CACjC,4EAA4E,QAAQ,WAAW,CAChG,CAAC;IACF,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACpC,OAAO,KAAK,CAAC;IACf,CAAC;IACD,MAAM,UAAU,CAAC,OAAO,CAAC,4BAA4B,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IACxE,OAAO,IAAI,CAAC;AACd,CAAC;AAmBD;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,MAA4B;IAC/D,MAAM,EAAE,UAAU,EAAE,UAAU,EAAE,OAAO,EAAE,UAAU,EAAE,eAAe,EAAE,GAAG,MAAM,CAAC;IAEhF,MAAM,IAAI,GAAG,mBAAmB,UAAU,CAAC,aAAa,EAAE,6BAA6B,UAAU,WAAW,OAAO,EAAE,CAAC;IAEtH,MAAM,IAAI,GAAG,MAAM,UAAU,CAAC,OAAO,CAA6B;QAChE,MAAM,EAAE,OAAO;QACf,GAAG,EAAE,IAAI;QACT,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;YACnB,SAAS,EAAE,UAAU;YACrB,eAAe,EAAE,MAAM,CAAC,eAAe,CAAC;SACzC,CAAC;QACF,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;KAChD,CAAC,CAAC;IAEH,IAAI,IAAI,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;QAC7B,OAAO;YACL,OAAO,EAAE,KAAK;YACd,OAAO;YACP,KAAK,EAAE,IAAI,CAAC,OAAO,IAAI,uCAAuC;SAC/D,CAAC;IACJ,CAAC;IAED,OAAO;QACL,OAAO,EAAE,IAAI;QACb,OAAO;QACP,UAAU;QACV,aAAa,EAAE,eAAe;QAC9B,YAAY,EAAE,IAAI,CAAC,YAAY;QAC/B,UAAU;KACX,CAAC;AACJ,CAAC"}
|
|
@@ -1,5 +1,26 @@
|
|
|
1
1
|
import { Connection } from '@salesforce/core';
|
|
2
2
|
export type OrgType = 'Production' | 'Sandbox';
|
|
3
|
+
export type ExistingStageEnvironment = {
|
|
4
|
+
environmentId: string;
|
|
5
|
+
environmentName?: string;
|
|
6
|
+
};
|
|
7
|
+
/**
|
|
8
|
+
* Returns the environment currently associated with a pipeline stage, if any.
|
|
9
|
+
*
|
|
10
|
+
* A stage references its environment via DevopsPipelineStage.DevOpsEnvironmentId. Adding a new
|
|
11
|
+
* environment re-points that lookup, so callers must check for an existing environment first to
|
|
12
|
+
* avoid orphaning the old DevopsEnvironment record.
|
|
13
|
+
*/
|
|
14
|
+
export declare function getStageEnvironment(connection: Connection, stageId: string): Promise<ExistingStageEnvironment | undefined>;
|
|
15
|
+
/**
|
|
16
|
+
* Deletes a DevopsEnvironment record only when no pipeline stage still references it.
|
|
17
|
+
* Returns true when the record was deleted, false when it is still referenced (left intact).
|
|
18
|
+
*
|
|
19
|
+
* Used to clean up the environment a stage was re-pointed away from during a --force replace, so the
|
|
20
|
+
* old record isn't orphaned in the org. The reference check keeps an environment shared by another
|
|
21
|
+
* stage safe.
|
|
22
|
+
*/
|
|
23
|
+
export declare function deleteOrphanedEnvironment(connection: Connection, environmentId: string): Promise<boolean>;
|
|
3
24
|
export declare const POLL_INTERVAL_MS = 3000;
|
|
4
25
|
export declare const POLL_TIMEOUT_MS: number;
|
|
5
26
|
export type AddStageEnvironmentParams = {
|
|
@@ -13,6 +13,40 @@
|
|
|
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';
|
|
17
|
+
/**
|
|
18
|
+
* Returns the environment currently associated with a pipeline stage, if any.
|
|
19
|
+
*
|
|
20
|
+
* A stage references its environment via DevopsPipelineStage.DevOpsEnvironmentId. Adding a new
|
|
21
|
+
* environment re-points that lookup, so callers must check for an existing environment first to
|
|
22
|
+
* avoid orphaning the old DevopsEnvironment record.
|
|
23
|
+
*/
|
|
24
|
+
export async function getStageEnvironment(connection, stageId) {
|
|
25
|
+
validateSalesforceId(stageId, 'stage');
|
|
26
|
+
const result = await connection.query(`SELECT DevOpsEnvironmentId, DevOpsEnvironment.Name FROM DevopsPipelineStage WHERE Id = '${stageId}' LIMIT 1`);
|
|
27
|
+
const record = (result.records ?? [])[0];
|
|
28
|
+
if (!record?.DevOpsEnvironmentId) {
|
|
29
|
+
return undefined;
|
|
30
|
+
}
|
|
31
|
+
return { environmentId: record.DevOpsEnvironmentId, environmentName: record.DevOpsEnvironment?.Name };
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Deletes a DevopsEnvironment record only when no pipeline stage still references it.
|
|
35
|
+
* Returns true when the record was deleted, false when it is still referenced (left intact).
|
|
36
|
+
*
|
|
37
|
+
* Used to clean up the environment a stage was re-pointed away from during a --force replace, so the
|
|
38
|
+
* old record isn't orphaned in the org. The reference check keeps an environment shared by another
|
|
39
|
+
* stage safe.
|
|
40
|
+
*/
|
|
41
|
+
export async function deleteOrphanedEnvironment(connection, environmentId) {
|
|
42
|
+
validateSalesforceId(environmentId, 'environment');
|
|
43
|
+
const refs = await connection.query(`SELECT Id FROM DevopsPipelineStage WHERE DevOpsEnvironmentId = '${environmentId}' LIMIT 1`);
|
|
44
|
+
if ((refs.records ?? []).length > 0) {
|
|
45
|
+
return false;
|
|
46
|
+
}
|
|
47
|
+
await connection.sobject('DevopsEnvironment').delete(environmentId);
|
|
48
|
+
return true;
|
|
49
|
+
}
|
|
16
50
|
const ORG_TYPE_API_MAP = {
|
|
17
51
|
Production: 'PRODUCTION',
|
|
18
52
|
Sandbox: 'SANDBOX',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"addStageEnvironment.js","sourceRoot":"","sources":["../../src/utils/addStageEnvironment.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;
|
|
1
|
+
{"version":3,"file":"addStageEnvironment.js","sourceRoot":"","sources":["../../src/utils/addStageEnvironment.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,6 +4,10 @@ export type RepoInfo = {
|
|
|
4
4
|
repoType: string;
|
|
5
5
|
created: boolean;
|
|
6
6
|
};
|
|
7
|
+
export type PipelineStageInfo = {
|
|
8
|
+
id: string;
|
|
9
|
+
name?: string;
|
|
10
|
+
};
|
|
7
11
|
export type CreatePipelineParams = {
|
|
8
12
|
connection: Connection;
|
|
9
13
|
name: string;
|
|
@@ -22,6 +26,7 @@ export type CreatePipelineResult = {
|
|
|
22
26
|
name?: string;
|
|
23
27
|
status?: string;
|
|
24
28
|
repository?: RepoInfo;
|
|
29
|
+
stages?: PipelineStageInfo[];
|
|
25
30
|
error?: string;
|
|
26
31
|
};
|
|
27
32
|
/**
|
|
@@ -14,6 +14,7 @@
|
|
|
14
14
|
* limitations under the License.
|
|
15
15
|
*/
|
|
16
16
|
import { execSync } from 'node:child_process';
|
|
17
|
+
import { fetchPipelineStages, computeFirstStageId } from './pipelineUtils.js';
|
|
17
18
|
const DEFAULT_STAGE_NAMES = ['Integration', 'UAT', 'Staging', 'Production'];
|
|
18
19
|
/**
|
|
19
20
|
* Detects repo type from a URL. Returns 'github' or 'bitbucket', or undefined.
|
|
@@ -130,6 +131,42 @@ export async function createPipeline(params) {
|
|
|
130
131
|
repoType,
|
|
131
132
|
created: createRepo ?? false,
|
|
132
133
|
},
|
|
134
|
+
stages: await fetchCreatedStages(connection, data.id),
|
|
133
135
|
};
|
|
134
136
|
}
|
|
137
|
+
/**
|
|
138
|
+
* Fetches the stages of a newly created pipeline, ordered along the promotion path.
|
|
139
|
+
* Best-effort: the pipeline already exists, so a failed lookup returns undefined
|
|
140
|
+
* rather than failing the create.
|
|
141
|
+
*/
|
|
142
|
+
async function fetchCreatedStages(connection, pipelineId) {
|
|
143
|
+
try {
|
|
144
|
+
const stages = await fetchPipelineStages(connection, pipelineId);
|
|
145
|
+
return orderStages(stages).map((s) => ({ id: s.Id, name: s.Name }));
|
|
146
|
+
}
|
|
147
|
+
catch {
|
|
148
|
+
return undefined;
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
/**
|
|
152
|
+
* Orders stages from the first stage following the NextStageId chain. Falls back to
|
|
153
|
+
* the original query order if the chain can't be resolved into a single sequence.
|
|
154
|
+
*/
|
|
155
|
+
function orderStages(stages) {
|
|
156
|
+
const firstId = computeFirstStageId(stages);
|
|
157
|
+
if (!firstId)
|
|
158
|
+
return stages;
|
|
159
|
+
const ordered = [];
|
|
160
|
+
const seen = new Set();
|
|
161
|
+
let currentId = firstId;
|
|
162
|
+
while (currentId && !seen.has(currentId)) {
|
|
163
|
+
const stage = stages.find((s) => s.Id === currentId);
|
|
164
|
+
if (!stage)
|
|
165
|
+
break;
|
|
166
|
+
ordered.push(stage);
|
|
167
|
+
seen.add(currentId);
|
|
168
|
+
currentId = stage.NextStageId ?? undefined;
|
|
169
|
+
}
|
|
170
|
+
return ordered.length === stages.length ? ordered : stages;
|
|
171
|
+
}
|
|
135
172
|
//# sourceMappingURL=createPipeline.js.map
|
|
@@ -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;
|
|
1
|
+
{"version":3,"file":"createPipeline.js","sourceRoot":"","sources":["../../src/utils/createPipeline.ts"],"names":[],"mappings":"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"}
|
|
@@ -31,28 +31,32 @@ export async function createWorkItem(params) {
|
|
|
31
31
|
const data = response ?? {};
|
|
32
32
|
return {
|
|
33
33
|
success: true,
|
|
34
|
-
workItemId: (data.id ?? data.Id),
|
|
35
|
-
workItemName: (data.name ?? data.Name),
|
|
34
|
+
workItemId: (data.workItemId ?? data.id ?? data.Id),
|
|
35
|
+
workItemName: (data.workItemName ?? data.name ?? data.Name),
|
|
36
36
|
subject: (data.subject ?? data.Subject ?? subject),
|
|
37
37
|
};
|
|
38
38
|
}
|
|
39
39
|
catch (error) {
|
|
40
|
-
|
|
41
|
-
const data = (err.response?.data ?? err.body ?? err);
|
|
42
|
-
const message = (typeof data === 'object' &&
|
|
43
|
-
data !== null &&
|
|
44
|
-
(data.message ??
|
|
45
|
-
data.error ??
|
|
46
|
-
data.errorDescription)) ||
|
|
47
|
-
err.message ||
|
|
48
|
-
'Unknown error';
|
|
49
|
-
const details = typeof data === 'object' && data !== null && Array.isArray(data.body)
|
|
50
|
-
? data.body.join('; ')
|
|
51
|
-
: undefined;
|
|
52
|
-
return {
|
|
53
|
-
success: false,
|
|
54
|
-
error: details ? `${String(message)}: ${details}` : String(message),
|
|
55
|
-
};
|
|
40
|
+
return { success: false, error: parseErrorMessage(error) };
|
|
56
41
|
}
|
|
57
42
|
}
|
|
43
|
+
/**
|
|
44
|
+
* Extracts a human-readable error message from a failed work item request,
|
|
45
|
+
* unwrapping the various shapes the Connect API and jsforce may return.
|
|
46
|
+
*/
|
|
47
|
+
function parseErrorMessage(error) {
|
|
48
|
+
const err = error;
|
|
49
|
+
const data = (err.response?.data ?? err.body ?? err);
|
|
50
|
+
const message = (typeof data === 'object' &&
|
|
51
|
+
data !== null &&
|
|
52
|
+
(data.message ??
|
|
53
|
+
data.error ??
|
|
54
|
+
data.errorDescription)) ||
|
|
55
|
+
err.message ||
|
|
56
|
+
'Unknown error';
|
|
57
|
+
const details = typeof data === 'object' && data !== null && Array.isArray(data.body)
|
|
58
|
+
? data.body.join('; ')
|
|
59
|
+
: undefined;
|
|
60
|
+
return details ? `${String(message)}: ${details}` : String(message);
|
|
61
|
+
}
|
|
58
62
|
//# sourceMappingURL=createWorkItem.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"createWorkItem.js","sourceRoot":"","sources":["../../src/utils/createWorkItem.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAmBH;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,MAA4B;IAC/D,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,OAAO,EAAE,WAAW,EAAE,GAAG,MAAM,CAAC;IAE/D,MAAM,IAAI,GAAG,mBAAmB,UAAU,CAAC,aAAa,EAAE,4BAA4B,SAAS,WAAW,CAAC;IAC3G,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,WAAW,EAAE,WAAW,IAAI,EAAE,EAAE,CAAC,CAAC;IAEzE,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,MAAM,UAAU,CAAC,OAAO,CAAC;YACxC,MAAM,EAAE,MAAM;YACd,GAAG,EAAE,IAAI;YACT,IAAI;YACJ,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;SAChD,CAAC,CAAC;QACH,MAAM,IAAI,GAAI,QAAoC,IAAI,EAAE,CAAC;QACzD,OAAO;YACL,OAAO,EAAE,IAAI;YACb,UAAU,EAAE,CAAC,IAAI,CAAC,EAAE,IAAI,IAAI,CAAC,EAAE,CAAuB;
|
|
1
|
+
{"version":3,"file":"createWorkItem.js","sourceRoot":"","sources":["../../src/utils/createWorkItem.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAmBH;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,MAA4B;IAC/D,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,OAAO,EAAE,WAAW,EAAE,GAAG,MAAM,CAAC;IAE/D,MAAM,IAAI,GAAG,mBAAmB,UAAU,CAAC,aAAa,EAAE,4BAA4B,SAAS,WAAW,CAAC;IAC3G,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,WAAW,EAAE,WAAW,IAAI,EAAE,EAAE,CAAC,CAAC;IAEzE,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,MAAM,UAAU,CAAC,OAAO,CAAC;YACxC,MAAM,EAAE,MAAM;YACd,GAAG,EAAE,IAAI;YACT,IAAI;YACJ,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;SAChD,CAAC,CAAC;QACH,MAAM,IAAI,GAAI,QAAoC,IAAI,EAAE,CAAC;QACzD,OAAO;YACL,OAAO,EAAE,IAAI;YACb,UAAU,EAAE,CAAC,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,EAAE,IAAI,IAAI,CAAC,EAAE,CAAuB;YACzE,YAAY,EAAE,CAAC,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,CAAuB;YACjF,OAAO,EAAE,CAAC,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,OAAO,IAAI,OAAO,CAAW;SAC7D,CAAC;IACJ,CAAC;IAAC,OAAO,KAAc,EAAE,CAAC;QACxB,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,iBAAiB,CAAC,KAAK,CAAC,EAAE,CAAC;IAC7D,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,SAAS,iBAAiB,CAAC,KAAc;IACvC,MAAM,GAAG,GAAG,KAAuG,CAAC;IACpH,MAAM,IAAI,GAAY,CAAC,GAAG,CAAC,QAAQ,EAAE,IAAI,IAAI,GAAG,CAAC,IAAI,IAAI,GAAG,CAAY,CAAC;IACzE,MAAM,OAAO,GACX,CAAC,OAAO,IAAI,KAAK,QAAQ;QACvB,IAAI,KAAK,IAAI;QACb,CAAE,IAAgC,CAAC,OAAO;YACvC,IAAgC,CAAC,KAAK;YACtC,IAAgC,CAAC,gBAAgB,CAAC,CAAC;QACxD,GAAG,CAAC,OAAO;QACX,eAAe,CAAC;IAClB,MAAM,OAAO,GACX,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,IAAI,IAAI,KAAK,CAAC,OAAO,CAAE,IAAgC,CAAC,IAAI,CAAC;QAChG,CAAC,CAAG,IAAkC,CAAC,IAAiB,CAAC,IAAI,CAAC,IAAI,CAAC;QACnE,CAAC,CAAC,SAAS,CAAC;IAChB,OAAO,OAAO,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,OAAO,CAAC,KAAK,OAAO,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;AACtE,CAAC"}
|
|
@@ -19,3 +19,23 @@ export type PromoteStageResult = {
|
|
|
19
19
|
* POST /services/data/v{version}/connect/devops/pipelines/{pipelineId}/promote
|
|
20
20
|
*/
|
|
21
21
|
export declare function promoteStage(params: PromoteStageParams): Promise<PromoteStageResult>;
|
|
22
|
+
/**
|
|
23
|
+
* DevopsPipelnStgProm.Status values that indicate a promotion has been submitted
|
|
24
|
+
* but has not yet finished (i.e. is still in flight).
|
|
25
|
+
*/
|
|
26
|
+
export declare const IN_FLIGHT_PROMOTION_STATUSES: readonly ["NEW", "IN_PROGRESS", "FINALIZING"];
|
|
27
|
+
export type InFlightPromotion = {
|
|
28
|
+
id: string;
|
|
29
|
+
requestToken: string;
|
|
30
|
+
status: string;
|
|
31
|
+
};
|
|
32
|
+
/**
|
|
33
|
+
* Returns any in-flight promotions targeting the given pipeline stage.
|
|
34
|
+
*
|
|
35
|
+
* DevopsPipelnStgProm (Pipeline Stage Promotion) records the target stage of a promotion
|
|
36
|
+
* (PipelineStageId) and links to its DevopsRequestInfo, so the check is scoped to the
|
|
37
|
+
* specific target stage — and therefore its pipeline — rather than the whole org. Used to
|
|
38
|
+
* block a duplicate promotion to the same stage while one is already running, without
|
|
39
|
+
* affecting promotions in other stages or pipelines.
|
|
40
|
+
*/
|
|
41
|
+
export declare function findInFlightPromotions(connection: Connection, targetStageId: string): Promise<InFlightPromotion[]>;
|
|
@@ -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 { validateSalesforceId } from './soqlUtils.js';
|
|
16
17
|
/**
|
|
17
18
|
* Promotes work items to a target pipeline stage via the Connect API.
|
|
18
19
|
* POST /services/data/v{version}/connect/devops/pipelines/{pipelineId}/promote
|
|
@@ -43,4 +44,28 @@ export async function promoteStage(params) {
|
|
|
43
44
|
promotedWorkitemIds: response.promotedWorkitemIds ?? [],
|
|
44
45
|
};
|
|
45
46
|
}
|
|
47
|
+
/**
|
|
48
|
+
* DevopsPipelnStgProm.Status values that indicate a promotion has been submitted
|
|
49
|
+
* but has not yet finished (i.e. is still in flight).
|
|
50
|
+
*/
|
|
51
|
+
export const IN_FLIGHT_PROMOTION_STATUSES = ['NEW', 'IN_PROGRESS', 'FINALIZING'];
|
|
52
|
+
/**
|
|
53
|
+
* Returns any in-flight promotions targeting the given pipeline stage.
|
|
54
|
+
*
|
|
55
|
+
* DevopsPipelnStgProm (Pipeline Stage Promotion) records the target stage of a promotion
|
|
56
|
+
* (PipelineStageId) and links to its DevopsRequestInfo, so the check is scoped to the
|
|
57
|
+
* specific target stage — and therefore its pipeline — rather than the whole org. Used to
|
|
58
|
+
* block a duplicate promotion to the same stage while one is already running, without
|
|
59
|
+
* affecting promotions in other stages or pipelines.
|
|
60
|
+
*/
|
|
61
|
+
export async function findInFlightPromotions(connection, targetStageId) {
|
|
62
|
+
validateSalesforceId(targetStageId, 'target stage');
|
|
63
|
+
const statusList = IN_FLIGHT_PROMOTION_STATUSES.join("', '");
|
|
64
|
+
const result = await connection.query(`SELECT Id, Status, RequestInfoId, RequestInfo.RequestToken FROM DevopsPipelnStgProm WHERE PipelineStageId = '${targetStageId}' AND Status IN ('${statusList}') LIMIT 10`);
|
|
65
|
+
return (result.records ?? []).map((r) => ({
|
|
66
|
+
id: r.Id,
|
|
67
|
+
requestToken: r.RequestInfo?.RequestToken ?? r.RequestInfoId ?? '',
|
|
68
|
+
status: r.Status,
|
|
69
|
+
}));
|
|
70
|
+
}
|
|
46
71
|
//# sourceMappingURL=promoteStage.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"promoteStage.js","sourceRoot":"","sources":["../../src/utils/promoteStage.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;
|
|
1
|
+
{"version":3,"file":"promoteStage.js","sourceRoot":"","sources":["../../src/utils/promoteStage.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAGH,OAAO,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AA0BtD;;;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;AAED;;;GAGG;AACH,MAAM,CAAC,MAAM,4BAA4B,GAAG,CAAC,KAAK,EAAE,aAAa,EAAE,YAAY,CAAU,CAAC;AAe1F;;;;;;;;GAQG;AACH,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAC1C,UAAsB,EACtB,aAAqB;IAErB,oBAAoB,CAAC,aAAa,EAAE,cAAc,CAAC,CAAC;IACpD,MAAM,UAAU,GAAG,4BAA4B,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAC7D,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,KAAK,CACnC,gHAAgH,aAAa,qBAAqB,UAAU,aAAa,CAC1K,CAAC;IACF,OAAO,CAAC,MAAM,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QACxC,EAAE,EAAE,CAAC,CAAC,EAAE;QACR,YAAY,EAAE,CAAC,CAAC,WAAW,EAAE,YAAY,IAAI,CAAC,CAAC,aAAa,IAAI,EAAE;QAClE,MAAM,EAAE,CAAC,CAAC,MAAM;KACjB,CAAC,CAAC,CAAC;AACN,CAAC"}
|
|
@@ -23,10 +23,30 @@ export type UpdateWorkItemResult = {
|
|
|
23
23
|
export declare const ALLOWED_STATUSES: readonly ["In Progress", "Ready to Promote"];
|
|
24
24
|
export type AllowedStatus = (typeof ALLOWED_STATUSES)[number];
|
|
25
25
|
export declare function toApiStatus(status: string): string;
|
|
26
|
+
/**
|
|
27
|
+
* Allowed current statuses for each target status a user can set. A work item may only move
|
|
28
|
+
* to IN_PROGRESS while it is NEW, and to READY_TO_PROMOTE while it is IN_REVIEW. Target statuses
|
|
29
|
+
* absent from this map have no precondition.
|
|
30
|
+
*/
|
|
31
|
+
export declare const STATUS_TRANSITION_PRECONDITIONS: Record<string, readonly string[]>;
|
|
32
|
+
/**
|
|
33
|
+
* Verifies that the work item's current status permits the requested transition. Throws with a
|
|
34
|
+
* descriptive error when it does not. Only runs a query when the target status has a precondition,
|
|
35
|
+
* so subject/description-only updates are unaffected.
|
|
36
|
+
*/
|
|
37
|
+
export declare function assertStatusTransitionAllowed(connection: Connection, workItemId: string, targetApiStatus: string): Promise<void>;
|
|
26
38
|
export declare function resolveWorkItemByName(connection: Connection, workItemName: string): Promise<WorkItemContext>;
|
|
27
39
|
export declare function resolveProjectIdForWorkItem(connection: Connection, workItemId: string): Promise<string>;
|
|
28
40
|
/**
|
|
29
|
-
* Updates
|
|
30
|
-
*
|
|
41
|
+
* Updates a DevOps Center work item.
|
|
42
|
+
*
|
|
43
|
+
* Subject and description are plain WorkItem sObject fields — the DevOps Center connect work item
|
|
44
|
+
* endpoint does not accept them — so they are written via the sObject API. Status changes go
|
|
45
|
+
* through the connect endpoint (PATCH /connect/devops/projects/{projectId}/workitem/{workItemId}),
|
|
46
|
+
* which is the only field that endpoint accepts, so platform-side status handling runs.
|
|
47
|
+
*
|
|
48
|
+
* The two writes hit different APIs with no shared transaction. Subject/description are committed
|
|
49
|
+
* first; if the status call then fails, this returns `{ success: false }` with an error that names
|
|
50
|
+
* the fields that did persist, rather than throwing and leaving the committed changes unreported.
|
|
31
51
|
*/
|
|
32
52
|
export declare function updateWorkItem(params: UpdateWorkItemParams): Promise<UpdateWorkItemResult>;
|