Skip to content

Commit 73432a9

Browse files
committed
Add xfstests-nbd workflow
1 parent 7529613 commit 73432a9

1 file changed

Lines changed: 187 additions & 0 deletions

File tree

.github/workflows/xfstests-nbd.yml

Lines changed: 187 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,187 @@
1+
name: xfstests-nbd
2+
3+
on:
4+
push:
5+
branches: ["main"]
6+
pull_request:
7+
branches: ["main"]
8+
9+
jobs:
10+
xfstests:
11+
name: Run xfstests XFS on NBD
12+
runs-on: ubuntu-latest
13+
14+
steps:
15+
- uses: actions/checkout@v4
16+
17+
- name: Start MinIO
18+
run: |
19+
docker run -d \
20+
--name minio \
21+
-p 9000:9000 \
22+
-e MINIO_ROOT_USER=minioadmin \
23+
-e MINIO_ROOT_PASSWORD=minioadmin \
24+
minio/minio server /data
25+
26+
# Wait for MinIO to be ready
27+
for i in {1..30}; do
28+
if curl -f http://localhost:9000/minio/health/live; then
29+
echo "MinIO is ready"
30+
break
31+
fi
32+
sleep 1
33+
done
34+
35+
- name: Install dependencies
36+
run: |
37+
sudo apt-get update
38+
sudo apt-get install -y acl attr automake bc dbench dump e2fsprogs fio gawk \
39+
gcc git indent libacl1-dev libaio-dev libcap-dev libgdbm-dev libtool \
40+
libtool-bin liburing-dev libuuid1 lvm2 make psmisc python3 quota sed \
41+
uuid-dev uuid-runtime xfsprogs linux-headers-$(uname -r) sqlite3 \
42+
libgdbm-compat-dev nbd-client wget
43+
sudo apt-get install -y exfatprogs f2fs-tools ocfs2-tools udftools xfsdump \
44+
xfslibs-dev || true
45+
sudo apt-get install -y systemd-coredump systemd jq pkg-config
46+
47+
- name: Setup MinIO bucket
48+
run: |
49+
wget -q https://dl.min.io/client/mc/release/linux-amd64/mc
50+
chmod +x mc
51+
./mc alias set myminio http://localhost:9000 minioadmin minioadmin
52+
./mc mb myminio/zerofs-xfs-test || true
53+
54+
- name: Clone xfstests
55+
run: |
56+
git clone https://github.com/Barre/xfstests.git /tmp/xfstests
57+
58+
- name: Build xfstests
59+
working-directory: /tmp/xfstests
60+
run: |
61+
make
62+
sudo make install
63+
64+
- name: Build ZeroFS
65+
working-directory: zerofs
66+
run: cargo build --profile ci
67+
68+
- name: Start ZeroFS
69+
working-directory: zerofs
70+
run: |
71+
mkdir -p /tmp/zerofs-cache
72+
73+
cat > zerofs-ci.toml << EOF
74+
[cache]
75+
dir = "/tmp/zerofs-cache"
76+
disk_size_gb = 2.0
77+
memory_size_gb = 2.0
78+
79+
[storage]
80+
url = "s3://zerofs-xfs-test/xfs-test"
81+
encryption_password = "test-password-123"
82+
83+
[servers.ninep]
84+
addresses = ["127.0.0.1:5564"]
85+
86+
[servers.nbd]
87+
addresses = ["127.0.0.1:10809"]
88+
89+
[aws]
90+
access_key_id = "minioadmin"
91+
secret_access_key = "minioadmin"
92+
endpoint = "http://localhost:9000"
93+
allow_http = "true"
94+
EOF
95+
96+
cargo run --profile ci -- run -c zerofs-ci.toml &
97+
98+
echo "Waiting for ZeroFS NBD server to start..."
99+
for i in {1..30}; do
100+
if nc -z 127.0.0.1 10809; then
101+
echo "ZeroFS NBD server is ready"
102+
break
103+
fi
104+
sleep 1
105+
done
106+
107+
if ! nc -z 127.0.0.1 10809; then
108+
echo "ZeroFS NBD server failed to start"
109+
exit 1
110+
fi
111+
112+
- name: Create NBD device files
113+
run: |
114+
echo "Mounting ZeroFS via 9P..."
115+
sudo mkdir -p /mnt/zerofs
116+
sudo mount -t 9p -o trans=tcp,port=5564,version=9p2000.L 127.0.0.1 /mnt/zerofs
117+
118+
echo "Creating NBD device files..."
119+
sudo mkdir -p /mnt/zerofs/.nbd
120+
sudo truncate -s 2G /mnt/zerofs/.nbd/test-device
121+
sudo truncate -s 2G /mnt/zerofs/.nbd/scratch-device
122+
123+
sudo umount /mnt/zerofs
124+
125+
- name: Connect NBD devices
126+
run: |
127+
echo "Connecting TEST NBD device..."
128+
sudo nbd-client 127.0.0.1 10809 /dev/nbd0 -N test-device
129+
sudo blockdev --getsize64 /dev/nbd0
130+
131+
echo "Connecting SCRATCH NBD device..."
132+
sudo nbd-client 127.0.0.1 10809 /dev/nbd1 -N scratch-device
133+
sudo blockdev --getsize64 /dev/nbd1
134+
135+
- name: Format XFS filesystems
136+
run: |
137+
echo "Formatting TEST device with XFS..."
138+
sudo mkfs.xfs -f /dev/nbd0
139+
140+
echo "Formatting SCRATCH device with XFS..."
141+
sudo mkfs.xfs -f /dev/nbd1
142+
143+
- name: Create mount points and mount TEST
144+
run: |
145+
sudo mkdir -p /mnt/test
146+
sudo mkdir -p /mnt/scratch
147+
148+
echo "Mounting TEST filesystem..."
149+
sudo mount /dev/nbd0 /mnt/test
150+
151+
# Verify mount
152+
mount | grep nbd0
153+
154+
- name: Configure xfstests
155+
working-directory: /tmp/xfstests
156+
run: |
157+
cat > local.config << 'EOF'
158+
export FSTYP=xfs
159+
160+
export TEST_DIR=/mnt/test
161+
export TEST_DEV=/dev/nbd0
162+
163+
export SCRATCH_MNT=/mnt/scratch
164+
export SCRATCH_DEV=/dev/nbd1
165+
EOF
166+
167+
- name: Run xfstests
168+
working-directory: /tmp/xfstests
169+
run: |
170+
sudo ./check -g quick
171+
172+
- name: Cleanup
173+
if: always()
174+
run: |
175+
# Unmount filesystems
176+
sudo umount /mnt/test || true
177+
sudo umount /mnt/scratch || true
178+
179+
# Disconnect NBD devices
180+
sudo nbd-client -d /dev/nbd0 || true
181+
sudo nbd-client -d /dev/nbd1 || true
182+
183+
# Kill ZeroFS
184+
pkill -f "zerofs.*run.*zerofs-ci.toml" || true
185+
186+
# Stop MinIO
187+
docker stop minio || true

0 commit comments

Comments
 (0)