Skip to content
This repository was archived by the owner on Oct 12, 2022. It is now read-only.
/ druntime Public archive
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 2 additions & 3 deletions circle.yml
Original file line number Diff line number Diff line change
Expand Up @@ -7,11 +7,10 @@ dependencies:
test:
override:
- make -f posix.mak style
- ./circleci.sh setup-repos
- ./circleci.sh coverage:
parallel: true
timeout: 1200

post:
# CodeCov gets confused by stored .lst files
- rm -rf test/coverage/generated
- bash <(curl -s https://codecov.io/bash)
- ./circleci.sh codecov
73 changes: 52 additions & 21 deletions circleci.sh
Original file line number Diff line number Diff line change
Expand Up @@ -2,32 +2,41 @@

set -uexo pipefail

HOST_DMD_VER=2.068.2 # same as in dmd/src/posix.mak
HOST_DMD_VER=2.072.2 # same as in dmd/src/posix.mak
CURL_USER_AGENT="CirleCI $(curl --version | head -n 1)"
N=2
CIRCLE_NODE_INDEX=${CIRCLE_NODE_INDEX:-0}
CIRCLE_PROJECT_REPONAME=${CIRCLE_PROJECT_REPONAME:-druntime}

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

download() {
local url="$1"
local fallbackurl="$2"
local outputfile="$3"
for i in {0..4}; do
if curl -fsS -A "$CURL_USER_AGENT" --max-time 5 https://dlang.org/install.sh -O; then
if curl -fsS -A "$CURL_USER_AGENT" --max-time 5 "$url" -o "$outputfile" ||
curl -fsS -A "$CURL_USER_AGENT" --max-time 5 "$fallbackurl" -o "$outputfile" ; then
break
elif [ $i -ge 4 ]; then
sleep $((1 << $i))
else
echo 'Failed to download install script' 1>&2
echo "Failed to download script ${outputfile}" 1>&2
exit 1
fi
done
}

install_deps() {
if [ $MODEL -eq 32 ]; then
sudo apt-get update
sudo apt-get install g++-multilib
fi

download "https://dlang.org/install.sh" "https://nightlies.dlang.org/install.sh" "install.sh"

source "$(CURL_USER_AGENT=\"$CURL_USER_AGENT\" bash install.sh dmd-$HOST_DMD_VER --activate)"
$DC --version
Expand All @@ -51,27 +60,39 @@ clone() {
done
}

coverage() {
setup_repos() {
# set a default in case we run into rate limit restrictions
local base_branch=""
if [ -n "${CIRCLE_PR_NUMBER:-}" ]; then
local base_branch=$(curl -fsSL https://api.github.com/repos/dlang/$CIRCLE_PROJECT_REPONAME/pulls/$CIRCLE_PR_NUMBER | jq -r '.base.ref')
base_branch=$((curl -fsSL https://api.github.com/repos/dlang/$CIRCLE_PROJECT_REPONAME/pulls/$CIRCLE_PR_NUMBER || echo) | jq -r '.base.ref')
else
local base_branch=$CIRCLE_BRANCH
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/druntime.git
git fetch upstream
git checkout -f upstream/$base_branch
git merge -m "Automatic merge" $current_branch
local head=$(git rev-parse HEAD)
git fetch https://github.com/dlang/$CIRCLE_PROJECT_REPONAME.git $base_branch
git checkout -f FETCH_HEAD
local base=$(git rev-parse HEAD)
git config user.name 'CI'
git config user.email '<>'
git merge -m "Merge $head into $base" $head
fi

for proj in dmd ; 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
}

clone https://github.com/dlang/dmd.git ../dmd $base_branch --depth 1

coverage() {
# load environment for bootstrap compiler
source "$(CURL_USER_AGENT=\"$CURL_USER_AGENT\" bash ~/dlang/install.sh dmd-$HOST_DMD_VER --activate)"

Expand All @@ -81,7 +102,17 @@ coverage() {
TEST_COVERAGE="1" make -j$N -C . -f posix.mak MODEL=$MODEL unittest-debug
}

codecov()
{
# CodeCov gets confused by lst files which it can't matched
rm -rf test/runnable/extra-files
download "https://codecov.io/bash" "https://raw.githubusercontent.com/codecov/codecov-bash/master/codecov" "codecov.sh"
bash codecov.sh
}

case $1 in
install-deps) install_deps ;;
setup-repos) setup_repos ;;
coverage) coverage ;;
codecov) codecov ;;
esac