feat: fio benchmark infrastructure mirroring mountpoint-s3 #134
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: CI | |
| on: | |
| pull_request: | |
| branches: [main] | |
| push: | |
| branches: [main] | |
| concurrency: | |
| group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }} | |
| cancel-in-progress: true | |
| permissions: | |
| contents: read | |
| pull-requests: write | |
| env: | |
| CARGO_TERM_COLOR: always | |
| jobs: | |
| lint-test: | |
| name: Lint & Unit Tests | |
| runs-on: | |
| group: hf-mount-ci | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - uses: dtolnay/rust-toolchain@nightly | |
| with: | |
| components: rustfmt | |
| - uses: dtolnay/rust-toolchain@stable | |
| with: | |
| components: clippy | |
| - uses: Swatinem/rust-cache@v2 | |
| - name: Install system deps | |
| run: | | |
| sudo apt-get update | |
| sudo apt-get install -y fuse3 libfuse3-dev | |
| - name: Format check | |
| run: cargo +nightly fmt --check | |
| - name: Clippy | |
| run: cargo clippy -- -D warnings | |
| - name: Unit tests | |
| run: cargo test --lib | |
| smoke-test: | |
| name: Smoke Tests (FUSE + NFS) | |
| runs-on: | |
| group: hf-mount-ci | |
| needs: lint-test | |
| env: | |
| HF_TOKEN: ${{ secrets.HF_TOKEN_HUB_CI }} | |
| HF_ENDPOINT: https://hub-ci.huggingface.co | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - uses: dtolnay/rust-toolchain@stable | |
| - uses: Swatinem/rust-cache@v2 | |
| - name: Install system deps | |
| run: | | |
| sudo apt-get update | |
| sudo apt-get install -y fuse3 libfuse3-dev nfs-common | |
| echo 'user_allow_other' | sudo tee -a /etc/fuse.conf | |
| - name: Build release binaries | |
| run: cargo build --release | |
| - name: Integration tests (buckets) | |
| run: cargo test --release --test fuse_ops --test nfs_ops -- --test-threads=1 --nocapture | |
| - name: Integration tests (repo mount) | |
| env: | |
| HF_ENDPOINT: https://huggingface.co | |
| run: unset HF_TOKEN && cargo test --release --test repo_ops -- --test-threads=1 --nocapture | |
| pjdfstest: | |
| name: POSIX Compliance (pjdfstest) | |
| runs-on: | |
| group: hf-mount-ci | |
| needs: lint-test | |
| env: | |
| HF_TOKEN: ${{ secrets.HF_TOKEN_HUB_CI }} | |
| HF_ENDPOINT: https://hub-ci.huggingface.co | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - uses: dtolnay/rust-toolchain@stable | |
| - uses: Swatinem/rust-cache@v2 | |
| - name: Install system deps | |
| run: | | |
| sudo apt-get update | |
| sudo apt-get install -y fuse3 libfuse3-dev autoconf automake gcc make perl | |
| echo 'user_allow_other' | sudo tee -a /etc/fuse.conf | |
| - name: Build release binaries | |
| run: cargo build --release | |
| - name: Run pjdfstest | |
| timeout-minutes: 10 | |
| run: | | |
| set -o pipefail | |
| cargo test --release --test pjdfstest -- --nocapture 2>&1 | tee pjdfstest_output.txt | |
| - name: Post pjdfstest results | |
| if: github.event_name == 'pull_request' | |
| env: | |
| GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
| run: | | |
| CLEAN=$(sed 's/\x1b\[[0-9;]*m//g' pjdfstest_output.txt) | |
| TABLES=$(echo "$CLEAN" | awk ' | |
| /^=====*$/ { inside=!inside; print; next } | |
| inside { print } | |
| ') | |
| if [ -z "$TABLES" ]; then | |
| echo "No pjdfstest table found in output" | |
| exit 0 | |
| fi | |
| PR="${{ github.event.pull_request.number }}" | |
| MARKER="<!-- pjdfstest-results -->" | |
| BODY="${MARKER} | |
| ## POSIX Compliance (pjdfstest) | |
| \`\`\` | |
| ${TABLES} | |
| \`\`\`" | |
| COMMENT_ID=$(gh api "repos/${{ github.repository }}/issues/${PR}/comments" \ | |
| --jq ".[] | select(.body | startswith(\"${MARKER}\")) | .id" | head -1) | |
| if [ -n "$COMMENT_ID" ]; then | |
| gh api "repos/${{ github.repository }}/issues/comments/${COMMENT_ID}" \ | |
| -X PATCH -f body="$BODY" | |
| echo "Updated existing comment $COMMENT_ID" | |
| else | |
| gh pr comment "$PR" --body "$BODY" | |
| echo "Created new comment" | |
| fi | |
| bench: | |
| name: Benchmarks (fio small) | |
| runs-on: | |
| group: hf-mount-ci | |
| needs: lint-test | |
| env: | |
| HF_TOKEN: ${{ secrets.HF_TOKEN_HUB_CI }} | |
| HF_ENDPOINT: https://hub-ci.huggingface.co | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - uses: dtolnay/rust-toolchain@stable | |
| - uses: Swatinem/rust-cache@v2 | |
| - name: Install system deps | |
| run: | | |
| sudo apt-get update | |
| sudo apt-get install -y fuse3 libfuse3-dev nfs-common fio jq | |
| echo 'user_allow_other' | sudo tee -a /etc/fuse.conf | |
| - name: Build release binaries | |
| run: cargo build --release | |
| - name: Run benchmarks | |
| timeout-minutes: 15 | |
| run: | | |
| HF_JOB_NAME_FILTER=small iterations=3 \ | |
| ./scripts/fs_bench.sh 2>&1 | tee bench_output.txt | |
| - name: Post benchmark results | |
| if: github.event_name == 'pull_request' | |
| env: | |
| GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
| run: | | |
| RESULTS=$(jq -r '.[] | "| \(.name) | \(.value | round) \(.unit) |"' results/fuse/output.json) | |
| PR="${{ github.event.pull_request.number }}" | |
| MARKER="<!-- bench-results -->" | |
| BODY="${MARKER} | |
| ## Benchmark Results (fio small, FUSE) | |
| | Job | Throughput | | |
| |-----|-----------| | |
| ${RESULTS}" | |
| COMMENT_ID=$(gh api "repos/${{ github.repository }}/issues/${PR}/comments" \ | |
| --jq ".[] | select(.body | startswith(\"${MARKER}\")) | .id" | head -1) | |
| if [ -n "$COMMENT_ID" ]; then | |
| gh api "repos/${{ github.repository }}/issues/comments/${COMMENT_ID}" \ | |
| -X PATCH -f body="$BODY" | |
| echo "Updated existing comment $COMMENT_ID" | |
| else | |
| gh pr comment "$PR" --body "$BODY" | |
| echo "Created new comment" | |
| fi |