@@ -1198,6 +1198,250 @@ func TestGlobalCfg_MatchingRepo(t *testing.T) {
11981198 }
11991199}
12001200
1201+ // #############################################################################################################
1202+
1203+ func TestGlobalCfg_PolicyCheckOverride (t * testing.T ) {
1204+ var emptyPolicySets valid.PolicySets
1205+
1206+ defaultWorkflow := valid.Workflow {
1207+ Name : "default" ,
1208+ Apply : valid .DefaultApplyStage ,
1209+ PolicyCheck : valid .DefaultPolicyCheckStage ,
1210+ Plan : valid .DefaultPlanStage ,
1211+ Import : valid .DefaultImportStage ,
1212+ StateRm : valid .DefaultStateRmStage ,
1213+ }
1214+ cases := map [string ]struct {
1215+ gPolicyCheck bool
1216+ gCfg string
1217+ repoID string
1218+ proj valid.Project
1219+ repoWorkflows map [string ]valid.Workflow
1220+ exp valid.MergedProjectCfg
1221+ }{
1222+ "global policy check disabled" : {
1223+ gPolicyCheck : false ,
1224+ gCfg : `
1225+ repos:
1226+ - id: /.*/
1227+ plan_requirements: [approved]
1228+ apply_requirements: [approved]
1229+ import_requirements: [approved]
1230+ - id: /github.com/.*/
1231+ plan_requirements: [mergeable]
1232+ apply_requirements: [mergeable]
1233+ import_requirements: [mergeable]
1234+ - id: github.com/owner/repo
1235+ plan_requirements: [approved, mergeable]
1236+ apply_requirements: [approved, mergeable]
1237+ import_requirements: [approved, mergeable]
1238+ ` ,
1239+ repoID : "github.com/owner/repo" ,
1240+ proj : valid.Project {
1241+ Dir : "mydir" ,
1242+ Workspace : "myworkspace" ,
1243+ Name : String ("myname" ),
1244+ PolicyCheck : Bool (false ),
1245+ },
1246+ repoWorkflows : nil ,
1247+ exp : valid.MergedProjectCfg {
1248+ PlanRequirements : []string {"approved" , "mergeable" },
1249+ ApplyRequirements : []string {"approved" , "mergeable" },
1250+ ImportRequirements : []string {"approved" , "mergeable" },
1251+ Workflow : defaultWorkflow ,
1252+ RepoRelDir : "mydir" ,
1253+ Workspace : "myworkspace" ,
1254+ Name : "myname" ,
1255+ AutoplanEnabled : false ,
1256+ PolicySets : emptyPolicySets ,
1257+ RepoLocking : true ,
1258+ PolicyCheck : false ,
1259+ },
1260+ },
1261+ "global policy check enabled" : {
1262+ gPolicyCheck : true ,
1263+ gCfg : `
1264+ repos:
1265+ - id: /.*/
1266+ plan_requirements: [approved]
1267+ apply_requirements: [approved]
1268+ import_requirements: [approved]
1269+ - id: /github.com/.*/
1270+ plan_requirements: [mergeable]
1271+ apply_requirements: [mergeable]
1272+ import_requirements: [mergeable]
1273+ - id: github.com/owner/repo
1274+ plan_requirements: [approved, mergeable]
1275+ apply_requirements: [approved, mergeable]
1276+ import_requirements: [approved, mergeable]
1277+ ` ,
1278+ repoID : "github.com/owner/repo" ,
1279+ proj : valid.Project {
1280+ Dir : "mydir" ,
1281+ Workspace : "myworkspace" ,
1282+ Name : String ("myname" ),
1283+ PolicyCheck : Bool (true ),
1284+ },
1285+ repoWorkflows : nil ,
1286+ exp : valid.MergedProjectCfg {
1287+ PlanRequirements : []string {"approved" , "mergeable" , "policies_passed" },
1288+ ApplyRequirements : []string {"approved" , "mergeable" , "policies_passed" },
1289+ ImportRequirements : []string {"approved" , "mergeable" , "policies_passed" },
1290+ Workflow : defaultWorkflow ,
1291+ RepoRelDir : "mydir" ,
1292+ Workspace : "myworkspace" ,
1293+ Name : "myname" ,
1294+ AutoplanEnabled : false ,
1295+ PolicySets : emptyPolicySets ,
1296+ RepoLocking : true ,
1297+ PolicyCheck : true ,
1298+ },
1299+ },
1300+ "global policy check enabled except current repo" : {
1301+ gPolicyCheck : true ,
1302+ gCfg : `
1303+ repos:
1304+ - id: /.*/
1305+ plan_requirements: [approved]
1306+ apply_requirements: [approved]
1307+ import_requirements: [approved]
1308+ - id: /github.com/.*/
1309+ plan_requirements: [mergeable]
1310+ apply_requirements: [mergeable]
1311+ import_requirements: [mergeable]
1312+ - id: github.com/owner/repo
1313+ plan_requirements: [approved, mergeable]
1314+ apply_requirements: [approved, mergeable]
1315+ import_requirements: [approved, mergeable]
1316+ policy_check: false
1317+ ` ,
1318+ repoID : "github.com/owner/repo" ,
1319+ proj : valid.Project {
1320+ Dir : "mydir" ,
1321+ Workspace : "myworkspace" ,
1322+ Name : String ("myname" ),
1323+ PolicyCheck : Bool (false ),
1324+ },
1325+ repoWorkflows : nil ,
1326+ exp : valid.MergedProjectCfg {
1327+ PlanRequirements : []string {"approved" , "mergeable" },
1328+ ApplyRequirements : []string {"approved" , "mergeable" },
1329+ ImportRequirements : []string {"approved" , "mergeable" },
1330+ Workflow : defaultWorkflow ,
1331+ RepoRelDir : "mydir" ,
1332+ Workspace : "myworkspace" ,
1333+ Name : "myname" ,
1334+ AutoplanEnabled : false ,
1335+ PolicySets : emptyPolicySets ,
1336+ RepoLocking : true ,
1337+ PolicyCheck : false ,
1338+ },
1339+ },
1340+ "global policy check disabled and disabled on current repo" : {
1341+ gPolicyCheck : false ,
1342+ gCfg : `
1343+ repos:
1344+ - id: /.*/
1345+ plan_requirements: [approved]
1346+ apply_requirements: [approved]
1347+ import_requirements: [approved]
1348+ - id: /github.com/.*/
1349+ plan_requirements: [mergeable]
1350+ apply_requirements: [mergeable]
1351+ import_requirements: [mergeable]
1352+ - id: github.com/owner/repo
1353+ plan_requirements: [approved, mergeable]
1354+ apply_requirements: [approved, mergeable]
1355+ import_requirements: [approved, mergeable]
1356+ policy_check: false
1357+ ` ,
1358+ repoID : "github.com/owner/repo" ,
1359+ proj : valid.Project {
1360+ Dir : "mydir" ,
1361+ Workspace : "myworkspace" ,
1362+ Name : String ("myname" ),
1363+ PolicyCheck : Bool (false ),
1364+ },
1365+ repoWorkflows : nil ,
1366+ exp : valid.MergedProjectCfg {
1367+ PlanRequirements : []string {"approved" , "mergeable" },
1368+ ApplyRequirements : []string {"approved" , "mergeable" },
1369+ ImportRequirements : []string {"approved" , "mergeable" },
1370+ Workflow : defaultWorkflow ,
1371+ RepoRelDir : "mydir" ,
1372+ Workspace : "myworkspace" ,
1373+ Name : "myname" ,
1374+ AutoplanEnabled : false ,
1375+ PolicySets : emptyPolicySets ,
1376+ RepoLocking : true ,
1377+ PolicyCheck : false ,
1378+ },
1379+ },
1380+ "global policy check disabled and enabled on current repo" : {
1381+ gPolicyCheck : false ,
1382+ gCfg : `
1383+ repos:
1384+ - id: /.*/
1385+ plan_requirements: [approved]
1386+ apply_requirements: [approved]
1387+ import_requirements: [approved]
1388+ - id: /github.com/.*/
1389+ plan_requirements: [mergeable]
1390+ apply_requirements: [mergeable]
1391+ import_requirements: [mergeable]
1392+ - id: github.com/owner/repo
1393+ plan_requirements: [approved, mergeable]
1394+ apply_requirements: [approved, mergeable]
1395+ import_requirements: [approved, mergeable]
1396+ policy_check: true
1397+ ` ,
1398+ repoID : "github.com/owner/repo" ,
1399+ proj : valid.Project {
1400+ Dir : "mydir" ,
1401+ Workspace : "myworkspace" ,
1402+ Name : String ("myname" ),
1403+ PolicyCheck : Bool (false ),
1404+ },
1405+ repoWorkflows : nil ,
1406+ exp : valid.MergedProjectCfg {
1407+ PlanRequirements : []string {"approved" , "mergeable" },
1408+ ApplyRequirements : []string {"approved" , "mergeable" },
1409+ ImportRequirements : []string {"approved" , "mergeable" },
1410+ Workflow : defaultWorkflow ,
1411+ RepoRelDir : "mydir" ,
1412+ Workspace : "myworkspace" ,
1413+ Name : "myname" ,
1414+ AutoplanEnabled : false ,
1415+ PolicySets : emptyPolicySets ,
1416+ RepoLocking : true ,
1417+ PolicyCheck : true , // Project will have policy check as true but since it is globally disable it wont actually run
1418+ },
1419+ },
1420+ }
1421+ for name , c := range cases {
1422+ t .Run (name , func (t * testing.T ) {
1423+ tmp := t .TempDir ()
1424+ var global valid.GlobalCfg
1425+ path := filepath .Join (tmp , "config.yaml" )
1426+ Ok (t , os .WriteFile (path , []byte (c .gCfg ), 0600 ))
1427+ var err error
1428+ globalCfgArgs := valid.GlobalCfgArgs {
1429+ AllowRepoCfg : false ,
1430+ MergeableReq : false ,
1431+ ApprovedReq : false ,
1432+ UnDivergedReq : false ,
1433+ PolicyCheckEnabled : c .gPolicyCheck ,
1434+ }
1435+
1436+ global , err = (& config.ParserValidator {}).ParseGlobalCfg (path , valid .NewGlobalCfgFromArgs (globalCfgArgs ))
1437+ Ok (t , err )
1438+
1439+ global .PolicySets = emptyPolicySets
1440+ Equals (t , c .exp , global .MergeProjectCfg (logging .NewNoopLogger (t ), c .repoID , c .proj , valid.RepoCfg {Workflows : c .repoWorkflows }))
1441+ })
1442+ }
1443+ }
1444+
12011445// String is a helper routine that allocates a new string value
12021446// to store v and returns a pointer to it.
12031447func String (v string ) * string { return & v }
0 commit comments