name: 'Build Static Binary' description: 'Build a statically-linked Linux binary using musl' runs: using: 'composite' steps: - name: Install dependencies shell: sh run: | apk add --no-cache \ musl-dev libpcap-dev pkgconfig build-base perl \ elfutils-dev zlib-dev zlib-static zstd-dev zstd-static \ clang llvm linux-headers git rustup component add rustfmt - name: Build static binary shell: sh env: # -C strip=symbols: Strip debug symbols for smaller binary # -C link-arg=-l:libzstd.a: Fix elfutils 0.189+ zstd dependency (libbpf/bpftool#152) RUSTFLAGS: "-C strip=symbols -C link-arg=-l:libzstd.a" run: cargo build --release - name: Verify static linking shell: sh run: | file target/release/rustnet # Use file command to verify (ldd behaves differently inside Alpine) file target/release/rustnet | grep -q "static.* linked" || \ (echo "ERROR: Binary is not statically linked" && exit 1)