feat(map): add polar grid overlay to Map Analysis and Unified maps (#3971) #4309
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: PR Tests | |
| on: | |
| pull_request: | |
| types: [opened, synchronize, reopened] | |
| paths: | |
| - '**.ts' | |
| - '**.tsx' | |
| - '**.js' | |
| - '**.jsx' | |
| - '**.json' | |
| - '**.md' | |
| - 'docs/**' | |
| - '.github/workflows/pr-tests.yml' | |
| # Cancel in-progress runs for the same PR | |
| concurrency: | |
| group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }} | |
| cancel-in-progress: true | |
| jobs: | |
| quick-test: | |
| name: Quick Tests | |
| runs-on: ubuntu-latest | |
| # The full unit suite (npm run test:run) now runs right at ~10 min on CI, | |
| # so a 10-min cap intermittently cancels the job at the boundary even though | |
| # every step passes. Give it headroom so the check stops flaking (#3385). | |
| timeout-minutes: 15 | |
| services: | |
| postgres: | |
| image: postgres:16 | |
| env: | |
| POSTGRES_USER: test | |
| POSTGRES_PASSWORD: test | |
| POSTGRES_DB: meshmonitor_test | |
| ports: | |
| - 5433:5432 | |
| options: >- | |
| --health-cmd pg_isready | |
| --health-interval 10s | |
| --health-timeout 5s | |
| --health-retries 5 | |
| mysql: | |
| image: mysql:8 | |
| env: | |
| MYSQL_ROOT_PASSWORD: root | |
| MYSQL_USER: test | |
| MYSQL_PASSWORD: test | |
| MYSQL_DATABASE: meshmonitor_test | |
| ports: | |
| - 3307:3306 | |
| options: >- | |
| --health-cmd "mysqladmin ping -h localhost" | |
| --health-interval 10s | |
| --health-timeout 5s | |
| --health-retries 5 | |
| steps: | |
| - name: Checkout code | |
| uses: actions/checkout@v7 | |
| with: | |
| fetch-depth: 0 # Fetch all history for better diffing | |
| submodules: recursive # Initialize protobufs submodule for tests | |
| - name: Setup Node.js | |
| uses: actions/setup-node@v6 | |
| with: | |
| node-version: '24.x' | |
| cache: 'npm' | |
| - name: Install dependencies | |
| run: | | |
| npm install --prefer-offline --no-audit --legacy-peer-deps | |
| - name: Check formatting | |
| run: | | |
| echo "Checking code formatting..." | |
| # Add prettier check when configured | |
| # npm run format:check | |
| - name: Run linter | |
| run: | | |
| echo "Running ESLint..." | |
| npm run lint || true # Don't fail for now | |
| - name: Type check | |
| run: | | |
| echo "Running TypeScript compiler..." | |
| npm run typecheck | |
| - name: Run unit tests | |
| run: | | |
| echo "Running test suite..." | |
| npm run test:run | |
| - name: Generate test summary | |
| if: always() | |
| run: | | |
| echo "## Test Results Summary" >> $GITHUB_STEP_SUMMARY | |
| echo "" >> $GITHUB_STEP_SUMMARY | |
| if [ $? -eq 0 ]; then | |
| echo "✅ All tests passed!" >> $GITHUB_STEP_SUMMARY | |
| else | |
| echo "❌ Some tests failed. Please check the logs." >> $GITHUB_STEP_SUMMARY | |
| fi | |
| changed-files: | |
| name: Detect Changed Files | |
| runs-on: ubuntu-latest | |
| outputs: | |
| backend: ${{ steps.changes.outputs.backend }} | |
| frontend: ${{ steps.changes.outputs.frontend }} | |
| docker: ${{ steps.changes.outputs.docker }} | |
| docs: ${{ steps.changes.outputs.docs }} | |
| steps: | |
| - name: Checkout code | |
| uses: actions/checkout@v7 | |
| - name: Check for changes | |
| uses: dorny/paths-filter@v4 | |
| id: changes | |
| with: | |
| filters: | | |
| backend: | |
| - 'src/server/**' | |
| - 'src/services/**' | |
| - 'package.json' | |
| - 'tsconfig.server.json' | |
| frontend: | |
| - 'src/**' | |
| - '!src/server/**' | |
| - '!src/services/**' | |
| - 'index.html' | |
| - 'vite.config.ts' | |
| docker: | |
| - 'Dockerfile' | |
| - '.dockerignore' | |
| docs: | |
| - 'docs/**' | |
| - '**.md' | |
| focused-tests: | |
| name: Focused Tests | |
| runs-on: ubuntu-latest | |
| needs: changed-files | |
| if: needs.changed-files.outputs.backend == 'true' || needs.changed-files.outputs.frontend == 'true' | |
| steps: | |
| - name: Checkout code | |
| uses: actions/checkout@v7 | |
| with: | |
| submodules: recursive # Initialize protobufs submodule for tests | |
| - name: Setup Node.js | |
| uses: actions/setup-node@v6 | |
| with: | |
| node-version: '24.x' | |
| cache: 'npm' | |
| - name: Install dependencies | |
| run: npm install --prefer-offline --no-audit --legacy-peer-deps | |
| - name: Test backend changes | |
| if: needs.changed-files.outputs.backend == 'true' | |
| run: | | |
| echo "Testing backend changes..." | |
| npm run test:run -- src/services/database.test.ts src/server/server.simple.test.ts | |
| - name: Test frontend changes | |
| if: needs.changed-files.outputs.frontend == 'true' | |
| run: | | |
| echo "Testing frontend changes..." | |
| npm run test:run -- src/components/ | |
| - name: Build check | |
| run: | | |
| if [[ "${{ needs.changed-files.outputs.backend }}" == "true" ]]; then | |
| echo "Building server..." | |
| npm run build:server | |
| fi | |
| if [[ "${{ needs.changed-files.outputs.frontend }}" == "true" ]]; then | |
| echo "Building frontend..." | |
| npm run build | |
| fi | |
| docs-build: | |
| name: Documentation Build | |
| runs-on: ubuntu-latest | |
| needs: changed-files | |
| if: needs.changed-files.outputs.docs == 'true' | |
| steps: | |
| - name: Checkout code | |
| uses: actions/checkout@v7 | |
| - name: Setup Node.js | |
| uses: actions/setup-node@v6 | |
| with: | |
| node-version: '24.x' | |
| cache: 'npm' | |
| - name: Install dependencies | |
| run: npm install --prefer-offline --no-audit --legacy-peer-deps | |
| - name: Build documentation | |
| run: | | |
| echo "Building VitePress documentation..." | |
| npm run docs:build | |
| # The PR Status Check job has been removed as GitHub Actions | |
| # automatically provides its own status checks for each job. | |
| # Attempting to create additional commit statuses requires | |
| # special permissions that are not available by default. |