fix(ci): correct validate loop, script names, tools, and PASS++ bug #7
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| name: CI | |
| on: | |
| push: | |
| branches: [main, develop, 'feature/**', 'bugfix/**'] | |
| pull_request: | |
| branches: [main, develop] | |
| permissions: | |
| contents: read | |
| security-events: write | |
| jobs: | |
| validate: | |
| name: Validate Configuration | |
| runs-on: ubuntu-latest | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - name: Validate Docker Compose files | |
| run: | | |
| # Strictly validate the standalone lab (fully built out) | |
| echo "Validating: docker/docker-compose.standalone.yml" | |
| docker compose -f docker/docker-compose.standalone.yml config -q | |
| echo "OK: docker/docker-compose.standalone.yml" | |
| # Parse-check remaining scaffold files (may contain placeholder vars) | |
| for f in docker/docker-compose.lan.yml docker/docker-compose.advanced.yml \ | |
| docker/docker-compose.sso.yml docker/docker-compose.integration.yml \ | |
| docker/docker-compose.production.yml; do | |
| echo "Checking scaffold: $f" | |
| docker compose -f "$f" config --no-interpolate -q 2>&1 && echo "OK: $f" \ | |
| || echo "WARN: $f has placeholder variables (scaffold — not yet built out)" | |
| done | |
| - name: ShellCheck — lab test scripts | |
| run: | | |
| sudo apt-get install -y shellcheck -qq | |
| shellcheck tests/labs/*.sh | |
| - name: Validate module manifest | |
| run: | | |
| python3 -c " | |
| import sys, re | |
| with open('it-stack-postgresql.yml') as f: | |
| content = f.read() | |
| required = ['module:', 'version:', 'phase:', 'category:', 'ports:'] | |
| missing = [k for k in required if k not in content] | |
| if missing: | |
| print('Missing fields:', missing); sys.exit(1) | |
| print('Manifest valid') | |
| " | |
| security-scan: | |
| name: Security Scan | |
| runs-on: ubuntu-latest | |
| needs: validate | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - name: Trivy — scan Dockerfile | |
| uses: aquasecurity/trivy-action@0.28.0 | |
| with: | |
| scan-type: config | |
| scan-ref: . | |
| exit-code: '0' | |
| severity: CRITICAL,HIGH | |
| - name: Trivy — SARIF output | |
| uses: aquasecurity/trivy-action@0.28.0 | |
| with: | |
| scan-type: config | |
| scan-ref: . | |
| format: sarif | |
| output: trivy-results.sarif | |
| - name: Upload SARIF to GitHub Security | |
| uses: github/codeql-action/upload-sarif@v3 | |
| if: always() | |
| with: | |
| sarif_file: trivy-results.sarif | |
| lab-01-smoke: | |
| name: Lab 01 — Smoke Test | |
| runs-on: ubuntu-latest | |
| needs: validate | |
| continue-on-error: true # scaffold stubs; full lab runs on real VMs | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - name: Install PostgreSQL client tools | |
| run: sudo apt-get install -y postgresql-client netcat-openbsd | |
| - name: Start standalone stack | |
| run: docker compose -f docker/docker-compose.standalone.yml up -d | |
| - name: Wait for PostgreSQL to be ready | |
| run: | | |
| echo "Waiting for PostgreSQL..." | |
| timeout 120 bash -c 'until pg_isready -h localhost -p 5432 -U labadmin; do sleep 3; done' | |
| docker compose -f docker/docker-compose.standalone.yml ps | |
| - name: Run Lab 03-01 test script | |
| env: | |
| PGPASSWORD: "Lab01Password!" | |
| run: bash tests/labs/test-lab-03-01.sh | |
| - name: Collect logs on failure | |
| if: failure() | |
| run: docker compose -f docker/docker-compose.standalone.yml logs | |
| - name: Cleanup | |
| if: always() | |
| run: docker compose -f docker/docker-compose.standalone.yml down -v |