blob: feb7ea6ce581d02f18043892714288339eee5dcd [file]
name: Rust
on:
push:
branches: ["main"]
paths-ignore:
- 'docs/**'
- 'docs-overrides/**'
- 'images/**'
- '*.md'
- 'mkdocs.yml'
- '*.png'
- '*.py'
pull_request:
paths-ignore:
- 'docs/**'
- 'docs-overrides/**'
- 'images/**'
- '*.md'
- 'mkdocs.yml'
- '*.png'
- '*.py'
workflow_dispatch:
concurrency:
group: ${{ github.repository }}-${{ github.ref }}-${{ github.workflow }}
cancel-in-progress: true
env:
CARGO_TERM_COLOR: always
jobs:
lint:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v7
- name: Setup Rust toolchain
uses: dtolnay/rust-toolchain@29eef336d9b2848a0b548edc03f92a220660cdb8 # @stable
with:
components: rustfmt, clippy
toolchain: stable
- uses: Swatinem/rust-cache@v2
with:
# Update this key to force a new cache
prefix-key: "rust-lint-v1"
- name: Run cargo-fmt
run: cargo fmt --all -- --check
- name: Run cargo-clippy
run: cargo clippy -- -D warnings
- name: Check
run: cargo check --verbose --workspace --all-targets
# Tests for spatialbench
test-tests-spatialbench:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v7
- uses: dtolnay/rust-toolchain@29eef336d9b2848a0b548edc03f92a220660cdb8 # @stable
with:
toolchain: stable
- uses: Swatinem/rust-cache@v2
with:
prefix-key: "rust-test-tests-spatialbench-v1"
- name: Tests (spatialbench)
run: cargo test -p spatialbench --tests
test-doc-spatialbench:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v7
- uses: dtolnay/rust-toolchain@29eef336d9b2848a0b548edc03f92a220660cdb8 # @stable
with:
toolchain: stable
- uses: Swatinem/rust-cache@v2
with:
prefix-key: "rust-test-doc-spatialbench-v1"
- name: Doc Tests (spatialbench)
run: cargo test -p spatialbench --doc
test-all-spatialbench-arrow:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v7
- uses: dtolnay/rust-toolchain@29eef336d9b2848a0b548edc03f92a220660cdb8 # @stable
with:
toolchain: stable
- uses: Swatinem/rust-cache@v2
with:
prefix-key: "rust-test-all-spatialbench-arrow-v1"
- name: All Tests (spatialbench-arrow)
run: cargo test -p spatialbench-arrow
test-all-spatialbench-cli:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v7
- uses: dtolnay/rust-toolchain@29eef336d9b2848a0b548edc03f92a220660cdb8 # @stable
with:
toolchain: stable
- uses: Swatinem/rust-cache@v2
with:
prefix-key: "rust-test-all-spatialbench-cli-v1"
- name: All Tests (spatialbench-cli)
run: cargo test -p spatialbench-cli
# documentation build
docs:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v7
- uses: dtolnay/rust-toolchain@29eef336d9b2848a0b548edc03f92a220660cdb8 # @stable
with:
toolchain: stable
- uses: Swatinem/rust-cache@v2
with:
prefix-key: "rust-docs-v1"
- name: Build docs
env:
RUSTDOCFLAGS: "-D warnings"
run: cargo doc --no-deps --workspace
# S3 integration tests using MinIO (only when S3-related files change)
test-s3-integration:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v7
with:
fetch-depth: 0
- name: Check for S3-related changes
id: changes
run: |
BASE_SHA=${{ github.event.pull_request.base.sha || github.event.before || 'HEAD~1' }}
if git diff --name-only "$BASE_SHA" HEAD | grep -qE \
'^spatialbench-cli/src/(s3_writer|runner|output_plan|main)\.rs$|^spatialbench-cli/tests/s3_integration\.rs$|^\.github/workflows/rust\.yml$'; then
echo "s3=true" >> "$GITHUB_OUTPUT"
else
echo "s3=false" >> "$GITHUB_OUTPUT"
fi
- name: Start MinIO
if: steps.changes.outputs.s3 == 'true'
run: |
docker run -d --name minio \
-p 9000:9000 \
-e MINIO_ROOT_USER=minioadmin \
-e MINIO_ROOT_PASSWORD=minioadmin \
minio/minio:latest server /data
# Wait for MinIO to be ready
for i in $(seq 1 30); do
if curl -sf http://localhost:9000/minio/health/live; then
echo "MinIO is ready"
exit 0
fi
sleep 1
done
echo "MinIO failed to start"
docker logs minio
exit 1
- name: Create MinIO test bucket
if: steps.changes.outputs.s3 == 'true'
run: |
curl -sL https://dl.min.io/client/mc/release/linux-amd64/mc -o /usr/local/bin/mc
chmod +x /usr/local/bin/mc
mc alias set local http://localhost:9000 minioadmin minioadmin
mc mb local/spatialbench-test
- uses: dtolnay/rust-toolchain@29eef336d9b2848a0b548edc03f92a220660cdb8 # @stable
with:
toolchain: stable
if: steps.changes.outputs.s3 == 'true'
- uses: Swatinem/rust-cache@v2
if: steps.changes.outputs.s3 == 'true'
with:
prefix-key: "rust-test-s3-v1"
- name: Run S3 integration tests
if: steps.changes.outputs.s3 == 'true'
env:
AWS_ACCESS_KEY_ID: minioadmin
AWS_SECRET_ACCESS_KEY: minioadmin
AWS_ENDPOINT: http://localhost:9000
AWS_REGION: us-east-1
AWS_ALLOW_HTTP: "true"
S3_TEST_BUCKET: spatialbench-test
run: cargo test -p spatialbench-cli --test s3_integration -- --ignored