n8n 2.46.2 → 2.46.4
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/dist/build.tsbuildinfo +1 -1
- package/dist/modules/breaking-changes/breaking-changes.service.d.ts +8 -2
- package/dist/modules/breaking-changes/breaking-changes.service.js +76 -27
- package/dist/modules/breaking-changes/breaking-changes.service.js.map +1 -1
- package/dist/modules/breaking-changes/database/repositories/migration-finding.repository.d.ts +3 -1
- package/dist/modules/breaking-changes/database/repositories/migration-finding.repository.js +2 -2
- package/dist/modules/breaking-changes/database/repositories/migration-finding.repository.js.map +1 -1
- package/dist/modules/breaking-changes/notifications/migration-finding-notification.service.d.ts +1 -0
- package/dist/modules/breaking-changes/notifications/migration-finding-notification.service.js +8 -3
- package/dist/modules/breaking-changes/notifications/migration-finding-notification.service.js.map +1 -1
- package/dist/modules/breaking-changes/owners/migration-owner-suggestion.service.d.ts +7 -3
- package/dist/modules/breaking-changes/owners/migration-owner-suggestion.service.js +2 -2
- package/dist/modules/breaking-changes/owners/migration-owner-suggestion.service.js.map +1 -1
- package/dist/modules/breaking-changes/query/migration-finding-query.service.d.ts +1 -0
- package/dist/modules/breaking-changes/query/migration-finding-query.service.js +18 -3
- package/dist/modules/breaking-changes/query/migration-finding-query.service.js.map +1 -1
- package/dist/modules/breaking-changes/rules/v3/slack-credential-secret.d.ts +1 -1
- package/dist/modules/breaking-changes/rules/v3/slack-credential-secret.js +13 -10
- package/dist/modules/breaking-changes/rules/v3/slack-credential-secret.js.map +1 -1
- package/dist/modules/breaking-changes/rules/v3/slack-credential-signature-secret.rule.d.ts +2 -2
- package/dist/modules/breaking-changes/rules/v3/slack-credential-signature-secret.rule.js +3 -2
- package/dist/modules/breaking-changes/rules/v3/slack-credential-signature-secret.rule.js.map +1 -1
- package/dist/modules/breaking-changes/rules/v3/slack-trigger-signature-secret.rule.d.ts +2 -2
- package/dist/modules/breaking-changes/rules/v3/slack-trigger-signature-secret.rule.js +3 -2
- package/dist/modules/breaking-changes/rules/v3/slack-trigger-signature-secret.rule.js.map +1 -1
- package/dist/modules/breaking-changes/sync/migration-finding-diff.d.ts +2 -0
- package/dist/modules/breaking-changes/sync/migration-finding-diff.js +33 -15
- package/dist/modules/breaking-changes/sync/migration-finding-diff.js.map +1 -1
- package/dist/modules/breaking-changes/sync/migration-finding-sync.listener.js +6 -0
- package/dist/modules/breaking-changes/sync/migration-finding-sync.listener.js.map +1 -1
- package/dist/modules/breaking-changes/sync/migration-finding-sync.service.js +37 -11
- package/dist/modules/breaking-changes/sync/migration-finding-sync.service.js.map +1 -1
- package/dist/modules/breaking-changes/types/rule.types.d.ts +5 -1
- package/dist/modules/breaking-changes/types/rule.types.js +5 -1
- package/dist/modules/breaking-changes/types/rule.types.js.map +1 -1
- package/package.json +33 -33
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"migration-finding-query.service.js","sourceRoot":"","sources":["../../../../src/modules/breaking-changes/query/migration-finding-query.service.ts"],"names":[],"mappings":";;;;;;;;;;;;AAUA,wDAA6C;AAC7C,gCAOiB;AACjB,gCAAkC;AAClC,wCAA4C;AAC5C,uCAAyC;AAEzC,gHAAmF;AACnF,sGAAyE;AACzE,0EAAoE;AACpE,kHAA4G;AAC5G,wGAAmG;AACnG,sHAAgH;AAChH,gEAA0D;AAC1D,6DAA2D;AAC3D,sFAAiF;AACjF,
|
|
1
|
+
{"version":3,"file":"migration-finding-query.service.js","sourceRoot":"","sources":["../../../../src/modules/breaking-changes/query/migration-finding-query.service.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,4 +2,4 @@ import type { CredentialsRepository } from '@n8n/db';
|
|
|
2
2
|
import type { INode } from 'n8n-workflow';
|
|
3
3
|
export declare const SLACK_TRIGGER_NODE_TYPE = "n8n-nodes-base.slackTrigger";
|
|
4
4
|
export declare const SLACK_DOCUMENTATION_URL = "https://docs.n8n.io/integrations/builtin/trigger-nodes/n8n-nodes-base.slacktrigger/#verify-the-webhook";
|
|
5
|
-
export declare function findSlackNodesWithoutSignatureSecret(credentialsRepository: CredentialsRepository, nodes: INode[]): Promise<INode[]>;
|
|
5
|
+
export declare function findSlackNodesWithoutSignatureSecret(credentialsRepository: CredentialsRepository, nodes: INode[], secretMissing: Map<string, boolean>): Promise<INode[]>;
|
|
@@ -9,25 +9,28 @@ exports.SLACK_DOCUMENTATION_URL = 'https://docs.n8n.io/integrations/builtin/trig
|
|
|
9
9
|
function slackCredentialId(node) {
|
|
10
10
|
return node.credentials?.[SLACK_CREDENTIAL_TYPE]?.id ?? null;
|
|
11
11
|
}
|
|
12
|
-
async function findSlackNodesWithoutSignatureSecret(credentialsRepository, nodes) {
|
|
12
|
+
async function findSlackNodesWithoutSignatureSecret(credentialsRepository, nodes, secretMissing) {
|
|
13
13
|
const slackNodes = nodes.flatMap((node) => {
|
|
14
14
|
const credentialId = slackCredentialId(node);
|
|
15
15
|
return credentialId === null ? [] : [{ node, credentialId }];
|
|
16
16
|
});
|
|
17
17
|
if (slackNodes.length === 0)
|
|
18
18
|
return [];
|
|
19
|
-
const
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
19
|
+
const unchecked = [...new Set(slackNodes.map(({ credentialId }) => credentialId))].filter((id) => !secretMissing.has(id));
|
|
20
|
+
if (unchecked.length > 0) {
|
|
21
|
+
for (const credential of await credentialsRepository.getManyByIds(unchecked)) {
|
|
22
|
+
if (credential.type !== SLACK_CREDENTIAL_TYPE)
|
|
23
|
+
continue;
|
|
24
|
+
const { signatureSecret } = await new n8n_core_1.Credentials({ id: credential.id, name: credential.name }, credential.type, credential.data).getData();
|
|
25
|
+
secretMissing.set(credential.id, typeof signatureSecret !== 'string' || signatureSecret === '');
|
|
26
|
+
}
|
|
27
|
+
for (const id of unchecked) {
|
|
28
|
+
if (!secretMissing.has(id))
|
|
29
|
+
secretMissing.set(id, false);
|
|
27
30
|
}
|
|
28
31
|
}
|
|
29
32
|
return slackNodes
|
|
30
|
-
.filter(({ credentialId }) =>
|
|
33
|
+
.filter(({ credentialId }) => secretMissing.get(credentialId) === true)
|
|
31
34
|
.map(({ node }) => node);
|
|
32
35
|
}
|
|
33
36
|
//# sourceMappingURL=slack-credential-secret.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"slack-credential-secret.js","sourceRoot":"","sources":["../../../../../src/modules/breaking-changes/rules/v3/slack-credential-secret.ts"],"names":[],"mappings":";;;;AACA,uCAAuC;AAG1B,QAAA,uBAAuB,GAAG,6BAA6B,CAAC;AACrE,MAAM,qBAAqB,GAAG,UAAU,CAAC;AAE5B,QAAA,uBAAuB,GACnC,wGAAwG,CAAC;AAE1G,SAAS,iBAAiB,CAAC,IAAW;IACrC,OAAO,IAAI,CAAC,WAAW,EAAE,CAAC,qBAAqB,CAAC,EAAE,EAAE,IAAI,IAAI,CAAC;AAC9D,CAAC;
|
|
1
|
+
{"version":3,"file":"slack-credential-secret.js","sourceRoot":"","sources":["../../../../../src/modules/breaking-changes/rules/v3/slack-credential-secret.ts"],"names":[],"mappings":";;;;AACA,uCAAuC;AAG1B,QAAA,uBAAuB,GAAG,6BAA6B,CAAC;AACrE,MAAM,qBAAqB,GAAG,UAAU,CAAC;AAE5B,QAAA,uBAAuB,GACnC,wGAAwG,CAAC;AAE1G,SAAS,iBAAiB,CAAC,IAAW;IACrC,OAAO,IAAI,CAAC,WAAW,EAAE,CAAC,qBAAqB,CAAC,EAAE,EAAE,IAAI,IAAI,CAAC;AAC9D,CAAC;AASM,KAAK,+CACX,qBAA4C,EAC5C,KAAc,EACd,aAAmC;IAEnC,MAAM,UAAU,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;QACzC,MAAM,YAAY,GAAG,iBAAiB,CAAC,IAAI,CAAC,CAAC;QAC7C,OAAO,YAAY,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC,CAAC;IAC9D,CAAC,CAAC,CAAC;IACH,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IAEvC,MAAM,SAAS,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,EAAE,YAAY,EAAE,EAAE,EAAE,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,MAAM,CACxF,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,aAAa,CAAC,GAAG,CAAC,EAAE,CAAC,CAC9B,CAAC;IACF,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC1B,KAAK,MAAM,UAAU,IAAI,MAAM,qBAAqB,CAAC,YAAY,CAAC,SAAS,CAAC,EAAE,CAAC;YAE9E,IAAI,UAAU,CAAC,IAAI,KAAK,qBAAqB;gBAAE,SAAS;YACxD,MAAM,EAAE,eAAe,EAAE,GAAG,MAAM,IAAI,sBAAW,CAChD,EAAE,EAAE,EAAE,UAAU,CAAC,EAAE,EAAE,IAAI,EAAE,UAAU,CAAC,IAAI,EAAE,EAC5C,UAAU,CAAC,IAAI,EACf,UAAU,CAAC,IAAI,CACf,CAAC,OAAO,EAAE,CAAC;YACZ,aAAa,CAAC,GAAG,CAChB,UAAU,CAAC,EAAE,EACb,OAAO,eAAe,KAAK,QAAQ,IAAI,eAAe,KAAK,EAAE,CAC7D,CAAC;QACH,CAAC;QAED,KAAK,MAAM,EAAE,IAAI,SAAS,EAAE,CAAC;YAC5B,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,EAAE,CAAC;gBAAE,aAAa,CAAC,GAAG,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;QAC1D,CAAC;IACF,CAAC;IAED,OAAO,UAAU;SACf,MAAM,CAAC,CAAC,EAAE,YAAY,EAAE,EAAE,EAAE,CAAC,aAAa,CAAC,GAAG,CAAC,YAAY,CAAC,KAAK,IAAI,CAAC;SACtE,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC;AAC3B,CAAC"}
|
|
@@ -2,12 +2,12 @@ import type { BreakingChangeAffectedWorkflow, BreakingChangeRecommendation } fro
|
|
|
2
2
|
import { CredentialsRepository } from '@n8n/db';
|
|
3
3
|
import type { WorkflowEntity } from '@n8n/db';
|
|
4
4
|
import type { INode } from 'n8n-workflow';
|
|
5
|
-
import type { BreakingChangeRuleMetadata, IBreakingChangeWorkflowRule, WorkflowDetectionReport } from '../../types';
|
|
5
|
+
import type { BreakingChangeRuleMetadata, IBreakingChangeWorkflowRule, WorkflowDetectionReport, WorkflowScanContext } from '../../types';
|
|
6
6
|
export declare class SlackCredentialSignatureSecretRule implements IBreakingChangeWorkflowRule {
|
|
7
7
|
private readonly credentialsRepository;
|
|
8
8
|
constructor(credentialsRepository: CredentialsRepository);
|
|
9
9
|
id: string;
|
|
10
10
|
getMetadata(): BreakingChangeRuleMetadata;
|
|
11
11
|
getRecommendations(_workflowResults: BreakingChangeAffectedWorkflow[]): Promise<BreakingChangeRecommendation[]>;
|
|
12
|
-
detectWorkflow(workflow: WorkflowEntity, _nodesGroupedByType: Map<string, INode[]
|
|
12
|
+
detectWorkflow(workflow: WorkflowEntity, _nodesGroupedByType: Map<string, INode[]>, context?: WorkflowScanContext): Promise<WorkflowDetectionReport>;
|
|
13
13
|
}
|
|
@@ -14,6 +14,7 @@ const db_1 = require("@n8n/db");
|
|
|
14
14
|
const decorators_1 = require("@n8n/decorators");
|
|
15
15
|
const slack_credential_secret_1 = require("./slack-credential-secret");
|
|
16
16
|
const detection_report_1 = require("../../detection-report");
|
|
17
|
+
const types_1 = require("../../types");
|
|
17
18
|
let SlackCredentialSignatureSecretRule = class SlackCredentialSignatureSecretRule {
|
|
18
19
|
constructor(credentialsRepository) {
|
|
19
20
|
this.credentialsRepository = credentialsRepository;
|
|
@@ -37,8 +38,8 @@ let SlackCredentialSignatureSecretRule = class SlackCredentialSignatureSecretRul
|
|
|
37
38
|
},
|
|
38
39
|
];
|
|
39
40
|
}
|
|
40
|
-
async detectWorkflow(workflow, _nodesGroupedByType) {
|
|
41
|
-
const affectedNodes = await (0, slack_credential_secret_1.findSlackNodesWithoutSignatureSecret)(this.credentialsRepository, workflow.nodes.filter((node) => node.type !== slack_credential_secret_1.SLACK_TRIGGER_NODE_TYPE));
|
|
41
|
+
async detectWorkflow(workflow, _nodesGroupedByType, context = (0, types_1.createWorkflowScanContext)()) {
|
|
42
|
+
const affectedNodes = await (0, slack_credential_secret_1.findSlackNodesWithoutSignatureSecret)(this.credentialsRepository, workflow.nodes.filter((node) => node.type !== slack_credential_secret_1.SLACK_TRIGGER_NODE_TYPE), context.slackSignatureSecretMissing);
|
|
42
43
|
return (0, detection_report_1.reportAffectedNodes)(affectedNodes, (node) => ({
|
|
43
44
|
title: `Node '${node.name}' uses a Slack API credential without a signature secret`,
|
|
44
45
|
description: 'The node keeps working, but you cannot save the Slack API credential again until you add the signature secret of your Slack app to it.',
|
package/dist/modules/breaking-changes/rules/v3/slack-credential-signature-secret.rule.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"slack-credential-signature-secret.rule.js","sourceRoot":"","sources":["../../../../../src/modules/breaking-changes/rules/v3/slack-credential-signature-secret.rule.ts"],"names":[],"mappings":";;;;;;;;;;;;AACA,gCAAgD;AAEhD,gDAAqD;AAGrD,uEAImC;AACnC,6DAA6D;
|
|
1
|
+
{"version":3,"file":"slack-credential-signature-secret.rule.js","sourceRoot":"","sources":["../../../../../src/modules/breaking-changes/rules/v3/slack-credential-signature-secret.rule.ts"],"names":[],"mappings":";;;;;;;;;;;;AACA,gCAAgD;AAEhD,gDAAqD;AAGrD,uEAImC;AACnC,6DAA6D;AAO7D,uCAAgF;AAGzE,IAAM,kCAAkC,GAAxC,MAAM,kCAAkC;IAC9C,YAA6B,qBAA4C;QAA5C,0BAAqB,GAArB,qBAAqB,CAAuB;QAEzE,OAAE,GAAG,sCAAsC,CAAC;IAFgC,CAAC;IAI7E,WAAW;QACV,OAAO;YACN,OAAO,EAAE,IAAI;YACb,KAAK,EAAE,iEAAiE;YACxE,WAAW,EACV,wNAAwN;YACzN,QAAQ,YAAiC;YACzC,MAAM,EAAE,mBAAmB;YAC3B,gBAAgB,EAAE,iDAAuB;SACzC,CAAC;IACH,CAAC;IAGD,KAAK,CAAC,kBAAkB,CACvB,gBAAkD;QAElD,OAAO;YACN;gBACC,MAAM,EAAE,sDAAsD;gBAC9D,WAAW,EACV,+OAA+O;aAChP;SACD,CAAC;IACH,CAAC;IAED,KAAK,CAAC,cAAc,CACnB,QAAwB,EACxB,mBAAyC,EACzC,OAAO,GAAwB,IAAA,iCAAyB,GAAE;QAG1D,MAAM,aAAa,GAAG,MAAM,IAAA,8DAAoC,EAC/D,IAAI,CAAC,qBAAqB,EAC1B,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,iDAAuB,CAAC,EACtE,OAAO,CAAC,2BAA2B,CACnC,CAAC;QAEF,OAAO,IAAA,sCAAmB,EAAC,aAAa,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;YACpD,KAAK,EAAE,SAAS,IAAI,CAAC,IAAI,0DAA0D;YACnF,WAAW,EACV,wIAAwI;YACzI,KAAK,EAAE,SAAS;SAChB,CAAC,CAAC,CAAC;IACL,CAAC;CACD,CAAA;;6CAjDY,kCAAkC;IAD9C,IAAA,+BAAkB,EAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;qCAEe,0BAAqB;GAD7D,kCAAkC,CAiD9C"}
|
|
@@ -2,12 +2,12 @@ import type { BreakingChangeAffectedWorkflow, BreakingChangeRecommendation } fro
|
|
|
2
2
|
import { CredentialsRepository } from '@n8n/db';
|
|
3
3
|
import type { WorkflowEntity } from '@n8n/db';
|
|
4
4
|
import type { INode } from 'n8n-workflow';
|
|
5
|
-
import type { BreakingChangeRuleMetadata, IBreakingChangeWorkflowRule, WorkflowDetectionReport } from '../../types';
|
|
5
|
+
import type { BreakingChangeRuleMetadata, IBreakingChangeWorkflowRule, WorkflowDetectionReport, WorkflowScanContext } from '../../types';
|
|
6
6
|
export declare class SlackTriggerSignatureSecretRule implements IBreakingChangeWorkflowRule {
|
|
7
7
|
private readonly credentialsRepository;
|
|
8
8
|
constructor(credentialsRepository: CredentialsRepository);
|
|
9
9
|
id: string;
|
|
10
10
|
getMetadata(): BreakingChangeRuleMetadata;
|
|
11
11
|
getRecommendations(_workflowResults: BreakingChangeAffectedWorkflow[]): Promise<BreakingChangeRecommendation[]>;
|
|
12
|
-
detectWorkflow(_workflow: WorkflowEntity, nodesGroupedByType: Map<string, INode[]
|
|
12
|
+
detectWorkflow(_workflow: WorkflowEntity, nodesGroupedByType: Map<string, INode[]>, context?: WorkflowScanContext): Promise<WorkflowDetectionReport>;
|
|
13
13
|
}
|
|
@@ -14,6 +14,7 @@ const db_1 = require("@n8n/db");
|
|
|
14
14
|
const decorators_1 = require("@n8n/decorators");
|
|
15
15
|
const slack_credential_secret_1 = require("./slack-credential-secret");
|
|
16
16
|
const detection_report_1 = require("../../detection-report");
|
|
17
|
+
const types_1 = require("../../types");
|
|
17
18
|
let SlackTriggerSignatureSecretRule = class SlackTriggerSignatureSecretRule {
|
|
18
19
|
constructor(credentialsRepository) {
|
|
19
20
|
this.credentialsRepository = credentialsRepository;
|
|
@@ -37,8 +38,8 @@ let SlackTriggerSignatureSecretRule = class SlackTriggerSignatureSecretRule {
|
|
|
37
38
|
},
|
|
38
39
|
];
|
|
39
40
|
}
|
|
40
|
-
async detectWorkflow(_workflow, nodesGroupedByType) {
|
|
41
|
-
const affectedNodes = await (0, slack_credential_secret_1.findSlackNodesWithoutSignatureSecret)(this.credentialsRepository, nodesGroupedByType.get(slack_credential_secret_1.SLACK_TRIGGER_NODE_TYPE) ?? []);
|
|
41
|
+
async detectWorkflow(_workflow, nodesGroupedByType, context = (0, types_1.createWorkflowScanContext)()) {
|
|
42
|
+
const affectedNodes = await (0, slack_credential_secret_1.findSlackNodesWithoutSignatureSecret)(this.credentialsRepository, nodesGroupedByType.get(slack_credential_secret_1.SLACK_TRIGGER_NODE_TYPE) ?? [], context.slackSignatureSecretMissing);
|
|
42
43
|
return (0, detection_report_1.reportAffectedNodes)(affectedNodes, (node) => ({
|
|
43
44
|
title: `Node '${node.name}' blocks activation of the workflow: its Slack API credential has no signature secret`,
|
|
44
45
|
description: 'In v3 a workflow with a Slack Trigger node fails to activate when the Slack API credential has no signature secret. Add the signature secret of your Slack app to the credential.',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"slack-trigger-signature-secret.rule.js","sourceRoot":"","sources":["../../../../../src/modules/breaking-changes/rules/v3/slack-trigger-signature-secret.rule.ts"],"names":[],"mappings":";;;;;;;;;;;;AACA,gCAAgD;AAEhD,gDAAqD;AAGrD,uEAImC;AACnC,6DAA6D;
|
|
1
|
+
{"version":3,"file":"slack-trigger-signature-secret.rule.js","sourceRoot":"","sources":["../../../../../src/modules/breaking-changes/rules/v3/slack-trigger-signature-secret.rule.ts"],"names":[],"mappings":";;;;;;;;;;;;AACA,gCAAgD;AAEhD,gDAAqD;AAGrD,uEAImC;AACnC,6DAA6D;AAO7D,uCAAgF;AAGzE,IAAM,+BAA+B,GAArC,MAAM,+BAA+B;IAC3C,YAA6B,qBAA4C;QAA5C,0BAAqB,GAArB,qBAAqB,CAAuB;QAEzE,OAAE,GAAG,mCAAmC,CAAC;IAFmC,CAAC;IAI7E,WAAW;QACV,OAAO;YACN,OAAO,EAAE,IAAI;YACb,KAAK,EAAE,6DAA6D;YACpE,WAAW,EACV,qLAAqL;YACtL,QAAQ,YAAiC;YACzC,MAAM,EAAE,gBAAgB;YACxB,gBAAgB,EAAE,iDAAuB;SACzC,CAAC;IACH,CAAC;IAGD,KAAK,CAAC,kBAAkB,CACvB,gBAAkD;QAElD,OAAO;YACN;gBACC,MAAM,EAAE,sDAAsD;gBAC9D,WAAW,EACV,sPAAsP;aACvP;SACD,CAAC;IACH,CAAC;IAED,KAAK,CAAC,cAAc,CACnB,SAAyB,EACzB,kBAAwC,EACxC,OAAO,GAAwB,IAAA,iCAAyB,GAAE;QAE1D,MAAM,aAAa,GAAG,MAAM,IAAA,8DAAoC,EAC/D,IAAI,CAAC,qBAAqB,EAC1B,kBAAkB,CAAC,GAAG,CAAC,iDAAuB,CAAC,IAAI,EAAE,EACrD,OAAO,CAAC,2BAA2B,CACnC,CAAC;QAEF,OAAO,IAAA,sCAAmB,EAAC,aAAa,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;YACpD,KAAK,EAAE,SAAS,IAAI,CAAC,IAAI,uFAAuF;YAChH,WAAW,EACV,mLAAmL;YACpL,KAAK,EAAE,OAAO;SACd,CAAC,CAAC,CAAC;IACL,CAAC;CACD,CAAA;;0CAhDY,+BAA+B;IAD3C,IAAA,+BAAkB,EAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;qCAEe,0BAAqB;GAD7D,+BAA+B,CAgD3C"}
|
|
@@ -9,12 +9,14 @@ export interface MigrationFindingDiffInput {
|
|
|
9
9
|
targetVersion: BreakingChangeVersion;
|
|
10
10
|
workflowIds: string[];
|
|
11
11
|
hits: MigrationFindingHit[];
|
|
12
|
+
publishedHits?: MigrationFindingHit[];
|
|
12
13
|
existing: MigrationFinding[];
|
|
13
14
|
unknown?: MigrationFindingHit[];
|
|
14
15
|
}
|
|
15
16
|
export interface MigrationFindingDiff {
|
|
16
17
|
toInsert: NewMigrationFinding[];
|
|
17
18
|
toMarkFixed: MigrationFindingId[];
|
|
19
|
+
toMarkFixedUnpublished: MigrationFindingId[];
|
|
18
20
|
toReopen: MigrationFindingId[];
|
|
19
21
|
}
|
|
20
22
|
export declare function diffMigrationFindings(input: MigrationFindingDiffInput): MigrationFindingDiff;
|
|
@@ -2,17 +2,22 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.diffMigrationFindings = diffMigrationFindings;
|
|
4
4
|
const hitKey = (ruleId, workflowId) => `${ruleId}\u0000${workflowId}`;
|
|
5
|
-
const
|
|
5
|
+
const RESOLVED_STATUSES = new Set(['fixed', 'fixed_unpublished']);
|
|
6
6
|
function diffMigrationFindings(input) {
|
|
7
|
-
const { targetVersion, hits, existing, unknown = [] } = input;
|
|
7
|
+
const { targetVersion, hits, publishedHits = [], existing, unknown = [] } = input;
|
|
8
8
|
const batchWorkflowIds = new Set(input.workflowIds);
|
|
9
9
|
const unknownKeys = new Set(unknown.map((pair) => hitKey(pair.ruleId, pair.workflowId)));
|
|
10
|
-
const
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
const diff = {
|
|
10
|
+
const keysInBatch = (pairs) => new Set(pairs
|
|
11
|
+
.filter((pair) => batchWorkflowIds.has(pair.workflowId))
|
|
12
|
+
.map((pair) => hitKey(pair.ruleId, pair.workflowId)));
|
|
13
|
+
const hitKeys = keysInBatch(hits);
|
|
14
|
+
const publishedHitKeys = keysInBatch(publishedHits);
|
|
15
|
+
const diff = {
|
|
16
|
+
toInsert: [],
|
|
17
|
+
toMarkFixed: [],
|
|
18
|
+
toMarkFixedUnpublished: [],
|
|
19
|
+
toReopen: [],
|
|
20
|
+
};
|
|
16
21
|
const seenKeys = new Set();
|
|
17
22
|
for (const row of existing) {
|
|
18
23
|
if (!batchWorkflowIds.has(row.workflowId))
|
|
@@ -21,18 +26,31 @@ function diffMigrationFindings(input) {
|
|
|
21
26
|
seenKeys.add(key);
|
|
22
27
|
if (unknownKeys.has(key))
|
|
23
28
|
continue;
|
|
24
|
-
|
|
25
|
-
|
|
29
|
+
if (hitKeys.has(key)) {
|
|
30
|
+
if (RESOLVED_STATUSES.has(row.status))
|
|
31
|
+
diff.toReopen.push(row.id);
|
|
32
|
+
}
|
|
33
|
+
else if (publishedHitKeys.has(key)) {
|
|
34
|
+
if (row.status !== 'fixed_unpublished' && row.status !== 'wont_fix') {
|
|
35
|
+
diff.toMarkFixedUnpublished.push(row.id);
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
else if (row.status !== 'fixed') {
|
|
26
39
|
diff.toMarkFixed.push(row.id);
|
|
27
|
-
|
|
28
|
-
diff.toReopen.push(row.id);
|
|
40
|
+
}
|
|
29
41
|
}
|
|
30
|
-
for (const hit of hits) {
|
|
42
|
+
for (const hit of [...hits, ...publishedHits]) {
|
|
31
43
|
const key = hitKey(hit.ruleId, hit.workflowId);
|
|
32
|
-
if (!
|
|
44
|
+
if (!batchWorkflowIds.has(hit.workflowId) || seenKeys.has(key) || unknownKeys.has(key)) {
|
|
33
45
|
continue;
|
|
46
|
+
}
|
|
34
47
|
seenKeys.add(key);
|
|
35
|
-
diff.toInsert.push({
|
|
48
|
+
diff.toInsert.push({
|
|
49
|
+
targetVersion,
|
|
50
|
+
ruleId: hit.ruleId,
|
|
51
|
+
workflowId: hit.workflowId,
|
|
52
|
+
status: hitKeys.has(key) ? 'open' : 'fixed_unpublished',
|
|
53
|
+
});
|
|
36
54
|
}
|
|
37
55
|
return diff;
|
|
38
56
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"migration-finding-diff.js","sourceRoot":"","sources":["../../../../src/modules/breaking-changes/sync/migration-finding-diff.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"migration-finding-diff.js","sourceRoot":"","sources":["../../../../src/modules/breaking-changes/sync/migration-finding-diff.ts"],"names":[],"mappings":";;;AA4CA,MAAM,MAAM,GAAG,CAAC,MAAc,EAAE,UAAkB,EAAE,EAAE,CAAC,GAAG,MAAM,SAAS,UAAU,EAAE,CAAC;AActF,MAAM,iBAAiB,GAAG,IAAI,GAAG,CAAyB,CAAC,OAAO,EAAE,mBAAmB,CAAC,CAAC,CAAC;AAE1F,+BAAsC,KAAgC;IACrE,MAAM,EAAE,aAAa,EAAE,IAAI,EAAE,aAAa,GAAG,EAAE,EAAE,QAAQ,EAAE,OAAO,GAAG,EAAE,EAAE,GAAG,KAAK,CAAC;IAClF,MAAM,gBAAgB,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;IAEpD,MAAM,WAAW,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;IAEzF,MAAM,WAAW,GAAG,CAAC,KAA4B,EAAE,EAAE,CACpD,IAAI,GAAG,CACN,KAAK;SACH,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,gBAAgB,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;SACvD,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC,CACrD,CAAC;IACH,MAAM,OAAO,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC;IAClC,MAAM,gBAAgB,GAAG,WAAW,CAAC,aAAa,CAAC,CAAC;IAEpD,MAAM,IAAI,GAAyB;QAClC,QAAQ,EAAE,EAAE;QACZ,WAAW,EAAE,EAAE;QACf,sBAAsB,EAAE,EAAE;QAC1B,QAAQ,EAAE,EAAE;KACZ,CAAC;IACF,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAU,CAAC;IAEnC,KAAK,MAAM,GAAG,IAAI,QAAQ,EAAE,CAAC;QAC5B,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,GAAG,CAAC,UAAU,CAAC;YAAE,SAAS;QAEpD,MAAM,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,UAAU,CAAC,CAAC;QAC/C,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAClB,IAAI,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC;YAAE,SAAS;QAEnC,IAAI,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;YACtB,IAAI,iBAAiB,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC;gBAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACnE,CAAC;aAAM,IAAI,gBAAgB,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;YACtC,IAAI,GAAG,CAAC,MAAM,KAAK,mBAAmB,IAAI,GAAG,CAAC,MAAM,KAAK,UAAU,EAAE,CAAC;gBACrE,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAC1C,CAAC;QACF,CAAC;aAAM,IAAI,GAAG,CAAC,MAAM,KAAK,OAAO,EAAE,CAAC;YACnC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAC/B,CAAC;IACF,CAAC;IAED,KAAK,MAAM,GAAG,IAAI,CAAC,GAAG,IAAI,EAAE,GAAG,aAAa,CAAC,EAAE,CAAC;QAC/C,MAAM,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,UAAU,CAAC,CAAC;QAC/C,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;YACxF,SAAS;QACV,CAAC;QAED,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAClB,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;YAClB,aAAa;YACb,MAAM,EAAE,GAAG,CAAC,MAAM;YAClB,UAAU,EAAE,GAAG,CAAC,UAAU;YAC1B,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,mBAAmB;SACvD,CAAC,CAAC;IACJ,CAAC;IAED,OAAO,IAAI,CAAC;AACb,CAAC"}
|
|
@@ -33,6 +33,12 @@ let MigrationFindingSyncListener = class MigrationFindingSyncListener {
|
|
|
33
33
|
this.eventService.on('workflow-activated', async ({ workflowId }) => {
|
|
34
34
|
await this.syncWorkflow(workflowId);
|
|
35
35
|
});
|
|
36
|
+
this.eventService.on('workflow-deactivated', async ({ workflowId }) => {
|
|
37
|
+
await this.syncWorkflow(workflowId);
|
|
38
|
+
});
|
|
39
|
+
this.eventService.on('workflow-archived', async ({ workflowId }) => {
|
|
40
|
+
await this.syncWorkflow(workflowId);
|
|
41
|
+
});
|
|
36
42
|
this.eventService.on('workflow-imported', async ({ workflowId }) => {
|
|
37
43
|
await this.syncWorkflow(workflowId);
|
|
38
44
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"migration-finding-sync.listener.js","sourceRoot":"","sources":["../../../../src/modules/breaking-changes/sync/migration-finding-sync.listener.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,wDAA6C;AAC7C,4DAAqD;AACrD,gCAAkC;AAClC,uCAAyC;AAEzC,qFAA+E;AASxE,IAAM,4BAA4B,GAAlC,MAAM,4BAA4B;IACxC,YACkB,YAA0B,EAC1B,WAAwC,EACxC,MAAc,EACd,aAA4B;4BAH5B,YAAY;2BACZ,WAAW;sBACX,MAAM;6BACN,aAAa;QAE9B,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,kBAAkB,CAAC,CAAC;IACjD,CAAC;IAED,IAAI;QACH,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC,kBAAkB,EAAE,KAAK,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE;YAC/D,MAAM,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;QACtC,CAAC,CAAC,CAAC;QACH,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC,gBAAgB,EAAE,KAAK,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE;YAC7D,MAAM,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;QACtC,CAAC,CAAC,CAAC;QACH,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC,oBAAoB,EAAE,KAAK,EAAE,EAAE,UAAU,EAAE,EAAE,EAAE;YACnE,MAAM,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC;QACrC,CAAC,CAAC,CAAC;QACH,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC,mBAAmB,EAAE,KAAK,EAAE,EAAE,UAAU,EAAE,EAAE,EAAE;YAClE,MAAM,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC;QACrC,CAAC,CAAC,CAAC;IACJ,CAAC;IAIO,KAAK,CAAC,YAAY,CAAC,UAAkB;QAC5C,IAAI,CAAC;YACJ,MAAM,IAAI,CAAC,WAAW,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC;QACjD,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAChB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,uDAAuD,EAAE,EAAE,UAAU,EAAE,CAAC,CAAC;YAC1F,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,KAAK,EAAE,EAAE,KAAK,EAAE,EAAE,UAAU,EAAE,EAAE,CAAC,CAAC;QAC5D,CAAC;IACF,CAAC;CACD,CAAA;;
|
|
1
|
+
{"version":3,"file":"migration-finding-sync.listener.js","sourceRoot":"","sources":["../../../../src/modules/breaking-changes/sync/migration-finding-sync.listener.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,wDAA6C;AAC7C,4DAAqD;AACrD,gCAAkC;AAClC,uCAAyC;AAEzC,qFAA+E;AASxE,IAAM,4BAA4B,GAAlC,MAAM,4BAA4B;IACxC,YACkB,YAA0B,EAC1B,WAAwC,EACxC,MAAc,EACd,aAA4B;4BAH5B,YAAY;2BACZ,WAAW;sBACX,MAAM;6BACN,aAAa;QAE9B,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,kBAAkB,CAAC,CAAC;IACjD,CAAC;IAED,IAAI;QACH,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC,kBAAkB,EAAE,KAAK,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE;YAC/D,MAAM,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;QACtC,CAAC,CAAC,CAAC;QACH,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC,gBAAgB,EAAE,KAAK,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE;YAC7D,MAAM,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;QACtC,CAAC,CAAC,CAAC;QACH,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC,oBAAoB,EAAE,KAAK,EAAE,EAAE,UAAU,EAAE,EAAE,EAAE;YACnE,MAAM,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC;QACrC,CAAC,CAAC,CAAC;QACH,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC,sBAAsB,EAAE,KAAK,EAAE,EAAE,UAAU,EAAE,EAAE,EAAE;YACrE,MAAM,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC;QACrC,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC,mBAAmB,EAAE,KAAK,EAAE,EAAE,UAAU,EAAE,EAAE,EAAE;YAClE,MAAM,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC;QACrC,CAAC,CAAC,CAAC;QACH,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC,mBAAmB,EAAE,KAAK,EAAE,EAAE,UAAU,EAAE,EAAE,EAAE;YAClE,MAAM,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC;QACrC,CAAC,CAAC,CAAC;IACJ,CAAC;IAIO,KAAK,CAAC,YAAY,CAAC,UAAkB;QAC5C,IAAI,CAAC;YACJ,MAAM,IAAI,CAAC,WAAW,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC;QACjD,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAChB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,uDAAuD,EAAE,EAAE,UAAU,EAAE,CAAC,CAAC;YAC1F,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,KAAK,EAAE,EAAE,KAAK,EAAE,EAAE,UAAU,EAAE,EAAE,CAAC,CAAC;QAC5D,CAAC;IACF,CAAC;CACD,CAAA;;uCA1CY,4BAA4B;IADxC,IAAA,YAAO,GAAE;qCAGuB,+BAAY,EACb,4DAA2B,EAChC,uBAAM,EACC,wBAAa;GALlC,4BAA4B,CA0CxC"}
|
|
@@ -81,8 +81,9 @@ let MigrationFindingSyncService = MigrationFindingSyncService_1 = class Migratio
|
|
|
81
81
|
async runSync(targetVersion) {
|
|
82
82
|
this.logger.debug('Starting migration finding sync', { targetVersion });
|
|
83
83
|
await this.syncRepository.deleteForVersion(targetVersion, {});
|
|
84
|
-
const { report, failedChecks } = await this.breakingChangeService.detect(targetVersion);
|
|
84
|
+
const { report, publishedHits, failedChecks } = await this.breakingChangeService.detect(targetVersion);
|
|
85
85
|
const hitsByWorkflow = groupHitsByWorkflow(report.workflowResults);
|
|
86
|
+
const publishedHitsByWorkflow = groupByWorkflow(publishedHits);
|
|
86
87
|
const unknownByWorkflow = groupByWorkflow(failedChecks);
|
|
87
88
|
if (failedChecks.length > 0) {
|
|
88
89
|
this.logger.warn('Leaving the findings of rule checks that failed during the scan as is', {
|
|
@@ -94,11 +95,16 @@ let MigrationFindingSyncService = MigrationFindingSyncService_1 = class Migratio
|
|
|
94
95
|
let afterId;
|
|
95
96
|
let workflowIds;
|
|
96
97
|
let failedBatches = 0;
|
|
98
|
+
const owners = {};
|
|
97
99
|
do {
|
|
98
100
|
workflowIds = await this.workflowRepository.getIdsAfter(afterId, take);
|
|
99
101
|
try {
|
|
100
|
-
await this.syncBatch(targetVersion, workflowIds,
|
|
101
|
-
|
|
102
|
+
await this.syncBatch(targetVersion, workflowIds, {
|
|
103
|
+
hitsByWorkflow,
|
|
104
|
+
publishedHitsByWorkflow,
|
|
105
|
+
unknownByWorkflow,
|
|
106
|
+
});
|
|
107
|
+
await this.refreshSuggestedOwners(targetVersion, workflowIds, owners);
|
|
102
108
|
}
|
|
103
109
|
catch (error) {
|
|
104
110
|
failedBatches++;
|
|
@@ -145,12 +151,16 @@ let MigrationFindingSyncService = MigrationFindingSyncService_1 = class Migratio
|
|
|
145
151
|
if (!targetVersion)
|
|
146
152
|
return;
|
|
147
153
|
try {
|
|
148
|
-
const { hits, failedChecks } = await this.breakingChangeService.detectWorkflowHits(targetVersion, workflowId);
|
|
154
|
+
const { hits, publishedHits, failedChecks } = await this.breakingChangeService.detectWorkflowHits(targetVersion, workflowId);
|
|
149
155
|
const batchRulePairs = this.ruleRegistry
|
|
150
156
|
.getRules(targetVersion)
|
|
151
157
|
.filter((rule) => 'collectWorkflowData' in rule)
|
|
152
158
|
.map((rule) => ({ ruleId: rule.id, workflowId }));
|
|
153
|
-
await this.syncBatch(targetVersion, [workflowId],
|
|
159
|
+
await this.syncBatch(targetVersion, [workflowId], {
|
|
160
|
+
hitsByWorkflow: groupByWorkflow(hits),
|
|
161
|
+
publishedHitsByWorkflow: groupByWorkflow(publishedHits),
|
|
162
|
+
unknownByWorkflow: groupByWorkflow([...failedChecks, ...batchRulePairs]),
|
|
163
|
+
});
|
|
154
164
|
await this.refreshSuggestedOwners(targetVersion, [workflowId]);
|
|
155
165
|
}
|
|
156
166
|
catch (error) {
|
|
@@ -161,10 +171,14 @@ let MigrationFindingSyncService = MigrationFindingSyncService_1 = class Migratio
|
|
|
161
171
|
this.errorReporter.error(error, { extra: { targetVersion, workflowId } });
|
|
162
172
|
}
|
|
163
173
|
}
|
|
164
|
-
async refreshSuggestedOwners(targetVersion, workflowIds) {
|
|
174
|
+
async refreshSuggestedOwners(targetVersion, workflowIds, owners = {}) {
|
|
165
175
|
try {
|
|
166
176
|
const affectedIds = await this.findingRepository.listWorkflowIdsWithUnresolvedFindings(targetVersion, workflowIds, {});
|
|
167
|
-
|
|
177
|
+
let suggestions = [];
|
|
178
|
+
if (affectedIds.length > 0) {
|
|
179
|
+
owners.users ??= await this.ownerSuggestionService.loadEligibleUsers();
|
|
180
|
+
suggestions = await this.ownerSuggestionService.suggestOwners(affectedIds, owners.users);
|
|
181
|
+
}
|
|
168
182
|
await this.ownerRepository.replaceSuggestions(workflowIds, suggestions, {});
|
|
169
183
|
}
|
|
170
184
|
catch (error) {
|
|
@@ -175,23 +189,35 @@ let MigrationFindingSyncService = MigrationFindingSyncService_1 = class Migratio
|
|
|
175
189
|
this.errorReporter.error(error, { extra: { targetVersion, batchStart: workflowIds[0] } });
|
|
176
190
|
}
|
|
177
191
|
}
|
|
178
|
-
async syncBatch(targetVersion, pagedIds,
|
|
192
|
+
async syncBatch(targetVersion, pagedIds, scan) {
|
|
179
193
|
if (pagedIds.length === 0)
|
|
180
194
|
return;
|
|
181
195
|
await this.txRunner.run({}, async (ctx) => {
|
|
182
196
|
const workflowIds = await this.workflowRepository.findExistingIds(pagedIds, ctx);
|
|
183
197
|
if (workflowIds.length === 0)
|
|
184
198
|
return;
|
|
185
|
-
const
|
|
186
|
-
const
|
|
199
|
+
const forBatch = (byWorkflow) => workflowIds.flatMap((workflowId) => byWorkflow.get(workflowId) ?? []);
|
|
200
|
+
const hits = forBatch(scan.hitsByWorkflow);
|
|
201
|
+
const publishedHits = forBatch(scan.publishedHitsByWorkflow);
|
|
202
|
+
const unknown = forBatch(scan.unknownByWorkflow);
|
|
187
203
|
const existing = await this.findingRepository.listForWorkflows(targetVersion, workflowIds, ctx);
|
|
188
|
-
const diff = (0, migration_finding_diff_1.diffMigrationFindings)({
|
|
204
|
+
const diff = (0, migration_finding_diff_1.diffMigrationFindings)({
|
|
205
|
+
targetVersion,
|
|
206
|
+
workflowIds,
|
|
207
|
+
hits,
|
|
208
|
+
publishedHits,
|
|
209
|
+
existing,
|
|
210
|
+
unknown,
|
|
211
|
+
});
|
|
189
212
|
if (diff.toInsert.length > 0) {
|
|
190
213
|
await this.findingRepository.insertMany(diff.toInsert, ctx);
|
|
191
214
|
}
|
|
192
215
|
if (diff.toMarkFixed.length > 0) {
|
|
193
216
|
await this.findingRepository.markFixedForIds(diff.toMarkFixed, ctx);
|
|
194
217
|
}
|
|
218
|
+
if (diff.toMarkFixedUnpublished.length > 0) {
|
|
219
|
+
await this.findingRepository.updateStatusForIds(diff.toMarkFixedUnpublished, 'fixed_unpublished', undefined, ctx);
|
|
220
|
+
}
|
|
195
221
|
if (diff.toReopen.length > 0) {
|
|
196
222
|
await this.findingRepository.updateStatusForIds(diff.toReopen, 'open', undefined, ctx);
|
|
197
223
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"migration-finding-sync.service.js","sourceRoot":"","sources":["../../../../src/modules/breaking-changes/sync/migration-finding-sync.service.ts"],"names":[],"mappings":";;;;;;;;;;;;;;AAAA,8CAIwB;AACxB,wDAA6C;AAC7C,gCAAuF;AACvF,gCAAkC;AAClC,uCAAyC;AACzC,6CAAyC;AAEzC,kDAAiD;AACjD,sGAAyE;AACzE,0EAAoE;AACpE,kHAA4G;AAC5G,wGAAmG;AACnG,
|
|
1
|
+
{"version":3,"file":"migration-finding-sync.service.js","sourceRoot":"","sources":["../../../../src/modules/breaking-changes/sync/migration-finding-sync.service.ts"],"names":[],"mappings":";;;;;;;;;;;;;;AAAA,8CAIwB;AACxB,wDAA6C;AAC7C,gCAAuF;AACvF,gCAAkC;AAClC,uCAAyC;AACzC,6CAAyC;AAEzC,kDAAiD;AACjD,sGAAyE;AACzE,0EAAoE;AACpE,kHAA4G;AAC5G,wGAAmG;AACnG,sHAGsE;AACtE,qGAGsD;AACtD,qEAA2F;AAO3F,mCAA0C,OAAiB,EAAE,UAAU,GAAG,uBAAW;IACpF,OAAO,IAAA,wBAAU,EAAC,QAAQ,CAAC;SACzB,MAAM,CAAC,CAAC,UAAU,EAAE,GAAG,CAAC,GAAG,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;SACvD,MAAM,CAAC,KAAK,CAAC,CAAC;AACjB,CAAC;AAQM,IAAM,2BAA2B,mCAAjC,MAAM,2BAA2B;IASvC,YACkB,qBAA4C,EAC5C,YAA0B,EAC1B,kBAAsC,EACtC,iBAA6C,EAC7C,cAA8C,EAC9C,sBAAuD,EACvD,eAAiD,EACjD,QAA2B,EAC3B,MAAc,EACd,aAA4B;QAT5B,0BAAqB,GAArB,qBAAqB,CAAuB;QAC5C,iBAAY,GAAZ,YAAY,CAAc;QAC1B,uBAAkB,GAAlB,kBAAkB,CAAoB;QACtC,sBAAiB,GAAjB,iBAAiB,CAA4B;QAC7C,mBAAc,GAAd,cAAc,CAAgC;QAC9C,2BAAsB,GAAtB,sBAAsB,CAAiC;QACvD,oBAAe,GAAf,eAAe,CAAkC;QACjD,aAAQ,GAAR,QAAQ,CAAmB;QAC3B,WAAM,GAAN,MAAM,CAAQ;QACd,kBAAa,GAAb,aAAa,CAAe;QAf7B,iBAAY,GAAG,IAAI,GAAG,EAAwC,CAAC;QAG/D,yBAAoB,GAAG,IAAI,GAAG,EAAyB,CAAC;QAcxE,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,kBAAkB,CAAC,CAAC;IACjD,CAAC;IAMD,KAAK,CAAC,WAAW,CAAC,aAAoC;QAErD,MAAM,OAAO,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;QACrD,IAAI,OAAO,EAAE,CAAC;YACb,MAAM,OAAO,CAAC;YACd,OAAO;QACR,CAAC;QAED,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,aAAa,CAAC,aAAa,EAAE,EAAE,CAAC,CAAC;QAC1E,MAAM,OAAO,GAAG,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACjF,IAAI,MAAM,EAAE,kBAAkB,KAAK,yBAAyB,CAAC,OAAO,CAAC;YAAE,OAAO;QAE9E,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,2CAA2C,EAAE;YAC9D,aAAa;YACb,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,iCAAiC,CAAC,CAAC,CAAC,cAAc;SACnE,CAAC,CAAC;QACH,MAAM,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;IAChC,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,aAAoC;QAC9C,MAAM,OAAO,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;QACrD,IAAI,OAAO,EAAE,CAAC;YACb,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,wCAAwC,EAAE,EAAE,aAAa,EAAE,CAAC,CAAC;YAC/E,OAAO,MAAM,OAAO,CAAC;QACtB,CAAC;QAED,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;QACxC,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,aAAa,EAAE,GAAG,CAAC,CAAC;QAC1C,IAAI,CAAC;YACJ,MAAM,GAAG,CAAC;QACX,CAAC;gBAAS,CAAC;YACV,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;QACzC,CAAC;IACF,CAAC;IAEa,AAAN,KAAK,CAAC,OAAO,CAAC,aAAoC;QACzD,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,iCAAiC,EAAE,EAAE,aAAa,EAAE,CAAC,CAAC;QAIxE,MAAM,IAAI,CAAC,cAAc,CAAC,gBAAgB,CAAC,aAAa,EAAE,EAAE,CAAC,CAAC;QAI9D,MAAM,EAAE,MAAM,EAAE,aAAa,EAAE,YAAY,EAAE,GAC5C,MAAM,IAAI,CAAC,qBAAqB,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;QACxD,MAAM,cAAc,GAAG,mBAAmB,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC;QACnE,MAAM,uBAAuB,GAAG,eAAe,CAAC,aAAa,CAAC,CAAC;QAI/D,MAAM,iBAAiB,GAAG,eAAe,CAAC,YAAY,CAAC,CAAC;QACxD,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC7B,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,uEAAuE,EAAE;gBACzF,aAAa;gBACb,KAAK,EAAE,YAAY,CAAC,MAAM;aAC1B,CAAC,CAAC;QACJ,CAAC;QAKD,MAAM,IAAI,GAAG,8BAA4B,UAAU,CAAC;QACpD,IAAI,OAA2B,CAAC;QAChC,IAAI,WAAqB,CAAC;QAC1B,IAAI,aAAa,GAAG,CAAC,CAAC;QAEtB,MAAM,MAAM,GAA8B,EAAE,CAAC;QAC7C,GAAG,CAAC;YACH,WAAW,GAAG,MAAM,IAAI,CAAC,kBAAkB,CAAC,WAAW,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;YACvE,IAAI,CAAC;gBACJ,MAAM,IAAI,CAAC,SAAS,CAAC,aAAa,EAAE,WAAW,EAAE;oBAChD,cAAc;oBACd,uBAAuB;oBACvB,iBAAiB;iBACjB,CAAC,CAAC;gBACH,MAAM,IAAI,CAAC,sBAAsB,CAAC,aAAa,EAAE,WAAW,EAAE,MAAM,CAAC,CAAC;YACvE,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBAGhB,aAAa,EAAE,CAAC;gBAChB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,qEAAqE,EAAE;oBACvF,aAAa;oBACb,UAAU,EAAE,WAAW,CAAC,CAAC,CAAC;iBAC1B,CAAC,CAAC;gBACH,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,KAAK,EAAE;oBAC/B,KAAK,EAAE,EAAE,aAAa,EAAE,UAAU,EAAE,WAAW,CAAC,CAAC,CAAC,EAAE;iBACpD,CAAC,CAAC;YACJ,CAAC;YACD,OAAO,GAAG,WAAW,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;QAC9B,CAAC,QAAQ,WAAW,CAAC,MAAM,KAAK,IAAI,EAAE;QAEtC,IAAI,aAAa,GAAG,CAAC,EAAE,CAAC;YACvB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,kEAAkE,EAAE;gBACpF,aAAa;gBACb,aAAa;aACb,CAAC,CAAC;YACH,OAAO;QACR,CAAC;QAED,MAAM,OAAO,GAAG,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACjF,MAAM,IAAI,CAAC,cAAc,CAAC,gBAAgB,CACzC;YACC,aAAa;YACb,QAAQ,EAAE,IAAI,IAAI,EAAE;YACpB,kBAAkB,EAAE,yBAAyB,CAAC,OAAO,CAAC;SACtD,EACD,EAAE,CACF,CAAC;QAEF,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,kCAAkC,EAAE,EAAE,aAAa,EAAE,CAAC,CAAC;IAC1E,CAAC;IASD,KAAK,CAAC,YAAY,CAAC,UAAkB;QAGpC,MAAM,QAAQ,GAAG,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;QAChF,MAAM,GAAG,GAAG,QAAQ,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC,MAAM,IAAI,CAAC,eAAe,CAAC,UAAU,CAAC,CAAC,CAAC;QAC9E,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,UAAU,EAAE,GAAG,CAAC,CAAC;QAC/C,IAAI,CAAC;YACJ,MAAM,GAAG,CAAC;QACX,CAAC;gBAAS,CAAC;YACV,IAAI,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,UAAU,CAAC,KAAK,GAAG,EAAE,CAAC;gBACvD,IAAI,CAAC,oBAAoB,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;YAC9C,CAAC;QACF,CAAC;IACF,CAAC;IAEO,KAAK,CAAC,eAAe,CAAC,UAAkB;QAC/C,MAAM,aAAa,GAAG,2CAA+B,CAAC;QACtD,IAAI,CAAC,aAAa;YAAE,OAAO;QAE3B,IAAI,CAAC;YACJ,MAAM,EAAE,IAAI,EAAE,aAAa,EAAE,YAAY,EAAE,GAC1C,MAAM,IAAI,CAAC,qBAAqB,CAAC,kBAAkB,CAAC,aAAa,EAAE,UAAU,CAAC,CAAC;YAGhF,MAAM,cAAc,GAAG,IAAI,CAAC,YAAY;iBACtC,QAAQ,CAAC,aAAa,CAAC;iBACvB,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,qBAAqB,IAAI,IAAI,CAAC;iBAC/C,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,EAAE,UAAU,EAAE,CAAC,CAAC,CAAC;YACnD,MAAM,IAAI,CAAC,SAAS,CAAC,aAAa,EAAE,CAAC,UAAU,CAAC,EAAE;gBACjD,cAAc,EAAE,eAAe,CAAC,IAAI,CAAC;gBACrC,uBAAuB,EAAE,eAAe,CAAC,aAAa,CAAC;gBACvD,iBAAiB,EAAE,eAAe,CAAC,CAAC,GAAG,YAAY,EAAE,GAAG,cAAc,CAAC,CAAC;aACxE,CAAC,CAAC;YACH,MAAM,IAAI,CAAC,sBAAsB,CAAC,aAAa,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC;QAChE,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAChB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,gDAAgD,EAAE;gBAClE,aAAa;gBACb,UAAU;aACV,CAAC,CAAC;YACH,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,KAAK,EAAE,EAAE,KAAK,EAAE,EAAE,aAAa,EAAE,UAAU,EAAE,EAAE,CAAC,CAAC;QAC3E,CAAC;IACF,CAAC;IAOO,KAAK,CAAC,sBAAsB,CACnC,aAAoC,EACpC,WAAqB,EACrB,MAAM,GAA8B,EAAE;QAEtC,IAAI,CAAC;YACJ,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,iBAAiB,CAAC,qCAAqC,CACrF,aAAa,EACb,WAAW,EACX,EAAE,CACF,CAAC;YACF,IAAI,WAAW,GAAsB,EAAE,CAAC;YACxC,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC5B,MAAM,CAAC,KAAK,KAAK,MAAM,IAAI,CAAC,sBAAsB,CAAC,iBAAiB,EAAE,CAAC;gBACvE,WAAW,GAAG,MAAM,IAAI,CAAC,sBAAsB,CAAC,aAAa,CAAC,WAAW,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC;YAC1F,CAAC;YACD,MAAM,IAAI,CAAC,eAAe,CAAC,kBAAkB,CAAC,WAAW,EAAE,WAAW,EAAE,EAAE,CAAC,CAAC;QAC7E,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAChB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,qEAAqE,EAAE;gBACvF,aAAa;gBACb,UAAU,EAAE,WAAW,CAAC,CAAC,CAAC;aAC1B,CAAC,CAAC;YACH,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,KAAK,EAAE,EAAE,KAAK,EAAE,EAAE,aAAa,EAAE,UAAU,EAAE,WAAW,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QAC3F,CAAC;IACF,CAAC;IAGO,KAAK,CAAC,SAAS,CACtB,aAAoC,EACpC,QAAkB,EAClB,IAIC;QAED,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO;QAElC,MAAM,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,EAAE,KAAK,EAAE,GAAqB,EAAE,EAAE;YAG3D,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,kBAAkB,CAAC,eAAe,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;YACjF,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC;gBAAE,OAAO;YAErC,MAAM,QAAQ,GAAG,CAAC,UAA8C,EAAE,EAAE,CACnE,WAAW,CAAC,OAAO,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC,CAAC;YACvE,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;YAC3C,MAAM,aAAa,GAAG,QAAQ,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC;YAC7D,MAAM,OAAO,GAAG,QAAQ,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;YACjD,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,iBAAiB,CAAC,gBAAgB,CAC7D,aAAa,EACb,WAAW,EACX,GAAG,CACH,CAAC;YACF,MAAM,IAAI,GAAG,IAAA,8CAAqB,EAAC;gBAClC,aAAa;gBACb,WAAW;gBACX,IAAI;gBACJ,aAAa;gBACb,QAAQ;gBACR,OAAO;aACP,CAAC,CAAC;YAEH,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC9B,MAAM,IAAI,CAAC,iBAAiB,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;YAC7D,CAAC;YACD,IAAI,IAAI,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACjC,MAAM,IAAI,CAAC,iBAAiB,CAAC,eAAe,CAAC,IAAI,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC;YACrE,CAAC;YACD,IAAI,IAAI,CAAC,sBAAsB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC5C,MAAM,IAAI,CAAC,iBAAiB,CAAC,kBAAkB,CAC9C,IAAI,CAAC,sBAAsB,EAC3B,mBAAmB,EACnB,SAAS,EACT,GAAG,CACH,CAAC;YACH,CAAC;YACD,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC9B,MAAM,IAAI,CAAC,iBAAiB,CAAC,kBAAkB,CAAC,IAAI,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,GAAG,CAAC,CAAC;YACxF,CAAC;QACF,CAAC,CAAC,CAAC;IACJ,CAAC;CACD,CAAA;;AArRwB,sCAAU,GAAG,GAAG,AAAN,CAAO;sCAD7B,2BAA2B;IADvC,IAAA,YAAO,GAAE;qCAWgC,gDAAqB,EAC9B,qDAAY,EACN,uBAAkB,EACnB,yDAA0B,EAC7B,kEAA8B,EACtB,oEAA+B,EACtC,sEAAgC,EACvC,sBAAiB,EACnB,uBAAM,EACC,wBAAa;GAnBlC,2BAA2B,CAsRvC;AAED,SAAS,mBAAmB,CAC3B,eAAmD;IAEnD,OAAO,eAAe,CACrB,eAAe,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE,CAClC,MAAM,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;QAC3C,MAAM,EAAE,MAAM,CAAC,MAAM;QACrB,UAAU,EAAE,QAAQ,CAAC,EAAE;KACvB,CAAC,CAAC,CACH,CACD,CAAC;AACH,CAAC;AAED,SAAS,eAAe,CAAC,KAA4B;IACpD,MAAM,UAAU,GAAG,IAAI,GAAG,EAAiC,CAAC;IAC5D,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QAC1B,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC;QACpD,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACjB,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;IACxC,CAAC;IACD,OAAO,UAAU,CAAC;AACnB,CAAC"}
|
|
@@ -22,11 +22,15 @@ export interface IBreakingChangeInstanceRule {
|
|
|
22
22
|
getMetadata(): BreakingChangeRuleMetadata;
|
|
23
23
|
detect(): Promise<InstanceDetectionReport>;
|
|
24
24
|
}
|
|
25
|
+
export interface WorkflowScanContext {
|
|
26
|
+
slackSignatureSecretMissing: Map<string, boolean>;
|
|
27
|
+
}
|
|
28
|
+
export declare const createWorkflowScanContext: () => WorkflowScanContext;
|
|
25
29
|
export interface IBreakingChangeWorkflowRule {
|
|
26
30
|
id: string;
|
|
27
31
|
getMetadata(): BreakingChangeRuleMetadata;
|
|
28
32
|
getRecommendations(workflowResults: BreakingChangeAffectedWorkflow[]): Promise<BreakingChangeRecommendation[]>;
|
|
29
|
-
detectWorkflow(workflow: WorkflowEntity, nodesGroupedByType: Map<string, INode[]
|
|
33
|
+
detectWorkflow(workflow: WorkflowEntity, nodesGroupedByType: Map<string, INode[]>, context?: WorkflowScanContext): Promise<WorkflowDetectionReport>;
|
|
30
34
|
}
|
|
31
35
|
export interface IBreakingChangeBatchWorkflowRule {
|
|
32
36
|
id: string;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.BreakingChangeCategory = void 0;
|
|
3
|
+
exports.createWorkflowScanContext = exports.BreakingChangeCategory = void 0;
|
|
4
4
|
exports.isWorkflowLevelRule = isWorkflowLevelRule;
|
|
5
5
|
exports.isInstanceRule = isInstanceRule;
|
|
6
6
|
var BreakingChangeCategory;
|
|
@@ -11,6 +11,10 @@ var BreakingChangeCategory;
|
|
|
11
11
|
BreakingChangeCategory["database"] = "database";
|
|
12
12
|
BreakingChangeCategory["infrastructure"] = "infrastructure";
|
|
13
13
|
})(BreakingChangeCategory || (exports.BreakingChangeCategory = BreakingChangeCategory = {}));
|
|
14
|
+
const createWorkflowScanContext = () => ({
|
|
15
|
+
slackSignatureSecretMissing: new Map(),
|
|
16
|
+
});
|
|
17
|
+
exports.createWorkflowScanContext = createWorkflowScanContext;
|
|
14
18
|
function isWorkflowLevelRule(rule) {
|
|
15
19
|
return 'detectWorkflow' in rule || 'collectWorkflowData' in rule;
|
|
16
20
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rule.types.js","sourceRoot":"","sources":["../../../../src/modules/breaking-changes/types/rule.types.ts"],"names":[],"mappings":";;;;;AAeA,IAAkB,sBAMjB;AAND,WAAkB,sBAAsB;IACvC,+CAAqB,CAAA;IACrB,+CAAqB,CAAA;IACrB,qDAA2B,CAAA;IAC3B,+CAAqB,CAAA;IACrB,2DAAiC,CAAA;AAClC,CAAC,EANiB,sBAAsB,aAAtB,sBAAsB,GAAtB,sBAAsB,QAMvC;
|
|
1
|
+
{"version":3,"file":"rule.types.js","sourceRoot":"","sources":["../../../../src/modules/breaking-changes/types/rule.types.ts"],"names":[],"mappings":";;;;;AAeA,IAAkB,sBAMjB;AAND,WAAkB,sBAAsB;IACvC,+CAAqB,CAAA;IACrB,+CAAqB,CAAA;IACrB,qDAA2B,CAAA;IAC3B,+CAAqB,CAAA;IACrB,2DAAiC,CAAA;AAClC,CAAC,EANiB,sBAAsB,aAAtB,sBAAsB,GAAtB,sBAAsB,QAMvC;AA2BM,MAAM,yBAAyB,GAAG,GAAwB,EAAE,CAAC,CAAC;IACpE,2BAA2B,EAAE,IAAI,GAAG,EAAE;CACtC,CAAC,CAAC;AAFU,QAAA,yBAAyB,GAAzB,yBAAyB,CAEnC;AA4DH,6BAAoC,IAAyB;IAC5D,OAAO,gBAAgB,IAAI,IAAI,IAAI,qBAAqB,IAAI,IAAI,CAAC;AAClE,CAAC;AAED,wBAA+B,IAAyB;IACvD,OAAO,QAAQ,IAAI,IAAI,CAAC;AACzB,CAAC"}
|