Skip to content

Commit 99c2c77

Browse files
committed
feat: add activties.yaml with new breaking format, not breaking now because the old still exists
1 parent a659ac5 commit 99c2c77

5 files changed

Lines changed: 189 additions & 4 deletions

File tree

.github/workflows/main.yml

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -57,8 +57,12 @@ jobs:
5757
run: |
5858
docker run -d --name=yaml --entrypoint="/bin/sleep" wurstbrot/dsomm-yaml-generation:${{ steps.get-version.outputs.version }} 60
5959
docker cp yaml:/var/www/html/src/assets/YAML/generated/generated.yaml src/assets/YAML/generated/generated.yaml
60-
# Commit all changed files back to the repository
61-
- uses: planetscale/ghcommit-action@v0.1.6
60+
61+
- name: Replace version placeholder in generated.yaml
62+
run: |
63+
sed -i "s/__VERSION_PLACEHOLDER__/${{ steps.get-version.outputs.version }}/g" src/assets/YAML/generated/generated.yaml
64+
- name: Commit all changed files back to the repository
65+
uses: planetscale/ghcommit-action@v0.1.6
6266
with:
6367
commit_message: "🤖 fmt"
6468
repo: ${{ github.repository }}

.gitignore

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,5 +43,11 @@ testem.log
4343
.DS_Store
4444
Thumbs.db
4545
/yaml-generation/vendor/
46-
# Generated YAML
46+
47+
/src/assets/YAML/teams.yaml
48+
/src/assets/YAML/meta.yaml
49+
50+
# Generated
4751
/src/assets/YAML/generated/generated.yaml
52+
/src/assets/YAML/activities.yaml
53+
src/assets/YAML/generated/dependency-tree.md

