name: PR Tests on: pull_request: types: - opened - synchronize - reopened - ready_for_review workflow_dispatch: concurrency: group: pr-tests-${{ github.event.pull_request.number || github.ref }} cancel-in-progress: true permissions: contents: read jobs: web-tests: name: Web Build And Test if: ${{ github.event_name != 'pull_request' || !github.event.pull_request.draft }} runs-on: ubuntu-latest steps: - name: Check out repository uses: actions/checkout@v4 with: persist-credentials: false - name: Set up pnpm uses: pnpm/action-setup@v4 with: version: 9 - name: Set up Node.js uses: actions/setup-node@v4 with: node-version: 20 cache: pnpm cache-dependency-path: web/pnpm-lock.yaml - name: Build frontend run: make build-frontend - name: Run frontend unit tests run: make test-frontend server-tests: name: Server Unit Tests if: ${{ github.event_name != 'pull_request' || !github.event.pull_request.draft }} runs-on: ubuntu-latest steps: - name: Check out repository uses: actions/checkout@v4 with: persist-credentials: false - name: Set up Java uses: actions/setup-java@v4 with: distribution: temurin java-version: 21 cache: maven - name: Ensure Maven wrapper is executable run: chmod +x server/mvnw - name: Run backend unit tests run: make test-backend docs-build: name: Docs Build if: ${{ github.event_name != 'pull_request' || !github.event.pull_request.draft }} runs-on: ubuntu-latest steps: - name: Check out repository uses: actions/checkout@v4 with: persist-credentials: false - name: Detect docs changes id: changed uses: dorny/paths-filter@v3 with: filters: | docs: - 'docs/skillhub/**' - '.github/workflows/pr-tests.yml' - name: Set up Node.js if: steps.changed.outputs.docs == 'true' uses: actions/setup-node@v4 with: node-version: 24 cache: npm cache-dependency-path: docs/skillhub/package-lock.json - name: Install docs dependencies if: steps.changed.outputs.docs == 'true' run: cd docs/skillhub && npm ci - name: Build VitePress site if: steps.changed.outputs.docs == 'true' run: cd docs/skillhub && npm run build