@forge/cli-shared 9.3.0-next.2 → 9.3.0-next.20
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/CHANGELOG.md +121 -0
- package/out/apps/create-an-app.d.ts +1 -3
- package/out/apps/create-an-app.d.ts.map +1 -1
- package/out/apps/create-an-app.js +2 -3
- package/out/apps/register-app.d.ts +2 -3
- package/out/apps/register-app.d.ts.map +1 -1
- package/out/apps/register-app.js +1 -2
- package/out/config/config.js +1 -1
- package/out/file-system/archiver.d.ts +40 -0
- package/out/file-system/archiver.d.ts.map +1 -0
- package/out/file-system/archiver.js +148 -0
- package/out/file-system/index.d.ts +1 -0
- package/out/file-system/index.d.ts.map +1 -1
- package/out/file-system/index.js +1 -0
- package/out/graphql/graphql-types.d.ts +6083 -18282
- package/out/graphql/graphql-types.d.ts.map +1 -1
- package/out/graphql/graphql-types.js +726 -429
- package/out/service/statsig-service.d.ts +1 -1
- package/out/service/statsig-service.d.ts.map +1 -1
- package/out/service/statsig-service.js +1 -1
- package/out/shared/test.d.ts +2 -1
- package/out/shared/test.d.ts.map +1 -1
- package/out/shared/test.js +2 -2
- package/out/tunnel/docker-compose-lifecycle.d.ts.map +1 -1
- package/out/tunnel/docker-compose-lifecycle.js +49 -13
- package/out/ui/log-color.d.ts +1 -0
- package/out/ui/log-color.d.ts.map +1 -1
- package/out/ui/log-color.js +1 -0
- package/out/ui/text.d.ts +30 -2
- package/out/ui/text.d.ts.map +1 -1
- package/out/ui/text.js +59 -17
- package/package.json +4 -3
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { AppEnvironmentType } from '../graphql/graphql-types';
|
|
2
2
|
import { CLIDetails, ConfigSectionReader, CredentialGetter, getEnvironmentConfig, Logger } from '../index';
|
|
3
|
-
export type FeatureGate = 'forge-cli-test-gate' | 'is-logs-v-2-api-enabled' | 'forge-cli-bundle-runtime-loader' | 'forge-cli-enable-teamwork-graph-product-support' | 'forge-cli-enable-developer-space-enforcement-flow' | 'forge-cli-enable-typescript-bundler' | 'forge-cli-enable-self-managed-tunnel' | 'forge-cli-enable-combined-artifact-upload';
|
|
3
|
+
export type FeatureGate = 'forge-cli-test-gate' | 'is-logs-v-2-api-enabled' | 'forge-cli-bundle-runtime-loader' | 'forge-cli-enable-teamwork-graph-product-support' | 'forge-cli-enable-developer-space-enforcement-flow' | 'forge-cli-enable-typescript-bundler' | 'forge-cli-enable-self-managed-tunnel' | 'fg-forge-cli-enable-combined-artifact-upload';
|
|
4
4
|
export type DynamicConfig = {
|
|
5
5
|
'forge-cli-test-dynamic-configs': string[];
|
|
6
6
|
'xls-forge-cli-deprecated-runtimes': string[];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"statsig-service.d.ts","sourceRoot":"","sources":["../../src/service/statsig-service.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAE9D,OAAO,EACL,UAAU,EACV,mBAAmB,EACnB,gBAAgB,EAChB,oBAAoB,EAEpB,MAAM,EAEP,MAAM,UAAU,CAAC;AAElB,MAAM,MAAM,WAAW,GACnB,qBAAqB,GACrB,yBAAyB,GACzB,iCAAiC,GACjC,iDAAiD,GACjD,mDAAmD,GACnD,qCAAqC,GACrC,sCAAsC,GACtC,
|
|
1
|
+
{"version":3,"file":"statsig-service.d.ts","sourceRoot":"","sources":["../../src/service/statsig-service.ts"],"names":[],"mappings":"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"}
|
|
@@ -49,7 +49,7 @@ class StatsigReader {
|
|
|
49
49
|
else if (process.env.FORGE_CLI_ENABLE_COMBINED_ARTIFACT_UPLOAD === 'false') {
|
|
50
50
|
return false;
|
|
51
51
|
}
|
|
52
|
-
return (await this.checkGate('forge-cli-enable-combined-artifact-upload', { environmentType })) ?? false;
|
|
52
|
+
return (await this.checkGate('fg-forge-cli-enable-combined-artifact-upload', { environmentType })) ?? false;
|
|
53
53
|
}
|
|
54
54
|
async getCustomSpinnerConfig() {
|
|
55
55
|
return (await this.getDynamicConfig('forge-cli-enable-custom-spinner')) ?? null;
|
package/out/shared/test.d.ts
CHANGED
|
@@ -7,9 +7,10 @@ type TestApp = {
|
|
|
7
7
|
path: string;
|
|
8
8
|
}[];
|
|
9
9
|
};
|
|
10
|
-
export declare function createTestApp({ userCode, userCodeFilename, packages, withI18nBundle }: {
|
|
10
|
+
export declare function createTestApp({ userCode, userCodeFilename, userCodeExtension, packages, withI18nBundle }: {
|
|
11
11
|
userCode: string;
|
|
12
12
|
userCodeFilename?: string;
|
|
13
|
+
userCodeExtension?: string;
|
|
13
14
|
packages?: string[];
|
|
14
15
|
withI18nBundle?: boolean;
|
|
15
16
|
}): Promise<TestApp>;
|
package/out/shared/test.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"test.d.ts","sourceRoot":"","sources":["../../src/shared/test.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,MAAM,EAAE,MAAM,OAAO,CAAC;AAG/B,wBAAgB,UAAU,CAAC,YAAY,EAAE,OAAO,EAAE,YAAY,EAAE,OAAO,GAAG,MAAM,CAU/E;AAED,KAAK,OAAO,GAAG;IACb,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;CAC/C,CAAC;AAEF,wBAAsB,aAAa,CAAC,EAClC,QAAQ,EACR,gBAA0B,EAC1B,QAAQ,EACR,cAAsB,EACvB,EAAE;IACD,QAAQ,EAAE,MAAM,CAAC;IACjB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B,GAAG,OAAO,CAAC,OAAO,CAAC,CA8CnB"}
|
|
1
|
+
{"version":3,"file":"test.d.ts","sourceRoot":"","sources":["../../src/shared/test.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,MAAM,EAAE,MAAM,OAAO,CAAC;AAG/B,wBAAgB,UAAU,CAAC,YAAY,EAAE,OAAO,EAAE,YAAY,EAAE,OAAO,GAAG,MAAM,CAU/E;AAED,KAAK,OAAO,GAAG;IACb,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;CAC/C,CAAC;AAEF,wBAAsB,aAAa,CAAC,EAClC,QAAQ,EACR,gBAA0B,EAC1B,iBAAwB,EACxB,QAAQ,EACR,cAAsB,EACvB,EAAE;IACD,QAAQ,EAAE,MAAM,CAAC;IACjB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B,GAAG,OAAO,CAAC,OAAO,CAAC,CA8CnB"}
|
package/out/shared/test.js
CHANGED
|
@@ -18,12 +18,12 @@ function mockLogger(traceEnabled, debugEnabled) {
|
|
|
18
18
|
error: jest.fn()
|
|
19
19
|
};
|
|
20
20
|
}
|
|
21
|
-
async function createTestApp({ userCode, userCodeFilename = 'index', packages, withI18nBundle = false }) {
|
|
21
|
+
async function createTestApp({ userCode, userCodeFilename = 'index', userCodeExtension = 'ts', packages, withI18nBundle = false }) {
|
|
22
22
|
const appDirectory = (0, directories_1.tmpDir)();
|
|
23
23
|
const userCodeDir = path_1.default.join(appDirectory, 'src', path_1.default.dirname(userCodeFilename));
|
|
24
24
|
const userCodeBaseName = path_1.default.basename(userCodeFilename);
|
|
25
25
|
await (0, fs_extra_1.ensureDir)(userCodeDir);
|
|
26
|
-
const userCodePath = path_1.default.join(userCodeDir, `${userCodeBaseName}
|
|
26
|
+
const userCodePath = path_1.default.join(userCodeDir, `${userCodeBaseName}.${userCodeExtension}`);
|
|
27
27
|
await (0, promises_1.writeFile)(userCodePath, userCode);
|
|
28
28
|
await (0, promises_1.writeFile)(path_1.default.join(appDirectory, 'tsconfig.json'), JSON.stringify({}));
|
|
29
29
|
const allPackages = ['@types/node', 'undici-types', ...(packages ?? [])];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"docker-compose-lifecycle.d.ts","sourceRoot":"","sources":["../../src/tunnel/docker-compose-lifecycle.ts"],"names":[],"mappings":"AAUA,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAEtC,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACnD,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AACtC,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAO3C,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAG7C,eAAO,MAAM,wBAAwB,qBAAqB,CAAC;AAC3D,eAAO,MAAM,wBAAwB,8BAA8B,CAAC;AACpE,eAAO,MAAM,uBAAuB,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"docker-compose-lifecycle.d.ts","sourceRoot":"","sources":["../../src/tunnel/docker-compose-lifecycle.ts"],"names":[],"mappings":"AAUA,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAEtC,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACnD,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AACtC,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAO3C,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAG7C,eAAO,MAAM,wBAAwB,qBAAqB,CAAC;AAC3D,eAAO,MAAM,wBAAwB,8BAA8B,CAAC;AACpE,eAAO,MAAM,uBAAuB,kBAAkB,CAAC;AAgCvD,eAAO,MAAM,gBAAgB,QAAY,CAAC;AAC1C,eAAO,MAAM,uBAAuB,QAAW,CAAC;AAEhD,qBAAa,2BAA4B,SAAQ,SAAS;gBAC5C,UAAU,EAAE,MAAM;CAG/B;AAED,qBAAa,mCAAoC,SAAQ,SAAS;gBACpD,GAAG,CAAC,EAAE,KAAK;CAGxB;AAED,qBAAa,wBAAyB,SAAQ,SAAS;gBACzC,GAAG,CAAC,EAAE,KAAK;CAGxB;AAED,qBAAa,mCAAoC,SAAQ,SAAS;gBACpD,UAAU,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,KAAK;CAG5C;AAED,qBAAa,+BAAgC,SAAQ,SAAS;gBAChD,YAAY,EAAE,MAAM;CAGjC;AAED,qBAAa,sCAAuC,SAAQ,SAAS;gBACvD,YAAY,EAAE,MAAM;CAGjC;AAED,qBAAa,yBAA0B,SAAQ,SAAS;gBAC1C,OAAO,EAAE,MAAM;CAG5B;AAMD,eAAO,MAAM,mCAAmC,GAAU,UAAU,QAAQ,EAAE,OAAO,MAAM,EAAE,OAAO,MAAM,oCAgFzG,CAAC;AAsFF,eAAO,MAAM,uBAAuB,GAAU,aAAa,MAAM,kBAYhE,CAAC;AAOF,eAAO,MAAM,uBAAuB,GAAU,uBAAuB,MAAM,EAAE,YAAY,MAAM,EAAE,QAAQ,MAAM,kBA8B9G,CAAC;AA6BF,eAAO,MAAM,qBAAqB,GAChC,uBAAuB,MAAM,EAC7B,YAAY,MAAM,EAClB,QAAQ,MAAM,KACb,OAAO,CAAC,MAAM,EAAE,CAgBlB,CAAC;AA2LF,eAAO,MAAM,sBAAsB,GACjC,YAAY,UAAU,EACtB,QAAQ,MAAM,EACd,eAAe,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,kBAmCtC,CAAC;AAgCF,eAAO,MAAM,2BAA2B,GAAU,cAAc,YAAY,kBAW3E,CAAC"}
|
|
@@ -15,6 +15,19 @@ exports.PROXY_SIDECAR_VOLUME_DIR = '/forge/container';
|
|
|
15
15
|
exports.CONTAINER_SERVICE_ASSETS = '.container-service-assets';
|
|
16
16
|
exports.K8S_AUTH_TOKEN_FILENAME = 'local-account';
|
|
17
17
|
const PROXY_SIDECAR_SERVICE_NAME = 'proxy-sidecar';
|
|
18
|
+
const PROXY_SIDECAR_IMAGE_PATH = 'forge-platform/proxy-sidecar:latest';
|
|
19
|
+
const PROXY_SIDECAR_REGISTRIES = {
|
|
20
|
+
portable: {
|
|
21
|
+
production: 'forge-registry.services.atlassian.com',
|
|
22
|
+
staging: 'forge-registry.stg.services.atlassian.com'
|
|
23
|
+
},
|
|
24
|
+
ecr: {
|
|
25
|
+
production: 'forge-ecr.services.atlassian.com',
|
|
26
|
+
staging: 'forge-ecr.stg.services.atlassian.com'
|
|
27
|
+
}
|
|
28
|
+
};
|
|
29
|
+
const isStagingEnvironment = () => process.env.FORGE_GRAPHQL_GATEWAY?.startsWith('https://api-private.stg.atlassian.com/graphql') ?? false;
|
|
30
|
+
const getProxySidecarRegistry = (registryType) => PROXY_SIDECAR_REGISTRIES[registryType][isStagingEnvironment() ? 'staging' : 'production'];
|
|
18
31
|
const LIFECYCLE_PATTERNS = [
|
|
19
32
|
/Container .* (Starting|Started|Stopping|Stopped|Creating|Created|Recreated)/,
|
|
20
33
|
/Network .* (Creating|Created|Removing|Removed)/,
|
|
@@ -134,11 +147,10 @@ const adjustFilePath = (filePath) => {
|
|
|
134
147
|
const getProxySidecarConfig = async (serviceKey, containerKeys, port, appId, envId, serviceIndex, healthEndpointPath) => {
|
|
135
148
|
let fopBaseUrl = 'https://forge-outbound-proxy.services.atlassian.com';
|
|
136
149
|
let jwksUrl = 'https://forge.cdn.prod.atlassian-dev.net/.well-known/jwks.json';
|
|
137
|
-
|
|
138
|
-
if (
|
|
150
|
+
const proxySidecarRegistry = getProxySidecarRegistry('portable');
|
|
151
|
+
if (isStagingEnvironment()) {
|
|
139
152
|
fopBaseUrl = 'https://forge-outbound-proxy.stg.services.atlassian.com';
|
|
140
153
|
jwksUrl = 'https://forge.cdn.stg.atlassian-dev.net/.well-known/jwks.json';
|
|
141
|
-
proxySidecarImage = 'forge-ecr.stg.services.atlassian.com/forge-platform/proxy-sidecar:latest';
|
|
142
154
|
}
|
|
143
155
|
let appIdShort = appId;
|
|
144
156
|
if (appId.startsWith('ari:cloud:ecosystem::app/')) {
|
|
@@ -146,7 +158,7 @@ const getProxySidecarConfig = async (serviceKey, containerKeys, port, appId, env
|
|
|
146
158
|
}
|
|
147
159
|
return {
|
|
148
160
|
[PROXY_SIDECAR_SERVICE_NAME]: {
|
|
149
|
-
image:
|
|
161
|
+
image: `${proxySidecarRegistry}/${PROXY_SIDECAR_IMAGE_PATH}`,
|
|
150
162
|
container_name: getProxySidecarContainerName(serviceKey),
|
|
151
163
|
environment: [
|
|
152
164
|
`SERVICE_URL=http://${containerKeys[0]}:8080`,
|
|
@@ -190,19 +202,44 @@ const deleteDockerComposeFile = async (composeFile) => {
|
|
|
190
202
|
};
|
|
191
203
|
exports.deleteDockerComposeFile = deleteDockerComposeFile;
|
|
192
204
|
const startDockerComposeStack = async (dockerComposeFilePath, serviceKey, logger) => {
|
|
205
|
+
const pullOptions = {
|
|
206
|
+
cwd: path.dirname(dockerComposeFilePath),
|
|
207
|
+
log: true,
|
|
208
|
+
config: dockerComposeFilePath
|
|
209
|
+
};
|
|
193
210
|
try {
|
|
194
|
-
await (0, docker_compose_1.pullOne)(
|
|
195
|
-
cwd: path.dirname(dockerComposeFilePath),
|
|
196
|
-
log: true,
|
|
197
|
-
config: dockerComposeFilePath
|
|
198
|
-
});
|
|
211
|
+
await (0, docker_compose_1.pullOne)(PROXY_SIDECAR_SERVICE_NAME, pullOptions);
|
|
199
212
|
}
|
|
200
|
-
catch (
|
|
201
|
-
|
|
213
|
+
catch (portableRegistryError) {
|
|
214
|
+
logger.warn('Unable to pull the proxy sidecar image. Retrying from an alternate source...');
|
|
215
|
+
useEcrProxySidecarImage(dockerComposeFilePath);
|
|
216
|
+
try {
|
|
217
|
+
await (0, docker_compose_1.pullOne)(PROXY_SIDECAR_SERVICE_NAME, pullOptions);
|
|
218
|
+
}
|
|
219
|
+
catch (ecrRegistryError) {
|
|
220
|
+
throw new DockerUnableToPullProxySidecarImage(new Error(`Initial pull error: ${getDockerComposeErrorMessage(portableRegistryError)}. Retry error: ${getDockerComposeErrorMessage(ecrRegistryError)}`));
|
|
221
|
+
}
|
|
202
222
|
}
|
|
203
223
|
await waitForContainersToStart(dockerComposeFilePath, serviceKey, logger);
|
|
204
224
|
};
|
|
205
225
|
exports.startDockerComposeStack = startDockerComposeStack;
|
|
226
|
+
const getDockerComposeErrorMessage = (error) => {
|
|
227
|
+
if (error && typeof error === 'object') {
|
|
228
|
+
const dockerComposeError = error;
|
|
229
|
+
return dockerComposeError.err || dockerComposeError.out || dockerComposeError.message || 'Unknown Error Occurred.';
|
|
230
|
+
}
|
|
231
|
+
return error != null ? String(error) : 'Unknown Error Occurred.';
|
|
232
|
+
};
|
|
233
|
+
const useEcrProxySidecarImage = (dockerComposeFilePath) => {
|
|
234
|
+
const composeConfig = yaml.parse(fs.readFileSync(dockerComposeFilePath, 'utf8'));
|
|
235
|
+
const proxySidecar = composeConfig?.services?.[PROXY_SIDECAR_SERVICE_NAME];
|
|
236
|
+
if (!proxySidecar) {
|
|
237
|
+
throw new Error(`The Docker Compose file does not contain the ${PROXY_SIDECAR_SERVICE_NAME} service.`);
|
|
238
|
+
}
|
|
239
|
+
const ecrRegistry = getProxySidecarRegistry('ecr');
|
|
240
|
+
proxySidecar.image = `${ecrRegistry}/${PROXY_SIDECAR_IMAGE_PATH}`;
|
|
241
|
+
fs.writeFileSync(dockerComposeFilePath, yaml.stringify(composeConfig));
|
|
242
|
+
};
|
|
206
243
|
const determineComposeFlags = async (dockerComposeFilePath, serviceKey, logger) => {
|
|
207
244
|
const flags = ['--build', '--quiet-pull'];
|
|
208
245
|
try {
|
|
@@ -318,8 +355,7 @@ const waitForContainersToStart = async (dockerComposeFilePath, serviceKey, logge
|
|
|
318
355
|
callback: logFilter
|
|
319
356
|
}).catch((error) => {
|
|
320
357
|
clearTimeout(startupTimer);
|
|
321
|
-
|
|
322
|
-
reject(new DockerUnableToStartError(new Error(errorMessage)));
|
|
358
|
+
reject(new DockerUnableToStartError(new Error(getDockerComposeErrorMessage(error))));
|
|
323
359
|
});
|
|
324
360
|
setTimeout(async () => {
|
|
325
361
|
if (containersStarted)
|
package/out/ui/log-color.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"log-color.d.ts","sourceRoot":"","sources":["../../src/ui/log-color.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,QAAQ;qBACF,MAAM,KAAG,MAAM;qBACf,MAAM,KAAG,MAAM;oBAChB,MAAM,KAAG,MAAM;qBACd,MAAM,KAAG,MAAM;;
|
|
1
|
+
{"version":3,"file":"log-color.d.ts","sourceRoot":"","sources":["../../src/ui/log-color.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,QAAQ;qBACF,MAAM,KAAG,MAAM;qBACf,MAAM,KAAG,MAAM;oBAChB,MAAM,KAAG,MAAM;qBACd,MAAM,KAAG,MAAM;wBACZ,MAAM,KAAG,MAAM;;CAGpC,CAAC;AAKF,eAAO,MAAM,eAAe;;;;;;;CAO3B,CAAC;AAEF,eAAO,MAAM,UAAU;;;;;;;;;;;;;;;;;;;;;CAkBtB,CAAC"}
|
package/out/ui/log-color.js
CHANGED
|
@@ -8,6 +8,7 @@ exports.LogColor = {
|
|
|
8
8
|
debug: (message) => chalk_1.default.gray(message),
|
|
9
9
|
warn: (message) => chalk_1.default.yellow(message),
|
|
10
10
|
error: (message) => chalk_1.default.red(message),
|
|
11
|
+
approval: (message) => chalk_1.default.cyan(message),
|
|
11
12
|
errorPrefix: chalk_1.default.red.bold('Error: ')
|
|
12
13
|
};
|
|
13
14
|
const withPadding = (input) => input.padEnd(7);
|
package/out/ui/text.d.ts
CHANGED
|
@@ -432,6 +432,7 @@ export declare const Text: {
|
|
|
432
432
|
error: {
|
|
433
433
|
noDeployUrl: string;
|
|
434
434
|
noPresignedUrls: string;
|
|
435
|
+
noManifestUrl: string;
|
|
435
436
|
noUploadId: string;
|
|
436
437
|
noManifestInZip: (manifestFilename: string) => string;
|
|
437
438
|
noManifestAtPath: (path: string) => string;
|
|
@@ -668,12 +669,14 @@ export declare const Text: {
|
|
|
668
669
|
start1: (envKey: string, envType: AppEnvironmentType, buildTag?: string) => string;
|
|
669
670
|
start2: (appName: string, envKey: string, envType: AppEnvironmentType, buildTag?: string) => string;
|
|
670
671
|
success: string;
|
|
671
|
-
successDetails: (appName: string, envKey: string, envType: AppEnvironmentType, buildTag?: string) => string;
|
|
672
|
+
successDetails: (appName: string, envKey: string, envType: AppEnvironmentType, buildTag?: string, numApprovals?: number) => string;
|
|
672
673
|
distributePageLink: (appId: string) => string;
|
|
673
674
|
};
|
|
674
675
|
taskLint: {
|
|
675
676
|
lintError: string;
|
|
676
677
|
lintWarning: (numWarnings: number) => string;
|
|
678
|
+
lintApproval: (numApprovals: number, ruleNames?: string[]) => string;
|
|
679
|
+
lintErrorsWithApprovals: string;
|
|
677
680
|
};
|
|
678
681
|
hasNoAppInstallationsForEnv: {
|
|
679
682
|
hasNoAppInstallationsForEnvError: string;
|
|
@@ -693,6 +696,9 @@ export declare const Text: {
|
|
|
693
696
|
skipRollout: {
|
|
694
697
|
description: string;
|
|
695
698
|
};
|
|
699
|
+
approveRule: {
|
|
700
|
+
description: string;
|
|
701
|
+
};
|
|
696
702
|
connectKeyChange: {
|
|
697
703
|
continueChange: string;
|
|
698
704
|
continueDelete: string;
|
|
@@ -775,6 +781,10 @@ export declare const Text: {
|
|
|
775
781
|
installationLimitWarning: string;
|
|
776
782
|
success: {
|
|
777
783
|
banner: (envKey: string, envType: AppEnvironmentType, product: string, site: string) => string;
|
|
784
|
+
deeplinks: (links: Array<{
|
|
785
|
+
label?: string;
|
|
786
|
+
url: string;
|
|
787
|
+
}>) => string;
|
|
778
788
|
};
|
|
779
789
|
error: {
|
|
780
790
|
activationIdMissing: (url: string, context: string) => string;
|
|
@@ -1028,16 +1038,20 @@ export declare const Text: {
|
|
|
1028
1038
|
cmd: string;
|
|
1029
1039
|
running: string;
|
|
1030
1040
|
noProblems: string;
|
|
1041
|
+
approvalRequired: string;
|
|
1031
1042
|
noFixableProblem: string;
|
|
1032
1043
|
noFixableProblems: string;
|
|
1033
1044
|
filename: chalk.Chalk;
|
|
1045
|
+
errorMissingManifest: string;
|
|
1046
|
+
errorInvalidManifest: string;
|
|
1034
1047
|
linterFailed: (linterClass: string, failure: string) => string;
|
|
1035
1048
|
fixed: (numFixableErrors: number, numFixableWarnings: number) => string;
|
|
1036
1049
|
fixFollowUp: string;
|
|
1037
1050
|
error: (line: number, column: number, message: string, reference: string) => string;
|
|
1038
|
-
summary: (numErrors: number, numWarnings: number, numFixableErrors: number, numFixableWarnings: number) => string;
|
|
1051
|
+
summary: (numErrors: number, numWarnings: number, numApprovals: number, numFixableErrors: number, numFixableWarnings: number) => string;
|
|
1039
1052
|
fixSummary: (numErrors: number, numFixableErrors: number, numFixableWarnings: number) => string;
|
|
1040
1053
|
warning: (line: number, column: number, message: string, reference: string) => string;
|
|
1054
|
+
approval: (line: number, column: number, message: string, reference: string) => string;
|
|
1041
1055
|
};
|
|
1042
1056
|
repositories: {
|
|
1043
1057
|
cmd: {
|
|
@@ -1087,6 +1101,7 @@ export declare const Text: {
|
|
|
1087
1101
|
start: string;
|
|
1088
1102
|
success: string;
|
|
1089
1103
|
createdRepositoryURI: (uri: string) => string;
|
|
1104
|
+
authRequired: (key: string) => string;
|
|
1090
1105
|
};
|
|
1091
1106
|
login: {
|
|
1092
1107
|
cmd: {
|
|
@@ -1292,12 +1307,24 @@ export declare const Text: {
|
|
|
1292
1307
|
dynamicTable: {
|
|
1293
1308
|
exiting: string;
|
|
1294
1309
|
};
|
|
1310
|
+
manifest: {
|
|
1311
|
+
cmd: {
|
|
1312
|
+
description: string;
|
|
1313
|
+
};
|
|
1314
|
+
render: {
|
|
1315
|
+
description: string;
|
|
1316
|
+
optionPlacement: string;
|
|
1317
|
+
errorMissingTransformation: string;
|
|
1318
|
+
};
|
|
1319
|
+
};
|
|
1295
1320
|
module: {
|
|
1296
1321
|
cmd: {
|
|
1297
1322
|
description: string;
|
|
1298
1323
|
};
|
|
1299
1324
|
add: {
|
|
1300
1325
|
description: string;
|
|
1326
|
+
spinnerAdding: string;
|
|
1327
|
+
spinnerAdded: string;
|
|
1301
1328
|
optionModuleType: string;
|
|
1302
1329
|
optionUiType: string;
|
|
1303
1330
|
optionProduct: string;
|
|
@@ -1336,6 +1363,7 @@ export declare const Text: {
|
|
|
1336
1363
|
warnNoFragment: string;
|
|
1337
1364
|
warnNoManifestDelta: string;
|
|
1338
1365
|
warnAddedAppCompatibility: (existingProducts: string[], newProduct: string) => string;
|
|
1366
|
+
warnAddedGlobalAppCompatibility: (requiredProduct: "jira" | "confluence") => string;
|
|
1339
1367
|
warnUnsupportedFileOperations: (ops: string[]) => string;
|
|
1340
1368
|
warnViteConfigExists: (configPath: string) => string;
|
|
1341
1369
|
errorViteConfigNestedInput: () => string;
|
package/out/ui/text.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"text.d.ts","sourceRoot":"","sources":["../../src/ui/text.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,aAAa,EAAE,MAAM,MAAM,CAAC;AAErC,OAAO,EAAE,GAAG,EAAE,MAAM,KAAK,CAAC;AAC1B,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAO9D,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,0BAA0B,CAAC,EAAE,OAAO,CAAC;CACtC;AAED,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,MAAM,CAAC;CACjB;AAwBD,wBAAgB,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,CAEjE;AAKD,eAAO,MAAM,UAAU,GAAI,MAAM,MAAM,KAAG,MAAsD,CAAC;
|
|
1
|
+
{"version":3,"file":"text.d.ts","sourceRoot":"","sources":["../../src/ui/text.ts"],"names":[],"mappings":"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"}
|
package/out/ui/text.js
CHANGED
|
@@ -33,10 +33,11 @@ const keytarAccessErrorBase = (message) => `Keytar error detected: ${message}`;
|
|
|
33
33
|
const capitalise = (word) => word.charAt(0).toUpperCase() + word.slice(1);
|
|
34
34
|
exports.capitalise = capitalise;
|
|
35
35
|
const getLintMessage = (line, column, message, level, colourFunction, reference) => `${chalk_1.default.dim(`${line}:${column}`.padEnd(7))} ${colourFunction(level.padEnd(8))} ${message} ${chalk_1.default.dim(reference)}\n`;
|
|
36
|
-
const checkLintTotalPlurals = (numErrors, numWarnings, numFixableErrors, numFixableWarnings) => ({
|
|
36
|
+
const checkLintTotalPlurals = (numErrors, numWarnings, numApprovals, numFixableErrors, numFixableWarnings) => ({
|
|
37
37
|
pluralCheckedErrors: `${numErrors} ${numErrors === 1 ? 'error' : 'errors'}`,
|
|
38
38
|
pluralCheckedWarnings: `${numWarnings} ${numWarnings === 1 ? 'warning' : 'warnings'}`,
|
|
39
|
-
|
|
39
|
+
pluralCheckedApprovals: `${numApprovals} ${numApprovals === 1 ? 'approval' : 'approvals'}`,
|
|
40
|
+
pluralCheckedTotal: `${numErrors + numWarnings + numApprovals} ${numErrors + numWarnings + numApprovals === 1 ? 'issue' : 'issues'}`,
|
|
40
41
|
pluralCheckedFixableErrors: `${numFixableErrors} ${numFixableErrors === 1 ? 'error' : 'errors'}`,
|
|
41
42
|
pluralCheckedFixableWarnings: `${numFixableWarnings} ${numFixableWarnings === 1 ? 'warning' : 'warnings'}`
|
|
42
43
|
});
|
|
@@ -257,7 +258,7 @@ What do you like or don't like about Forge? Share your feedback below or press C
|
|
|
257
258
|
success: (appName) => `Created ${appName}`,
|
|
258
259
|
successDetails: (directory, validEnvironmentOptions) => `\nYour app is ready to work on, deploy, and install. We created ${validEnvironmentOptions.length} environments you can deploy to: ${validEnvironmentOptions
|
|
259
260
|
.map(environment_1.environmentToOption)
|
|
260
|
-
.join(', ')}.\n\nChange to directory ${chalk_1.default.bold(directory)} to see your app files
|
|
261
|
+
.join(', ')}.\n\nChange to directory ${chalk_1.default.bold(directory)} to see your app files.\n\n${chalk_1.default.green('Tip: You can add more modules to your app later with')} ${forge('module', 'add')}${chalk_1.default.green('.')} ${chalk_1.default.dim('(module commands are in Preview)')}`
|
|
261
262
|
},
|
|
262
263
|
intro: (givenDirectory) => `Creating an app in directory ${chalk_1.default.bold(givenDirectory)}.\n`,
|
|
263
264
|
introWithCurrentDirectory: (currentDirectory) => `Creating an app in your current directory:\n\n ${chalk_1.default.bold(currentDirectory)}\n`,
|
|
@@ -519,6 +520,7 @@ What do you like or don't like about Forge? Share your feedback below or press C
|
|
|
519
520
|
error: {
|
|
520
521
|
noDeployUrl: "Couldn't find deployment URL",
|
|
521
522
|
noPresignedUrls: "Couldn't find presigned URLs",
|
|
523
|
+
noManifestUrl: "Couldn't find manifest URL",
|
|
522
524
|
noUploadId: "Couldn't find uploadId",
|
|
523
525
|
noManifestInZip: (manifestFilename) => `Couldn't find ${manifestFilename} file in the zip archive. Add one.`,
|
|
524
526
|
noManifestAtPath: (path) => `We couldn't find the artifact file ${path}.`,
|
|
@@ -833,7 +835,7 @@ What do you like or don't like about Forge? Share your feedback below or press C
|
|
|
833
835
|
taskLint: {
|
|
834
836
|
lintError: log_color_1.LogColor.error(`Error: The build failed due to errors in the app code. Fix the errors before rerunning ${forge('build')}, or run ${forge('build', '--no-verify')} to skip the linter.\n`),
|
|
835
837
|
lintWarning: (numWarnings) => {
|
|
836
|
-
const { pluralCheckedTotal } = checkLintTotalPlurals(0, numWarnings, 0, 0);
|
|
838
|
+
const { pluralCheckedTotal } = checkLintTotalPlurals(0, numWarnings, 0, 0, 0);
|
|
837
839
|
return log_color_1.LogColor.warn(`${pluralCheckedTotal} found. Run ${forge('lint')} to review the warnings.`);
|
|
838
840
|
}
|
|
839
841
|
},
|
|
@@ -864,9 +866,12 @@ What do you like or don't like about Forge? Share your feedback below or press C
|
|
|
864
866
|
return `Deploying ${appName}${buildTagText} to ${exports.Text.env.displayEnvironment(envKey, envType)}...`;
|
|
865
867
|
},
|
|
866
868
|
success: 'Deployed\n',
|
|
867
|
-
successDetails: (appName, envKey, envType, buildTag) => {
|
|
869
|
+
successDetails: (appName, envKey, envType, buildTag, numApprovals) => {
|
|
868
870
|
const buildTagText = buildTag ? ` using build with tag ${buildTag}` : '';
|
|
869
|
-
|
|
871
|
+
const approvalsText = numApprovals && numApprovals > 0
|
|
872
|
+
? ` with ${numApprovals} ${numApprovals === 1 ? 'approval' : 'approvals'} acknowledged`
|
|
873
|
+
: '';
|
|
874
|
+
return `Deployed ${appName}${buildTagText} to the ${exports.Text.env.displayEnvironment(envKey, envType)} environment${approvalsText}.`;
|
|
870
875
|
},
|
|
871
876
|
distributePageLink: (appId) => `To install on a site that you're an admin of, run ${forge('install')}.\n` +
|
|
872
877
|
'To install on any other site, generate an installation link in the developer console and share it with the site admin: ' +
|
|
@@ -875,9 +880,15 @@ What do you like or don't like about Forge? Share your feedback below or press C
|
|
|
875
880
|
taskLint: {
|
|
876
881
|
lintError: log_color_1.LogColor.error(`Error: The deploy failed due to errors in the app code. Fix the errors before rerunning ${forge('deploy')}, or run ${forge('deploy', '--no-verify')} to skip the linter.\n`),
|
|
877
882
|
lintWarning: (numWarnings) => {
|
|
878
|
-
const { pluralCheckedTotal } = checkLintTotalPlurals(0, numWarnings, 0, 0);
|
|
883
|
+
const { pluralCheckedTotal } = checkLintTotalPlurals(0, numWarnings, 0, 0, 0);
|
|
879
884
|
return log_color_1.LogColor.warn(`${pluralCheckedTotal} found. Run ${forge('lint')} to review the warnings.`);
|
|
880
|
-
}
|
|
885
|
+
},
|
|
886
|
+
lintApproval: (numApprovals, ruleNames) => {
|
|
887
|
+
const { pluralCheckedApprovals } = checkLintTotalPlurals(0, 0, numApprovals, 0, 0);
|
|
888
|
+
const rulesArg = ruleNames && ruleNames.length > 0 ? ruleNames.join(' ') : '[ruleName]';
|
|
889
|
+
return log_color_1.LogColor.approval(`The deploy failed due to ${pluralCheckedApprovals} requested. Run ${forge('deploy', `--approve ${rulesArg}`)} to acknowledge and proceed.\n`);
|
|
890
|
+
},
|
|
891
|
+
lintErrorsWithApprovals: log_color_1.LogColor.error(`Fix the error above before approving deployment rules.\n`)
|
|
881
892
|
},
|
|
882
893
|
hasNoAppInstallationsForEnv: {
|
|
883
894
|
hasNoAppInstallationsForEnvError: log_color_1.LogColor.error(`Error: The deployment failed due to errors while trying to determine if the app has any installations for the deployed environment.`)
|
|
@@ -897,6 +908,9 @@ What do you like or don't like about Forge? Share your feedback below or press C
|
|
|
897
908
|
skipRollout: {
|
|
898
909
|
description: 'Skip rolling release rollout after deployment'
|
|
899
910
|
},
|
|
911
|
+
approveRule: {
|
|
912
|
+
description: 'list of validation rules to approve'
|
|
913
|
+
},
|
|
900
914
|
connectKeyChange: {
|
|
901
915
|
continueChange: `Do you wish to continue with changing the Connect key?`,
|
|
902
916
|
continueDelete: `Do you wish to continue with deleting the Connect key?`,
|
|
@@ -1001,7 +1015,16 @@ What do you like or don't like about Forge? Share your feedback below or press C
|
|
|
1001
1015
|
installationLimitWarning: 'Warning: Site exceeds recommended app limit\n' +
|
|
1002
1016
|
'This site has more than 100 apps installed. Exceeding this limit may cause future installations to fail.',
|
|
1003
1017
|
success: {
|
|
1004
|
-
banner: (envKey, envType, product, site) => `Your app in the ${exports.Text.env.displayEnvironment(envKey, envType)} environment is now installed in ${product} on ${buildTerminalLink(site)}. You can install the app into other Atlassian apps by running the ${chalk_1.default.bold('forge install')} command again
|
|
1018
|
+
banner: (envKey, envType, product, site) => `Your app in the ${exports.Text.env.displayEnvironment(envKey, envType)} environment is now installed in ${product} on ${buildTerminalLink(site)}. You can install the app into other Atlassian apps by running the ${chalk_1.default.bold('forge install')} command again.`,
|
|
1019
|
+
deeplinks: (links) => {
|
|
1020
|
+
if (links.length === 1) {
|
|
1021
|
+
return `\nCheck it out here: ${buildTerminalLink(links[0].url)}`;
|
|
1022
|
+
}
|
|
1023
|
+
const linkList = links
|
|
1024
|
+
.map((link) => link.label ? `- ${link.label}: ${buildTerminalLink(link.url)}` : `- ${buildTerminalLink(link.url)}`)
|
|
1025
|
+
.join('\n');
|
|
1026
|
+
return `\nCheck them out here:\n${linkList}`;
|
|
1027
|
+
}
|
|
1005
1028
|
},
|
|
1006
1029
|
error: {
|
|
1007
1030
|
activationIdMissing: (url, context) => `Atlassian app is not activated on ${url}. Enable ${context} in your suite or contact your administrator for assistance.`,
|
|
@@ -1288,28 +1311,32 @@ ${buildTerminalLink(link)}\n`,
|
|
|
1288
1311
|
cmd: 'check the source files for common errors',
|
|
1289
1312
|
running: `Running ${forge('lint')}...`,
|
|
1290
1313
|
noProblems: 'No issues found.',
|
|
1314
|
+
approvalRequired: chalk_1.default.cyan(` Approval required, fixable with ${forge('deploy', '--approve <ruleName..>')}.`),
|
|
1291
1315
|
noFixableProblem: chalk_1.default.red(` Issue found is not automatically fixable with ${forge('lint')}.`),
|
|
1292
1316
|
noFixableProblems: chalk_1.default.red(` Issues found are not automatically fixable with ${forge('lint')}.`),
|
|
1293
1317
|
filename: chalk_1.default.underline,
|
|
1318
|
+
errorMissingManifest: `Missing manifest`,
|
|
1319
|
+
errorInvalidManifest: `Invalid manifest`,
|
|
1294
1320
|
linterFailed: (linterClass, failure) => chalk_1.default.yellow(`${chalk_1.default.bold('Warning:')} Could not perform some linting actions for ${chalk_1.default.bold(linterClass)} due to unhandled error "${failure}".\n`),
|
|
1295
1321
|
fixed: (numFixableErrors, numFixableWarnings) => {
|
|
1296
|
-
const { pluralCheckedFixableErrors, pluralCheckedFixableWarnings } = checkLintTotalPlurals(0, 0, numFixableErrors, numFixableWarnings);
|
|
1322
|
+
const { pluralCheckedFixableErrors, pluralCheckedFixableWarnings } = checkLintTotalPlurals(0, 0, 0, numFixableErrors, numFixableWarnings);
|
|
1297
1323
|
return `${greenTick} Fixed ${pluralCheckedFixableErrors} and ${pluralCheckedFixableWarnings}`;
|
|
1298
1324
|
},
|
|
1299
1325
|
fixFollowUp: `Run ${forge('lint')} to review outstanding errors and warnings`,
|
|
1300
1326
|
error: (line, column, message, reference) => getLintMessage(line, column, message, 'error', log_color_1.LogColor.error, reference),
|
|
1301
|
-
summary: (numErrors, numWarnings, numFixableErrors, numFixableWarnings) => {
|
|
1302
|
-
const { pluralCheckedErrors, pluralCheckedWarnings, pluralCheckedTotal } = checkLintTotalPlurals(numErrors, numWarnings, numFixableErrors, numFixableWarnings);
|
|
1303
|
-
const colourFunction = numErrors ? log_color_1.LogColor.error : log_color_1.LogColor.warn;
|
|
1327
|
+
summary: (numErrors, numWarnings, numApprovals, numFixableErrors, numFixableWarnings) => {
|
|
1328
|
+
const { pluralCheckedErrors, pluralCheckedWarnings, pluralCheckedApprovals, pluralCheckedTotal } = checkLintTotalPlurals(numErrors, numWarnings, numApprovals, numFixableErrors, numFixableWarnings);
|
|
1329
|
+
const colourFunction = numErrors ? log_color_1.LogColor.error : numWarnings ? log_color_1.LogColor.warn : log_color_1.LogColor.approval;
|
|
1304
1330
|
const warningCharacter = numErrors ? 'X' : '⚠';
|
|
1305
|
-
return colourFunction(`${warningCharacter} ${pluralCheckedTotal} (${pluralCheckedErrors}, ${pluralCheckedWarnings})`);
|
|
1331
|
+
return colourFunction(`${warningCharacter} ${pluralCheckedTotal} (${pluralCheckedErrors}, ${pluralCheckedWarnings}, ${pluralCheckedApprovals})`);
|
|
1306
1332
|
},
|
|
1307
1333
|
fixSummary: (numErrors, numFixableErrors, numFixableWarnings) => {
|
|
1308
|
-
const { pluralCheckedFixableErrors, pluralCheckedFixableWarnings } = checkLintTotalPlurals(0, 0, numFixableErrors, numFixableWarnings);
|
|
1334
|
+
const { pluralCheckedFixableErrors, pluralCheckedFixableWarnings } = checkLintTotalPlurals(0, 0, 0, numFixableErrors, numFixableWarnings);
|
|
1309
1335
|
const colourFunction = numErrors ? log_color_1.LogColor.error : log_color_1.LogColor.warn;
|
|
1310
1336
|
return colourFunction(` Run ${forge('lint', '--fix')} to automatically fix ${pluralCheckedFixableErrors} and ${pluralCheckedFixableWarnings}.\n`);
|
|
1311
1337
|
},
|
|
1312
|
-
warning: (line, column, message, reference) => getLintMessage(line, column, message, 'warning', log_color_1.LogColor.warn, reference)
|
|
1338
|
+
warning: (line, column, message, reference) => getLintMessage(line, column, message, 'warning', log_color_1.LogColor.warn, reference),
|
|
1339
|
+
approval: (line, column, message, reference) => getLintMessage(line, column, message, 'approval', log_color_1.LogColor.approval, reference)
|
|
1313
1340
|
},
|
|
1314
1341
|
repositories: {
|
|
1315
1342
|
cmd: {
|
|
@@ -1358,7 +1385,9 @@ ${buildTerminalLink(link)}\n`,
|
|
|
1358
1385
|
creatingNewContainer: (key) => `Creating new container with key '${key}'.`,
|
|
1359
1386
|
start: 'Creating container...',
|
|
1360
1387
|
success: 'Container created.',
|
|
1361
|
-
createdRepositoryURI: (uri) => `New repository URI: ${uri}
|
|
1388
|
+
createdRepositoryURI: (uri) => `New repository URI: ${uri}`,
|
|
1389
|
+
authRequired: (key) => `To push images to the '${key}' repository, you need to authenticate first. ` +
|
|
1390
|
+
'Run `forge containers docker-login` (or `forge containers get-login`) to authenticate, then push your image.'
|
|
1362
1391
|
},
|
|
1363
1392
|
login: {
|
|
1364
1393
|
cmd: {
|
|
@@ -1565,12 +1594,24 @@ When errors occur during Forge command execution, error details will be sent to
|
|
|
1565
1594
|
dynamicTable: {
|
|
1566
1595
|
exiting: 'Exiting...'
|
|
1567
1596
|
},
|
|
1597
|
+
manifest: {
|
|
1598
|
+
cmd: {
|
|
1599
|
+
description: 'manage app manifest'
|
|
1600
|
+
},
|
|
1601
|
+
render: {
|
|
1602
|
+
description: 'render the app manifest after applying environment transformations',
|
|
1603
|
+
optionPlacement: 'placement where the app is deployed, for example a DaRe region or Isolated Cloud ID',
|
|
1604
|
+
errorMissingTransformation: 'Unable to retrieve transformed manifest'
|
|
1605
|
+
}
|
|
1606
|
+
},
|
|
1568
1607
|
module: {
|
|
1569
1608
|
cmd: {
|
|
1570
1609
|
description: '[Preview] Commands for managing modules in your app. ⚠️ These commands may modify your app files (manifest.yml, source files, and package.json).'
|
|
1571
1610
|
},
|
|
1572
1611
|
add: {
|
|
1573
1612
|
description: '[Preview] add a module to your Forge App. ⚠️ This will modify your app files (manifest.yml, source files, and package.json).',
|
|
1613
|
+
spinnerAdding: 'Adding module...',
|
|
1614
|
+
spinnerAdded: 'Module added.',
|
|
1574
1615
|
optionModuleType: 'module type to add (e.g. jira:issuePanel, jiraServiceManagement:portalFooter, confluence:macro, etc.)',
|
|
1575
1616
|
optionUiType: 'UI framework (ui-kit, custom-ui)',
|
|
1576
1617
|
optionProduct: 'target product (Jira, Jira Service Management, Confluence, etc.)',
|
|
@@ -1611,6 +1652,7 @@ When errors occur during Forge command execution, error details will be sent to
|
|
|
1611
1652
|
warnAddedAppCompatibility: (existingProducts, newProduct) => `Adding a "${newProduct}" module to an app that already targets ${existingProducts
|
|
1612
1653
|
.map((p) => `"${p}"`)
|
|
1613
1654
|
.join(', ')}; updated app.compatibility so the app must be installed to "${newProduct}" to see changes.`,
|
|
1655
|
+
warnAddedGlobalAppCompatibility: (requiredProduct) => `Adding a "global" module requires app.compatibility for both "jira" and "confluence"\nUpdated app.compatibility and marked "${requiredProduct}" as required.`,
|
|
1614
1656
|
warnUnsupportedFileOperations: (ops) => `Skipping ${ops.length} unsupported file operation(s): ${ops.join(', ')}. Only "create" operations are supported.`,
|
|
1615
1657
|
warnViteConfigExists: (configPath) => `An existing vite.config.js at ${configPath} could not be merged automatically. Skipping vite config changes; re-run with --force to overwrite.`,
|
|
1616
1658
|
errorViteConfigNestedInput: () => `Cannot safely merge vite.config.js: the existing "input" block contains a nested object. Merging would corrupt the file. Re-run with --force to regenerate the config from scratch, or edit the input map manually.`,
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@forge/cli-shared",
|
|
3
|
-
"version": "9.3.0-next.
|
|
3
|
+
"version": "9.3.0-next.20",
|
|
4
4
|
"description": "Common functionality for Forge CLI",
|
|
5
5
|
"author": "Atlassian",
|
|
6
6
|
"license": "SEE LICENSE IN LICENSE.txt",
|
|
@@ -12,12 +12,13 @@
|
|
|
12
12
|
"generate-graphql-types": "graphql-codegen --config src/graphql/codegen.yml"
|
|
13
13
|
},
|
|
14
14
|
"dependencies": {
|
|
15
|
-
"@forge/manifest": "13.3.0-next.
|
|
15
|
+
"@forge/manifest": "13.3.0-next.11",
|
|
16
16
|
"@forge/util": "3.0.0",
|
|
17
17
|
"@forge/i18n": "1.0.0",
|
|
18
18
|
"@sentry/node": "7.106.0",
|
|
19
19
|
"@vercel/detect-agent": "^1.2.3",
|
|
20
|
-
"adm-zip": "^0.
|
|
20
|
+
"adm-zip": "^0.6.0",
|
|
21
|
+
"archiver": "^8.0.0",
|
|
21
22
|
"array.prototype.flatmap": "^1.3.3",
|
|
22
23
|
"case": "^1.6.3",
|
|
23
24
|
"chalk": "^4.1.2",
|