set -euxo pipefail
VERSION=${REF#"refs/tags/"}
DIST=$(pwd)/dist
echo "Packaging val $VERSION for $TARGET..."
test -f Cargo.lock || cargo generate-lockfile
echo "Installing rust toolchain for $TARGET..."
CARGO=(cargo)
RUSTC=(rustc)
if [[ $TARGET == x86_64-pc-windows-gnu ]]; then
TOOLCHAIN=stable-x86_64-pc-windows-gnu
rustup toolchain install "$TOOLCHAIN"
rustup target add "$TARGET" --toolchain "$TOOLCHAIN"
CARGO=(cargo +"$TOOLCHAIN")
RUSTC=(rustc +"$TOOLCHAIN")
else
rustup target add "$TARGET"
fi
HOST=$("${RUSTC[@]}" -vV | sed -n 's/^host: //p')
FEATURES=()
if [[ $TARGET != "$HOST" ]]; then
FEATURES=(--features force-cross)
fi
if [[ $TARGET == aarch64-unknown-linux-musl ]]; then
export CC=aarch64-linux-gnu-gcc
fi
echo "Building val..."
RUSTFLAGS="--deny warnings --codegen target-feature=+crt-static $TARGET_RUSTFLAGS" \
"${CARGO[@]}" build --bin val "${FEATURES[@]}" --target "$TARGET" --release
EXECUTABLE=target/$TARGET/release/val
if [[ $OS == windows-latest ]]; then
EXECUTABLE=$EXECUTABLE.exe
fi
echo "Copying release files..."
mkdir dist
cp -r \
"$EXECUTABLE" \
Cargo.lock \
Cargo.toml \
LICENSE \
README.md \
"$DIST"
cd "$DIST"
echo "Creating release archive..."
case $OS in
ubuntu-latest | macos-latest)
ARCHIVE=val-$VERSION-$TARGET.tar.gz
tar czf "$ARCHIVE" ./*
echo "archive=$DIST/$ARCHIVE" >> "$GITHUB_OUTPUT"
;;
windows-latest)
ARCHIVE=val-$VERSION-$TARGET.zip
7z a "$ARCHIVE" ./*
echo "archive=$(pwd -W)/$ARCHIVE" >> "$GITHUB_OUTPUT"
;;
esac