Fix MeshCore marker keying to prevent ghost markers across sources #4592
Workflow file for this run
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) keeps growing: ~10 min when the | |
| # cap was first raised (#3385), ~14 min by 2026-07 — so the 15-min cap | |
| # started timing the job out at the boundary again (GitHub reports the | |
| # timeout as "cancelled"). Keep real headroom above the observed runtime. | |
| timeout-minutes: 25 | |
| 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@v7 | |
| 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 lint ratchet | |
| run: | | |
| echo "Running ESLint ratchet..." | |
| # BLOCKING: fails only on new violations above the checked-in baseline. | |
| # Existing debt is frozen in eslint-baseline.json and burns down over time. | |
| # Regenerate baseline: npm run lint:baseline. Tracking: #3962 Task 1.4. | |
| npm run lint:ci | |
| - name: Type check | |
| run: | | |
| echo "Running TypeScript compiler..." | |
| npm run typecheck | |
| - name: Type-check tests (non-blocking) | |
| run: npm run typecheck:tests | |
| # NON-BLOCKING: ~283 pre-existing test-type errors. Flip to blocking (drop continue-on-error) | |
| # when `npm run typecheck:tests` reports 0. Tracking: #3962 Task 1.2. | |
| continue-on-error: true | |
| - 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@v7 | |
| 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@v7 | |
| 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. |