@ 261105.16
current
name: Coverage Linux

on:
  pull_request:
    types: [opened, synchronize, reopened, ready_for_review]
    paths:
      - lib/**/*.js
      - Makefile
      - src/**/*.cc
      - src/**/*.h
      - test/**
      - tools/gyp/**
      - tools/test.py
      - .github/workflows/coverage-linux.yml
      - codecov.yml
      - .nycrc
  push:
    branches:
      - main
    paths:
      - lib/**/*.js
      - Makefile
      - src/**/*.cc
      - src/**/*.h
      - test/**
      - tools/gyp/**
      - tools/test.py
      - .github/workflows/coverage-linux.yml
      - codecov.yml
      - .nycrc

concurrency:
  group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }}
  cancel-in-progress: true

env:
  PYTHON_VERSION: '3.15'
  FLAKY_TESTS: keep_retrying
  CLANG_VERSION: '19'
  CC: ${{ (github.base_ref == 'main' || github.ref_name == 'main') && 'sccache' || '' }} clang-19
  CXX: ${{ (github.base_ref == 'main' || github.ref_name == 'main') && 'sccache' || '' }} clang++-19
  SCCACHE_GHA_ENABLED: ${{ github.base_ref == 'main' || github.ref_name == 'main' }}
  SCCACHE_IDLE_TIMEOUT: '0'

permissions:
  contents: read

jobs:
  coverage-linux:
    if: github.event.pull_request.draft == false
    runs-on: ubuntu-24.04-arm
    steps:
      - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1  # v7.0.1
        with:
          persist-credentials: false
      - name: Install Clang ${{ env.CLANG_VERSION }}
        uses: $/.github/actions/install-clang
        with:
          clang-version: ${{ env.CLANG_VERSION }}
      - name: Set up Python ${{ env.PYTHON_VERSION }}
        uses: actions/setup-python@6d4fd22b20465ccc0f7354476588e8df7c9ca0e0  # v7.1.0
        with:
          python-version: ${{ env.PYTHON_VERSION }}
          allow-prereleases: true
      - name: Set up sccache
        if: github.base_ref == 'main' || github.ref_name == 'main'
        uses: Mozilla-Actions/sccache-action@fc920bf0ec8de6ee65d409111f7ec508035751ba  # v0.0.11
        with:
          version: v0.17.0
      - name: Install gcovr
        run: pip install gcovr==7.2
      - name: Configure
        run: ./configure --verbose --error-on-warn --coverage
      # TODO(bcoe): fix the couple tests that fail with the inspector enabled.
      # The cause is most likely coverage's use of the inspector.
      - name: Build and test
        run: NODE_V8_COVERAGE=coverage/tmp make test-cov -j4 V=1 TEST_CI_ARGS="-p dots  --measure-flakiness 9" || exit 0
      - name: Report JS
        run: npx c8 report --check-coverage
        env:
          NODE_OPTIONS: --max-old-space-size=8192
      - name: Report C++
        run: gcovr --object-directory=out -v --filter src --xml -o ./coverage/coverage-cxx.xml --root=./ --gcov-executable="llvm-cov-18 gcov"
      # Clean temporary output from gcov and c8, so that it's not uploaded:
      - name: Clean tmp
        run: rm -rf coverage/tmp && rm -rf out
      - name: Upload
        uses: codecov/codecov-action@303a32d7a59b442fa8d48b6a1cc6825c09c847a5  # v7.1.1
        with:
          directory: ./coverage