merge queue: embarking main (c5bb50b), #2169, #2038, #2170 and [#2184 + #2156 + #2154] together #7901
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: coprocessor-cargo-test | |
| on: | |
| pull_request: | |
| permissions: {} | |
| concurrency: | |
| group: ${{ github.workflow }}-${{ github.head_ref }} | |
| cancel-in-progress: ${{ github.ref != 'refs/heads/main' }} | |
| jobs: | |
| check-changes: | |
| name: coprocessor-cargo-test/check-changes | |
| permissions: | |
| actions: 'read' # Required to read workflow run information | |
| contents: 'read' # Required to checkout repository code | |
| pull-requests: 'read' # Required to read pull request information | |
| runs-on: ubuntu-latest | |
| outputs: | |
| changes-rust-files: ${{ steps.filter.outputs.rust-files }} | |
| steps: | |
| - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 | |
| with: | |
| persist-credentials: 'false' | |
| - uses: dorny/paths-filter@de90cc6fb38fc0963ad72b210f1f284cd68cea36 # v3.0.2 | |
| id: filter | |
| with: | |
| filters: | | |
| rust-files: | |
| - .github/workflows/coprocessor-cargo-tests.yml | |
| - coprocessor/fhevm-engine/** | |
| - coprocessor/proto/** | |
| cargo-tests: | |
| name: coprocessor-cargo-test/cargo-tests (bpr) | |
| needs: check-changes | |
| if: ${{ needs.check-changes.outputs.changes-rust-files == 'true' }} | |
| permissions: | |
| contents: 'read' # Required to checkout repository code | |
| checks: 'write' # Required to create GitHub checks for test results | |
| packages: 'read' # Required to read GitHub packages/container registry | |
| pull-requests: 'write' # Required to post coverage comment on PR | |
| runs-on: large_ubuntu_16 | |
| env: | |
| CARGO_TARGET_X86_64_UNKNOWN_LINUX_GNU_LINKER: clang | |
| RUSTFLAGS: "-C link-arg=-fuse-ld=mold" | |
| steps: | |
| - name: Checkout code | |
| uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 | |
| with: | |
| persist-credentials: 'false' | |
| lfs: true | |
| - name: Checkout LFS objects | |
| run: git lfs checkout | |
| - name: Login to GitHub Container Registry | |
| uses: docker/login-action@9780b0c442fbb1117ed29e0efdff1e18412f7567 # v3.3.0 | |
| with: | |
| registry: ghcr.io | |
| username: ${{ github.actor }} | |
| password: ${{ secrets.GITHUB_TOKEN }} | |
| - name: Login to GitHub Chainguard Registry | |
| uses: docker/login-action@9780b0c442fbb1117ed29e0efdff1e18412f7567 # v3.3.0 | |
| with: | |
| registry: cgr.dev | |
| username: ${{ secrets.CGR_USERNAME }} | |
| password: ${{ secrets.CGR_PASSWORD }} | |
| - name: Start database services (background) | |
| run: | | |
| nohup docker compose up -d --build db-migration > /tmp/db-init.log 2>&1 & | |
| working-directory: coprocessor/fhevm-engine/tfhe-worker | |
| - name: Setup Rust toolchain file | |
| run: cp coprocessor/fhevm-engine/rust-toolchain.toml . | |
| - name: Setup Rust | |
| uses: dsherret/rust-toolchain-file@3551321aa44dd44a0393eb3b6bdfbc5d25ecf621 # v1 | |
| - name: Install cargo-llvm-cov | |
| uses: taiki-e/install-action@a37010ded18ff788be4440302bd6830b1ae50d8b # v2.68.25 | |
| with: | |
| tool: cargo-llvm-cov | |
| - name: Install cargo dependencies | |
| run: | | |
| sudo apt-get update | |
| sudo apt-get install -y protobuf-compiler mold clang && \ | |
| cargo install sqlx-cli --version 0.7.2 --no-default-features --features postgres --locked | |
| - name: Install foundry | |
| uses: foundry-rs/foundry-toolchain@de808b1eea699e761c404bda44ba8f21aba30b2c | |
| - name: Cache cargo | |
| uses: actions/cache@1bd1e32a3bdc45362d1e726936510720a7c30a57 # v4.2.0 | |
| with: | |
| path: | | |
| ~/.cargo/registry | |
| ~/.cargo/git | |
| target | |
| key: ${{ runner.os }}-cargo-coverage-${{ hashFiles('**/Cargo.lock') }} | |
| restore-keys: ${{ runner.os }}-cargo-coverage- | |
| - name: Use Node.js | |
| uses: actions/setup-node@60edb5dd545a775178f52524783378180af0d1f8 # v4.0.2 | |
| with: | |
| node-version: 20.x | |
| - name: Start localstack | |
| run: docker run --rm -d -p 4566:4566 --name localstack localstack/localstack:4.14.0 | |
| - name: Clean previous coverage data | |
| run: cargo llvm-cov clean --workspace --profile coverage | |
| working-directory: coprocessor/fhevm-engine | |
| - name: Compile tests with coverage instrumentation | |
| run: | | |
| cargo llvm-cov show-env --sh > /tmp/llvm-cov-env.sh | |
| source /tmp/llvm-cov-env.sh | |
| DATABASE_URL=postgresql://postgres:postgres@localhost:5432/coprocessor \ | |
| SQLX_OFFLINE=true \ | |
| cargo test --no-run --workspace --profile coverage | |
| working-directory: coprocessor/fhevm-engine | |
| - name: Wait for database migration | |
| run: | | |
| SECONDS=0 | |
| while ! docker container inspect db-migration > /dev/null 2>&1; do | |
| if [ "$SECONDS" -ge 900 ]; then | |
| echo "Timed out waiting for db-migration container after 15 minutes" | |
| cat /tmp/db-init.log | |
| exit 1 | |
| fi | |
| echo "Waiting for db-migration container to be created..." | |
| sleep 2 | |
| done | |
| EXIT_CODE=$(docker wait db-migration) | |
| if [ "$EXIT_CODE" != "0" ]; then | |
| echo "Database migration failed with exit code $EXIT_CODE" | |
| docker logs db-migration | |
| cat /tmp/db-init.log | |
| exit 1 | |
| fi | |
| echo "Database migration completed" | |
| - name: Run tests with coverage | |
| run: | | |
| source /tmp/llvm-cov-env.sh | |
| DATABASE_URL=postgresql://postgres:postgres@localhost:5432/coprocessor \ | |
| TEST_GLOBAL_LOCALSTACK=1 \ | |
| SQLX_OFFLINE=true \ | |
| cargo test --workspace --profile coverage | |
| working-directory: coprocessor/fhevm-engine | |
| - name: Generate coverage report | |
| if: ${{ !cancelled() }} | |
| run: | | |
| if cargo llvm-cov report --profile coverage > /tmp/cov-report.txt 2>&1; then | |
| REPORT=$(cat /tmp/cov-report.txt) | |
| else | |
| echo "cargo llvm-cov report failed:" | |
| cat /tmp/cov-report.txt | |
| REPORT="" | |
| fi | |
| { | |
| echo '## Coverage: coprocessor/fhevm-engine' | |
| if [ -n "$REPORT" ]; then | |
| echo '```' | |
| echo "$REPORT" | |
| echo '```' | |
| else | |
| echo '*No coverage data available (tests may have failed before producing profiling data).*' | |
| fi | |
| } >> "$GITHUB_STEP_SUMMARY" | |
| echo "$REPORT" | |
| working-directory: coprocessor/fhevm-engine | |
| - name: Export LCOV coverage data | |
| if: ${{ !cancelled() }} | |
| run: cargo llvm-cov report --lcov --profile coverage --output-path /tmp/lcov.info || true | |
| working-directory: coprocessor/fhevm-engine | |
| - name: Diff coverage of changed lines | |
| if: ${{ !cancelled() }} | |
| id: diff-cov | |
| env: | |
| BASE_REF: ${{ github.base_ref }} | |
| run: | | |
| if [ ! -f /tmp/lcov.info ]; then | |
| echo "diff_pct=N/A" >> "$GITHUB_OUTPUT" | |
| exit 0 | |
| fi | |
| pip install --quiet diff-cover | |
| git fetch --unshallow origin | |
| git fetch origin "${BASE_REF}:refs/remotes/origin/${BASE_REF}" | |
| diff-cover /tmp/lcov.info \ | |
| --compare-branch="origin/${BASE_REF}" \ | |
| --diff-range-notation='...' \ | |
| --format "json:/tmp/diff-cover.json,markdown:/tmp/diff-cover-report.md" \ | |
| --fail-under 0 || true | |
| if [ -f /tmp/diff-cover.json ]; then | |
| DIFF_PCT=$(python3 -c "import json; d=json.load(open('/tmp/diff-cover.json')); n=d.get('total_num_lines',0); print('N/A') if n==0 else print(f\"{d['total_percent_covered']:.1f}%\")" 2>/dev/null || echo "N/A") | |
| else | |
| DIFF_PCT="N/A" | |
| fi | |
| echo "diff_pct=${DIFF_PCT}" >> "$GITHUB_OUTPUT" | |
| - name: Build diff coverage comment | |
| if: ${{ !cancelled() }} | |
| env: | |
| DIFF_PCT: ${{ steps.diff-cov.outputs.diff_pct }} | |
| run: | | |
| { | |
| echo '### Changed Lines Coverage' | |
| echo "Coverage of added/modified lines: **${DIFF_PCT}**" | |
| echo '' | |
| if [ -f /tmp/diff-cover-report.md ]; then | |
| echo '<details><summary>Per-file breakdown</summary>' | |
| echo '' | |
| cat /tmp/diff-cover-report.md | |
| echo '' | |
| echo '</details>' | |
| fi | |
| } | tee -a "$GITHUB_STEP_SUMMARY" > /tmp/coverage-comment.md | |
| - name: Post coverage comment on PR | |
| if: ${{ !cancelled() && github.event.pull_request.head.repo.full_name == github.repository }} | |
| uses: marocchino/sticky-pull-request-comment@773744901bac0e8cbb5a0dc842800d45e9b2b405 # v2.9.4 | |
| with: | |
| path: /tmp/coverage-comment.md |