You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							144 lines
						
					
					
						
							5.7 KiB
						
					
					
				
			
		
		
		
			
			
			
		
		
	
	
							144 lines
						
					
					
						
							5.7 KiB
						
					
					
				| name: "End to End" | |
|  | |
| on: | |
|   push: | |
|     branches: [ master ] | |
|   pull_request: | |
|     branches: [ master ] | |
|  | |
| concurrency: | |
|   group: ${{ github.head_ref }}/e2e | |
|   cancel-in-progress: true | |
|  | |
| permissions: | |
|   contents: read | |
|  | |
| defaults: | |
|   run: | |
|     working-directory: docker | |
|  | |
| jobs: | |
|   e2e: | |
|     name: FUSE Mount | |
|     runs-on: ubuntu-22.04 | |
|     timeout-minutes: 30 | |
|     steps: | |
|     - name: Set up Go 1.x | |
|       uses: actions/setup-go@c0137caad775660c0844396c52da96e560aba63d # v2 | |
|       with: | |
|         go-version: ^1.13 | |
|       id: go | |
|  | |
|     - name: Check out code into the Go module directory | |
|       uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v2 | |
|  | |
|     - name: Set up Docker Buildx | |
|       uses: docker/setup-buildx-action@v3 | |
|        | |
|     - name: Cache Docker layers | |
|       uses: actions/cache@v4 | |
|       with: | |
|         path: /tmp/.buildx-cache | |
|         key: ${{ runner.os }}-buildx-e2e-${{ github.sha }} | |
|         restore-keys: | | |
|                     ${{ runner.os }}-buildx-e2e- | |
|  | |
|     - name: Install dependencies | |
|       run: | | |
|         # Use faster mirrors and install with timeout | |
|         echo "deb http://azure.archive.ubuntu.com/ubuntu/ $(lsb_release -cs) main restricted universe multiverse" | sudo tee /etc/apt/sources.list | |
|         echo "deb http://azure.archive.ubuntu.com/ubuntu/ $(lsb_release -cs)-updates main restricted universe multiverse" | sudo tee -a /etc/apt/sources.list | |
|          | |
|         sudo apt-get update --fix-missing | |
|         sudo DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends fuse | |
|          | |
|         # Verify FUSE installation | |
|         echo "FUSE version: $(fusermount --version 2>&1 || echo 'fusermount not found')" | |
|         echo "FUSE device: $(ls -la /dev/fuse 2>&1 || echo '/dev/fuse not found')"         | |
|  | |
|     - name: Start SeaweedFS | |
|       timeout-minutes: 10 | |
|       run: | | |
|         # Enable Docker buildkit for better caching | |
|         export DOCKER_BUILDKIT=1 | |
|         export COMPOSE_DOCKER_CLI_BUILD=1 | |
|          | |
|         # Build with retry logic | |
|         for i in {1..3}; do | |
|           echo "Build attempt $i/3" | |
|           if make build_e2e; then | |
|             echo "Build successful on attempt $i" | |
|             break | |
|           elif [ $i -eq 3 ]; then | |
|             echo "Build failed after 3 attempts" | |
|             exit 1 | |
|           else | |
|             echo "Build attempt $i failed, retrying in 30 seconds..." | |
|             sleep 30 | |
|           fi | |
|         done | |
|          | |
|         # Start services with wait | |
|         docker compose -f ./compose/e2e-mount.yml up --wait         | |
|  | |
|     - name: Run FIO 4k | |
|       timeout-minutes: 15 | |
|       run: | | |
|         echo "Starting FIO at: $(date)" | |
|         # Concurrent r/w | |
|         echo 'Run randrw with size=16M bs=4k' | |
|         docker compose -f ./compose/e2e-mount.yml exec mount timeout -k5 60 fio --name=fiotest --filename=/mnt/seaweedfs/fiotest --size=16M --rw=randrw --bs=4k --direct=1 --numjobs=8 --ioengine=libaio --group_reporting --runtime=30 --time_based=1 | |
|  | |
|         echo "Verify FIO at: $(date)" | |
|         # Verified write | |
|         echo 'Run randwrite with size=16M bs=4k' | |
|         docker compose -f ./compose/e2e-mount.yml exec mount timeout -k5 60 fio --name=fiotest --filename=/mnt/seaweedfs/fiotest --size=16M --rw=randwrite --bs=4k --direct=1 --numjobs=8 --ioengine=libaio --iodepth=32 --group_reporting --runtime=30 --time_based=1 --do_verify=0 --verify=crc32c --verify_backlog=1         | |
|  | |
|     - name: Run FIO 128k | |
|       timeout-minutes: 15 | |
|       run: | | |
|         echo "Starting FIO at: $(date)" | |
|         # Concurrent r/w | |
|         echo 'Run randrw with size=16M bs=128k' | |
|         docker compose -f ./compose/e2e-mount.yml exec mount timeout -k5 60 fio --name=fiotest --filename=/mnt/seaweedfs/fiotest --size=16M --rw=randrw --bs=128k --direct=1 --numjobs=8 --ioengine=libaio --iodepth=32 --group_reporting --runtime=30 --time_based=1 | |
|  | |
|         echo "Verify FIO at: $(date)" | |
|         # Verified write | |
|         echo 'Run randwrite with size=16M bs=128k' | |
|         docker compose -f ./compose/e2e-mount.yml exec mount timeout -k5 60 fio --name=fiotest --filename=/mnt/seaweedfs/fiotest --size=16M --rw=randwrite --bs=128k --direct=1 --numjobs=8 --ioengine=libaio --iodepth=32 --group_reporting --runtime=30 --time_based=1 --do_verify=0 --verify=crc32c --verify_backlog=1         | |
|  | |
|     - name: Run FIO 1MB | |
|       timeout-minutes: 15 | |
|       run: | | |
|         echo "Starting FIO at: $(date)" | |
|         # Concurrent r/w | |
|         echo 'Run randrw with size=16M bs=1m' | |
|         docker compose -f ./compose/e2e-mount.yml exec mount timeout -k5 60 fio --name=fiotest --filename=/mnt/seaweedfs/fiotest --size=16M --rw=randrw --bs=1m --direct=1 --numjobs=8 --ioengine=libaio --iodepth=32 --group_reporting --runtime=30 --time_based=1 | |
|          | |
|         echo "Verify FIO at: $(date)" | |
|         # Verified write | |
|         echo 'Run randwrite with size=16M bs=1m' | |
|         docker compose -f ./compose/e2e-mount.yml exec mount timeout -k5 60 fio --name=fiotest --filename=/mnt/seaweedfs/fiotest --size=16M --rw=randwrite --bs=1m --direct=1 --numjobs=8 --ioengine=libaio --iodepth=32 --group_reporting --runtime=30 --time_based=1 --do_verify=0 --verify=crc32c --verify_backlog=1         | |
|  | |
|     - name: Save logs | |
|       if: always() | |
|       run: | | |
|         docker compose -f ./compose/e2e-mount.yml logs > output.log | |
|         echo 'Showing last 500 log lines of mount service:' | |
|         docker compose -f ./compose/e2e-mount.yml logs --tail 500 mount         | |
|  | |
|     - name: Check for data races | |
|       if: always() | |
|       continue-on-error: true # TODO: remove this comment to enable build failure on data races (after all are fixed) | |
|       run: grep -A50 'DATA RACE' output.log && exit 1 || exit 0 | |
|  | |
|     - name: Archive logs | |
|       if: always() | |
|       uses: actions/upload-artifact@v4 | |
|       with: | |
|         name: output-logs | |
|         path: docker/output.log | |
|  | |
|     - name: Cleanup | |
|       if: always() | |
|       run: docker compose -f ./compose/e2e-mount.yml down --volumes --remove-orphans --rmi all
 |