name: Coverage Report - dev on: workflow_dispatch: # Trigger from UI for selected branch schedule: - cron: "0 0 * * *" # Every day at midnight UTC permissions: contents: read env: UV_VERSION: 0.9.17 jobs: unit-coverage: runs-on: ubuntu-latest steps: - name: Install minimal stable uses: dtolnay/rust-toolchain@631a55b12751854ce901bb631d5902ceb48146f7 # stable with: components: llvm-tools-preview - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: # If scheduled by cron, run for dev branch, Otherwise specified branch (for workflow dispatch & push) ref: ${{ github.event_name == 'schedule' && 'dev' || github.ref_name }} fetch-depth: 0 - name: Install Protoc uses: ./.github/actions/setup-protoc - name: Install nextest uses: taiki-e/install-action@3a0adc33ab45d7b9b9da91822dd2b3c0151704be # nextest - name: Install llvm-cov run: cargo install cargo-llvm-cov && sudo apt install -y lcov - name: Run unit tests with coverage run: RUN_PER_PACKAGE=true tools/unit-test-coverage.sh - name: Upload unit test coverage artifact uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1 with: name: unit-test-coverage path: unit-test-coverage.lcov retention-days: 1 integration-coverage: runs-on: ubuntu-latest steps: - name: Install minimal stable uses: dtolnay/rust-toolchain@631a55b12751854ce901bb631d5902ceb48146f7 # stable with: components: llvm-tools-preview - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: # If scheduled by cron, run for dev branch, Otherwise specified branch (for workflow dispatch & push) ref: ${{ github.event_name == 'schedule' && 'dev' || github.ref_name }} fetch-depth: 0 - name: Install Protoc uses: ./.github/actions/setup-protoc - name: Install nextest uses: taiki-e/install-action@3a0adc33ab45d7b9b9da91822dd2b3c0151704be # nextest - name: Install llvm-cov run: cargo install cargo-llvm-cov && sudo apt install -y lcov - name: Install dependencies run: sudo apt-get install clang - uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v7.0.0 with: python-version: '3.13' - name: Install uv and Python dependencies run: | curl -LsSf https://astral.sh/uv/$UV_VERSION/install.sh | sh echo "$HOME/.local/bin" >> $GITHUB_PATH uv --project tests lock --check uv --project tests sync - name: Run integration tests with coverage run: tools/integration-test-coverage.sh - name: Upload integration test coverage artifact uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1 with: name: integration-test-coverage path: integration-test-coverage.lcov retention-days: 1 merge-and-upload: needs: [unit-coverage, integration-coverage] runs-on: ubuntu-latest steps: - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: # If scheduled by cron, run for dev branch, Otherwise specified branch (for workflow dispatch & push) ref: ${{ github.event_name == 'schedule' && 'dev' || github.ref_name }} fetch-depth: 0 # Fetch all history for all tags and branches - name: Install lcov run: sudo apt install -y lcov - name: Download unit test coverage uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1 with: name: unit-test-coverage - name: Download integration test coverage uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1 with: name: integration-test-coverage - name: Merge coverage reports run: lcov -a unit-test-coverage.lcov -a integration-test-coverage.lcov -o merged.lcov - name: Upload coverage data to Codecov uses: codecov/codecov-action@fb8b3582c8e4def4969c97caa2f19720cb33a72f # v7.0.0 with: files: merged.lcov override_branch: ${{ github.event_name == 'schedule' && 'dev' || github.ref_name }} token: ${{ secrets.CODECOV_TOKEN }} verbose: true