diff --git a/.github/workflows/posix-compliance.yml b/.github/workflows/posix-compliance.yml index 1b3f62830..a64ea0d53 100644 --- a/.github/workflows/posix-compliance.yml +++ b/.github/workflows/posix-compliance.yml @@ -109,151 +109,9 @@ jobs: sudo cp ./weed /usr/local/bin/weed which weed weed version - - - name: Set up SeaweedFS cluster - run: | - # Create directories for SeaweedFS cluster - mkdir -p /tmp/seaweedfs/{master,volume,filer,mount} - - # Start SeaweedFS master server in background - echo "Starting SeaweedFS master..." - weed master \ - -ip=127.0.0.1 \ - -port=9333 \ - -mdir=/tmp/seaweedfs/master \ - -raftBootstrap=true \ - > /tmp/seaweedfs/master.log 2>&1 & - MASTER_PID=$! - echo $MASTER_PID > /tmp/seaweedfs/master.pid - - # Wait for master to be ready - echo "Waiting for master to start..." - for i in {1..30}; do - if curl -sf http://127.0.0.1:9333/cluster/status > /dev/null 2>&1; then - echo "Master is ready" - break - fi - if [ $i -eq 30 ]; then - echo "Master failed to start" - cat /tmp/seaweedfs/master.log - exit 1 - fi - sleep 2 - done - - # Start volume server in background - echo "Starting SeaweedFS volume server..." - weed volume \ - -mserver=127.0.0.1:9333 \ - -ip=127.0.0.1 \ - -port=8080 \ - -dir=/tmp/seaweedfs/volume \ - -max=100 \ - > /tmp/seaweedfs/volume.log 2>&1 & - VOLUME_PID=$! - echo $VOLUME_PID > /tmp/seaweedfs/volume.pid - - # Wait for volume server to be ready - echo "Waiting for volume server to start..." - for i in {1..30}; do - if curl -sf http://127.0.0.1:8080/status > /dev/null 2>&1; then - echo "Volume server is ready" - break - fi - if [ $i -eq 30 ]; then - echo "Volume server failed to start" - cat /tmp/seaweedfs/volume.log - exit 1 - fi - sleep 2 - done - - # Start filer server in background - echo "Starting SeaweedFS filer..." - weed filer \ - -master=127.0.0.1:9333 \ - -ip=127.0.0.1 \ - -port=8888 \ - > /tmp/seaweedfs/filer.log 2>&1 & - FILER_PID=$! - echo $FILER_PID > /tmp/seaweedfs/filer.pid - - # Wait for filer to be ready - echo "Waiting for filer to start..." - for i in {1..30}; do - if curl -sf http://127.0.0.1:8888/dir/status > /dev/null 2>&1; then - echo "Filer is ready" - break - fi - if [ $i -eq 30 ]; then - echo "Filer failed to start" - cat /tmp/seaweedfs/filer.log - exit 1 - fi - sleep 2 - done - - # Show cluster status - echo "SeaweedFS cluster status:" - curl -s http://127.0.0.1:9333/cluster/status || true - - - name: Set up FUSE mount - run: | - # Create mount point - MOUNT_POINT="/tmp/seaweedfs/mount" - mkdir -p $MOUNT_POINT - - echo "Mounting SeaweedFS FUSE filesystem..." - # Mount SeaweedFS FUSE filesystem in background - weed mount \ - -filer=127.0.0.1:8888 \ - -dir=$MOUNT_POINT \ - -filer.path=/ \ - -dirAutoCreate=true \ - -allowOthers=true \ - -nonempty=true \ - > /tmp/seaweedfs/mount.log 2>&1 & - MOUNT_PID=$! - echo $MOUNT_PID > /tmp/seaweedfs/mount.pid - - # Wait for mount to be ready - echo "Waiting for FUSE mount to be ready..." - for i in {1..30}; do - if mountpoint -q $MOUNT_POINT 2>/dev/null; then - echo "FUSE mount is ready" - break - fi - # Alternative check - try to list the directory - if ls -la $MOUNT_POINT > /dev/null 2>&1; then - echo "FUSE mount is ready (directory accessible)" - break - fi - if [ $i -eq 30 ]; then - echo "FUSE mount failed to be ready" - cat /tmp/seaweedfs/mount.log - echo "Mount status:" - mount | grep fuse || echo "No FUSE mounts found" - ps aux | grep weed || echo "No weed processes found" - exit 1 - fi - sleep 2 - done - - # Verify mount is working - echo "Testing FUSE mount functionality..." - echo "test" > $MOUNT_POINT/test_file.txt - if [ "$(cat $MOUNT_POINT/test_file.txt)" = "test" ]; then - echo "FUSE mount is working correctly" - rm $MOUNT_POINT/test_file.txt - else - echo "FUSE mount is not working properly" - exit 1 - fi - - # Export mount point for tests - echo "SEAWEEDFS_MOUNT_POINT=$MOUNT_POINT" >> $GITHUB_ENV - - - name: Set up test environment + + - name: Run POSIX compliance tests + id: posix-tests run: | cd test/fuse_integration @@ -271,23 +129,6 @@ jobs: make -f posix_Makefile setup-external-tools || true fi - # Verify SeaweedFS cluster is accessible - echo "Verifying SeaweedFS cluster accessibility..." - curl -sf http://127.0.0.1:9333/cluster/status - curl -sf http://127.0.0.1:8080/status - curl -sf http://127.0.0.1:8888/dir/status - - # Verify mount point - echo "Mount point: $SEAWEEDFS_MOUNT_POINT" - ls -la $SEAWEEDFS_MOUNT_POINT - - - name: Run POSIX compliance tests - id: posix-tests - env: - SEAWEEDFS_MOUNT_POINT: ${{ env.SEAWEEDFS_MOUNT_POINT }} - run: | - cd test/fuse_integration - # Determine which tests to run TEST_TYPE="${{ github.event.inputs.test_type }}" if [ -z "$TEST_TYPE" ]; then @@ -295,11 +136,6 @@ jobs: fi echo "Running POSIX tests: $TEST_TYPE" - echo "Using mount point: $SEAWEEDFS_MOUNT_POINT" - - # Set test configuration to use our mounted filesystem - export TEST_MOUNT_POINT="$SEAWEEDFS_MOUNT_POINT" - export TEST_SKIP_CLUSTER_SETUP="true" case "$TEST_TYPE" in "critical") @@ -336,153 +172,6 @@ jobs: cd test/fuse_integration make -f posix_Makefile generate-report - - name: Cleanup SeaweedFS cluster and FUSE mount - if: always() - run: | - echo "Cleaning up SeaweedFS cluster and FUSE mount..." - - # Unmount FUSE filesystem - MOUNT_POINT="/tmp/seaweedfs/mount" - if mountpoint -q $MOUNT_POINT 2>/dev/null; then - echo "Unmounting FUSE filesystem..." - fusermount -u $MOUNT_POINT || umount $MOUNT_POINT || true - fi - - # Stop mount process - if [ -f /tmp/seaweedfs/mount.pid ]; then - MOUNT_PID=$(cat /tmp/seaweedfs/mount.pid) - if kill -0 $MOUNT_PID 2>/dev/null; then - echo "Stopping mount process (PID: $MOUNT_PID)..." - kill -TERM $MOUNT_PID || true - sleep 2 - kill -KILL $MOUNT_PID 2>/dev/null || true - fi - fi - - # Stop filer process - if [ -f /tmp/seaweedfs/filer.pid ]; then - FILER_PID=$(cat /tmp/seaweedfs/filer.pid) - if kill -0 $FILER_PID 2>/dev/null; then - echo "Stopping filer process (PID: $FILER_PID)..." - kill -TERM $FILER_PID || true - sleep 2 - kill -KILL $FILER_PID 2>/dev/null || true - fi - fi - - # Stop volume process - if [ -f /tmp/seaweedfs/volume.pid ]; then - VOLUME_PID=$(cat /tmp/seaweedfs/volume.pid) - if kill -0 $VOLUME_PID 2>/dev/null; then - echo "Stopping volume process (PID: $VOLUME_PID)..." - kill -TERM $VOLUME_PID || true - sleep 2 - kill -KILL $VOLUME_PID 2>/dev/null || true - fi - fi - - # Stop master process - if [ -f /tmp/seaweedfs/master.pid ]; then - MASTER_PID=$(cat /tmp/seaweedfs/master.pid) - if kill -0 $MASTER_PID 2>/dev/null; then - echo "Stopping master process (PID: $MASTER_PID)..." - kill -TERM $MASTER_PID || true - sleep 2 - kill -KILL $MASTER_PID 2>/dev/null || true - fi - fi - - # Kill any remaining weed processes - pkill -f "weed " || true - - # Clean up any stale mounts - fusermount -u $MOUNT_POINT 2>/dev/null || true - umount $MOUNT_POINT 2>/dev/null || true - - # Remove temporary directories - rm -rf /tmp/seaweedfs || true - - echo "Cleanup completed" - - - name: Collect system information for debugging - if: failure() - run: | - cd test/fuse_integration - mkdir -p reports/debug - - echo "System Information" > reports/debug/system_info.txt - uname -a >> reports/debug/system_info.txt - echo "" >> reports/debug/system_info.txt - - echo "Mount Information" >> reports/debug/system_info.txt - mount >> reports/debug/system_info.txt - echo "" >> reports/debug/system_info.txt - - echo "Disk Space" >> reports/debug/system_info.txt - df -h >> reports/debug/system_info.txt - echo "" >> reports/debug/system_info.txt - - echo "Memory Information" >> reports/debug/system_info.txt - free -h >> reports/debug/system_info.txt - echo "" >> reports/debug/system_info.txt - - echo "FUSE Information" >> reports/debug/system_info.txt - ls -la /dev/fuse >> reports/debug/system_info.txt - lsmod | grep fuse >> reports/debug/system_info.txt - echo "" >> reports/debug/system_info.txt - - echo "SeaweedFS Version" >> reports/debug/system_info.txt - weed version >> reports/debug/system_info.txt - echo "" >> reports/debug/system_info.txt - - echo "Go Version" >> reports/debug/system_info.txt - go version >> reports/debug/system_info.txt - echo "" >> reports/debug/system_info.txt - - echo "Running Processes" >> reports/debug/system_info.txt - ps aux | grep -E "(weed|fuse)" >> reports/debug/system_info.txt - echo "" >> reports/debug/system_info.txt - - # Collect SeaweedFS service logs - echo "=== SeaweedFS Service Logs ===" >> reports/debug/system_info.txt - if [ -f /tmp/seaweedfs/master.log ]; then - echo "Master Log:" >> reports/debug/system_info.txt - tail -50 /tmp/seaweedfs/master.log >> reports/debug/system_info.txt - echo "" >> reports/debug/system_info.txt - fi - - if [ -f /tmp/seaweedfs/volume.log ]; then - echo "Volume Log:" >> reports/debug/system_info.txt - tail -50 /tmp/seaweedfs/volume.log >> reports/debug/system_info.txt - echo "" >> reports/debug/system_info.txt - fi - - if [ -f /tmp/seaweedfs/filer.log ]; then - echo "Filer Log:" >> reports/debug/system_info.txt - tail -50 /tmp/seaweedfs/filer.log >> reports/debug/system_info.txt - echo "" >> reports/debug/system_info.txt - fi - - if [ -f /tmp/seaweedfs/mount.log ]; then - echo "Mount Log:" >> reports/debug/system_info.txt - tail -50 /tmp/seaweedfs/mount.log >> reports/debug/system_info.txt - echo "" >> reports/debug/system_info.txt - fi - - # Copy full logs as separate files - if [ -f /tmp/seaweedfs/master.log ]; then - cp /tmp/seaweedfs/master.log reports/debug/master.log - fi - if [ -f /tmp/seaweedfs/volume.log ]; then - cp /tmp/seaweedfs/volume.log reports/debug/volume.log - fi - if [ -f /tmp/seaweedfs/filer.log ]; then - cp /tmp/seaweedfs/filer.log reports/debug/filer.log - fi - if [ -f /tmp/seaweedfs/mount.log ]; then - cp /tmp/seaweedfs/mount.log reports/debug/mount.log - fi - - name: Upload test results uses: actions/upload-artifact@v4 if: always() @@ -522,9 +211,9 @@ jobs:
Test Summary - \`\`\` + ``` ${report} - \`\`\` + ```
📊 Full results available in [test artifacts](https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }}) @@ -603,14 +292,19 @@ jobs: with: go-version: ${{ env.GO_VERSION }} - - name: Install security tools - run: | - go install github.com/securecodewarrior/gosec/v2/cmd/gosec@latest + - name: Install gosec + run: go install github.com/securecodewarrior/gosec/v2/cmd/gosec@v2.18.2 - name: Run security analysis on FUSE code run: | # Analyze mount and FUSE-related code for security issues + echo "Running gosec security analysis..." gosec -fmt json -out gosec-report.json -severity medium ./weed/mount/... ./weed/command/mount* ./weed/command/fuse* || true + + if [ ! -f gosec-report.json ]; then + echo "Warning: gosec report not found, creating placeholder" + echo '{"issues": [], "stats": {"files": 0, "lines": 0, "nosec": 0, "found": 0}, "error": "no report generated"}' > gosec-report.json + fi - name: Upload security analysis results uses: actions/upload-artifact@v4