mirror of
https://github.com/fish-shell/fish-shell.git
synced 2026-04-21 17:21:14 -03:00
The main changes are: - disabling some checks related to POSIX file permissions when a filesystem is mounted with "noacl" (default on MSYS2) - disabling some checks related to symlinks when using fake ones (file copy) Windows with acl hasn't been tested because 1) Cygwin itself does not have any Rust package yet to compile fish, and 2) MSYS2 defaults to `noacl` Part of #12171
146 lines
3.9 KiB
Bash
Executable File
146 lines
3.9 KiB
Bash
Executable File
#!/bin/sh
|
|
|
|
{
|
|
set -ex
|
|
|
|
lint=true
|
|
if [ "$FISH_CHECK_LINT" = false ]; then
|
|
lint=false
|
|
fi
|
|
|
|
case "$(uname)" in
|
|
MSYS*)
|
|
is_cygwin=true
|
|
cygwin_var=MSYS
|
|
;;
|
|
CYGWIN*)
|
|
is_cygwin=true
|
|
cygwin_var=CYGWIN
|
|
;;
|
|
*)
|
|
is_cygwin=false
|
|
;;
|
|
esac
|
|
|
|
check_dependency_versions=false
|
|
if [ "${FISH_CHECK_DEPENDENCY_VERSIONS:-false}" != false ]; then
|
|
check_dependency_versions=true
|
|
fi
|
|
|
|
green='\e[0;32m'
|
|
yellow='\e[1;33m'
|
|
reset='\e[m'
|
|
|
|
if $check_dependency_versions; then
|
|
command -v curl
|
|
command -v jq
|
|
command -v rustup
|
|
command -v uv
|
|
sort --version-sort </dev/null
|
|
# To match existing behavior, only check Rust/dockerfiles for now.
|
|
# TODO: remove this from this script.
|
|
updatecli diff --config=updatecli.d/docker.yml --config=updatecli.d/rust.yml
|
|
fi
|
|
|
|
cargo_args=$FISH_CHECK_CARGO_ARGS
|
|
target_triple=$FISH_CHECK_TARGET_TRIPLE
|
|
if [ -n "$target_triple" ]; then
|
|
cargo_args="$cargo_args --target=$FISH_CHECK_TARGET_TRIPLE"
|
|
fi
|
|
|
|
cargo() {
|
|
subcmd=$1
|
|
shift
|
|
if [ -n "$FISH_CHECK_RUST_TOOLCHAIN" ]; then
|
|
# shellcheck disable=2086
|
|
command cargo "+$FISH_CHECK_RUST_TOOLCHAIN" "$subcmd" $cargo_args "$@"
|
|
else
|
|
# shellcheck disable=2086
|
|
command cargo "$subcmd" $cargo_args "$@"
|
|
fi
|
|
}
|
|
|
|
cleanup () {
|
|
if [ -n "$gettext_template_dir" ] && [ -e "$gettext_template_dir" ]; then
|
|
rm -r "$gettext_template_dir"
|
|
fi
|
|
}
|
|
|
|
trap cleanup EXIT INT TERM HUP
|
|
|
|
if $lint; then
|
|
export RUSTFLAGS="--deny=warnings ${RUSTFLAGS}"
|
|
export RUSTDOCFLAGS="--deny=warnings ${RUSTDOCFLAGS}"
|
|
fi
|
|
|
|
workspace_root="$(dirname "$0")/.."
|
|
target_dir=${CARGO_TARGET_DIR:-$workspace_root/target}
|
|
if [ -n "$target_triple" ]; then
|
|
target_dir="$target_dir/$target_triple"
|
|
fi
|
|
# The directory containing the binaries produced by cargo/rustc.
|
|
# Currently, all builds are debug builds.
|
|
build_dir="$target_dir/debug"
|
|
|
|
if [ -n "$FISH_TEST_MAX_CONCURRENCY" ]; then
|
|
export RUST_TEST_THREADS="$FISH_TEST_MAX_CONCURRENCY"
|
|
export CARGO_BUILD_JOBS="$FISH_TEST_MAX_CONCURRENCY"
|
|
fi
|
|
|
|
gettext_template_dir=$(mktemp -d)
|
|
(
|
|
export FISH_GETTEXT_EXTRACTION_DIR="$gettext_template_dir"
|
|
cargo build --workspace --all-targets --features=gettext-extract
|
|
)
|
|
if $lint; then
|
|
if command -v cargo-deny >/dev/null; then
|
|
cargo deny --all-features --locked --exclude-dev check licenses
|
|
fi
|
|
PATH="$build_dir:$PATH" cargo xtask format --all --check
|
|
for features in "" --no-default-features; do
|
|
cargo clippy --workspace --all-targets $features
|
|
done
|
|
fi
|
|
|
|
# When running `cargo test`, some binaries (e.g. `fish_gettext_extraction`)
|
|
# are dynamically linked against Rust's `std-xxx.dll` instead of being
|
|
# statically link as they usually are.
|
|
# On Cygwin, `PATH`is not properly updated to point to the `std-xxx.dll`
|
|
# location, so we have to do it manually.
|
|
# See:
|
|
# - https://github.com/rust-lang/rust/issues/149050
|
|
# - https://github.com/msys2/MSYS2-packages/issues/5784
|
|
(
|
|
if $is_cygwin; then
|
|
export PATH="$PATH:$(rustc --print target-libdir)"
|
|
fi
|
|
cargo test --no-default-features --workspace --all-targets
|
|
)
|
|
cargo test --doc --workspace
|
|
|
|
if $lint; then
|
|
cargo doc --workspace --no-deps
|
|
fi
|
|
|
|
# Using "()" not "{}" because we do want a subshell (for the export)
|
|
system_tests() (
|
|
[ -n "$@" ] && export "$@"
|
|
export FISH_GETTEXT_EXTRACTION_DIR="$gettext_template_dir"
|
|
"$workspace_root/tests/test_driver.py" "$build_dir"
|
|
)
|
|
|
|
test_cmd='FISH_GETTEXT_EXTRACTION_DIR="$gettext_template_dir" "$workspace_root/tests/test_driver.py" "$build_dir"'
|
|
if $is_cygwin; then
|
|
echo -e "=== Running ${green}integration tests ${yellow}with${green} symlinks${reset}"
|
|
system_tests $cygwin_var=winsymlinks
|
|
|
|
echo -e "=== Running ${green}integration tests ${yellow}without${green} symlinks${reset}"
|
|
system_tests $cygwin_var=winsymlinks
|
|
else
|
|
echo -e "=== Running ${green}integration tests${reset}"
|
|
system_tests
|
|
fi
|
|
|
|
exit
|
|
}
|