@ -6,16 +6,20 @@ on:
paths:
- 'seaweed-volume/**'
- 'test/volume_server/**'
- 'weed/pb/volume_server.proto'
- 'weed/pb/volume_server_pb/**'
- '.github/workflows/rust-volume-server-tests.yml'
push:
branches : [ master, main ]
paths:
- 'seaweed-volume/**'
- 'test/volume_server/**'
- 'weed/pb/volume_server.proto'
- 'weed/pb/volume_server_pb/**'
- '.github/workflows/rust-volume-server-tests.yml'
concurrency:
group : ${{ github.head_ref || github.ref }}/rust-volume-server-tests
group : ${{ github.workflow }}-${{ github. head_ref || github.ref }}
cancel-in-progress : true
permissions:
@ -127,3 +131,114 @@ jobs:
echo "## Rust Volume Server Integration Test Summary" >> "$GITHUB_STEP_SUMMARY"
echo "- Suite: test/volume_server/rust" >> "$GITHUB_STEP_SUMMARY"
echo "- Command: go test -v -count=1 -timeout=15m ./test/volume_server/rust/..." >> "$GITHUB_STEP_SUMMARY"
rust-volume-go-tests:
name : Go Tests with Rust Volume (${{ matrix.test-type }} - Shard ${{ matrix.shard }})
runs-on : ubuntu-22.04
timeout-minutes : 45
strategy:
fail-fast : false
matrix:
test-type : [ grpc, http]
shard : [ 1 , 2 , 3 ]
steps:
- name : Checkout code
uses : actions/checkout@v6
- name : Set up Go ${{ env.GO_VERSION }}
uses : actions/setup-go@v6
with:
go-version : ${{ env.GO_VERSION }}
- name : Install protobuf compiler
run : sudo apt-get update && sudo apt-get install -y protobuf-compiler
- name : Install Rust toolchain
uses : dtolnay/rust-toolchain@stable
- name : Cache cargo registry and target
uses : actions/cache@v4
with:
path : |
~/.cargo/registry
~/.cargo/git
seaweed-volume/target
key : rust-${{ hashFiles('seaweed-volume/Cargo.lock') }}
restore-keys : |
rust-
- name : Build Go weed binary
run : |
cd weed
go build -o weed .
chmod +x weed
./weed version
- name : Build Rust volume binary
run : cd seaweed-volume && cargo build --release
- name : Run volume server integration tests with Rust volume
env:
WEED_BINARY : ${{ github.workspace }}/weed/weed
RUST_VOLUME_BINARY : ${{ github.workspace }}/seaweed-volume/target/release/seaweed-volume
VOLUME_SERVER_IMPL : rust
run : |
if [ "${{ matrix.test-type }}" == "grpc" ]; then
if [ "${{ matrix.shard }}" == "1" ]; then
TEST_PATTERN="^Test[A-H]"
elif [ "${{ matrix.shard }}" == "2" ]; then
TEST_PATTERN="^Test[I-S]"
else
TEST_PATTERN="^Test[T-Z]"
fi
else
if [ "${{ matrix.shard }}" == "1" ]; then
TEST_PATTERN="^Test[A-G]"
elif [ "${{ matrix.shard }}" == "2" ]; then
TEST_PATTERN="^Test[H-R]"
else
TEST_PATTERN="^Test[S-Z]"
fi
fi
echo "Running Go volume server tests with Rust volume for ${{ matrix.test-type }} (Shard ${{ matrix.shard }}, pattern: ${TEST_PATTERN})..."
go test -v -count=1 -timeout=30m ./test/volume_server/${{ matrix.test-type }}/... -run "${TEST_PATTERN}"
- name : Collect logs on failure
if : failure()
run : |
mkdir -p /tmp/rust-volume-go-test-logs
find /tmp -maxdepth 1 -type d -name "seaweedfs_volume_server_it_*" -print -exec cp -r {} /tmp/rust-volume-go-test-logs/ \; || true
- name : Archive logs on failure
if : failure()
uses : actions/upload-artifact@v7
with:
name : rust-volume-go-test-logs-${{ matrix.test-type }}-shard${{ matrix.shard }}
path : /tmp/rust-volume-go-test-logs/
if-no-files-found : warn
retention-days : 7
- name : Test summary
if : always()
run : |
if [ "${{ matrix.test-type }}" == "grpc" ]; then
if [ "${{ matrix.shard }}" == "1" ]; then
TEST_PATTERN="^Test[A-H]"
elif [ "${{ matrix.shard }}" == "2" ]; then
TEST_PATTERN="^Test[I-S]"
else
TEST_PATTERN="^Test[T-Z]"
fi
else
if [ "${{ matrix.shard }}" == "1" ]; then
TEST_PATTERN="^Test[A-G]"
elif [ "${{ matrix.shard }}" == "2" ]; then
TEST_PATTERN="^Test[H-R]"
else
TEST_PATTERN="^Test[S-Z]"
fi
fi
echo "## Rust Volume - Go Test Summary (${{ matrix.test-type }} - Shard ${{ matrix.shard }})" >> "$GITHUB_STEP_SUMMARY"
echo "- Suite: test/volume_server/${{ matrix.test-type }} (Pattern: ${TEST_PATTERN})" >> "$GITHUB_STEP_SUMMARY"
echo "- Volume server: Rust (VOLUME_SERVER_IMPL=rust)" >> "$GITHUB_STEP_SUMMARY"