introduce code coverage analysis in CI #515
Workflow file for this run
This file contains 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: CI | |
concurrency: | |
group: ${{ github.workflow }}-${{ github.ref }} | |
cancel-in-progress: true | |
on: | |
pull_request: | |
merge_group: | |
env: | |
CARGO_TERM_COLOR: always | |
jobs: | |
build_binary: | |
name: "Build neard" | |
runs-on: ubuntu-22.04-16core | |
steps: | |
- uses: actions/checkout@v4 | |
- uses: baptiste0928/cargo-install@21a18ba3bf4a184d1804e8b759930d3471b1c941 | |
with: | |
crate: cargo-llvm-cov | |
- uses: Swatinem/rust-cache@a95ba195448af2da9b00fb742d14ffaaf3c21f43 | |
with: | |
prefix-key: "0" # change this to invalidate CI cache | |
shared-key: "cargo_nextest-linux" | |
save-if: "false" # use the cache from nextest, but don’t double-save | |
# TODO: remove the LLVM_PROFILE_FILE override once | |
# https://github.com/taiki-e/cargo-llvm-cov/issues/320 is fixed (and same below) | |
- run: cargo llvm-cov show-env | tr -d "'" >> "$GITHUB_ENV" | |
- run: cargo build --locked --profile quick-release -p neard --bin neard | |
- uses: actions/upload-artifact@v3 | |
with: | |
name: neard | |
path: target/quick-release/neard | |
if-no-files-found: error | |
retention-days: 1 | |
cargo_nextest: | |
name: "Cargo Nextest (${{matrix.name}})" | |
runs-on: ${{ matrix.os }} | |
strategy: | |
fail-fast: false | |
matrix: | |
include: | |
- name: Linux | |
id: linux | |
cache_id: linux | |
os: ubuntu-22.04-16core | |
flags: "" | |
- name: Linux Nightly | |
id: linux-nightly | |
cache_id: linux | |
os: ubuntu-22.04-16core | |
flags: "--features nightly,test_features" | |
- name: MacOS | |
id: macos | |
cache_id: macos | |
os: macos-latest-xlarge | |
# FIXME: some of these tests don't work very well on MacOS at the moment. Should fix | |
# them at earliest convenience :) | |
# Note that integration-tests are disabled at the step running them in the job below. | |
flags: "--exclude node-runtime --exclude runtime-params-estimator --exclude near-network --exclude estimator-warehouse" | |
timeout-minutes: 90 | |
steps: | |
# Some of the tests allocate really sparse maps, so heuristic-based overcommit limits are not | |
# appropriate here. | |
# FIXME(#9634): remove this once the issue is resolved. | |
- run: sudo sysctl vm.overcommit_memory=1 || true | |
- uses: actions/checkout@v4 | |
# Install all the required tools | |
- uses: baptiste0928/cargo-install@21a18ba3bf4a184d1804e8b759930d3471b1c941 | |
with: | |
crate: cargo-nextest | |
- uses: baptiste0928/cargo-install@21a18ba3bf4a184d1804e8b759930d3471b1c941 | |
with: | |
crate: cargo-deny | |
- uses: baptiste0928/cargo-install@21a18ba3bf4a184d1804e8b759930d3471b1c941 | |
with: | |
crate: cargo-llvm-cov | |
# Setup the dependency rust cache and llvm-cov | |
- uses: Swatinem/rust-cache@a95ba195448af2da9b00fb742d14ffaaf3c21f43 | |
with: | |
prefix-key: "0" # change this to invalidate CI cache | |
shared-key: "cargo_nextest-${{ matrix.cache_id }}" | |
- run: cargo llvm-cov show-env | tr -d "'" >> "$GITHUB_ENV" | |
# Run unit tests | |
- run: cargo nextest run --locked --workspace --exclude integration-tests --cargo-profile quick-release --profile ci ${{ matrix.flags }} | |
env: | |
RUST_BACKTRACE: short | |
- run: cargo llvm-cov report --profile quick-release --codecov --output-path unittests.json | |
- uses: codecov/codecov-action@eaaf4bedf32dbdc6b720b63067d99c4d77d6047d | |
with: | |
files: unittests.json | |
fail_ci_if_error: true | |
flags: unittests,${{ matrix.id }} | |
# See https://github.com/taiki-e/cargo-llvm-cov/issues/292 | |
- run: find target -name '*.profraw' -delete | |
# Run integration tests | |
- run: cargo nextest run --locked --package integration-tests --cargo-profile quick-release --profile ci ${{ matrix.flags }} | |
if: matrix.id != 'macos' | |
env: | |
RUST_BACKTRACE: short | |
- run: cargo llvm-cov report --profile quick-release --codecov --output-path integration-tests.json | |
if: matrix.id != 'macos' | |
- uses: codecov/codecov-action@eaaf4bedf32dbdc6b720b63067d99c4d77d6047d | |
if: matrix.id != 'macos' | |
with: | |
files: integration-tests.json | |
fail_ci_if_error: true | |
flags: integration-tests,${{ matrix.id }} | |
protobuf_backward_compat: | |
name: "Protobuf Backward Compatibility" | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v4 | |
- uses: bufbuild/buf-setup-action@1158f4fa81bc02e1ff62abcca6d516c9e24c77da | |
- uses: bufbuild/buf-breaking-action@a074e988ee34efcd4927079e79c611f428354c01 | |
with: | |
against: "https://github.com/near/nearcore.git#${{github.event.pull_request.base.sha && format('ref={0}', github.event.pull_request.base.sha) || 'branch=master' }}" | |
py_backward_compat: | |
name: "Backward Compatibility" | |
needs: build_binary | |
runs-on: ubuntu-22.04 | |
steps: | |
- uses: actions/checkout@v4 | |
- uses: actions/setup-python@v4 | |
with: | |
python-version: 3.11 | |
cache: pip | |
- uses: baptiste0928/cargo-install@21a18ba3bf4a184d1804e8b759930d3471b1c941 | |
with: | |
crate: cargo-llvm-cov | |
- uses: actions/download-artifact@v3 | |
with: | |
name: neard | |
path: pytest # NB: this does not account for defaults.run.working-directory | |
- run: echo "CURRENT_NEARD=$PWD/pytest/neard" >> "$GITHUB_ENV" | |
- run: chmod +x "$CURRENT_NEARD" | |
- run: pip3 install --user -r pytest/requirements.txt | |
- run: cargo llvm-cov show-env | tr -d "'" >> "$GITHUB_ENV" | |
- run: cd pytest && python3 tests/sanity/backward_compatible.py | |
- run: find . -name '*.profraw' | |
- run: find target | |
- run: find . | |
- run: cargo llvm-cov report --profile quick-release --codecov --output-path pytest-backcomp.json | |
- uses: codecov/codecov-action@eaaf4bedf32dbdc6b720b63067d99c4d77d6047d | |
with: | |
files: pytest-backcomp.json | |
fail_ci_if_error: true | |
flags: pytests,backward-compatibility,linux | |
py_db_migration: | |
name: "Database Migration" | |
needs: build_binary | |
runs-on: ubuntu-22.04 | |
defaults: | |
run: | |
working-directory: ./pytest | |
steps: | |
- uses: actions/checkout@v4 | |
- uses: actions/setup-python@v4 | |
with: | |
python-version: 3.11 | |
cache: pip | |
- uses: baptiste0928/cargo-install@21a18ba3bf4a184d1804e8b759930d3471b1c941 | |
with: | |
crate: cargo-llvm-cov | |
- uses: actions/download-artifact@v3 | |
with: | |
name: neard | |
path: pytest # NB: this does not account for defaults.run.working-directory | |
- run: echo "CURRENT_NEARD=$PWD/neard" >> "$GITHUB_ENV" | |
- run: echo "NEAR_ROOT=$PWD" >> "$GITHUB_ENV" | |
- run: chmod +x "$CURRENT_NEARD" | |
- run: pip3 install --user -r requirements.txt | |
- run: cargo llvm-cov show-env | tr -d "'" >> "$GITHUB_ENV" | |
- run: python3 tests/sanity/db_migration.py | |
- run: cargo llvm-cov report --profile quick-release --codecov --output-path pytest-dbmigr.json | |
- uses: codecov/codecov-action@eaaf4bedf32dbdc6b720b63067d99c4d77d6047d | |
with: | |
files: pytest-dbmigr.json | |
fail_ci_if_error: true | |
flags: pytests,db-migration,linux | |
py_sanity_checks: | |
name: "Sanity Checks" | |
runs-on: ubuntu-22.04-16core | |
strategy: | |
fail-fast: false | |
timeout-minutes: 90 | |
steps: | |
- uses: actions/checkout@v4 | |
- uses: actions/setup-python@v4 | |
with: | |
python-version: 3.11 | |
cache: pip | |
- uses: baptiste0928/cargo-install@21a18ba3bf4a184d1804e8b759930d3471b1c941 | |
with: | |
crate: cargo-llvm-cov | |
- uses: Swatinem/rust-cache@a95ba195448af2da9b00fb742d14ffaaf3c21f43 | |
with: | |
prefix-key: "0" # change this to invalidate CI cache | |
shared-key: "cargo_nextest-linux" | |
save-if: "false" # use the cache from nextest, but don’t double-save | |
- run: pip3 install --user -r pytest/requirements.txt | |
# This is the only job that uses `--features nightly` so we build this in-line instead of a | |
# separate job like done with the regular neard. | |
- run: cargo llvm-cov show-env | tr -d "'" >> "$GITHUB_ENV" | |
- run: cargo build --profile quick-release -p neard --bin neard --features nightly | |
# Note: We're not running spin_up_cluster.py for non-nightly | |
# because spinning up non-nightly clusters is already covered | |
# by other steps in the CI, e.g. upgradable. | |
- run: python3 pytest/tests/sanity/spin_up_cluster.py | |
env: | |
NEAR_ROOT: "target/quick-release" | |
- run: cargo llvm-cov report --profile quick-release --codecov --output-path pytest-sanity.json | |
- uses: codecov/codecov-action@eaaf4bedf32dbdc6b720b63067d99c4d77d6047d | |
with: | |
files: pytest-sanity.json | |
fail_ci_if_error: true | |
flags: pytests,sanity-checks,linux-nightly | |
py_genesis_check: | |
name: "Genesis Changes" | |
needs: build_binary | |
runs-on: ubuntu-22.04 | |
steps: | |
- uses: actions/checkout@v4 | |
- uses: actions/setup-python@v4 | |
with: | |
python-version: 3.11 | |
cache: pip | |
- uses: baptiste0928/cargo-install@21a18ba3bf4a184d1804e8b759930d3471b1c941 | |
with: | |
crate: cargo-llvm-cov | |
- uses: actions/download-artifact@v3 | |
with: | |
name: neard | |
path: target/quick-release | |
- run: echo "CURRENT_NEARD=$PWD/target/quick-release/neard" >> "$GITHUB_ENV" | |
- run: chmod +x "$CURRENT_NEARD" | |
- run: pip3 install --user -r pytest/requirements.txt | |
- run: cargo llvm-cov show-env | tr -d "'" >> "$GITHUB_ENV" | |
- run: python3 scripts/state/update_res.py check | |
- run: cargo llvm-cov report --profile quick-release --codecov --output-path pytest-genesischk.json | |
- uses: codecov/codecov-action@eaaf4bedf32dbdc6b720b63067d99c4d77d6047d | |
with: | |
files: pytest-genesischk.json | |
fail_ci_if_error: true | |
flags: pytests,genesis-check,linux | |
py_style_check: | |
name: "Style" | |
runs-on: ubuntu-22.04 | |
steps: | |
- uses: actions/checkout@v4 | |
- uses: actions/setup-python@v4 | |
with: | |
python-version: 3.11 | |
cache: pip | |
- run: pip3 install --user -r pytest/requirements.txt | |
- run: python3 scripts/check_nightly.py | |
- run: python3 scripts/check_pytests.py | |
- run: python3 scripts/fix_nightly_feature_flags.py | |
- run: ./scripts/formatting --check | |
py_upgradability: | |
name: "Upgradability" | |
needs: build_binary | |
runs-on: ubuntu-22.04 | |
defaults: | |
run: | |
working-directory: ./pytest | |
steps: | |
- uses: actions/checkout@v4 | |
- uses: actions/setup-python@v4 | |
with: | |
python-version: 3.11 | |
cache: pip | |
- uses: baptiste0928/cargo-install@21a18ba3bf4a184d1804e8b759930d3471b1c941 | |
with: | |
crate: cargo-llvm-cov | |
- uses: actions/download-artifact@v3 | |
with: | |
name: neard | |
path: pytest # NB: this does not account for defaults.run.working-directory | |
- run: echo "CURRENT_NEARD=$PWD/neard" >> "$GITHUB_ENV" | |
- run: chmod +x "$CURRENT_NEARD" | |
- run: pip3 install --user -r requirements.txt | |
- run: cargo llvm-cov show-env | tr -d "'" >> "$GITHUB_ENV" | |
- run: python3 tests/sanity/upgradable.py | |
- run: cargo llvm-cov report --profile quick-release --codecov --output-path pytest-upgradability.json | |
- uses: codecov/codecov-action@eaaf4bedf32dbdc6b720b63067d99c4d77d6047d | |
with: | |
files: pytest-upgradability.json | |
fail_ci_if_error: true | |
flags: pytests,upgradability,linux | |
rpc_error_schema: | |
name: "RPC Schema" | |
runs-on: ubuntu-22.04-8core | |
steps: | |
- uses: actions/checkout@v4 | |
- uses: Swatinem/rust-cache@a95ba195448af2da9b00fb742d14ffaaf3c21f43 | |
with: | |
prefix-key: "0" # change this to invalidate CI cache | |
shared-key: "cargo_nextest-linux" | |
save-if: "false" # use the cache from nextest, but don’t double-save | |
- run: ./chain/jsonrpc/build_errors_schema.sh | |
- run: git diff --quiet ./chain/jsonrpc/res/rpc_errors_schema.json || exit 1 |