Skip to content

Commit bfb9a99

Browse files
committed
feat: add includes
1 parent c6d8242 commit bfb9a99

File tree

2 files changed

+65
-10
lines changed

2 files changed

+65
-10
lines changed

yaml-generation/functions.php

+44-1
Original file line numberDiff line numberDiff line change
@@ -41,9 +41,52 @@ function readYaml($file) {
4141
}
4242

4343
}
44+
45+
if (isset($ret['_yaml_references'])) {
46+
foreach ($ret['_yaml_references'] as $include) {
47+
if (preg_match('/^include\((\w+),\s*(.+)\)$/', $include, $matches)) {
48+
$team = $matches[1];
49+
$baseDir = dirname($file);
50+
51+
$includeFile = $baseDir . DIRECTORY_SEPARATOR . $matches[2];
52+
echo "In file $file, including $includeFile for team $team\n";
53+
$includedContent = includeYamlAndSetTeamImplemented($includeFile, $team);
54+
$ret = array_merge_recursive_ex($ret, $includedContent);
55+
}
56+
}
57+
unset($ret['_yaml_references']);
58+
}
59+
4460
return $ret;
4561
}
4662

63+
function includeYamlAndSetTeamImplemented($filename, $team) {
64+
echo "File to include $filename";
65+
$content = yaml_parse_file($filename);
66+
if ($content === false) {
67+
echo "Error parsing YAML file: $filename\n";
68+
return array();
69+
}
70+
// Add teamsImplemented for each activity
71+
foreach ($content as $dimension => $subdimensions) {
72+
foreach ($subdimensions as $subdimension => $elements) {
73+
foreach ($elements as $activityName => $activity) {
74+
if (is_array($elements) && (isset($activity['teamsEvidence']) || isset($activity['teamsImplemented']))) {
75+
if (!isset($activity['teamsImplemented'])) {
76+
echo "# setting teamsImplemented first time for team $team";
77+
$content[$dimension][$subdimension][$activityName]['teamsImplemented'] = array();
78+
}
79+
if(array_key_exists('teamsEvidence', $activity)) {
80+
echo "# adding team to teamsImplemented for team $team";
81+
$content[$dimension][$subdimension][$activityName]['teamsImplemented'][$team] = true ;
82+
}
83+
}
84+
}
85+
}
86+
}
87+
return $content;
88+
89+
}
4790

4891
/**
4992
* Get dimensions from yaml file.
@@ -275,4 +318,4 @@ function test_readYaml() {
275318
}
276319

277320

278-
?>
321+
?>

yaml-generation/generateDimensions.php

+21-9
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@
3131
foreach ($files as $filename) {
3232
//echo "Found $filename";
3333
$dimensionCustom = getDimensions($filename);
34-
$dimensionsCustom = array_merge_recursive($dimensionsCustom, $dimensionCustom);
34+
$dimensionsCustom = array_merge_recursive_ex($dimensionsCustom, $dimensionCustom);
3535
}
3636
if (sizeof($files) > 0) {
3737
$dimensions = array_merge_recursive_ex($dimensions, $dimensionsCustom);
@@ -75,24 +75,34 @@
7575
$dimensionsAggregated[$dimension][$subdimension][$activityName]["teamsImplemented"] = array();
7676
}
7777
$evidenceImplemented = array();
78-
if (array_key_exists("evidence", $activity) && is_array($activity["evidence"]) && IS_IMPLEMENTED_WHEN_EVIDENCE) {
79-
foreach ($activity["evidence"] as $team => $evidenceForTeam) {
80-
if (strlen($activity["evidence"][$team]) > 0) {
78+
if (array_key_exists("teamsEvidence", $activity) && is_array($activity["teamsEvidence"]) && IS_IMPLEMENTED_WHEN_EVIDENCE) {
79+
foreach ($activity["teamsEvidence"] as $team => $evidenceForTeam) {
80+
if(!is_string($activity["teamsEvidence"][$team])) {
81+
echo "teamsEvidence for team $team in $activityName is not a string, ignoring";
82+
continue;
83+
}
84+
if (strlen($activity["teamsEvidence"][$team]) > 0) {
8185
$evidenceImplemented[$team] = true;
8286
} else {
8387
echo "Warning: '$activityName -> evidence -> $team' has no evidence set but should have";
8488
}
8589
}
8690
}
87-
91+
$dimensionsAggregated[$dimension][$subdimension][$activityName]["teamsImplemented"] =
92+
array_merge(
93+
$teamsImplemented,
94+
$dimensionsAggregated[$dimension][$subdimension][$activityName]["teamsImplemented"],
95+
$evidenceImplemented
96+
);
8897
if (!array_key_exists("openCRE", $activity["references"])) {
8998
$dimensionsAggregated[$dimension][$subdimension][$activityName]["references"]["openCRE"] = array();
9099
$dimensionsAggregated[$dimension][$subdimension][$activityName]["references"]["openCRE"][] = "https://www.opencre.org/rest/v1/standard/DevSecOps+Maturity+Model+(DSOMM)/" . $subdimension . "/" . $dimensionsAggregated[$dimension][$subdimension][$activityName]["uuid"];
91100
}
92-
93-
$dimensionsAggregated[$dimension][$subdimension][$activityName]["teamsImplemented"] = array_merge($teamsImplemented, $dimensionsAggregated[$dimension][$subdimension][$activityName]["teamsImplemented"], $evidenceImplemented);
94-
// can be removed in 2024
101+
// can be removed in 2025
95102
if (array_key_exists("isImplemented", $activity)) {
103+
unset($dimensionsAggregated[$dimension][$subdimension][$activityName]["isImplemented"]);
104+
}
105+
if (array_key_exists("evidence", $activity)) {
96106
unset($dimensionsAggregated[$dimension][$subdimension][$activityName]["evidence"]);
97107
}
98108
if (array_key_exists("dependsOn", $activity)) {
@@ -124,7 +134,9 @@
124134
resolve_json_ref($dimensionsAggregated);
125135

126136
$dimensionsString = yaml_emit($dimensionsAggregated);
127-
file_put_contents("src/assets/YAML/generated/generated.yaml", $dimensionsString);
137+
$targetGeneratedFile = getcwd() . "/src/assets/YAML/generated/generated.yaml";
138+
echo "\nStoring to $targetGeneratedFile\n";
139+
file_put_contents($targetGeneratedFile, $dimensionsString);
128140

129141

130142
/**

0 commit comments

Comments
 (0)