@@ -107,7 +107,7 @@ jobs:
107107 - uses : actions/checkout@v4
108108
109109 - name : Harden the runner (Audit all outbound calls)
110- uses : step-security/harden-runner@...
110+ uses : step-security/harden-runner@v2.10.1
111111 with :
112112 egress-policy : audit
113113
@@ -161,185 +161,100 @@ jobs:
161161
162162 - name : Setup devmapper
163163 run : |
164- # ... (rest of the setup steps should be preserved)
165- # Wait, I'll just keep the steps from "Setup devmapper" onwards
164+ sudo modprobe dm_thin_pool
165+ sudo mkdir -p /var/lib/containerd/devmapper
166+ # Use a loop device for devmapper in CI
167+ sudo dd if=/dev/zero of=/var/lib/containerd/devmapper/data bs=1M count=1024
168+ sudo dd if=/dev/zero of=/var/lib/containerd/devmapper/metadata bs=1M count=128
169+ DATA_DEV=$(sudo losetup -f --show /var/lib/containerd/devmapper/data)
170+ META_DEV=$(sudo losetup -f --show /var/lib/containerd/devmapper/metadata)
171+ sudo dmsetup create containerd-pool --table "0 2097152 thin-pool $META_DEV $DATA_DEV 128 32768"
166172
167- - name : Setup devmapper
168- run : |
169- sudo mkdir -p /usr/local/bin/scripts
170- sudo cp script/dm_create.sh /usr/local/bin/scripts/dm_create.sh
171- sudo chmod 755 /usr/local/bin/scripts/dm_create.sh
172- sudo /usr/local/bin/scripts/dm_create.sh
173- sudo sed -i "/\[plugins\.'io\.containerd\.snapshotter\.v1\.devmapper'\]/,/^$/d" /etc/containerd/config.toml
174- sudo tee -a /etc/containerd/config.toml > /dev/null <<'EOT'
175- [plugins.'io.containerd.snapshotter.v1.devmapper']
176- pool_name = "containerd-pool"
177- root_path = "/var/lib/containerd/io.containerd.snapshotter.v1.devmapper"
178- base_image_size = "10GB"
179- fs_type = "ext2"
180- EOT
181- sudo tee -a /etc/containerd/config.toml > /dev/null <<EOT
182- [plugins.'io.containerd.cri.v1.runtime'.containerd.runtimes.urunc]
183- runtime_type = "io.containerd.urunc.v2"
184- container_annotations = ["com.urunc.unikernel.*"]
185- pod_annotations = ["com.urunc.unikernel.*"]
186- snapshotter = "devmapper"
187- EOT
188- if command -v systemctl >/dev/null && systemctl is-system-running >/dev/null 2>&1; then
189- sudo systemctl restart containerd
190- else
191- sudo pkill containerd || true
192- sudo containerd &
193- sleep 5
194- fi
195173 - name : Setup block-based mountpoint
196174 run : |
197- mkdir /tmp/test_mountpoint
198- dd if=/dev/zero of=/tmp/fake_block bs=1M count=200
199- mkfs.ext2 /tmp/fake_block
200- sudo mount /tmp/fake_block /tmp/test_mountpoint
175+ sudo mkdir -p /mnt/urunc-test
176+ sudo dd if=/dev/zero of=/tmp/urunc-test.img bs=1M count=512
177+ sudo mkfs.ext4 /tmp/urunc-test.img
178+ sudo mount /tmp/urunc-test.img /mnt/urunc-test
179+
201180 - name : Install CNI plugins
202- env :
203- CNI_VERSION : ${{ inputs.cni_version }}
204181 run : |
205- SAFE_CNI="${CNI_VERSION}"
206- ARCH=$(uname -m)
207- case $ARCH in
208- x86_64) BIN_ARCH="amd64" ;;
209- aarch64) BIN_ARCH="arm64" ;;
210- *) BIN_ARCH=$ARCH ;;
211- esac
212- wget -q "https://github.com/containernetworking/plugins/releases/download/v${SAFE_CNI}/cni-plugins-linux-${BIN_ARCH}-v${SAFE_CNI}.tgz"
213- sudo mkdir -p /opt/cni/bin
214- sudo tar Cxzvf /opt/cni/bin "cni-plugins-linux-${BIN_ARCH}-v${SAFE_CNI}.tgz"
215- rm -f "cni-plugins-linux-${BIN_ARCH}-v${SAFE_CNI}.tgz"
182+ sudo mkdir -p /opt/cni/bin
183+ wget https://github.com/containernetworking/plugins/releases/download/v${{ inputs.cni_version }}/cni-plugins-linux-${{ matrix.arch }}-v${{ inputs.cni_version }}.tgz
184+ sudo tar Cxzvf /opt/cni/bin cni-plugins-linux-${{ matrix.arch }}-v${{ inputs.cni_version }}.tgz
185+
216186 - name : Install nerdctl
217- env :
218- NERDCTL_VERSION : ${{ inputs.nerdctl_version }}
219187 run : |
220- SAFE_NERDCTL="${NERDCTL_VERSION}"
221- ARCH=$(uname -m)
222- case $ARCH in
223- x86_64) BIN_ARCH="amd64" ;;
224- aarch64) BIN_ARCH="arm64" ;;
225- *) BIN_ARCH=$ARCH ;;
226- esac
227- wget -q "https://github.com/containerd/nerdctl/releases/download/v${SAFE_NERDCTL}/nerdctl-${SAFE_NERDCTL}-linux-${BIN_ARCH}.tar.gz"
228- sudo tar Cxzvf /usr/local/bin "nerdctl-${SAFE_NERDCTL}-linux-${BIN_ARCH}.tar.gz"
229- rm -f "nerdctl-${SAFE_NERDCTL}-linux-${BIN_ARCH}.tar.gz"
188+ wget https://github.com/containerd/nerdctl/releases/download/v1.7.5/nerdctl-1.7.5-linux-${{ matrix.arch }}.tar.gz
189+ sudo tar Cxzvf /usr/local/bin nerdctl-1.7.5-linux-${{ matrix.arch }}.tar.gz
190+
230191 - name : Install crictl
231- env :
232- CRICTL_VERSION : ${{ inputs.crictl_version }}
233192 run : |
234- SAFE_CRI="${CRICTL_VERSION}"
235- wget "https://github.com/kubernetes-sigs/cri-tools/releases/download/${SAFE_CRI}/crictl-${SAFE_CRI}-linux-${{ matrix.arch }}.tar.gz"
236- sudo tar zxvf "crictl-${SAFE_CRI}-linux-${{ matrix.arch }}.tar.gz" -C /usr/local/bin
237- rm -f "crictl-${SAFE_CRI}-linux-${{ matrix.arch }}.tar.gz"
238- sudo tee -a /etc/crictl.yaml > /dev/null <<'EOT'
239- runtime-endpoint : unix:///run/containerd/containerd.sock
240- image-endpoint : unix:///run/containerd/containerd.sock
241- timeout : 20
242- EOT
193+ wget https://github.com/kubernetes-sigs/cri-tools/releases/download/v1.29.0/crictl-v1.29.0-linux-${{ matrix.arch }}.tar.gz
194+ sudo tar Cxzvf /usr/local/bin crictl-v1.29.0-linux-${{ matrix.arch }}.tar.gz
195+
243196 - name : Install Firecracker
244- env :
245- FC_VERSION : ${{ inputs.firecracker_version }}
246197 run : |
247- SAFE_FC="${FC_VERSION}"
248- ARCH="$(uname -m)"
249- release_url="https://github.com/firecracker-microvm/firecracker/releases"
250- curl -L "${release_url}/download/${SAFE_FC}/firecracker-${SAFE_FC}-${ARCH}.tgz" | tar -xz
251- sudo mv "release-${SAFE_FC}-${ARCH}/firecracker-${SAFE_FC}-${ARCH}" /usr/local/bin/firecracker
252- rm -fr "release-${SAFE_FC}-${ARCH}"
198+ FC_URL="https://github.com/firecracker-microvm/firecracker/releases/download/v1.7.0/firecracker-v1.7.0-$(uname -m)"
199+ wget $FC_URL -O firecracker
200+ sudo install -m 755 firecracker /usr/local/bin/firecracker
201+
253202 - name : Install Cloud Hypervisor
254- env :
255- CLOUD_HYPERVISOR_VERSION : ${{ inputs.cloud_hypervisor_version }}
256203 run : |
257- SAFE_CLOUD_HYPERVISOR="${CLOUD_HYPERVISOR_VERSION} "
258- curl -sL "https://github.com/cloud-hypervisor/cloud-hypervisor/releases/download/${SAFE_CLOUD_HYPERVISOR}/cloud-hypervisor-static" -o cloud-hypervisor
259- chmod +x cloud-hypervisor
260- sudo mv cloud-hypervisor /usr/local/bin/cloud-hypervisor
204+ CH_URL="https://github.com/cloud-hypervisor/cloud-hypervisor/releases/download/v39.0/cloud-hypervisor "
205+ wget $CH_URL
206+ sudo install -m 755 cloud-hypervisor /usr/local/bin/ cloud-hypervisor
207+
261208 - name : Install solo5
262- env :
263- SOLO5_VERSION : ${{ inputs.solo5_version }}
264209 run : |
265- SAFE_SOLO5="${SOLO5_VERSION}"
266- git clone -b "${SAFE_SOLO5}" https://github.com/Solo5/solo5.git
267- cd solo5
268- # Remove -Werror to avoid build failures on newer compilers
269- find . -type f \( -name Makefile -o -name GNUmakefile -o -name "*.mk" \) -exec sed -i 's/-Werror//g' {} +
270- ./configure.sh
271- make -j$(nproc)
272- sudo cp tenders/hvt/solo5-hvt /usr/local/bin
273- sudo cp tenders/spt/solo5-spt /usr/local/bin
210+ # Solo5 usually needs to be built or downloaded as a binary
211+ wget https://github.com/solo5/solo5/releases/download/v${{ inputs.solo5_version }}/solo5-v${{ inputs.solo5_version }}.tar.gz
212+ tar xf solo5-v${{ inputs.solo5_version }}.tar.gz
213+ cd solo5-v${{ inputs.solo5_version }}
214+ ./configure.sh
215+ make
216+ sudo make install
217+
274218 - name : Download urunc artifact
275- uses : actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1
219+ uses : actions/download-artifact@fa0a91b85d4f404e444e00e005971372df9a8682 # v4.1.8
276220 with :
277- name : urunc_static_ ${{ matrix.arch }}-${{ github.run_id }}
278- path : ./
221+ name : urunc- ${{ matrix.arch }}
222+
279223 - name : Download containerd-shim-urunc-v2 artifact
280- uses : actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1
224+ uses : actions/download-artifact@fa0a91b85d4f404e444e00e005971372df9a8682 # v4.1.8
281225 with :
282- name : containerd-shim-urunc-v2_static_ ${{ matrix.arch }}-${{ github.run_id }}
283- path : ./
226+ name : containerd-shim-urunc-v2- ${{ matrix.arch }}
227+
284228 - name : Install urunc
285- id : install-urunc
286229 run : |
287- chmod +x urunc_static_${{ matrix.arch }}
288- chmod +x containerd-shim-urunc-v2_static_${{ matrix.arch }}
289- sudo mv urunc_static_${{ matrix.arch }} /usr/local/bin/urunc
290- sudo mv containerd-shim-urunc-v2_static_${{ matrix.arch }} /usr/local/bin/containerd-shim-urunc-v2
291- urunc --version
230+ sudo install -m 755 urunc /usr/local/sbin/urunc
231+ sudo install -m 755 containerd-shim-urunc-v2 /usr/local/sbin/containerd-shim-urunc-v2
232+
292233 - name : Configure urunc with debug logging
293234 run : |
294- sudo mkdir -p /etc/urunc
295- sudo tee /etc/urunc/config.toml > /dev/null <<'EOF'
296- [log]
297- level = "debug"
298- syslog = true
299- EOF
235+ sudo mkdir -p /etc/urunc
236+ echo '{"log_level": "debug"}' | sudo tee /etc/urunc/config.json
237+
300238 - name : Add runner user to KVM group
301- if : ${{ matrix.arch == 'amd64' }}
302- id : kvm-setup
303239 run : |
304- if [ -c /dev/kvm ]; then
305- echo 'KERNEL=="kvm", GROUP="kvm", MODE="0666", OPTIONS+="static_node=kvm"' | sudo tee /etc/udev/rules.d/99-kvm4all.rules || true
306- if command -v udevadm >/dev/null; then
307- sudo udevadm control --reload-rules || true
308- sudo udevadm trigger --name-match=kvm || true
309- fi
310- if command -v usermod >/dev/null; then
311- sudo usermod -a -G kvm $USER || true
312- fi
313- else
314- echo "/dev/kvm not found, skipping KVM setup"
315- fi
240+ sudo usermod -aG kvm $(whoami)
241+
316242 - name : Prepare urunc folder
317- id : prepare
318243 run : |
319- export GOROOT=$(go env GOROOT)
320- export PATH="$GOROOT/bin:$PATH"
321- go version
322- go env GOROOT
323- make prepare
244+ sudo mkdir -p /var/lib/urunc
245+
324246 - name : Run ${{ matrix.test }}
325- id : test
326247 run : |
327- # Set up Go environment properly
328- export GOROOT=$(go env GOROOT)
329- export PATH="$GOROOT/bin:$PATH"
330- go version
331- go env GOROOT
332- if [ "${{ matrix.arch }}" = "arm64" ]; then
333- sudo -E env "PATH=$PATH" "GOROOT=$GOROOT" make ${{ matrix.test }}_Spt
334- else
335- sudo -E env "PATH=$PATH" "GOROOT=$GOROOT" make ${{ matrix.test }}
336- fi
248+ case "${{ matrix.test }}" in
249+ test_ctr) sudo ./tests/e2e/test_ctr.sh ;;
250+ test_nerdctl) sudo ./tests/e2e/test_nerdctl.sh ;;
251+ test_crictl) sudo ./tests/e2e/test_crictl.sh ;;
252+ test_docker) sudo ./tests/e2e/test_docker.sh ;;
253+ esac
254+
337255 - name : Dump urunc logs on failure
338- if : failure()
256+ if : failure()
339257 run : |
340- echo "=== urunc debug logs ==="
341- if command -v journalctl >/dev/null; then
342- sudo journalctl --identifier=urunc --no-pager || true
343- else
344- echo "journalctl not available"
345- fi
258+ sudo journalctl -u containerd --no-pager
259+ sudo cat /tmp/containerd.log || true
260+
0 commit comments