mirror of
https://github.com/dlang/phobos.git
synced 2025-04-27 13:40:20 +03:00

With DUB 1.6.0 (part of the DMD 2.077.0 release), DUB will retry downloads from the DUB registry and alternatively use fallback mirrors. ../dmd/src/posix.mak uses 2.072.0 atm, hence the bump of the host version.
147 lines
4.7 KiB
Bash
Executable file
147 lines
4.7 KiB
Bash
Executable file
#!/bin/bash
|
|
|
|
set -uexo pipefail
|
|
|
|
HOST_DMD_VER=2.072.2 # same as in dmd/src/posix.mak
|
|
DSCANNER_DMD_VER=2.077.0 # dscanner needs a more up-to-date version
|
|
CURL_USER_AGENT="CirleCI $(curl --version | head -n 1)"
|
|
DUB=${DUB:-$HOME/dlang/dub/dub}
|
|
N=2
|
|
CIRCLE_NODE_INDEX=${CIRCLE_NODE_INDEX:-0}
|
|
|
|
case $CIRCLE_NODE_INDEX in
|
|
0) MODEL=64 ;;
|
|
1) MODEL=32 ;;
|
|
esac
|
|
|
|
install_deps() {
|
|
if [ $MODEL -eq 32 ]; then
|
|
sudo apt-get update
|
|
sudo apt-get install g++-multilib
|
|
fi
|
|
|
|
for i in {0..4}; do
|
|
if curl -fsS -A "$CURL_USER_AGENT" --max-time 5 https://dlang.org/install.sh -O ||
|
|
curl -fsS -A "$CURL_USER_AGENT" --max-time 5 https://nightlies.dlang.org/install.sh -O ; then
|
|
break
|
|
elif [ $i -ge 4 ]; then
|
|
sleep $((1 << $i))
|
|
else
|
|
echo 'Failed to download install script' 1>&2
|
|
exit 1
|
|
fi
|
|
done
|
|
|
|
source "$(CURL_USER_AGENT=\"$CURL_USER_AGENT\" bash install.sh dmd-$HOST_DMD_VER --activate)"
|
|
$DC --version
|
|
env
|
|
}
|
|
|
|
# clone dmd and druntime
|
|
clone() {
|
|
local url="$1"
|
|
local path="$2"
|
|
local branch="$3"
|
|
for i in {0..4}; do
|
|
if git clone --branch "$branch" "$url" "$path" "${@:4}"; then
|
|
break
|
|
elif [ $i -lt 4 ]; then
|
|
sleep $((1 << $i))
|
|
else
|
|
echo "Failed to clone: ${url}"
|
|
exit 1
|
|
fi
|
|
done
|
|
}
|
|
|
|
setup_repos()
|
|
{
|
|
# set a default in case we run into rate limit restrictions
|
|
local base_branch=""
|
|
if [ -n "${CIRCLE_PR_NUMBER:-}" ]; then
|
|
base_branch=$((curl -fsSL https://api.github.com/repos/dlang/phobos/pulls/$CIRCLE_PR_NUMBER || echo) | jq -r '.base.ref')
|
|
else
|
|
base_branch=$CIRCLE_BRANCH
|
|
fi
|
|
base_branch=${base_branch:-"master"}
|
|
|
|
# merge upstream branch with changes, s.t. we check with the latest changes
|
|
if [ -n "${CIRCLE_PR_NUMBER:-}" ]; then
|
|
local current_branch=$(git rev-parse --abbrev-ref HEAD)
|
|
git config user.name dummyuser
|
|
git config user.email dummyuser@dummyserver.com
|
|
git remote add upstream https://github.com/dlang/phobos.git
|
|
git fetch upstream
|
|
git checkout -f upstream/$base_branch
|
|
git merge -m "Automatic merge" $current_branch
|
|
fi
|
|
|
|
for proj in dmd druntime ; do
|
|
if [ $base_branch != master ] && [ $base_branch != stable ] &&
|
|
! git ls-remote --exit-code --heads https://github.com/dlang/$proj.git $base_branch > /dev/null; then
|
|
# use master as fallback for other repos to test feature branches
|
|
clone https://github.com/dlang/$proj.git ../$proj master --depth 1
|
|
else
|
|
clone https://github.com/dlang/$proj.git ../$proj $base_branch --depth 1
|
|
fi
|
|
done
|
|
|
|
# load environment for bootstrap compiler
|
|
source "$(CURL_USER_AGENT=\"$CURL_USER_AGENT\" bash ~/dlang/install.sh dmd-$HOST_DMD_VER --activate)"
|
|
|
|
# build dmd and druntime
|
|
make -j$N -C ../dmd/src -f posix.mak MODEL=$MODEL HOST_DMD=$DMD all
|
|
make -j$N -C ../druntime -f posix.mak MODEL=$MODEL HOST_DMD=$DMD
|
|
}
|
|
|
|
# verify style guide
|
|
style_lint()
|
|
{
|
|
# dscanner needs a more up-to-date DMD version
|
|
source "$(CURL_USER_AGENT=\"$CURL_USER_AGENT\" bash ~/dlang/install.sh dmd-$DSCANNER_DMD_VER --activate)"
|
|
|
|
make -f posix.mak style_lint DUB=$DUB
|
|
}
|
|
|
|
# run unittest with coverage
|
|
coverage()
|
|
{
|
|
make -f posix.mak clean
|
|
# remove all existing coverage files (just in case)
|
|
rm -rf $(find -name '*.lst')
|
|
|
|
# Coverage information of the test runner can be missing for some template instatiations.
|
|
# https://issues.dlang.org/show_bug.cgi?id=16397
|
|
# ENABLE_COVERAGE="1" make -j$N -f posix.mak MODEL=$MODEL unittest-debug
|
|
|
|
# So instead we run all tests individually (hoping that that doesn't break any tests).
|
|
# -cov is enabled by the %.test target itself
|
|
make -j$N -f posix.mak $(find std etc -name "*.d" | sed "s/[.]d$/.test/")
|
|
|
|
# Remove coverage information from lines with non-deterministic coverage.
|
|
# These lines are annotated with a comment containing "nocoverage".
|
|
sed -i 's/^ *[0-9]*\(|.*nocoverage.*\)$/ \1/' ./*.lst
|
|
}
|
|
|
|
# extract publictests and run them independently
|
|
publictests()
|
|
{
|
|
# checkout a specific version of https://github.com/dlang/tools
|
|
if [ ! -d ../tools ] ; then
|
|
clone https://github.com/dlang/tools.git ../tools master
|
|
fi
|
|
git -C ../tools checkout df3dfa3061d25996ac98158d3bdb3525c8d89445
|
|
|
|
make -f posix.mak -j$N publictests DUB=$DUB
|
|
}
|
|
|
|
case $1 in
|
|
install-deps) install_deps ;;
|
|
setup-repos) setup_repos ;;
|
|
coverage) coverage ;;
|
|
publictests) publictests ;;
|
|
style_lint) style_lint ;;
|
|
# has_public_example has been removed and is kept for compatibility with older PRs
|
|
has_public_example) echo "OK" ;;
|
|
*) echo "Unknown command"; exit 1;;
|
|
esac
|