name: CI on: pull_request: push: branches: - main tags: - "v*" workflow_dispatch: concurrency: group: ci-${{ github.workflow }}-${{ github.ref }} cancel-in-progress: true jobs: test: name: Test Workspace runs-on: ubuntu-latest timeout-minutes: 45 permissions: contents: read env: CARGO_TERM_COLOR: always steps: - name: Checkout source uses: actions/checkout@v4 - name: Install system dependencies run: | sudo apt-get update sudo apt-get install -y protobuf-compiler libprotobuf-dev - name: Install Rust stable uses: dtolnay/rust-toolchain@stable with: toolchain: stable - name: Cache Rust build data uses: Swatinem/rust-cache@v2 with: workspaces: | . -> target - name: Run workspace tests run: cargo test --workspace --locked rustfs_integration: name: RustFS S3 Integration needs: test runs-on: ubuntu-latest timeout-minutes: 45 permissions: contents: read env: AWS_ACCESS_KEY_ID: rustfsadmin AWS_SECRET_ACCESS_KEY: rustfsadmin AWS_REGION: us-east-1 AWS_ENDPOINT_URL: http://127.0.0.1:9000 AWS_ENDPOINT_URL_S3: http://127.0.0.1:9000 AWS_ALLOW_HTTP: "true" AWS_S3_FORCE_PATH_STYLE: "true" OMNIGRAPH_S3_TEST_BUCKET: omnigraph-ci OMNIGRAPH_S3_TEST_PREFIX: github-actions CARGO_TERM_COLOR: always steps: - name: Checkout source uses: actions/checkout@v4 - name: Install system dependencies run: | sudo apt-get update sudo apt-get install -y protobuf-compiler libprotobuf-dev python3-pip - name: Install Rust stable uses: dtolnay/rust-toolchain@stable with: toolchain: stable - name: Cache Rust build data uses: Swatinem/rust-cache@v2 with: workspaces: | . -> target - name: Start RustFS run: | docker rm -f rustfs >/dev/null 2>&1 || true docker run -d \ --name rustfs \ -p 9000:9000 \ -p 9001:9001 \ -e RUSTFS_ACCESS_KEY="${AWS_ACCESS_KEY_ID}" \ -e RUSTFS_SECRET_KEY="${AWS_SECRET_ACCESS_KEY}" \ rustfs/rustfs:latest \ /data - name: Install AWS CLI run: | python3 -m pip install --user awscli echo "$HOME/.local/bin" >> "$GITHUB_PATH" - name: Create RustFS test bucket run: | for _ in $(seq 1 30); do if aws --endpoint-url "${AWS_ENDPOINT_URL_S3}" s3api list-buckets >/dev/null 2>&1; then break fi sleep 2 done aws --endpoint-url "${AWS_ENDPOINT_URL_S3}" \ s3api create-bucket \ --bucket "${OMNIGRAPH_S3_TEST_BUCKET}" >/dev/null 2>&1 || true - name: Run RustFS-backed repo tests run: | cargo test --locked -p omnigraph --test s3_storage -- --nocapture cargo test --locked -p omnigraph-server --test server server_opens_s3_repo_directly_and_serves_snapshot_and_read -- --nocapture cargo test --locked -p omnigraph-cli --test system_local local_cli_s3_end_to_end_init_load_read_flow -- --nocapture - name: Dump RustFS logs on failure if: failure() run: docker logs rustfs