@@ -24,15 +24,15 @@ jobs:
2424 run : |
2525 if [ "${{ github.event_name }}" == "schedule" ]; then
2626 # For scheduled runs, test all examples
27- examples=$(find . -name "docker-compose.y*ml" -not -path "./.github/*" | xargs dirname | sort -u | jq -R -s -c 'split("\n")[:-1]')
27+ examples=$(./dev.sh list | grep -E "^ - " | sed 's/^ - //' | jq -R -s -c 'split("\n")[:-1]')
2828 else
2929 # For PR/push, only test changed examples
3030 changed_files=$(git diff --name-only ${{ github.event.before }}..${{ github.sha }} || git diff --name-only HEAD~1)
31- examples=$(echo "$changed_files" | grep -E "(docker-compose\.ya?ml|Dockerfile|\.sh)$" | xargs dirname | sort -u | jq -R -s -c 'split("\n")[:-1]' || echo '[]')
31+ examples=$(echo "$changed_files" | grep -E "(docker-compose\.ya?ml|Dockerfile|\.sh)$" | xargs dirname 2>/dev/null | sort -u | jq -R -s -c 'split("\n")[:-1]' || echo '[]')
3232 fi
3333 echo "examples=$examples" >> $GITHUB_OUTPUT
3434
35- validate-structure :
35+ validate-examples :
3636 runs-on : ubuntu-latest
3737 needs : detect-changes
3838 if : needs.detect-changes.outputs.examples != '[]'
@@ -44,113 +44,53 @@ jobs:
4444 steps :
4545 - uses : actions/checkout@v4
4646
47- - name : Validate example structure
47+ - name : Validate example
4848 run : |
4949 example="${{ matrix.example }}"
50- echo "Validating structure for: $example"
50+ echo "Validating: $example"
51+ ./dev.sh validate "$example"
5152
52- # Check if directory exists
53- if [ ! -d "$example" ]; then
54- echo "❌ Example directory does not exist: $example"
55- exit 1
56- fi
57-
58- # Check for required files
59- required_files=("README.md")
60- for file in "${required_files[@]}"; do
61- if [ ! -f "$example/$file" ]; then
62- echo "❌ Missing required file: $example/$file"
63- exit 1
64- fi
65- done
66-
67- # Check for docker-compose file
68- if [ ! -f "$example/docker-compose.yml" ] && [ ! -f "$example/docker-compose.yaml" ]; then
69- echo "❌ Missing docker-compose file in: $example"
70- exit 1
71- fi
72-
73- echo "✅ Structure validation passed for: $example"
74-
75- validate-docker-compose :
53+ lint-and-security :
7654 runs-on : ubuntu-latest
77- needs : detect-changes
78- if : needs.detect-changes.outputs.examples != '[]'
79- strategy :
80- matrix :
81- example : ${{ fromJson(needs.detect-changes.outputs.examples) }}
82- fail-fast : false
83-
8455 steps :
8556 - uses : actions/checkout@v4
8657
87- - name : Validate Docker Compose files
58+ - name : Install dependencies
8859 run : |
89- example="${{ matrix.example }}"
90- echo "Validating Docker Compose for: $example"
91-
92- cd "$example"
93-
94- # Find docker-compose file
95- compose_file=""
96- if [ -f "docker-compose.yml" ]; then
97- compose_file="docker-compose.yml"
98- elif [ -f "docker-compose.yaml" ]; then
99- compose_file="docker-compose.yaml"
100- else
101- echo "❌ No docker-compose file found in: $example"
102- exit 1
103- fi
60+ # Install shellcheck
61+ sudo apt-get update
62+ sudo apt-get install -y shellcheck
63+
64+ # Install yamllint
65+ pip install yamllint
10466
105- # Validate compose file syntax
106- if ! docker compose -f "$compose_file" config > /dev/null; then
107- echo "❌ Invalid docker-compose syntax in: $example/$compose_file"
108- exit 1
109- fi
67+ - name : Run lint checks
68+ run : ./dev.sh lint
11069
111- echo "✅ Docker Compose validation passed for: $example"
70+ - name : Run security checks
71+ run : ./dev.sh security
11272
113- security-scan :
73+ comprehensive-check :
11474 runs-on : ubuntu-latest
115- needs : detect-changes
116- if : needs.detect-changes.outputs.examples != '[]'
117- strategy :
118- matrix :
119- example : ${{ fromJson(needs.detect-changes.outputs.examples) }}
120- fail-fast : false
121-
75+ if : github.event_name == 'schedule'
12276 steps :
12377 - uses : actions/checkout@v4
12478
125- - name : Security scan
79+ - name : Install dependencies
12680 run : |
127- example="${{ matrix.example }}"
128- echo "Running security scan for: $example"
81+ # Install shellcheck
82+ sudo apt-get update
83+ sudo apt-get install -y shellcheck
84+
85+ # Install yamllint
86+ pip install yamllint
12987
130- # Check for common security issues
131- security_issues=0
132-
133- # Check for hardcoded secrets (basic patterns)
134- if grep -r -i -E "(password|secret|key|token).*=.*['\"][^'\"]{8,}['\"]" "$example/" 2>/dev/null; then
135- echo "⚠️ Potential hardcoded secrets found in: $example"
136- security_issues=$((security_issues + 1))
137- fi
138-
139- # Check for exposed sensitive ports
140- if grep -E "ports:.*:(22|3306|5432|6379|27017)" "$example"/*.yml "$example"/*.yaml 2>/dev/null; then
141- echo "⚠️ Potentially sensitive ports exposed in: $example"
142- security_issues=$((security_issues + 1))
143- fi
144-
145- if [ $security_issues -gt 0 ]; then
146- echo "⚠️ Security scan completed with $security_issues potential issues in: $example"
147- else
148- echo "✅ Security scan passed for: $example"
149- fi
88+ - name : Run all checks
89+ run : ./dev.sh check-all
15090
15191 summary :
15292 runs-on : ubuntu-latest
153- needs : [detect-changes, validate-structure, validate-docker-compose, security-scan ]
93+ needs : [detect-changes, validate-examples, lint-and- security]
15494 if : always()
15595
15696 steps :
@@ -167,13 +107,11 @@ jobs:
167107 echo "" >> $GITHUB_STEP_SUMMARY
168108
169109 # Check job results
170- structure_result="${{ needs.validate-structure.result }}"
171- compose_result="${{ needs.validate-docker-compose.result }}"
172- security_result="${{ needs.security-scan.result }}"
110+ validation_result="${{ needs.validate-examples.result }}"
111+ lint_security_result="${{ needs.lint-and-security.result }}"
173112
174113 echo "| Check | Status |" >> $GITHUB_STEP_SUMMARY
175114 echo "|-------|--------|" >> $GITHUB_STEP_SUMMARY
176- echo "| Structure | $structure_result |" >> $GITHUB_STEP_SUMMARY
177- echo "| Docker Compose | $compose_result |" >> $GITHUB_STEP_SUMMARY
178- echo "| Security Scan | $security_result |" >> $GITHUB_STEP_SUMMARY
179- fi
115+ echo "| Example Validation | $validation_result |" >> $GITHUB_STEP_SUMMARY
116+ echo "| Lint & Security | $lint_security_result |" >> $GITHUB_STEP_SUMMARY
117+ fi
0 commit comments