README.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,12 @@ docker run -ti -v $(pwd)/src/assets/YAML/default:/var/www/html/src/assets/YAML/d
1010
docker run -v $(pwd)/src/assets/YAML/generated/generated.yaml:/srv/assets/YAML/generated/generated.yaml -p 8080:8080 wurstbrot/dsomm
1111
```
1212

13+
## Development
14+
cd yaml-generation
15+
docker run --rm -v $(pwd):/app composer install
16+
cd ..
17+
docker run -ti -v $(pwd)/yaml-generation:/var/www/html/yaml-generation -v $(pwd)/src/assets/YAML/:/var/www/html/src/assets/YAML/ wurstbrot/dsomm-yaml-generation
18+
1319
## Credits
1420

1521
* The dimension _Test and Verification_ is based on Christian Schneiders [Security DevOps Maturity Model (SDOMM)](https://www.christian-schneider.net/SecurityDevOpsMaturityModel.html). _Application tests_ and _Infrastructure tests_ are added by Timo Pagel. Also, the sub-dimension _Static depth_ has been evaluated by security experts at [OWASP Stammtisch Hamburg](https://www.owasp.org/index.php/OWASP_German_Chapter_Stammtisch_Initiative/Hamburg).

src/assets/script.bash

Lines changed: 148 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,148 @@
1+
#!/bin/bash
2+
3+
# Funktion zur Konvertierung von DSOMM zu SAMM Format
4+
convert_dsomm_to_samm() {
5+
local input_file="$1"
6+
local output_file="$2"
7+
8+
if [[ -z "$input_file" ]]; then
9+
echo "Verwendung: convert_dsomm_to_samm <input_file> [output_file]"
10+
echo "Beispiel: convert_dsomm_to_samm document.txt converted_document.txt"
11+
return 1
12+
fi
13+
14+
if [[ ! -f "$input_file" ]]; then
15+
echo "Fehler: Datei '$input_file' nicht gefunden!"
16+
return 1
17+
fi
18+
19+
# Wenn keine Output-Datei angegeben, verwende Input-Datei mit _converted Suffix
20+
if [[ -z "$output_file" ]]; then
21+
output_file="${input_file%.*}_converted.${input_file##*.}"
22+
fi
23+
24+
echo "Konvertiere DSOMM Referenzen zu SAMM Format..."
25+
echo "Input: $input_file"
26+
echo "Output: $output_file"
27+
28+
# Sed-Befehl zur Umwandlung:
29+
# Sucht nach Pattern: BUCHSTABE-BUCHSTABEN-ZAHL-BUCHSTABE
30+
# Wandelt um zu: BUCHSTABE-BUCHSTABEN-BUCHSTABE-ZAHL
31+
sed -E 's/([A-Z]+-[A-Z]+)-([0-9]+)-([A-Z]+)/\1-\3-\2/g' "$input_file" > "$output_file"
32+
33+
echo "Konvertierung abgeschlossen!"
34+
echo "Überprüfe die ersten konvertierten Zeilen:"
35+
head -10 "$output_file" | grep -E '[A-Z]+-[A-Z]+-[A-Z]+-[0-9]+' || echo "Keine konvertierten Referenzen in den ersten 10 Zeilen gefunden."
36+
}
37+
38+
# Direkte Verwendung für eine einzelne Zeile (für Tests):
39+
convert_single_reference() {
40+
local ref="$1"
41+
echo "$ref" | sed -E 's/([A-Z]+-[A-Z]+)-([0-9]+)-([A-Z]+)/\1-\3-\2/g'
42+
}
43+
44+
# Beispiel-Test mit den von Ihnen bereitgestellten Referenzen:
45+
echo "=== Test der Konvertierung ==="
46+
echo "Original → Konvertiert:"
47+
echo "G-SM-1-A → $(convert_single_reference 'G-SM-1-A')"
48+
echo "D-TA-2-B → $(convert_single_reference 'D-TA-2-B')"
49+
echo "V-RT-3-A → $(convert_single_reference 'V-RT-3-A')"
50+
echo "O-OM-1-B → $(convert_single_reference 'O-OM-1-B')"
51+
52+
# Funktion zum Suchen und Konvertieren aller YAML-Dateien
53+
process_all_yaml_files() {
54+
echo "Suche nach YAML-Dateien im aktuellen Verzeichnis und Unterverzeichnissen..."
55+
56+
# Finde alle .yaml Dateien
57+
mapfile -t yaml_files < <(find . -name "*.yaml" -type f)
58+
59+
if [[ ${#yaml_files[@]} -eq 0 ]]; then
60+
echo "Keine YAML-Dateien gefunden."
61+
return 1
62+
fi
63+
64+
echo "Gefundene YAML-Dateien: ${#yaml_files[@]}"
65+
66+
# Bestätigung vom Benutzer einholen
67+
echo ""
68+
echo "Folgende YAML-Dateien wurden gefunden:"
69+
printf '%s\n' "${yaml_files[@]}"
70+
echo ""
71+
read -p "Möchten Sie alle diese Dateien konvertieren? (y/N): " -n 1 -r
72+
echo ""
73+
74+
if [[ ! $REPLY =~ ^[Yy]$ ]]; then
75+
echo "Abgebrochen."
76+
return 0
77+
fi
78+
79+
# Backup-Verzeichnis erstellen
80+
backup_dir="./backup_$(date +%Y%m%d_%H%M%S)"
81+
mkdir -p "$backup_dir"
82+
echo "Backups werden in '$backup_dir' erstellt..."
83+
84+
# Konvertierung durchführen
85+
local converted_count=0
86+
local total_count=${#yaml_files[@]}
87+
88+
for yaml_file in "${yaml_files[@]}"; do
89+
echo "Verarbeite: $yaml_file"
90+
91+
# Backup erstellen
92+
backup_file="$backup_dir/${yaml_file#./}"
93+
mkdir -p "$(dirname "$backup_file")"
94+
cp "$yaml_file" "$backup_file"
95+
96+
# Prüfen ob DSOMM Referenzen vorhanden sind
97+
if grep -qE '[A-Z]+-[A-Z]+-[0-9]+-[A-Z]+' "$yaml_file"; then
98+
# Konvertierung durchführen (in-place)
99+
sed -i.tmp -E 's/([A-Z]+-[A-Z]+)-([0-9]+)-([A-Z]+)/\1-\3-\2/g' "$yaml_file"
100+
rm "$yaml_file.tmp" 2>/dev/null
101+
((converted_count++))
102+
echo " ✓ Konvertiert"
103+
else
104+
echo " - Keine DSOMM Referenzen gefunden"
105+
fi
106+
done
107+
108+
echo ""
109+
echo "=== Konvertierung abgeschlossen ==="
110+
echo "Verarbeitete Dateien: $total_count"
111+
echo "Konvertierte Dateien: $converted_count"
112+
echo "Backups gespeichert in: $backup_dir"
113+
114+
if [[ $converted_count -gt 0 ]]; then
115+
echo ""
116+
echo "Beispiele konvertierter Referenzen:"
117+
find . -name "*.yaml" -type f -exec grep -H -E '[A-Z]+-[A-Z]+-[A-Z]+-[0-9]+' {} \; | head -5
118+
fi
119+
}
120+
121+
# Hauptfunktion aufrufen wenn Argumente übergeben wurden
122+
if [[ $# -gt 0 ]]; then
123+
if [[ "$1" == "--all-yaml" || "$1" == "-a" ]]; then
124+
process_all_yaml_files
125+
else
126+
convert_dsomm_to_samm "$@"
127+
fi
128+
else
129+
echo "DSOMM zu SAMM Referenz Konverter"
130+
echo "================================"
131+
echo ""
132+
echo "Verwendung:"
133+
echo " $0 <input_file> [output_file] # Einzelne Datei konvertieren"
134+
echo " $0 --all-yaml | -a # Alle YAML-Dateien konvertieren"
135+
echo ""
136+
echo "Beispiele:"
137+
echo " $0 document.txt"
138+
echo " $0 document.txt converted_document.txt"
139+
echo " $0 --all-yaml # Alle .yaml Dateien im Verzeichnis"
140+
echo ""
141+
echo "Das Script konvertiert DSOMM Referenzen im Format:"
142+
echo " <p>-<business-f>-<level>-<stream>"
143+
echo "zu SAMM Format:"
144+
echo " <p>-<business-f>-<stream>-<level>"
145+
echo ""
146+
echo "Bei --all-yaml wird automatisch nach .yaml Dateien gesucht und"
147+
echo "Backups vor der Konvertierung erstellt."
148+
fi

yaml-generation/generateDimensions.php

Lines changed: 22 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -193,12 +193,33 @@
193193
}
194194

195195

196-
// Store generated data
196+
// Store generated data with meta document first
197+
$metaDocument = array(
198+
'meta' => array(
199+
'version' => '__VERSION_PLACEHOLDER__',
200+
'released' => date('Y-m-d'),
201+
'publisher' => 'https://github.com/devsecopsmaturitymodel/DevSecOps-MaturityModel-data/'
202+
)
203+
);
204+
205+
$metaString = yaml_emit($metaDocument);
197206
$dimensionsString = yaml_emit($dimensionsAggregated);
207+
208+
// Combine both documents with proper YAML document separators
209+
// Remove trailing ... from meta document and add proper separator
210+
$metaString = rtrim($metaString);
211+
if (substr($metaString, -3) === '...') {
212+
$metaString = substr($metaString, 0, -3);
213+
}
214+
198215
$targetGeneratedFile = getcwd() . "/src/assets/YAML/generated/generated.yaml";
199216
echo "\nStoring to $targetGeneratedFile\n";
200217
file_put_contents($targetGeneratedFile, $dimensionsString);
201218

219+
$combinedYaml = $metaString . $dimensionsString;
220+
$targetGeneratedFile = getcwd() . "/src/assets/YAML/activities.yaml";
221+
echo "\nStoring to $targetGeneratedFile\n";
222+
file_put_contents($targetGeneratedFile, $combinedYaml);
202223

203224
// Store dependency graph
204225
$graphFilename = getcwd() . "/src/assets/YAML/generated/dependency-tree.md";

0 commit comments

Comments
 (0)