1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147
|
language: "perl"
os:
- linux
- osx
perl:
- "5.10"
# Do a full clone to be sure we get the tags and can properly retrieve version
git:
depth: false
before_install:
|-
echo "Begin ‘before_install’ section of .travis.yml"
# If we aren't on MoarVM/MoarVM or it's a pull request we can't decode the deploy key
if [ ! "$TRAVIS_REPO_SLUG" = 'MoarVM/MoarVM' ] || [ ! "$TRAVIS_PULL_REQUEST" = "false" ]; then
export COVERAGE=''; export MOCK_COVERAGE=1;
fi
if [ "$COVERAGE" ]; then
# Put github's into known_hosts /* may not need this */
printf "github.com,192.30.255.112 ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAq2A7hRGmdnm9tUDbO9IDSwBK6TbQa+PXYPCPy6rbTrTtw7PHkccKrpp0yVhp5HdEIcKr6pLlVDBfOLX9QUsyCOV0wzfjIJNlGEYsdlLJizHhbn2mUjvSAHQqZETYP81eFzLQNnPHt4EVVUh7VfDESU84KezmD5QlWpXLmvU31/yMf+Se8xhHTvKSCZIFImWwoG6mbUoWf9nzpIoaSjB+weqqUUmpaaasXVal72J+UX2B+2RPW3RcT0eOzQgqlJL3RKrTJvdsjE3JEAvGq3lGHSZXy28G3skua2SmVi/w4yCE6gbODqnTWlg7+wC604ydGXA8VJiS5ap43JXiUFFAaQ==\n" >> ~/.ssh/known_hosts
# Decrypt deploy_key using Travis *magic* variables
eval 'openssl aes-256-cbc -K $encrypted_b77ce3a1cc5c_key -iv $encrypted_b77ce3a1cc5c_iv -in ./tools/gh-pages-deploy_key.enc -out deploy_key -d'
# Now that it's decrypted, clear the keys so it can't leak
export encrypted_b77ce3a1cc5c_key=""
export encrypted_b77ce3a1cc5c_iv=""
chmod 600 deploy_key # Change perms or ssh-agent will get mad at us
eval $(ssh-agent -s) # Run the code that ssh-agent -s gives back to setup ENV
# Decrypted key has no password, but it will still ask for one. Use expect program to interact with it non-interactively
expect -c 'spawn ssh-add ./deploy_key; expect "enter passphrase for"; send "\n"; expect "Identity added:"; interact'
fi
install:
- echo "Begin ‘install’ section of .travis.yml"
addons:
apt:
sources:
- sourceline: 'ppa:ubuntu-toolchain-r/test'
packages:
- expect
- libffi-dev
- gdb
- llvm
- clang
before_script:
- echo "Begin ‘before_script’ section of .travis.yml"
- uname -a
- gcc --version
- clang --version
# Fun function that finds files in /usr/bin naming as foo-4.2 for example
# and returns the highest version. Travis CI installs newer versions under
# their own verison numbers.
- find_latest_version () { versioned=$(ls /usr/bin | grep -Ee "^$1(\-[0-9.]+)?$" | sort -r | head -n 1;); if [ "$versioned" ]; then printf "%s" "$versioned"; elif [ -f "/usr/bin/$1" ]; then printf "%s" "/usr/bin/$1"; fi; }
# MacOS's readlink doesn't support -f, so use our own solution
- resolve_folder () { O="$(pwd -P)"; D="$(dirname $1)"; T="$(basename $1)"; cd -- "$D" && cd -- "$T" && pwd -P; cd -- "$O" > /dev/null; }
- find_latest_version llvm-profdata
- find_latest_version llvm-cov
# Find the latest clang that is on the system
- CLANG_LATEST=$(find_latest_version clang)
- if [ ! "$CLANG_LATEST" = 'clang' ]; then eval "$CLANG_LATEST --version"; fi
- if [ "$USE_CLANG_LATEST" ]; then echo "Using $CLANG_LATEST due to build setting"; CC="$CLANG_LATEST"; fi
# Generic debug and optimization settings that are used for all builds except
# the coverage builds
- MVM_debug="--debug"; MVM_optimize="--optimize"
- if [ "$COVERAGE" ] || [ "$MOCK_COVERAGE" ]; then MVM_debug="--debug=3"; MVM_optimize="--optimize=0"; fi
- if [ "$TRAVIS_OS_NAME" == "linux" ] ; then sudo apt-get update -qq || sudo apt-get update -qq ; fi
- git clone --depth 1 git://github.com/perl6/nqp
script:
- echo "Begin ‘script’ section of .travis.yml"
# Enable coredumps
- if [ "$TRAVIS_OS_NAME" == "linux" ]; then ulimit -c unlimited; fi
- export MOAR_PREFIX="/tmp/moar"; export MOAR_FOLDER="$TRAVIS_BUILD_DIR"
- export NQP_FOLDER="$(resolve_folder ./nqp)"
# Set location for core dumps
- if [ "$TRAVIS_OS_NAME" == "linux" ]; then sudo bash -c "echo \"${MOAR_PREFIX}/core.%p.%E\" > /proc/sys/kernel/core_pattern"; sudo cat /proc/sys/kernel/core_pattern; fi
- echo "perl Configure.pl --prefix=$MOAR_PREFIX $MVM_OPTIONS --cc=\"$CC\" $MVM_debug $MVM_optimize;"
- perl Configure.pl --prefix=$MOAR_PREFIX $MVM_OPTIONS --cc="$CC" $MVM_debug $MVM_optimize;
- make -j2 install;
- cd -- "$NQP_FOLDER";
- echo "perl Configure.pl --prefix=$MOAR_PREFIX --backends=moar;"
- perl Configure.pl --prefix=$MOAR_PREFIX --backends=moar;
- make
- make test;
- cd -- "$MOAR_FOLDER"
- if [ "$COVERAGE" ]; then git clone --depth 1 'https://github.com/samcv/MoarVM-cover.git' && cp -v MoarVM-cover/html-cover.sh . && cp -v MoarVM-cover/nqp-profile ./nqp/ && cp -v MoarVM-cover/merge-profraw.sh ./nqp/ && ./html-cover.sh 2; fi
after_success:
- echo "Begin ‘after_success’ section of .travis.yml"
- cd "$TRAVIS_BUILD_DIR"
- if [ "$COVERAGE" ]; then ./tools/update-gh-pages.sh; fi
after_failure:
# On failure, dump all ENV vars, in case we need to look at them (doesn't print if our secrets are defined)
- if [ ! "$encrypted_b77ce3a1cc5c_key" ] && [ ! "$encrypted_b77ce3a1cc5c_iv" ]; then printenv; fi
# If we have any coredumps, print out the traces with gdb
- for i in $(find "${MOAR_PREFIX}" -maxdepth 1 -name 'core*' -print); do gdb "${MOAR_PREFIX}/bin/moar" "${i}" -ex "thread apply all bt" -ex "set pagination 0" -batch; done;
branches:
only:
- master
- coverage
- /smoke-me/
notifications:
irc:
branches:
except:
- gh-pages
channels:
- "irc.freenode.net#moarvm"
on_success: change
on_failure: always
template:
- "MoarVM build %{result}. %{author} '%{commit_message}'"
- "%{build_url} %{compare_url}"
env:
matrix:
- MVM_OPTIONS="--no-jit" CC='gcc'
- MVM_OPTIONS="" CC='gcc'
- MVM_OPTIONS="--no-jit" CC='clang'
- MVM_OPTIONS="" CC='clang'
- MVM_OPTIONS="--has-libffi --no-jit" CC='gcc'
- MVM_OPTIONS="--has-libffi" CC='gcc'
- MVM_OPTIONS="--has-libffi --no-jit" CC='clang'
- MVM_OPTIONS="--has-libffi" CC='clang'
- MVM_OPTIONS="--compiler=clang --coverage --optimize=0 --debug=3" COVERAGE=1 USE_CLANG_LATEST=1 CC='clang'
matrix:
exclude:
- os: osx
env: MVM_OPTIONS="--has-libffi --no-jit" CC='gcc'
- os: osx
env: MVM_OPTIONS="--has-libffi" CC='gcc'
# - os: osx
# env: MVM_OPTIONS="--no-jit" CC='gcc'
# - os: osx
# env: MVM_OPTIONS="" CC='gcc'
- os: osx
env: MVM_OPTIONS="--has-libffi --no-jit" CC='clang'
- os: osx
env: MVM_OPTIONS="--has-libffi" CC='clang'
- os: osx
env: MVM_OPTIONS="--compiler=clang --coverage --optimize=0 --debug=3" COVERAGE=1 USE_CLANG_LATEST=1 CC='clang'
allow_failures:
- os: linux
env: MVM_OPTIONS="--compiler=clang --coverage --optimize=0 --debug=3" COVERAGE=1 USE_CLANG_LATEST=1 CC='clang'
|