Skip to content

Commit 502351e

Browse files
committed
Add GitHub Actions CI/CD workflow
🔧 GitHub Integration: - Automated testing across Node.js versions 16.x, 18.x, 20.x - Security audit checks with npm audit - Code quality validation and file structure checks - Integration tests for all supported languages - Multi-job workflow: test → security → lint → integration 🎯 Workflow Features: - Triggered on push to main/develop and pull requests - Manual workflow dispatch support - Comprehensive validation of HTML, CSS, JavaScript validators - Pipeline statistics verification - Production-ready security auditing
1 parent ee00f35 commit 502351e

File tree

1 file changed

+169
-0
lines changed

1 file changed

+169
-0
lines changed

.github/workflows/test.yml

Lines changed: 169 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,169 @@
1+
name: Code Validation Pipeline Tests
2+
3+
on:
4+
push:
5+
branches: [ main, develop ]
6+
pull_request:
7+
branches: [ main ]
8+
workflow_dispatch:
9+
10+
jobs:
11+
test:
12+
name: Test Suite
13+
runs-on: ubuntu-latest
14+
15+
strategy:
16+
matrix:
17+
node-version: [16.x, 18.x, 20.x]
18+
19+
steps:
20+
- name: Checkout code
21+
uses: actions/checkout@v4
22+
23+
- name: Use Node.js ${{ matrix.node-version }}
24+
uses: actions/setup-node@v4
25+
with:
26+
node-version: ${{ matrix.node-version }}
27+
cache: 'npm'
28+
29+
- name: Install dependencies
30+
run: npm run install-deps
31+
32+
- name: Run comprehensive test suite
33+
run: npm test
34+
35+
- name: Run examples
36+
run: npm run example
37+
38+
- name: Test pipeline statistics
39+
run: |
40+
node -e "
41+
const ValidationPipeline = require('./validation_pipeline');
42+
const pipeline = new ValidationPipeline();
43+
console.log('Pipeline Stats:', pipeline.getStats());
44+
console.log('Supported Languages:', pipeline.getSupportedLanguages());
45+
"
46+
47+
security:
48+
name: Security Audit
49+
runs-on: ubuntu-latest
50+
51+
steps:
52+
- name: Checkout code
53+
uses: actions/checkout@v4
54+
55+
- name: Use Node.js
56+
uses: actions/setup-node@v4
57+
with:
58+
node-version: '20.x'
59+
60+
- name: Install dependencies
61+
run: npm run install-deps
62+
63+
- name: Run security audit
64+
run: npm audit --audit-level moderate
65+
66+
- name: Check for vulnerabilities
67+
run: npm audit --audit-level high --production
68+
69+
lint:
70+
name: Code Quality
71+
runs-on: ubuntu-latest
72+
73+
steps:
74+
- name: Checkout code
75+
uses: actions/checkout@v4
76+
77+
- name: Use Node.js
78+
uses: actions/setup-node@v4
79+
with:
80+
node-version: '20.x'
81+
82+
- name: Check file structure
83+
run: |
84+
echo "Checking project structure..."
85+
ls -la
86+
echo "Validators:"
87+
ls -la validators/
88+
echo "Components:"
89+
ls -la components/
90+
echo "Tests:"
91+
ls -la tests/
92+
echo "Examples:"
93+
ls -la examples/
94+
95+
- name: Validate package.json
96+
run: node -p "JSON.stringify(require('./package.json'), null, 2)"
97+
98+
- name: Check for required files
99+
run: |
100+
test -f README.md || (echo "README.md missing" && exit 1)
101+
test -f LICENSE || (echo "LICENSE missing" && exit 1)
102+
test -f package.json || (echo "package.json missing" && exit 1)
103+
test -f validation_pipeline.js || (echo "Main file missing" && exit 1)
104+
echo "All required files present ✅"
105+
106+
integration:
107+
name: Integration Tests
108+
runs-on: ubuntu-latest
109+
needs: test
110+
111+
steps:
112+
- name: Checkout code
113+
uses: actions/checkout@v4
114+
115+
- name: Use Node.js
116+
uses: actions/setup-node@v4
117+
with:
118+
node-version: '20.x'
119+
120+
- name: Install dependencies
121+
run: npm run install-deps
122+
123+
- name: Test HTML validation
124+
run: |
125+
node -e "
126+
const ValidationPipeline = require('./validation_pipeline');
127+
const pipeline = new ValidationPipeline();
128+
129+
pipeline.execute({
130+
problemStatement: 'Create a simple HTML page',
131+
language: 'html',
132+
codeGenerator: () => '<!DOCTYPE html><html><head><title>Test</title></head><body><h1>Hello</h1></body></html>'
133+
}).then(result => {
134+
if (!result.success) throw new Error('HTML validation failed');
135+
console.log('✅ HTML validation passed');
136+
}).catch(console.error);
137+
"
138+
139+
- name: Test CSS validation
140+
run: |
141+
node -e "
142+
const ValidationPipeline = require('./validation_pipeline');
143+
const pipeline = new ValidationPipeline();
144+
145+
pipeline.execute({
146+
problemStatement: 'Create CSS styles',
147+
language: 'css',
148+
codeGenerator: () => 'body { margin: 0; padding: 20px; }'
149+
}).then(result => {
150+
if (!result.success) throw new Error('CSS validation failed');
151+
console.log('✅ CSS validation passed');
152+
}).catch(console.error);
153+
"
154+
155+
- name: Test JavaScript validation
156+
run: |
157+
node -e "
158+
const ValidationPipeline = require('./validation_pipeline');
159+
const pipeline = new ValidationPipeline();
160+
161+
pipeline.execute({
162+
problemStatement: 'Create a function',
163+
language: 'javascript',
164+
codeGenerator: () => 'function test() { return \"hello\"; }'
165+
}).then(result => {
166+
if (!result.success) throw new Error('JavaScript validation failed');
167+
console.log('✅ JavaScript validation passed');
168+
}).catch(console.error);
169+
"

0 commit comments

Comments
 (0)