aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorchrislu <chris.lu@gmail.com>2025-08-31 07:31:26 -0700
committerchrislu <chris.lu@gmail.com>2025-08-31 07:31:26 -0700
commitfafdcc0c953af6fcfe748fcd1c4ea03b43fbc7a4 (patch)
tree4be37905cac1075e74def2e78b067e76e17f232d
parentb5729782704acf764c5183db0a431cba71d40282 (diff)
downloadseaweedfs-fafdcc0c953af6fcfe748fcd1c4ea03b43fbc7a4.tar.xz
seaweedfs-fafdcc0c953af6fcfe748fcd1c4ea03b43fbc7a4.zip
Revert "refactor(ci): Simplify POSIX compliance workflow"
This reverts commit b5729782704acf764c5183db0a431cba71d40282.
-rw-r--r--.github/workflows/posix-compliance.yml332
1 files changed, 319 insertions, 13 deletions
diff --git a/.github/workflows/posix-compliance.yml b/.github/workflows/posix-compliance.yml
index a64ea0d53..1b3f62830 100644
--- a/.github/workflows/posix-compliance.yml
+++ b/.github/workflows/posix-compliance.yml
@@ -109,9 +109,151 @@ jobs:
sudo cp ./weed /usr/local/bin/weed
which weed
weed version
-
- - name: Run POSIX compliance tests
- id: posix-tests
+
+ - 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
run: |
cd test/fuse_integration
@@ -129,6 +271,23 @@ 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
@@ -136,6 +295,11 @@ 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")
@@ -172,6 +336,153 @@ 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()
@@ -211,9 +522,9 @@ jobs:
<details>
<summary>Test Summary</summary>
- ```
+ \`\`\`
${report}
- ```
+ \`\`\`
</details>
📊 Full results available in [test artifacts](https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }})
@@ -292,19 +603,14 @@ jobs:
with:
go-version: ${{ env.GO_VERSION }}
- - name: Install gosec
- run: go install github.com/securecodewarrior/gosec/v2/cmd/gosec@v2.18.2
+ - name: Install security tools
+ run: |
+ go install github.com/securecodewarrior/gosec/v2/cmd/gosec@latest
- 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