@simplysf/simply-cicd-core 0.2.2 → 0.4.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 +32 -3
- package/lib/build/checkPermissionSets.d.ts +22 -0
- package/lib/build/checkPermissionSets.js +102 -0
- package/lib/build/checkPermissionSets.js.map +1 -0
- package/lib/build/cleanupScratchOrgs.d.ts +6 -0
- package/lib/build/cleanupScratchOrgs.js +91 -0
- package/lib/build/cleanupScratchOrgs.js.map +1 -0
- package/lib/build/createFallbackTag.d.ts +24 -0
- package/lib/build/createFallbackTag.js +147 -0
- package/lib/build/createFallbackTag.js.map +1 -0
- package/lib/build/createPackageVersion.d.ts +42 -0
- package/lib/build/createPackageVersion.js +191 -0
- package/lib/build/createPackageVersion.js.map +1 -0
- package/lib/build/createScratchOrg.d.ts +14 -0
- package/lib/build/createScratchOrg.js +182 -0
- package/lib/build/createScratchOrg.js.map +1 -0
- package/lib/build/deleteScratchOrg.d.ts +13 -0
- package/lib/build/deleteScratchOrg.js +62 -0
- package/lib/build/deleteScratchOrg.js.map +1 -0
- package/lib/build/deltaRunner.d.ts +73 -0
- package/lib/build/deltaRunner.js +109 -0
- package/lib/build/deltaRunner.js.map +1 -0
- package/lib/build/determinePackageChanges.d.ts +11 -0
- package/lib/build/determinePackageChanges.js +90 -0
- package/lib/build/determinePackageChanges.js.map +1 -0
- package/lib/build/devHubs.d.ts +12 -0
- package/lib/build/devHubs.js +42 -0
- package/lib/build/devHubs.js.map +1 -0
- package/lib/build/flexipageDelta.d.ts +18 -0
- package/lib/build/flexipageDelta.js +35 -0
- package/lib/build/flexipageDelta.js.map +1 -0
- package/lib/build/flowDelta.d.ts +17 -0
- package/lib/build/flowDelta.js +34 -0
- package/lib/build/flowDelta.js.map +1 -0
- package/lib/build/installDependencies.d.ts +10 -0
- package/lib/build/installDependencies.js +39 -0
- package/lib/build/installDependencies.js.map +1 -0
- package/lib/build/lwcJest.d.ts +25 -0
- package/lib/build/lwcJest.js +126 -0
- package/lib/build/lwcJest.js.map +1 -0
- package/lib/build/publishUtamPageObjects.d.ts +50 -0
- package/lib/build/publishUtamPageObjects.js +274 -0
- package/lib/build/publishUtamPageObjects.js.map +1 -0
- package/lib/build/pushScratch.d.ts +9 -0
- package/lib/build/pushScratch.js +60 -0
- package/lib/build/pushScratch.js.map +1 -0
- package/lib/build/scratchOrgAuth.d.ts +18 -0
- package/lib/build/scratchOrgAuth.js +52 -0
- package/lib/build/scratchOrgAuth.js.map +1 -0
- package/lib/build/scratchOrgInfo.d.ts +14 -0
- package/lib/build/scratchOrgInfo.js +21 -0
- package/lib/build/scratchOrgInfo.js.map +1 -0
- package/lib/build/skipGuard.d.ts +8 -0
- package/lib/build/skipGuard.js +42 -0
- package/lib/build/skipGuard.js.map +1 -0
- package/lib/build/testScratch.d.ts +15 -0
- package/lib/build/testScratch.js +42 -0
- package/lib/build/testScratch.js.map +1 -0
- package/lib/build/utamPageObjects.d.ts +143 -0
- package/lib/build/utamPageObjects.js +258 -0
- package/lib/build/utamPageObjects.js.map +1 -0
- package/lib/build/versionTagFormat.d.ts +57 -0
- package/lib/build/versionTagFormat.js +194 -0
- package/lib/build/versionTagFormat.js.map +1 -0
- package/lib/config/defaultDeploymentPlugins.d.ts +2 -0
- package/lib/config/defaultDeploymentPlugins.js +18 -0
- package/lib/config/defaultDeploymentPlugins.js.map +1 -0
- package/lib/config/trustedPlugins.d.ts +2 -0
- package/lib/config/trustedPlugins.js +18 -0
- package/lib/config/trustedPlugins.js.map +1 -0
- package/lib/deploy/deployCommon.d.ts +105 -0
- package/lib/deploy/deployCommon.js +358 -0
- package/lib/deploy/deployCommon.js.map +1 -0
- package/lib/deploy/deployHappySoup.d.ts +56 -0
- package/lib/deploy/deployHappySoup.js +159 -0
- package/lib/deploy/deployHappySoup.js.map +1 -0
- package/lib/deploy/deployProject.d.ts +27 -0
- package/lib/deploy/deployProject.js +114 -0
- package/lib/deploy/deployProject.js.map +1 -0
- package/lib/deploy/runDeployStage.d.ts +16 -0
- package/lib/deploy/runDeployStage.js +65 -0
- package/lib/deploy/runDeployStage.js.map +1 -0
- package/lib/deploy/stageOptions.d.ts +49 -0
- package/lib/deploy/stageOptions.js +70 -0
- package/lib/deploy/stageOptions.js.map +1 -0
- package/lib/deploy/validate.d.ts +11 -0
- package/lib/deploy/validate.js +54 -0
- package/lib/deploy/validate.js.map +1 -0
- package/lib/env.d.ts +9 -0
- package/lib/env.js +47 -0
- package/lib/env.js.map +1 -0
- package/lib/exec/sfCli.d.ts +27 -0
- package/lib/exec/sfCli.js +50 -0
- package/lib/exec/sfCli.js.map +1 -0
- package/lib/flags/env.d.ts +44 -0
- package/lib/flags/env.js +81 -0
- package/lib/flags/env.js.map +1 -0
- package/lib/git.d.ts +32 -0
- package/lib/git.js +106 -0
- package/lib/git.js.map +1 -0
- package/lib/happySoup/resolveOriginProject.d.ts +22 -0
- package/lib/happySoup/resolveOriginProject.js +61 -0
- package/lib/happySoup/resolveOriginProject.js.map +1 -0
- package/lib/index.d.ts +52 -0
- package/lib/index.js +64 -2
- package/lib/index.js.map +1 -1
- package/lib/logger.d.ts +10 -0
- package/lib/logger.js +33 -0
- package/lib/logger.js.map +1 -0
- package/lib/notify/buildNotification.d.ts +53 -0
- package/lib/notify/buildNotification.js +176 -0
- package/lib/notify/buildNotification.js.map +1 -0
- package/lib/notify/getCommitStories.d.ts +30 -0
- package/lib/notify/getCommitStories.js +70 -0
- package/lib/notify/getCommitStories.js.map +1 -0
- package/lib/notify/getRemoteCommitStories.d.ts +10 -0
- package/lib/notify/getRemoteCommitStories.js +45 -0
- package/lib/notify/getRemoteCommitStories.js.map +1 -0
- package/lib/notify/happySoupNotification.d.ts +26 -0
- package/lib/notify/happySoupNotification.js +140 -0
- package/lib/notify/happySoupNotification.js.map +1 -0
- package/lib/notify/projectNotification.d.ts +46 -0
- package/lib/notify/projectNotification.js +167 -0
- package/lib/notify/projectNotification.js.map +1 -0
- package/lib/notify/renderTemplate.d.ts +3 -0
- package/lib/notify/renderTemplate.js +24 -0
- package/lib/notify/renderTemplate.js.map +1 -0
- package/lib/notify/sendNotification.d.ts +2 -0
- package/lib/notify/sendNotification.js +50 -0
- package/lib/notify/sendNotification.js.map +1 -0
- package/lib/notify/templates.d.ts +13 -0
- package/lib/notify/templates.js +118 -0
- package/lib/notify/templates.js.map +1 -0
- package/lib/schemas/deployConfig.d.ts +25 -0
- package/lib/schemas/deployConfig.js +55 -0
- package/lib/schemas/deployConfig.js.map +1 -0
- package/lib/schemas/deployProgress.d.ts +33 -0
- package/lib/schemas/deployProgress.js +46 -0
- package/lib/schemas/deployProgress.js.map +1 -0
- package/lib/schemas/deployRules.d.ts +34 -0
- package/lib/schemas/deployRules.js +40 -0
- package/lib/schemas/deployRules.js.map +1 -0
- package/lib/sfApex.d.ts +22 -0
- package/lib/sfApex.js +169 -0
- package/lib/sfApex.js.map +1 -0
- package/lib/sfAuth.d.ts +19 -0
- package/lib/sfAuth.js +78 -0
- package/lib/sfAuth.js.map +1 -0
- package/lib/sfConfig.d.ts +23 -0
- package/lib/sfConfig.js +82 -0
- package/lib/sfConfig.js.map +1 -0
- package/lib/sfOrg.d.ts +13 -0
- package/lib/sfOrg.js +39 -0
- package/lib/sfOrg.js.map +1 -0
- package/lib/sfPackages.d.ts +63 -0
- package/lib/sfPackages.js +185 -0
- package/lib/sfPackages.js.map +1 -0
- package/lib/sfPlugins.d.ts +11 -0
- package/lib/sfPlugins.js +134 -0
- package/lib/sfPlugins.js.map +1 -0
- package/lib/sfdxDependabot/dependabotRun.d.ts +95 -0
- package/lib/sfdxDependabot/dependabotRun.js +287 -0
- package/lib/sfdxDependabot/dependabotRun.js.map +1 -0
- package/lib/sfdxDependabot/updater.d.ts +14 -0
- package/lib/sfdxDependabot/updater.js +94 -0
- package/lib/sfdxDependabot/updater.js.map +1 -0
- package/package.json +16 -4
|
@@ -0,0 +1,185 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright (c) 2026, SimplySF.
|
|
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 { Org, SfProject } from '@salesforce/core';
|
|
17
|
+
import { Duration } from '@salesforce/kit';
|
|
18
|
+
import { installPackageDependencies as installPackageDependenciesCore, } from '@simplysf/simply-package-core';
|
|
19
|
+
import { PackageVersion, SubscriberPackageVersion } from '@salesforce/packaging';
|
|
20
|
+
import { logger } from './logger.js';
|
|
21
|
+
/**
|
|
22
|
+
* Adapts the library's progress callbacks onto this package's logger. Step boundaries become info
|
|
23
|
+
* lines; in-flight status (which fires on every poll) is logged only when its text changes.
|
|
24
|
+
*/
|
|
25
|
+
function loggerProgress() {
|
|
26
|
+
let lastStatus;
|
|
27
|
+
return {
|
|
28
|
+
info: (message) => logger.info(message),
|
|
29
|
+
warn: (message) => logger.warn(message),
|
|
30
|
+
stepStart: (message) => {
|
|
31
|
+
lastStatus = undefined;
|
|
32
|
+
logger.info(message);
|
|
33
|
+
},
|
|
34
|
+
stepStatus: (message) => {
|
|
35
|
+
if (message !== lastStatus) {
|
|
36
|
+
lastStatus = message;
|
|
37
|
+
logger.info(message);
|
|
38
|
+
}
|
|
39
|
+
},
|
|
40
|
+
stepStop: (message) => {
|
|
41
|
+
if (message) {
|
|
42
|
+
logger.warn(message);
|
|
43
|
+
}
|
|
44
|
+
},
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Installs the Salesforce package dependencies defined in `sfdx-project.json` into the target org,
|
|
49
|
+
* in-process via `@simplysf/simply-package-core`. The org must already be authenticated; every
|
|
50
|
+
* confirmation is auto-approved, as befits a pipeline.
|
|
51
|
+
*
|
|
52
|
+
* @returns The install outcome for every resolved dependency, including the ones skipped.
|
|
53
|
+
*/
|
|
54
|
+
export async function installPackageDependencies(config = {}) {
|
|
55
|
+
const { alias, wait = '120', installType = 'Upgrade', upgradeType = 'Mixed' } = config;
|
|
56
|
+
logger.info('Installing packaged dependencies...');
|
|
57
|
+
try {
|
|
58
|
+
const org = await Org.create({ aliasOrUsername: alias });
|
|
59
|
+
const project = await SfProject.resolve();
|
|
60
|
+
const results = await installPackageDependenciesCore({
|
|
61
|
+
project,
|
|
62
|
+
targetOrgConnection: org.getConnection(),
|
|
63
|
+
apexCompile: 'package',
|
|
64
|
+
installType,
|
|
65
|
+
upgradeType,
|
|
66
|
+
wait: Duration.minutes(parseInt(wait, 10)),
|
|
67
|
+
progress: loggerProgress(),
|
|
68
|
+
});
|
|
69
|
+
logger.success('Packaged dependencies installed successfully.');
|
|
70
|
+
return results;
|
|
71
|
+
}
|
|
72
|
+
catch (error) {
|
|
73
|
+
logger.error('Failed to install packaged dependencies.');
|
|
74
|
+
logger.error(String(error));
|
|
75
|
+
throw error;
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
/** @returns The install results that upgraded an already-installed package. */
|
|
79
|
+
function upgradedEntries(installResults) {
|
|
80
|
+
return installResults.filter((entry) => entry.Status === 'Installed' &&
|
|
81
|
+
Boolean(entry.ExistingSubscriberPackageVersionId) &&
|
|
82
|
+
entry.ExistingSubscriberPackageVersionId !== entry.SubscriberPackageVersionId);
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* The Dev Hub's report for one package version: what `sf package version report --json` returns,
|
|
86
|
+
* including the computed `Version` (`major.minor.patch.build`), `Tag`, `Description` and
|
|
87
|
+
* `CodeCoverage`.
|
|
88
|
+
*
|
|
89
|
+
* Unlike the CLI, `CodeCoverage` is `null` (not `'N/A'`) for a version that skipped validation or
|
|
90
|
+
* belongs to an org-dependent package.
|
|
91
|
+
*
|
|
92
|
+
* @param packageVersionId - A `04t` subscriber package version ID (or `05i` package version ID).
|
|
93
|
+
* @param devHubAliasOrUsername - The Dev Hub that owns the package. Must already be authenticated.
|
|
94
|
+
* @throws {SfError} If the Dev Hub can't be resolved or the version doesn't exist.
|
|
95
|
+
*/
|
|
96
|
+
export async function getPackageVersionReport(packageVersionId, devHubAliasOrUsername) {
|
|
97
|
+
const devHub = await Org.create({ aliasOrUsername: devHubAliasOrUsername });
|
|
98
|
+
const packageVersion = new PackageVersion({
|
|
99
|
+
connection: devHub.getConnection(),
|
|
100
|
+
project: undefined,
|
|
101
|
+
idOrAlias: packageVersionId,
|
|
102
|
+
});
|
|
103
|
+
return packageVersion.report();
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* The packages installed in an org, shaped like `sf package installed list --json`'s result rows.
|
|
107
|
+
*
|
|
108
|
+
* @param aliasOrUsername - The org to inspect. Must already be authenticated.
|
|
109
|
+
*/
|
|
110
|
+
export async function listInstalledPackages(aliasOrUsername) {
|
|
111
|
+
const org = await Org.create({ aliasOrUsername });
|
|
112
|
+
const installed = await SubscriberPackageVersion.installedList(org.getConnection());
|
|
113
|
+
return installed.map((row) => ({
|
|
114
|
+
Id: row.Id,
|
|
115
|
+
SubscriberPackageId: row.SubscriberPackageId,
|
|
116
|
+
...(row.SubscriberPackage
|
|
117
|
+
? {
|
|
118
|
+
SubscriberPackageName: row.SubscriberPackage.Name,
|
|
119
|
+
SubscriberPackageNamespace: row.SubscriberPackage.NamespacePrefix,
|
|
120
|
+
}
|
|
121
|
+
: {}),
|
|
122
|
+
...(row.SubscriberPackageVersion
|
|
123
|
+
? {
|
|
124
|
+
SubscriberPackageVersionId: row.SubscriberPackageVersion.Id,
|
|
125
|
+
SubscriberPackageVersionName: row.SubscriberPackageVersion.Name,
|
|
126
|
+
SubscriberPackageVersionNumber: [
|
|
127
|
+
row.SubscriberPackageVersion.MajorVersion,
|
|
128
|
+
row.SubscriberPackageVersion.MinorVersion,
|
|
129
|
+
row.SubscriberPackageVersion.PatchVersion,
|
|
130
|
+
row.SubscriberPackageVersion.BuildNumber,
|
|
131
|
+
].join('.'),
|
|
132
|
+
}
|
|
133
|
+
: {}),
|
|
134
|
+
}));
|
|
135
|
+
}
|
|
136
|
+
/** {@link getPackageVersionReport}, but warns and returns `undefined` on failure. */
|
|
137
|
+
async function reportPackageVersion(subscriberPackageVersionId, packagingDevhub) {
|
|
138
|
+
try {
|
|
139
|
+
return await getPackageVersionReport(subscriberPackageVersionId, packagingDevhub);
|
|
140
|
+
}
|
|
141
|
+
catch (error) {
|
|
142
|
+
logger.warn(`Could not get package version report for ${subscriberPackageVersionId}: ${error.message}`);
|
|
143
|
+
return undefined;
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
/**
|
|
147
|
+
* For every package an {@link installPackageDependencies} run upgraded, fetches the previous and
|
|
148
|
+
* target version's `sf package version report` (for the origin commit SHA and pipeline URL). A
|
|
149
|
+
* package whose version report can't be resolved is skipped with a warning rather than failing the
|
|
150
|
+
* whole deployment — this data only feeds a later notification.
|
|
151
|
+
*/
|
|
152
|
+
export async function resolveUpgradedPackages(installResults, config) {
|
|
153
|
+
const upgraded = upgradedEntries(installResults);
|
|
154
|
+
if (upgraded.length === 0) {
|
|
155
|
+
return [];
|
|
156
|
+
}
|
|
157
|
+
const { packagingDevhub } = config;
|
|
158
|
+
if (!packagingDevhub) {
|
|
159
|
+
logger.warn('No --packaging-devhub given. Skipping origin lookup for upgraded packages.');
|
|
160
|
+
return [];
|
|
161
|
+
}
|
|
162
|
+
const upgradedPackages = [];
|
|
163
|
+
for (const entry of upgraded) {
|
|
164
|
+
// eslint-disable-next-line no-await-in-loop -- each package's prev/target reports are fetched concurrently, but packages themselves are processed one at a time
|
|
165
|
+
const [prevReport, targetReport] = await Promise.all([
|
|
166
|
+
reportPackageVersion(entry.ExistingSubscriberPackageVersionId, packagingDevhub),
|
|
167
|
+
reportPackageVersion(entry.SubscriberPackageVersionId, packagingDevhub),
|
|
168
|
+
]);
|
|
169
|
+
if (!prevReport || !targetReport) {
|
|
170
|
+
continue;
|
|
171
|
+
}
|
|
172
|
+
upgradedPackages.push({
|
|
173
|
+
packageName: entry.PackageName,
|
|
174
|
+
prevVersionId: entry.ExistingSubscriberPackageVersionId,
|
|
175
|
+
prevVersionNumber: prevReport.Version,
|
|
176
|
+
prevTag: prevReport.Tag,
|
|
177
|
+
targetVersionId: entry.SubscriberPackageVersionId,
|
|
178
|
+
targetVersionNumber: targetReport.Version,
|
|
179
|
+
targetTag: targetReport.Tag,
|
|
180
|
+
targetDescription: targetReport.Description,
|
|
181
|
+
});
|
|
182
|
+
}
|
|
183
|
+
return upgradedPackages;
|
|
184
|
+
}
|
|
185
|
+
//# sourceMappingURL=sfPackages.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sfPackages.js","sourceRoot":"","sources":["../src/sfPackages.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/** Installs a Salesforce CLI plugin. */
|
|
2
|
+
export declare function installPlugin(plugin: string, debug?: boolean, cwd?: string): Promise<void>;
|
|
3
|
+
/** Installs all plugins listed in the `deploymentPlugins` array of the `.sfdevrc` file, plus this package's defaults. */
|
|
4
|
+
export declare function installDeploymentPlugins(debug?: boolean, cwd?: string): Promise<void>;
|
|
5
|
+
/**
|
|
6
|
+
* Automatically configures the trusted unsigned plugin allowlist for both the modern `sf` and
|
|
7
|
+
* legacy `sfdx` CLI configurations, to prevent interactive installation prompts.
|
|
8
|
+
*/
|
|
9
|
+
export declare function configureTrustedPublishers(debug?: boolean): void;
|
|
10
|
+
/** Installs the `@syntax-syllogism/flow-delta` plugin globally via npm. */
|
|
11
|
+
export declare function installFlowDeltaPlugin(debug?: boolean): Promise<void>;
|
package/lib/sfPlugins.js
ADDED
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright (c) 2026, SimplySF.
|
|
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 fs from 'node:fs';
|
|
17
|
+
import os from 'node:os';
|
|
18
|
+
import path from 'node:path';
|
|
19
|
+
import { execa } from 'execa';
|
|
20
|
+
import { DEFAULT_DEPLOYMENT_PLUGINS } from './config/defaultDeploymentPlugins.js';
|
|
21
|
+
import { TRUSTED_PLUGINS } from './config/trustedPlugins.js';
|
|
22
|
+
import { runSf } from './exec/sfCli.js';
|
|
23
|
+
import { logger } from './logger.js';
|
|
24
|
+
/** Installs a Salesforce CLI plugin. */
|
|
25
|
+
export async function installPlugin(plugin, debug = false, cwd = process.cwd()) {
|
|
26
|
+
logger.info(`Installing ${plugin} plugin...`);
|
|
27
|
+
try {
|
|
28
|
+
configureTrustedPublishers(debug);
|
|
29
|
+
await runSf(['plugins', 'install', plugin], { stdio: 'pipe', cwd });
|
|
30
|
+
logger.success(`Successfully installed ${plugin} plugin.`);
|
|
31
|
+
}
|
|
32
|
+
catch (error) {
|
|
33
|
+
logger.error(`Failed to install ${plugin} plugin.`);
|
|
34
|
+
logger.error(String(error));
|
|
35
|
+
throw error;
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
/** Installs all plugins listed in the `deploymentPlugins` array of the `.sfdevrc` file, plus this package's defaults. */
|
|
39
|
+
export async function installDeploymentPlugins(debug = false, cwd = process.cwd()) {
|
|
40
|
+
const sfdevrcPath = path.join(cwd, '.sfdevrc');
|
|
41
|
+
let projectPlugins = [];
|
|
42
|
+
if (fs.existsSync(sfdevrcPath)) {
|
|
43
|
+
const sfdevrc = JSON.parse(fs.readFileSync(sfdevrcPath, 'utf8'));
|
|
44
|
+
if (Array.isArray(sfdevrc.deploymentPlugins)) {
|
|
45
|
+
projectPlugins = sfdevrc.deploymentPlugins;
|
|
46
|
+
}
|
|
47
|
+
else if (debug) {
|
|
48
|
+
logger.debug('No deploymentPlugins array found in .sfdevrc. Skipping project-specific plugins.');
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
else if (debug) {
|
|
52
|
+
logger.debug('No .sfdevrc file found. Skipping project-specific plugins.');
|
|
53
|
+
}
|
|
54
|
+
const allPlugins = [...new Set([...DEFAULT_DEPLOYMENT_PLUGINS, ...projectPlugins])];
|
|
55
|
+
if (allPlugins.length === 0) {
|
|
56
|
+
if (debug) {
|
|
57
|
+
logger.debug('No deployment plugins to install.');
|
|
58
|
+
}
|
|
59
|
+
return;
|
|
60
|
+
}
|
|
61
|
+
const { stdout } = await runSf(['plugins'], { cwd });
|
|
62
|
+
const installedPlugins = stdout.split('\n').map((line) => line.split(' ')[0]);
|
|
63
|
+
for (const plugin of allPlugins) {
|
|
64
|
+
if (!installedPlugins.includes(plugin)) {
|
|
65
|
+
// eslint-disable-next-line no-await-in-loop
|
|
66
|
+
await installPlugin(plugin, debug, cwd);
|
|
67
|
+
}
|
|
68
|
+
else if (debug) {
|
|
69
|
+
logger.debug(`${plugin} is already installed. Skipping.`);
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Automatically configures the trusted unsigned plugin allowlist for both the modern `sf` and
|
|
75
|
+
* legacy `sfdx` CLI configurations, to prevent interactive installation prompts.
|
|
76
|
+
*/
|
|
77
|
+
export function configureTrustedPublishers(debug = false) {
|
|
78
|
+
const homeDir = os.homedir();
|
|
79
|
+
if (!homeDir) {
|
|
80
|
+
logger.warn('Could not determine user home directory. Skipping trusted publisher configuration.');
|
|
81
|
+
return;
|
|
82
|
+
}
|
|
83
|
+
const configDirs = [path.join(homeDir, '.config', 'sf'), path.join(homeDir, '.config', 'sfdx')];
|
|
84
|
+
for (const configDir of configDirs) {
|
|
85
|
+
const allowListPath = path.join(configDir, 'unsignedPluginAllowList.json');
|
|
86
|
+
try {
|
|
87
|
+
if (!fs.existsSync(configDir)) {
|
|
88
|
+
fs.mkdirSync(configDir, { recursive: true });
|
|
89
|
+
}
|
|
90
|
+
let currentAllowList = [];
|
|
91
|
+
if (fs.existsSync(allowListPath)) {
|
|
92
|
+
try {
|
|
93
|
+
const content = fs.readFileSync(allowListPath, 'utf8');
|
|
94
|
+
const parsed = JSON.parse(content);
|
|
95
|
+
currentAllowList = Array.isArray(parsed) ? parsed : [];
|
|
96
|
+
}
|
|
97
|
+
catch {
|
|
98
|
+
logger.warn(`Failed to parse existing allowlist at ${allowListPath}. Overwriting.`);
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
let modified = false;
|
|
102
|
+
for (const plugin of TRUSTED_PLUGINS) {
|
|
103
|
+
if (!currentAllowList.includes(plugin)) {
|
|
104
|
+
currentAllowList.push(plugin);
|
|
105
|
+
modified = true;
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
if (modified) {
|
|
109
|
+
fs.writeFileSync(allowListPath, JSON.stringify(currentAllowList, null, 2), 'utf8');
|
|
110
|
+
if (debug) {
|
|
111
|
+
logger.debug(`Configured trusted plugins in ${allowListPath}`);
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
catch (error) {
|
|
116
|
+
logger.warn(`Failed to configure trusted publisher allowlist at ${configDir}: ${error.message}`);
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
/** Installs the `@syntax-syllogism/flow-delta` plugin globally via npm. */
|
|
121
|
+
export async function installFlowDeltaPlugin(debug = false) {
|
|
122
|
+
logger.info('Installing @syntax-syllogism/flow-delta via npm...');
|
|
123
|
+
try {
|
|
124
|
+
configureTrustedPublishers(debug);
|
|
125
|
+
await execa('npm', ['install', '@syntax-syllogism/flow-delta', '--global'], { stdio: 'pipe' });
|
|
126
|
+
logger.success('Successfully installed @syntax-syllogism/flow-delta plugin.');
|
|
127
|
+
}
|
|
128
|
+
catch (error) {
|
|
129
|
+
logger.error('Failed to install @syntax-syllogism/flow-delta plugin.');
|
|
130
|
+
logger.error(String(error));
|
|
131
|
+
throw error;
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
//# sourceMappingURL=sfPlugins.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sfPlugins.js","sourceRoot":"","sources":["../src/sfPlugins.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
import type { VcsProject, VcsProvider } from '../vcs/index.js';
|
|
2
|
+
import type { UpdateSfdxProjectResult } from './updater.js';
|
|
3
|
+
export type ResolvePackageDetailsResult = {
|
|
4
|
+
packageName: string;
|
|
5
|
+
packageVersion: string;
|
|
6
|
+
};
|
|
7
|
+
/** Queries the DevHub for a released subscriber package version's name and semantic version. */
|
|
8
|
+
export declare function resolvePackageDetails(devhubUsername: string, subscriberPackageVersionId: string): Promise<ResolvePackageDetailsResult>;
|
|
9
|
+
export type FilterProjectOptions = {
|
|
10
|
+
upstreamProjectPath?: string;
|
|
11
|
+
upstreamProjectId?: string;
|
|
12
|
+
skipArchived?: boolean;
|
|
13
|
+
skipForks?: boolean;
|
|
14
|
+
allowlist?: string;
|
|
15
|
+
denylist?: string;
|
|
16
|
+
};
|
|
17
|
+
export type FilterProjectResult = {
|
|
18
|
+
keep: boolean;
|
|
19
|
+
reason?: string;
|
|
20
|
+
};
|
|
21
|
+
/** Decides whether a discovered project should be scanned, per the upstream/archived/fork/allow-deny rules. */
|
|
22
|
+
export declare function filterProject(project: VcsProject, options?: FilterProjectOptions): FilterProjectResult;
|
|
23
|
+
/** Splits the comma-separated label option into the label list the VCS provider expects. */
|
|
24
|
+
export declare function splitLabels(labels: string | undefined): string[] | undefined;
|
|
25
|
+
export type GenerateMrDescriptionInput = {
|
|
26
|
+
packageName: string;
|
|
27
|
+
oldVersions: string[];
|
|
28
|
+
packageVersion: string;
|
|
29
|
+
subscriberPackageVersionId: string;
|
|
30
|
+
/** The platform's word for a proposed change, from `VcsProvider.terminology`. */
|
|
31
|
+
changeRequest?: string;
|
|
32
|
+
};
|
|
33
|
+
/** Renders the markdown description body for a dependency-bump change request. */
|
|
34
|
+
export declare function generateMrDescription({ packageName, oldVersions, packageVersion, subscriberPackageVersionId, changeRequest, }: GenerateMrDescriptionInput): string;
|
|
35
|
+
export type SfdxDependabotSummary = {
|
|
36
|
+
packageName: string;
|
|
37
|
+
packageVersion: string;
|
|
38
|
+
subscriberPackageVersionId: string;
|
|
39
|
+
projectsDiscovered: number;
|
|
40
|
+
projectsEligible: number;
|
|
41
|
+
projectsUpdated: number;
|
|
42
|
+
mergeRequestsCreated: number;
|
|
43
|
+
mergeRequestsAlreadyOpen: number;
|
|
44
|
+
alreadyCurrent: number;
|
|
45
|
+
noDependencyFound: number;
|
|
46
|
+
missingSfdxProjectFile: number;
|
|
47
|
+
skipped: number;
|
|
48
|
+
failed: number;
|
|
49
|
+
dryRun: boolean;
|
|
50
|
+
};
|
|
51
|
+
export type ResolvedOptions = {
|
|
52
|
+
vcsHost?: string;
|
|
53
|
+
vcsApiUrl?: string;
|
|
54
|
+
vcsToken: string;
|
|
55
|
+
rootGroupId: string;
|
|
56
|
+
subscriberPackageVersionId: string;
|
|
57
|
+
devhubUsername: string;
|
|
58
|
+
dryRun: boolean;
|
|
59
|
+
projectAllowlist: string;
|
|
60
|
+
projectDenylist: string;
|
|
61
|
+
skipArchived: boolean;
|
|
62
|
+
skipForks: boolean;
|
|
63
|
+
branchPrefix: string;
|
|
64
|
+
changeRequestLabels: string;
|
|
65
|
+
failOnError: boolean;
|
|
66
|
+
maxProjects?: number;
|
|
67
|
+
};
|
|
68
|
+
export type SfdxDependabotCounters = {
|
|
69
|
+
projectsUpdated: number;
|
|
70
|
+
mergeRequestsCreated: number;
|
|
71
|
+
mergeRequestsAlreadyOpen: number;
|
|
72
|
+
alreadyCurrent: number;
|
|
73
|
+
noDependencyFound: number;
|
|
74
|
+
missingSfdxProjectFile: number;
|
|
75
|
+
skipped: number;
|
|
76
|
+
failed: number;
|
|
77
|
+
};
|
|
78
|
+
/** Applies the `--max-projects` safety cap, returning the trimmed list and how many extra projects that skipped. */
|
|
79
|
+
export declare function applyMaxProjectsLimit(filteredProjects: VcsProject[], maxProjects: number | undefined): {
|
|
80
|
+
projectsToProcess: VcsProject[];
|
|
81
|
+
additionalSkipped: number;
|
|
82
|
+
};
|
|
83
|
+
/** Discovers all projects under the root group and applies the upstream/archived/fork/allow-deny filters. */
|
|
84
|
+
export declare function discoverEligibleProjects(vcsProvider: VcsProvider, rootGroupId: string, options: ResolvedOptions): Promise<{
|
|
85
|
+
allProjects: VcsProject[];
|
|
86
|
+
filteredProjects: VcsProject[];
|
|
87
|
+
skippedCount: number;
|
|
88
|
+
}>;
|
|
89
|
+
/**
|
|
90
|
+
* Processes a single eligible project: reads its `sfdx-project.json`, checks its opt-in status,
|
|
91
|
+
* and (unless already current, not opted in, or a dry run) opens or updates a merge request.
|
|
92
|
+
*/
|
|
93
|
+
export declare function processProject(project: VcsProject, vcsProvider: VcsProvider, options: ResolvedOptions, packageName: string, packageVersion: string, counters: SfdxDependabotCounters): Promise<void>;
|
|
94
|
+
/** Creates/reuses the update branch, commits the dependency bump if needed, and opens/updates the merge request. */
|
|
95
|
+
export declare function applyProjectUpdate(project: VcsProject, vcsProvider: VcsProvider, options: ResolvedOptions, packageName: string, packageVersion: string, branchName: string, updateResult: UpdateSfdxProjectResult, counters: SfdxDependabotCounters): Promise<void>;
|