Skip to content

release: ship AuraGlass 3.2.0 native app chrome #146

release: ship AuraGlass 3.2.0 native app chrome

release: ship AuraGlass 3.2.0 native app chrome #146

name: AuraGlass Pipeline Validation
on:
push:
branches: [main, develop, feat/glass-*]
pull_request:
branches: [main, develop]
permissions:
contents: read
issues: write
pull-requests: write
jobs:
glass-quality-gates:
name: Glass Quality Gates
runs-on: ubuntu-latest
steps:
- name: Checkout code
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: TypeScript type checking
run: npm run typecheck
- name: ESLint with glass rules
run: npm run lint:check
- name: Glass token validation
run: node scripts/verify-glass-pipeline.js
- name: WCAG AA contrast tests
run: npm test -- glass-contrast.spec.ts
- name: Build verification
run: npm run build
- name: Dependency sovereignty gate
run: npm run lint:no-core-ui-deps
- name: Tree-shaking gate
run: npm run test:tree-shaking -- --strict
- name: Glass surface count verification
run: |
if [ ! -f "src/styles/glass.generated.css" ]; then
echo "❌ Generated CSS file missing"
exit 1
fi
surface_count=$(grep -c "glass-.*-level" src/styles/glass.generated.css || true)
expected_count=24 # 6 intents × 4 elevations
if [ "$surface_count" -lt "$expected_count" ]; then
echo "❌ Insufficient glass surfaces: $surface_count < $expected_count"
exit 1
fi
echo "✅ Glass surface validation passed: $surface_count surfaces"
- name: Deprecated API detection
run: npm run glass:validate
- name: Glass token consistency check
run: npm run glass:validate
- name: Performance budget check
run: |
css_size=$(wc -c < src/styles/glass.generated.css)
max_size=30720 # 30KB limit
if [ "$css_size" -gt "$max_size" ]; then
echo "❌ Generated CSS too large: ${css_size} bytes > ${max_size} bytes"
exit 1
fi
echo "✅ CSS size within budget: ${css_size} bytes"
- name: Accessibility compliance verification
run: |
echo "Running comprehensive accessibility tests..."
npm test -- --testPathPattern=a11y --verbose
- name: App-chrome axe verification
run: npm run test:a11y:app-chrome
- name: API surface lock verification
run: |
if [ ! -f "src/types/glass-api-stable.ts" ]; then
echo "❌ Stable API types missing"
exit 1
fi
if [ ! -f "src/docs/GLASS_API_REFERENCE.md" ]; then
echo "❌ API documentation missing"
exit 1
fi
echo "✅ API surface properly locked and documented"
glass-visual-regression:
name: Glass Visual Regression
runs-on: ubuntu-latest
if: github.event_name == 'pull_request'
steps:
- name: Checkout code
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 visual test pages
run: node scripts/glass-visual-test-generator.js
- name: Archive visual test artifacts
uses: actions/upload-artifact@v4
with:
name: glass-visual-tests
path: reports/glass/visual-tests/
- name: Comment on PR with test links
continue-on-error: true
uses: actions/github-script@v7
with:
script: |
const fs = require('fs');
if (fs.existsSync('reports/glass/visual-tests/comprehensive-test.html')) {
await github.rest.issues.createComment({
issue_number: context.issue.number,
owner: context.repo.owner,
repo: context.repo.repo,
body: '🎨 **Glass Visual Test Pages Generated**\n\nDownload the `glass-visual-tests` artifact from this workflow run to view comprehensive visual validation pages for all glass surfaces.'
});
}
next-integration-smoke:
name: Next.js npm Integration
runs-on: ubuntu-latest
needs: glass-quality-gates
steps:
- name: Checkout code
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: Run Next.js integration smoke test
run: npm run test:integration:next
vite-integration-smoke:
name: Vite npm Integration
runs-on: ubuntu-latest
needs: glass-quality-gates
steps:
- name: Checkout code
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: Run Vite integration smoke test
run: npm run test:integration:vite
app-chrome-visual-baselines:
name: App Chrome Visual Baselines
runs-on: ubuntu-latest
needs: glass-quality-gates
if: github.event_name == 'pull_request'
steps:
- name: Checkout code
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 Chromium
run: npx playwright install --with-deps chromium
- name: Run app-chrome visual baseline gate
run: npm run test:visual:app-chrome
- name: Archive app-chrome visual artifacts
if: always()
uses: actions/upload-artifact@v4
with:
name: app-chrome-visual-baselines
path: |
reports/3.2-release/app-chrome-visual-evidence.json
reports/3.2-release/app-chrome-visual-evidence.md
reports/3.2-release/app-chrome-visuals/
reports/3.2-release/app-chrome-visual-server.log