Skip to content

Commit 35acbc2

Browse files
committed
Split PR checks into explicit job groups
1 parent f557860 commit 35acbc2

3 files changed

Lines changed: 176 additions & 1 deletion

File tree

.github/workflows/pr-check.yml

Lines changed: 121 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ permissions:
1010

1111
jobs:
1212
build:
13+
name: build (${{ matrix.configuration }})
1314
runs-on: ubuntu-latest
1415

1516
strategy:
@@ -29,3 +30,123 @@ jobs:
2930

3031
- name: Build ${{ matrix.configuration }}
3132
run: dotnet build ModularityKit.Mutator.slnx -c ${{ matrix.configuration }} --no-restore
33+
34+
tests:
35+
name: ${{ matrix.name }}
36+
runs-on: ubuntu-latest
37+
38+
strategy:
39+
fail-fast: false
40+
matrix:
41+
include:
42+
- name: test:core
43+
command: dotnet test Tests/ModularityKit.Mutator.Tests/ModularityKit.Mutator.Tests.csproj -c Release --no-restore
44+
- name: test:governance
45+
command: dotnet test Tests/ModularityKit.Mutator.Governance.Tests/ModularityKit.Mutator.Governance.Tests.csproj -c Release --no-restore
46+
- name: test:governance-redis
47+
command: dotnet test Tests/ModularityKit.Mutator.Governance.Redis.Tests/ModularityKit.Mutator.Governance.Redis.Tests.csproj -c Release --no-restore
48+
49+
steps:
50+
- uses: actions/checkout@v5
51+
52+
- uses: actions/setup-dotnet@v5
53+
with:
54+
dotnet-version: 10.0.x
55+
56+
- name: Restore
57+
run: dotnet restore ModularityKit.Mutator.slnx
58+
59+
- name: Run ${{ matrix.name }}
60+
run: ${{ matrix.command }}
61+
62+
examples-core:
63+
name: ${{ matrix.name }}
64+
runs-on: ubuntu-latest
65+
66+
strategy:
67+
fail-fast: false
68+
matrix:
69+
include:
70+
- name: examples:core / BillingQuotas
71+
command: dotnet run --project Examples/Core/BillingQuotas/BillingQuotas.csproj -c Release --no-restore
72+
- name: examples:core / FeatureFlags
73+
command: dotnet run --project Examples/Core/FeatureFlags/FeatureFlags.csproj -c Release --no-restore
74+
- name: examples:core / IamRoles
75+
command: dotnet run --project Examples/Core/IamRoles/IamRoles.csproj -c Release --no-restore
76+
- name: examples:core / WorkflowApprovals
77+
command: dotnet run --project Examples/Core/WorkflowApprovals/WorkflowApprovals.csproj -c Release --no-restore
78+
79+
steps:
80+
- uses: actions/checkout@v5
81+
82+
- uses: actions/setup-dotnet@v5
83+
with:
84+
dotnet-version: 10.0.x
85+
86+
- name: Restore
87+
run: dotnet restore ModularityKit.Mutator.slnx
88+
89+
- name: Run ${{ matrix.name }}
90+
run: ${{ matrix.command }}
91+
92+
examples-governance:
93+
name: ${{ matrix.name }}
94+
runs-on: ubuntu-latest
95+
96+
strategy:
97+
fail-fast: false
98+
matrix:
99+
include:
100+
- name: examples:governance / RequestLifecycle
101+
command: dotnet run --project Examples/Governance/RequestLifecycle/RequestLifecycle.csproj -c Release --no-restore
102+
- name: examples:governance / GovernedExecution
103+
command: dotnet run --project Examples/Governance/GovernedExecution/GovernedExecution.csproj -c Release --no-restore
104+
- name: examples:governance / DecisionTaxonomy
105+
command: dotnet run --project Examples/Governance/DecisionTaxonomy/DecisionTaxonomy.csproj -c Release --no-restore
106+
- name: examples:governance / ApprovalWorkflow
107+
command: dotnet run --project Examples/Governance/ApprovalWorkflow/ApprovalWorkflow.csproj -c Release --no-restore
108+
- name: examples:governance / VersionedResolution
109+
command: dotnet run --project Examples/Governance/VersionedResolution/VersionedResolution.csproj -c Release --no-restore
110+
- name: examples:governance / Queries
111+
command: dotnet run --project Examples/Governance/Queries/Queries.csproj -c Release --no-restore
112+
113+
steps:
114+
- uses: actions/checkout@v5
115+
116+
- uses: actions/setup-dotnet@v5
117+
with:
118+
dotnet-version: 10.0.x
119+
120+
- name: Restore
121+
run: dotnet restore ModularityKit.Mutator.slnx
122+
123+
- name: Run ${{ matrix.name }}
124+
run: ${{ matrix.command }}
125+
126+
examples-governance-redis:
127+
name: examples:governance / RedisQueries
128+
runs-on: ubuntu-latest
129+
130+
steps:
131+
- uses: actions/checkout@v5
132+
133+
- uses: actions/setup-dotnet@v5
134+
with:
135+
dotnet-version: 10.0.x
136+
137+
- name: Restore
138+
run: dotnet restore ModularityKit.Mutator.slnx
139+
140+
- name: Start Redis
141+
working-directory: Examples/Governance/RedisQueries
142+
run: docker compose up -d
143+
144+
- name: Run RedisQueries
145+
env:
146+
MODULARITYKIT_REDIS: localhost:6379
147+
run: dotnet run --project Examples/Governance/RedisQueries/RedisQueries.csproj -c Release --no-restore
148+
149+
- name: Stop Redis
150+
if: ${{ always() }}
151+
working-directory: Examples/Governance/RedisQueries
152+
run: docker compose down

