91 lines
3.3 KiB
Bash
91 lines
3.3 KiB
Bash
#!/usr/bin/env bash
|
|
curl -o dotnet-install.sh -sSL https://dot.net/v1/dotnet-install.sh
|
|
if [ $? -ne 0 ]; then
|
|
download_retries=3
|
|
while [ $download_retries -gt 0 ]; do
|
|
curl -sSL https://dot.net/v1/dotnet-install.sh
|
|
if [ $? -ne 0 ]; then
|
|
let download_retries=download_retries-1
|
|
echo -e "${YELLOW}Failed to download dotnet-install.sh. Retries left: $download_retries.${RESET}"
|
|
else
|
|
download_retries=0
|
|
fi
|
|
done
|
|
fi
|
|
|
|
# Call "sync" between "chmod" and execution to prevent "text file busy" error in Docker (aufs)
|
|
chmod +x "dotnet-install.sh"; sync
|
|
|
|
./dotnet-install.sh --version $2 --install-dir $HELIX_CORRELATION_PAYLOAD/sdk
|
|
if [ $? -ne 0 ]; then
|
|
sdk_retries=3
|
|
while [ $sdk_retries -gt 0 ]; do
|
|
./dotnet-install.sh --version $2 --install-dir $HELIX_CORRELATION_PAYLOAD/sdk
|
|
if [ $? -ne 0 ]; then
|
|
let sdk_retries=sdk_retries-1
|
|
echo -e "${YELLOW}Failed to install .NET Core SDK $version. Retries left: $sdk_retries.${RESET}"
|
|
else
|
|
sdk_retries=0
|
|
fi
|
|
done
|
|
fi
|
|
|
|
./dotnet-install.sh --runtime dotnet --version $3 --install-dir $HELIX_CORRELATION_PAYLOAD/sdk
|
|
if [ $? -ne 0 ]; then
|
|
runtime_retries=3
|
|
while [ $runtime_retries -gt 0 ]; do
|
|
./dotnet-install.sh --runtime dotnet --version $3 --install-dir $HELIX_CORRELATION_PAYLOAD/sdk
|
|
if [ $? -ne 0 ]; then
|
|
let runtime_retries=runtime_retries-1
|
|
echo -e "${YELLOW}Failed to install .NET Core runtime $version. Retries left: $runtime_retries.${RESET}"
|
|
else
|
|
runtime_retries=0
|
|
fi
|
|
done
|
|
fi
|
|
|
|
export DOTNET_SKIP_FIRST_TIME_EXPERIENCE=1
|
|
|
|
# Ensures every invocation of dotnet apps uses the same dotnet.exe
|
|
export DOTNET_ROOT="$HELIX_CORRELATION_PAYLOAD/sdk"
|
|
|
|
# Ensure dotnet comes first on PATH
|
|
export PATH="$DOTNET_ROOT:$PATH"
|
|
|
|
# Prevent fallback to global .NET locations. This ensures our tests use the shared frameworks we specify and don't rollforward to something else that might be installed on the machine
|
|
export DOTNET_MULTILEVEL_LOOKUP=0
|
|
|
|
# Avoid contaminating userprofiles
|
|
export DOTNET_CLI_HOME="$HELIX_CORRELATION_PAYLOAD/home"
|
|
|
|
export helix="$4"
|
|
|
|
$DOTNET_ROOT/dotnet vstest $1 -lt >discovered.txt
|
|
if grep -q "Exception thrown" discovered.txt; then
|
|
echo -e "${RED}Exception thrown during test discovery${RESET}".
|
|
cat discovered.txt
|
|
exit 1
|
|
fi
|
|
|
|
# Run non-flaky tests first
|
|
# We need to specify all possible Flaky filters that apply to this environment, because the flaky attribute
|
|
# only puts the explicit filter traits the user provided in the flaky attribute
|
|
# Filter syntax: https://github.com/Microsoft/vstest-docs/blob/master/docs/filter.md
|
|
NONFLAKY_FILTER="Flaky:All!=true&Flaky:Helix:All!=true&Flaky:Helix:Queue:All!=true&Flaky:Helix:Queue:$HELIX!=true"
|
|
echo "Running non-flaky tests."
|
|
$DOTNET_ROOT/dotnet vstest $1 --logger:trx --TestCaseFilter:"$NONFLAKY_FILTER"
|
|
nonflaky_exitcode=$?
|
|
if [ $nonflaky_exitcode != 0 ]; then
|
|
echo "Non-flaky tests failed!" 1>&2
|
|
# DO NOT EXIT
|
|
fi
|
|
FLAKY_FILTER="Flaky:All=true|Flaky:Helix:All=true|Flaky:Helix:Queue:All=true|Flaky:Helix:Queue:$HELIX=true"
|
|
echo "Running known-flaky tests."
|
|
$DOTNET_ROOT/dotnet vstest $1 --logger:trx --TestCaseFilter:"$FLAKY_FILTER"
|
|
if [ $? != 0 ]; then
|
|
echo "Flaky tests failed!" 1>&2
|
|
# DO NOT EXIT
|
|
fi
|
|
|
|
exit $nonflaky_exitcode
|