generated from OWASP/www-projectchapter-example
-
Notifications
You must be signed in to change notification settings - Fork 817
183 lines (169 loc) · 6.81 KB
/
validate-tools-json.yml
File metadata and controls
183 lines (169 loc) · 6.81 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
name: Validate Tools JSON
on:
pull_request_target:
paths:
- '_data/tools.json'
- 'tools_schema.json'
# Allow manual workflow runs for testing validation scripts
workflow_dispatch:
jobs:
schema-check:
permissions:
contents: read
runs-on: ubuntu-latest
steps:
- name: Checkout base repository (for validation scripts)
uses: actions/checkout@v4
with:
ref: ${{ github.base_ref || github.ref }}
- name: Checkout PR files (only data files)
uses: actions/checkout@v4
with:
ref: ${{ github.event.pull_request.head.sha || github.sha }}
repository: ${{ github.event.pull_request.head.repo.full_name || github.repository }}
sparse-checkout: |
_data/tools.json
tools_schema.json
sparse-checkout-cone-mode: false
path: pr-files
- name: Copy PR files to workspace
run: |
cp pr-files/_data/tools.json _data/tools.json 2>/dev/null || true
cp pr-files/tools_schema.json tools_schema.json 2>/dev/null || true
- name: Save PR number
if: github.event_name == 'pull_request_target'
env:
PR_NUMBER: ${{ github.event.number }}
run: echo $PR_NUMBER > pr_number
- name: Install Python dependencies
run: pip install jsonschema
- name: Run schema check
id: schema
continue-on-error: true
run: |
python3 .github/workflows/scripts/check_schema.py tools_schema.json _data/tools.json > schema_log.txt 2>&1
- name: Run alphabetical ordering check
id: ordering
continue-on-error: true
run: |
python3 .github/workflows/scripts/check_ordering.py _data/tools.json > ordering_log.txt 2>&1
- name: Run duplicate detection check
id: duplicates
continue-on-error: true
run: |
python3 .github/workflows/scripts/check_duplicates.py _data/tools.json > duplicates_log.txt 2>&1
- name: Run .editorconfig compliance check
id: editorconfig
continue-on-error: true
run: |
python3 .github/workflows/scripts/check_editorconfig.py _data/tools.json > editorconfig_log.txt 2>&1
- name: Create unified artifact and summary
if: always()
run: |
# Initialize summary (shows all results)
echo "# Validation Results" >> $GITHUB_STEP_SUMMARY
echo "" >> $GITHUB_STEP_SUMMARY
# Initialize overall status
overall_status=0
# Initialize artifact file with header (only failures will be added)
echo "**The following issues were identified:**" > artifact.txt
echo "" >> artifact.txt
# Schema validation results
echo "---" >> $GITHUB_STEP_SUMMARY
echo "## Schema Validation" >> $GITHUB_STEP_SUMMARY
echo "" >> $GITHUB_STEP_SUMMARY
if [ "${{ steps.schema.outcome }}" == "success" ]; then
echo "**Status: PASS ✓**" >> $GITHUB_STEP_SUMMARY
echo "" >> $GITHUB_STEP_SUMMARY
echo "All entries conform to the schema." >> $GITHUB_STEP_SUMMARY
else
echo "**Status: FAIL ✗**" >> $GITHUB_STEP_SUMMARY
echo "" >> $GITHUB_STEP_SUMMARY
echo '```' >> $GITHUB_STEP_SUMMARY
cat schema_log.txt >> $GITHUB_STEP_SUMMARY
echo '```' >> $GITHUB_STEP_SUMMARY
# Add to artifact (for PR comment)
echo "## Schema Validation" >> artifact.txt
echo "" >> artifact.txt
cat schema_log.txt >> artifact.txt
echo "" >> artifact.txt
overall_status=1
fi
echo "" >> $GITHUB_STEP_SUMMARY
# Alphabetical ordering results
echo "---" >> $GITHUB_STEP_SUMMARY
echo "## Alphabetical Ordering Check" >> $GITHUB_STEP_SUMMARY
echo "" >> $GITHUB_STEP_SUMMARY
if [ "${{ steps.ordering.outcome }}" == "success" ]; then
echo "**Status: PASS ✓**" >> $GITHUB_STEP_SUMMARY
echo "" >> $GITHUB_STEP_SUMMARY
cat ordering_log.txt >> $GITHUB_STEP_SUMMARY
else
echo "**Status: FAIL ✗**" >> $GITHUB_STEP_SUMMARY
echo "" >> $GITHUB_STEP_SUMMARY
echo '```' >> $GITHUB_STEP_SUMMARY
cat ordering_log.txt >> $GITHUB_STEP_SUMMARY
echo '```' >> $GITHUB_STEP_SUMMARY
# Add to artifact (for PR comment)
echo "## Alphabetical Ordering Check" >> artifact.txt
echo "" >> artifact.txt
cat ordering_log.txt >> artifact.txt
echo "" >> artifact.txt
overall_status=1
fi
echo "" >> $GITHUB_STEP_SUMMARY
# Duplicate detection results
echo "---" >> $GITHUB_STEP_SUMMARY
echo "## Duplicate Detection Check" >> $GITHUB_STEP_SUMMARY
echo "" >> $GITHUB_STEP_SUMMARY
if [ "${{ steps.duplicates.outcome }}" == "success" ]; then
echo "**Status: PASS ✓**" >> $GITHUB_STEP_SUMMARY
echo "" >> $GITHUB_STEP_SUMMARY
cat duplicates_log.txt >> $GITHUB_STEP_SUMMARY
else
echo "**Status: FAIL ✗**" >> $GITHUB_STEP_SUMMARY
echo "" >> $GITHUB_STEP_SUMMARY
echo '```' >> $GITHUB_STEP_SUMMARY
cat duplicates_log.txt >> $GITHUB_STEP_SUMMARY
echo '```' >> $GITHUB_STEP_SUMMARY
# Add to artifact (for PR comment)
echo "## Duplicate Detection Check" >> artifact.txt
echo "" >> artifact.txt
cat duplicates_log.txt >> artifact.txt
echo "" >> artifact.txt
overall_status=1
fi
echo "" >> $GITHUB_STEP_SUMMARY
# .editorconfig compliance results
echo "---" >> $GITHUB_STEP_SUMMARY
echo "## .editorconfig Compliance Check" >> $GITHUB_STEP_SUMMARY
echo "" >> $GITHUB_STEP_SUMMARY
if [ "${{ steps.editorconfig.outcome }}" == "success" ]; then
echo "**Status: PASS ✓**" >> $GITHUB_STEP_SUMMARY
echo "" >> $GITHUB_STEP_SUMMARY
cat editorconfig_log.txt >> $GITHUB_STEP_SUMMARY
else
echo "**Status: FAIL ✗**" >> $GITHUB_STEP_SUMMARY
echo "" >> $GITHUB_STEP_SUMMARY
echo '```' >> $GITHUB_STEP_SUMMARY
cat editorconfig_log.txt >> $GITHUB_STEP_SUMMARY
echo '```' >> $GITHUB_STEP_SUMMARY
# Add to artifact (for PR comment)
echo "## .editorconfig Compliance Check" >> artifact.txt
echo "" >> artifact.txt
cat editorconfig_log.txt >> artifact.txt
echo "" >> artifact.txt
overall_status=1
fi
echo "" >> $GITHUB_STEP_SUMMARY
echo "---" >> $GITHUB_STEP_SUMMARY
# Exit with error if any check failed
exit $overall_status
- name: Upload validation results
if: always()
uses: actions/upload-artifact@v4
with:
name: artifact
path: |
artifact.txt
pr_number