Tests/ModularityKit.Mutator.Governance.Tests/Approval/MutationRequestApprovalWorkflowApprovalTests.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ public void PendingApproval_maps_id_role_group_quorum_and_expiration_targets()
1616
{
1717
var expiresAt = DateTimeOffset.UtcNow.AddHours(1);
1818

19-
var request = MutationRequestApprovalWorkflowTestSupport.CreateLinearApprovalRequest();
19+
var request = MutationRequestApprovalWorkflowTestSupport.CreateTargetMappingApprovalRequest(expiresAt);
2020

2121
Assert.Equal(MutationRequestStatus.Pending, request.Status);
2222
Assert.Equal(PendingMutationReason.Approval, request.PendingReason);

Tests/ModularityKit.Mutator.Governance.Tests/TestSupport/Approval/Workflow/MutationRequestApprovalWorkflowTestSupport.cs

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,60 @@ public static MutationRequest CreateLinearApprovalRequest()
2929
expectedStateVersion: "v10");
3030
}
3131

32+
/// <summary>
33+
/// Creates a request that exercises approval mapping for manager, quorum, role, and group targets.
34+
/// </summary>
35+
public static MutationRequest CreateTargetMappingApprovalRequest(DateTimeOffset expiresAt)
36+
{
37+
return MutationRequestFactory.PendingApproval(
38+
stateId: "tenant-42:roles",
39+
stateType: "IamRoleState",
40+
mutationType: "GrantRoleMutation",
41+
intent: CreateIntent(),
42+
context: MutationContext.User("requester", "Requester", "Needs privileged access"),
43+
requirements:
44+
[
45+
PolicyRequirement.Approval("alice", "Manager approval"),
46+
new PolicyRequirement
47+
{
48+
Type = "Approval",
49+
Description = "Security quorum",
50+
Data = new
51+
{
52+
Approvers = new[] { "bob", "carol", "dave" },
53+
StepOrder = 2,
54+
ApprovalGroupId = "security-quorum",
55+
Quorum = 2,
56+
ExpiresAt = expiresAt,
57+
Reason = "Security sign-off"
58+
}
59+
},
60+
new PolicyRequirement
61+
{
62+
Type = "Approval",
63+
Description = "Finance role approval",
64+
Data = new
65+
{
66+
ApproverRole = "finance-approver",
67+
StepOrder = 3,
68+
Reason = "Finance sign-off"
69+
}
70+
},
71+
new PolicyRequirement
72+
{
73+
Type = "Approval",
74+
Description = "Operations group approval",
75+
Data = new
76+
{
77+
ApproverGroup = "ops-oncall",
78+
StepOrder = 4,
79+
Reason = "Operations sign-off"
80+
}
81+
}
82+
],
83+
expectedStateVersion: "v10");
84+
}
85+
3286
/// <summary>
3387
/// Creates a request that exercises quorum-based approval requirements.
3488
/// </summary>

0 commit comments

Comments
 (0)