#!/bin/bash # Make bash fail much more aggressively on errors. set -euo pipefail # Make sure we can build our main container. docker build -t ekidd/rust-musl-builder . # Make sure we can build our example derived container. docker build -t rust-musl-zlib examples/adding-a-library # Make sure we can build a multi-stage container. docker build -t rust-musl-builder-using-diesel examples/using-diesel docker run --rm rust-musl-builder-using-diesel # Make sure we can build a static executable. docker run --rm ekidd/rust-musl-builder bash -c " set -euo pipefail export USER=rust cargo new --vcs none --bin testme cd testme # depending on git2 (and using it) makes the test much better, because git2 links against openssl and libz-sys among others sed -i 's/\[dependencies\]/\[dependencies\]\ngit2 = \"0.6\"/' Cargo.toml echo ' extern crate git2; use git2::Repository; fn main() { let _local = Repository::init(\"fkbr\"); println!(\"Hello, world!\"); }' > src/main.rs cargo build # ldd will not die if the file does not exist, we need to check that too if [ ! -f target/x86_64-unknown-linux-musl/debug/testme ]; then echo 'binary was not created by cargo build or has unexpected name. Heres whats in target:' 1>&2 # no tree in image, but this also works set -x ls -l target && ls -l target/x86_64-unknown-linux-musl && ls -l target/x86_64-unknown-linux-musl/debug exit 1 fi echo 'Checking to make sure it is not a dynamic executable' if ldd target/x86_64-unknown-linux-musl/debug/testme; then echo 'Executable is not static!' 1>&2 echo 'FAIL.' 1>&2 exit 1 fi " # We're good. echo 'OK. Tests passed.' 1>&2