ci: add CI/CD workflows
This commit is contained in:
@@ -0,0 +1,121 @@
|
||||
# Railtrack Pro - Gitea Actions CI/CD Workflow
|
||||
# Runs automated tests on push to main and pull requests
|
||||
# Follows TDD approach for quality assurance
|
||||
|
||||
name: Railtrack Pro Tests
|
||||
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- main
|
||||
pull_request:
|
||||
branches:
|
||||
- main
|
||||
|
||||
jobs:
|
||||
test:
|
||||
name: Run Test Suite
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
steps:
|
||||
- name: Checkout Repository
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: Setup Node.js
|
||||
uses: actions/setup-node@v4
|
||||
with:
|
||||
node-version: '20'
|
||||
cache: 'npm'
|
||||
|
||||
- name: Install Dependencies
|
||||
run: npm ci
|
||||
|
||||
- name: Install Playwright Browsers
|
||||
run: npx playwright install --with-deps chromium
|
||||
|
||||
- name: Run Jest Unit Tests
|
||||
run: npm run test:unit
|
||||
|
||||
- name: Run Playwright E2E Tests
|
||||
run: npm run test:e2e
|
||||
timeout-minutes: 10
|
||||
|
||||
- name: Generate Coverage Report
|
||||
run: npm run test:coverage
|
||||
|
||||
- name: Upload Coverage Report
|
||||
uses: actions/upload-artifact@v4
|
||||
if: always()
|
||||
with:
|
||||
name: coverage-report
|
||||
path: coverage/
|
||||
retention-days: 30
|
||||
|
||||
- name: Upload Test Results
|
||||
uses: actions/upload-artifact@v4
|
||||
if: always()
|
||||
with:
|
||||
name: playwright-report
|
||||
path: playwright-report/
|
||||
retention-days: 30
|
||||
|
||||
lint:
|
||||
name: Code Quality Check
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
steps:
|
||||
- name: Checkout Repository
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: Setup Node.js
|
||||
uses: actions/setup-node@v4
|
||||
with:
|
||||
node-version: '20'
|
||||
cache: 'npm'
|
||||
|
||||
- name: Install Dependencies
|
||||
run: npm ci
|
||||
|
||||
- name: Verify Code Structure
|
||||
run: |
|
||||
echo "Verifying project structure..."
|
||||
test -f index.html || exit 1
|
||||
test -d js/ || exit 1
|
||||
test -d css/ || exit 1
|
||||
test -d test/ || exit 1
|
||||
echo "✓ Project structure valid"
|
||||
|
||||
coverage:
|
||||
name: Code Coverage Check
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
steps:
|
||||
- name: Checkout Repository
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: Setup Node.js
|
||||
uses: actions/setup-node@v4
|
||||
with:
|
||||
node-version: '20'
|
||||
cache: 'npm'
|
||||
|
||||
- name: Install Dependencies
|
||||
run: npm ci
|
||||
|
||||
- name: Generate Coverage
|
||||
run: npm run test:coverage
|
||||
|
||||
- name: Display Coverage Summary
|
||||
run: |
|
||||
echo "# Code Coverage Summary" >> $GITHUB_STEP_SUMMARY
|
||||
echo "" >> $GITHUB_STEP_SUMMARY
|
||||
cat coverage/coverage-summary.json | grep -E '"total"' | awk -F'[,}]' '{print "### "$1": "$NF"%"}' >> $GITHUB_STEP_SUMMARY
|
||||
|
||||
- name: Fail if Coverage Below Threshold
|
||||
run: |
|
||||
COVERAGE=$(cat coverage/coverage-summary.json | grep -o '"statements": [0-9.]*' | grep -o '[0-9.]*')
|
||||
if (( $(echo "$COVERAGE < 80" | bc -l) )); then
|
||||
echo "❌ Coverage below 80% threshold: ${COVERAGE}%"
|
||||
exit 1
|
||||
fi
|
||||
echo "✅ Coverage above 80% threshold: ${COVERAGE}%"
|
||||
Reference in New Issue
Block a user