Skip to content

Commit 244c5db

Browse files
chore: extract approval decision to file
1 parent 433849a commit 244c5db

File tree

3 files changed

+42
-33
lines changed

3 files changed

+42
-33
lines changed
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
import type { PolicyResults } from "./types.js";
2+
3+
type ApprovalRuleDetails = {
4+
allowed: boolean;
5+
approvers: string[];
6+
minApprovals: number;
7+
};
8+
9+
export const getApprovalRuleWithResult = (policyResults?: PolicyResults) => {
10+
const envVersionResult = policyResults?.envVersionDecision;
11+
if (envVersionResult == null) return null;
12+
13+
for (const { policy, ruleResults } of envVersionResult.policyResults) {
14+
if (policy == null) continue;
15+
16+
for (const ruleResult of ruleResults) {
17+
const { ruleId } = ruleResult;
18+
const rule = policy.rules.find((rule) => rule.id === ruleId);
19+
if (rule?.anyApproval == null) continue;
20+
21+
const details: ApprovalRuleDetails = {
22+
approvers: ruleResult.details.approvers as string[],
23+
minApprovals: rule.anyApproval.minApprovals,
24+
allowed: ruleResult.allowed,
25+
};
26+
27+
return details;
28+
}
29+
}
30+
31+
return null;
32+
};

packages/trpc/src/routes/environment-versions/policy-results.ts

Lines changed: 1 addition & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import { z } from "zod";
44
import { getClientFor } from "@ctrlplane/workspace-engine-sdk";
55

66
import { protectedProcedure } from "../../trpc.js";
7+
import { getApprovalRuleWithResult } from "./approval-decision.js";
78

89
export const getDeploymentVersion = async (
910
workspaceId: string,
@@ -53,39 +54,6 @@ const getPolicyResults = async (
5354
return decision.data;
5455
};
5556

56-
type PolicyResults = Awaited<ReturnType<typeof getPolicyResults>>;
57-
58-
type ApprovalRuleDetails = {
59-
allowed: boolean;
60-
approvers: string[];
61-
minApprovals: number;
62-
};
63-
64-
const getApprovalRuleWithResult = (policyResults: PolicyResults) => {
65-
const envVersionResult = policyResults?.envVersionDecision;
66-
if (envVersionResult == null) return null;
67-
68-
for (const { policy, ruleResults } of envVersionResult.policyResults) {
69-
if (policy == null) continue;
70-
71-
for (const ruleResult of ruleResults) {
72-
const { ruleId } = ruleResult;
73-
const rule = policy.rules.find((rule) => rule.id === ruleId);
74-
if (rule?.anyApproval == null) continue;
75-
76-
const details: ApprovalRuleDetails = {
77-
approvers: ruleResult.details.approvers as string[],
78-
minApprovals: rule.anyApproval.minApprovals,
79-
allowed: ruleResult.allowed,
80-
};
81-
82-
return details;
83-
}
84-
}
85-
86-
return null;
87-
};
88-
8957
export const policyResults = protectedProcedure
9058
.input(
9159
z.object({
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
import type { WorkspaceEngine } from "@ctrlplane/workspace-engine-sdk";
2+
3+
export type PolicyResults = {
4+
envTargetVersionDecision?: WorkspaceEngine["schemas"]["DeployDecision"];
5+
envVersionDecision?: WorkspaceEngine["schemas"]["DeployDecision"];
6+
policiesEvaluated?: number;
7+
versionDecision?: WorkspaceEngine["schemas"]["DeployDecision"];
8+
workspaceDecision?: WorkspaceEngine["schemas"]["DeployDecision"];
9+
};

0 commit comments

Comments
 (0)