From 83f780f20704d6d21a7f43d903dd309dc5d0af52 Mon Sep 17 00:00:00 2001 From: hanabi1224 Date: Thu, 2 Apr 2026 15:07:08 +0800 Subject: [PATCH 1/2] enable sccache --- .github/workflows/coverage.yml | 28 ++++++++- .github/workflows/forest.yml | 6 +- .github/workflows/unit-tests.yml | 99 -------------------------------- Cargo.toml | 10 ++++ mise.toml | 32 ++++++++--- 5 files changed, 63 insertions(+), 112 deletions(-) delete mode 100644 .github/workflows/unit-tests.yml diff --git a/.github/workflows/coverage.yml b/.github/workflows/coverage.yml index fd37a8303068..20ef72d18390 100644 --- a/.github/workflows/coverage.yml +++ b/.github/workflows/coverage.yml @@ -31,6 +31,7 @@ env: CACHE_TIMEOUT_MINUTES: 5 AWS_ACCESS_KEY_ID: "${{ secrets.AWS_ACCESS_KEY_ID }}" AWS_SECRET_ACCESS_KEY: "${{ secrets.AWS_SECRET_ACCESS_KEY }}" + RUSTC_WRAPPER: "sccache" CC: clang CXX: clang++ # To minimize compile times: https://nnethercote.github.io/perf-book/build-configuration.html#minimizing-compile-times @@ -43,13 +44,26 @@ env: jobs: codecov: name: Coverage - if: github.event.pull_request.draft == false && github.actor != 'dependabot[bot]' + if: github.event.pull_request.draft == false runs-on: warp-ubuntu-2404-arm64-8x timeout-minutes: 30 steps: + - name: Configure SCCache variables + run: | + # External PRs do not have access to 'vars' or 'secrets'. + if [[ "${{secrets.AWS_ACCESS_KEY_ID}}" != "" ]]; then + echo "SCCACHE_ENDPOINT=${{ vars.SCCACHE_ENDPOINT}}" >> $GITHUB_ENV + echo "SCCACHE_BUCKET=${{ vars.SCCACHE_BUCKET}}" >> $GITHUB_ENV + echo "SCCACHE_REGION=${{ vars.SCCACHE_REGION}}" >> $GITHUB_ENV + fi + - name: Setup sccache + uses: mozilla-actions/sccache-action@v0.0.9 + timeout-minutes: ${{ fromJSON(env.CACHE_TIMEOUT_MINUTES) }} + continue-on-error: true - uses: actions/checkout@v6 - uses: jdx/mise-action@v4 - uses: taiki-e/install-action@cargo-llvm-cov + - uses: taiki-e/install-action@nextest - uses: actions/cache@v5 id: cache-proof-params with: @@ -63,10 +77,20 @@ jobs: - name: Fetch proof params and RPC test snapshots run: | # Use the same profile to re-use some compilation artifacts and speed up the entire job. - cargo llvm-cov run --no-report --bin forest-dev --no-default-features -- fetch-test-snapshots --actor-bundle $FOREST_ACTOR_BUNDLE_PATH + cargo llvm-cov run --profile codecov --no-report --bin forest-dev --no-default-features -- fetch-test-snapshots --actor-bundle $FOREST_ACTOR_BUNDLE_PATH ls -ahl $FIL_PROOFS_PARAMETER_CACHE - name: Generate code coverage run: mise codecov + env: + FOREST_TEST_SKIP_PROOF_PARAM_CHECK: 1 + - name: Upload Test Results to CodeCov + uses: codecov/codecov-action@v6 + if: ${{ !cancelled() }} + with: + token: ${{ secrets.CODECOV_TOKEN }} + report_type: "test_results" + files: target/nextest/default/junit.xml + fail_ci_if_error: false # Save lcov.info as an artifact for debugging purposes - uses: actions/upload-artifact@v7 with: diff --git a/.github/workflows/forest.yml b/.github/workflows/forest.yml index 6b620aa3f8ef..14c2d6b4d3d1 100644 --- a/.github/workflows/forest.yml +++ b/.github/workflows/forest.yml @@ -60,8 +60,10 @@ jobs: with: go-version-file: "go.work" cache-dependency-path: "**/go.sum" - - name: Cargo Check - run: cargo check + - uses: jdx/mise-action@v4 + - run: cargo check + # nextest doesn't run doctests https://github.com/nextest-rs/nextest/issues/16 + - run: mise test:docs build-ubuntu: name: Build Ubuntu runs-on: ubuntu-24.04 diff --git a/.github/workflows/unit-tests.yml b/.github/workflows/unit-tests.yml deleted file mode 100644 index 26d07e4d5141..000000000000 --- a/.github/workflows/unit-tests.yml +++ /dev/null @@ -1,99 +0,0 @@ -name: Unit tests - -# Cancel workflow if there is a new change to the branch. -concurrency: - group: ${{ github.workflow }}-${{ github.ref }} - cancel-in-progress: ${{ github.ref != 'refs/heads/main' }} - -on: - workflow_dispatch: - merge_group: - pull_request: - branches: - - main - # This needs to be declared explicitly so that the job is actually - # run when moved out of draft. - types: [opened, synchronize, reopened, ready_for_review] - paths-ignore: - - "docs/**" - - ".github/workflows/docs-*.yml" - - "**/*.md" - push: - branches: - - main - paths-ignore: - - "docs/**" - - ".github/workflows/docs-*.yml" - - "**/*.md" - -env: - CI: 1 - CACHE_TIMEOUT_MINUTES: 5 - AWS_ACCESS_KEY_ID: "${{ secrets.AWS_ACCESS_KEY_ID }}" - AWS_SECRET_ACCESS_KEY: "${{ secrets.AWS_SECRET_ACCESS_KEY }}" - RUSTC_WRAPPER: "sccache" - CC: "sccache clang" - CXX: "sccache clang++" - # To minimize compile times: https://nnethercote.github.io/perf-book/build-configuration.html#minimizing-compile-times - RUSTFLAGS: "-C linker=clang -C link-arg=-fuse-ld=lld" - FIL_PROOFS_PARAMETER_CACHE: /var/tmp/filecoin-proof-parameters - RUST_LOG: error - FOREST_ACTOR_BUNDLE_PATH: /var/tmp/forest_actor_bundle.car.zst - -jobs: - tests-release: - runs-on: ubuntu-24.04-arm - timeout-minutes: 45 - # Run the job only if the PR is not a draft. - # This is done to limit the runner cost. - if: github.event.pull_request.draft == false - steps: - - name: Configure SCCache variables - run: | - # External PRs do not have access to 'vars' or 'secrets'. - if [[ "${{secrets.AWS_ACCESS_KEY_ID}}" != "" ]]; then - echo "SCCACHE_ENDPOINT=${{ vars.SCCACHE_ENDPOINT}}" >> $GITHUB_ENV - echo "SCCACHE_BUCKET=${{ vars.SCCACHE_BUCKET}}" >> $GITHUB_ENV - echo "SCCACHE_REGION=${{ vars.SCCACHE_REGION}}" >> $GITHUB_ENV - fi - - name: Checkout Sources - uses: actions/checkout@v6 - - name: Setup sccache - uses: mozilla-actions/sccache-action@v0.0.9 - timeout-minutes: ${{ fromJSON(env.CACHE_TIMEOUT_MINUTES) }} - continue-on-error: true - - uses: actions/setup-go@v6 - with: - go-version-file: "go.work" - cache-dependency-path: "**/go.sum" - - name: install nextest - uses: taiki-e/install-action@nextest - - uses: actions/cache@v5 - id: cache-proof-params - with: - path: ${{ env.FIL_PROOFS_PARAMETER_CACHE }} - key: proof-params-keys - - uses: actions/cache@v5 - id: cache-actor-bundle - with: - path: ${{ env.FOREST_ACTOR_BUNDLE_PATH }} - key: actor-bundle - - name: Fetch proof params and RPC test snapshots - run: | - cargo run --bin forest-dev --no-default-features --profile quick-test -- fetch-test-snapshots --actor-bundle $FOREST_ACTOR_BUNDLE_PATH - ls -ahl $FIL_PROOFS_PARAMETER_CACHE - - uses: jdx/mise-action@v4 - - run: | - mise test - env: - FOREST_TEST_SKIP_PROOF_PARAM_CHECK: 1 - # https://docs.github.com/en/actions/reference/runners/github-hosted-runners#standard-github-hosted-runners-for-public-repositories - CARGO_BUILD_JOBS: 3 - - name: Upload Test Results to CodeCov - uses: codecov/codecov-action@v6 - if: ${{ !cancelled() }} - with: - token: ${{ secrets.CODECOV_TOKEN }} - report_type: "test_results" - files: target/nextest/default/junit.xml - fail_ci_if_error: false diff --git a/Cargo.toml b/Cargo.toml index e6a3e9ce13f0..2c4f9888f02b 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -289,6 +289,16 @@ debug = false # Speed up debug tests and codecov tests opt-level = 1 +[profile.codecov] +inherits = "dev" +opt-level = 1 + +[profile.codecov.package."*"] +# Avoid generating any debug information for dependencies +debug = false +# Speed up debug tests and codecov tests +opt-level = 1 + # Profile for interactive debugging sessions, e.g., with LLDB. # Doesn't work with Go FFI - disable it with `FOREST_F3_SIDECAR_FFI_BUILD_OPT_OUT=1`. [profile.debugging] diff --git a/mise.toml b/mise.toml index 669d89f21f47..06cae62236ac 100644 --- a/mise.toml +++ b/mise.toml @@ -160,13 +160,8 @@ rm -rf node_modules # nextest doesn't run doctests https://github.com/nextest-rs/nextest/issues/16 # We need to run them separately. description = "Run doctests." -usage = ''' -arg "" help="Build profile (quick-test, dev, etc.)" default="quick-test" { - choices "quick" "quick-test" "release" "dev" -} -''' run = ''' -cargo test --doc --profile ${usage_profile?} --no-default-features --features "test doctest-private cargo-test" --no-fail-fast +cargo test --doc --no-default-features --features "test doctest-private cargo-test" --no-fail-fast ''' [tasks."test:nextest"] @@ -194,7 +189,7 @@ cargo test --lib --profile ${usage_profile?} --no-default-features --features "t ''' [tasks.test] -description = "Run all tests." +description = "Run nextest and cargo-test groups (doctests run via `test:docs`)." usage = ''' arg "" help="Build profile (quick-test, dev, etc.)" default="quick-test" { choices "quick" "quick-test" "release" "dev" @@ -203,13 +198,32 @@ arg "" help="Build profile (quick-test, dev, etc.)" default="quick-test run = ''' mise task run test:nextest ${usage_profile?} mise task run test:cargo ${usage_profile?} -mise task run test:docs ${usage_profile?} +''' + +[tasks."codecov:nextest"] +description = "Run codecov with nextest" +run = ''' +cargo llvm-cov --no-report nextest --cargo-profile codecov --workspace --no-default-features --features "test" --no-fail-fast +''' + +[tasks."codecov:cargo"] +description = "Run codecov with cargo-test" +run = ''' +cargo llvm-cov --no-report test -p forest-filecoin --profile codecov --lib --no-default-features --features "test cargo-test" --no-fail-fast -- "cargo_test_" +''' + +[tasks."codecov:report"] +description = "Generate merged codecov report" +run = ''' +cargo llvm-cov report --profile codecov --codecov --output-path lcov.info ''' [tasks.codecov] description = "Generate codecov report" run = ''' -cargo llvm-cov -p forest-filecoin --codecov --no-default-features --features "test cargo-test" --output-path lcov.info +mise task run codecov:nextest +mise task run codecov:cargo +mise task run codecov:report ''' [tasks."format-spellcheck-dictionary"] From cece7399720da1688f0513f0c884553aeee11df5 Mon Sep 17 00:00:00 2001 From: hanabi1224 Date: Thu, 2 Apr 2026 20:54:16 +0800 Subject: [PATCH 2/2] mitigate quickcheck timeout issue --- .github/workflows/coverage.yml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/.github/workflows/coverage.yml b/.github/workflows/coverage.yml index 7ec490d7b912..6b740bde3368 100644 --- a/.github/workflows/coverage.yml +++ b/.github/workflows/coverage.yml @@ -42,6 +42,10 @@ env: FIL_PROOFS_PARAMETER_CACHE: /var/tmp/filecoin-proof-parameters RUST_LOG: error FOREST_ACTOR_BUNDLE_PATH: /var/tmp/forest_actor_bundle.car.zst + # https://github.com/BurntSushi/quickcheck/blob/692527d1d9fc9043a70b7d2bf436902e2d0f595b/src/tester.rs#L20 + QUICKCHECK_GENERATOR_SIZE: 20 + QUICKCHECK_TESTS: 20 + QUICKCHECK_MAX_TESTS: 1000 jobs: codecov: