2013-07-22 13:36:02 +00:00
language : cpp
2014-05-02 04:10:17 +00:00
cache : apt
2013-07-22 13:36:02 +00:00
env :
2013-08-20 03:41:54 +00:00
global :
2014-05-02 04:10:17 +00:00
# GH_TOKEN=[secure] (to push to osx/windows repo under soonhokong)
- secure : "bDcZ1BusPgeFcilXBXqJ+aLWmCD6ET6SY6GaIDz66zFFVvHULkr8PcGQgKHw/VxH4Kbll52hkKwYgKhXyBF+VlHiyAxQHzlr17honzIl42vbz+tC5qr4/oDASolqayUtz9xJqNOFbTwvh5EHZLbG5hjudSdGE8LX3QC6IN7wYy8="
# DROPBOX_KEY=[secure] (to send binaries to dropbox, "access_token")
- secure : "CyASf1F7hGwB85jUQOfDoNBQSouSayP4BVvjqAJdRxirui/oyw2sJ02HC6ZTM+LO+ZyWy3eJOGwe81z6PEQFzovv9C8VLRbhV8Tk7aN+nQTCyyKLoxsON/T5PO/C74ZSu5hTNMwnHrbdphc88Y4ZrQqL2M3cTWT5nVFCshEq6IM="
# REPO=BLESSED (to perform extra stuff only for pushes to the blessed repo)
- secure : "iZEcYPaxqGRQs7loHwO88DlewbRngBwoNGfo438jabh0adF3y9zCPw0tcAtp6IJuCw8E6QVoM9JMwoQRvPbnqBelFjpXH+U3eYdaeeZRkBkyOthTWzzdwEexlnK7dXVEc+gTDjh2NBD9juXKDSJ5xOF1HfhEJaMXSLairnhpL6k="
# COVERALLS_REPO_TOKEN=[secure] (from https://coveralls.io/r/leanprover/lean)
- secure : "j14U5pV2qkArCTt4MdI+rYe9MzcIcoMYrPX3Kp4bFNAyxfTALHG25bZUaEyqBJKPevch02+i8hs3I/+b9Iue0j8be8hjy7GSKDEkhbd8HIWJMvMBM1Y+h88ZPTvTiEB9OCbHa6PrETN+3WO8cSe3PufWO7cwoOqzWuY440ZZqSM="
2014-05-04 21:49:32 +00:00
# BB_TOKEN=[secure] (to push to https://bitbucket.org/leanprover/lean for backup & email diff)
- secure : "NvPi430kKhteshcxiYP4oHbMFaSiz6bmoENA55sxD7bI0EmsKvuRJFPfFr3g8gl9hNnuNABOTK4xNcWjNDRtHBjnGYHytyaYLEYjpNGTlmTzc21q/FheWL32K2rkvvaRa0ZrDt8p1k1lr07Z69oFFIGCigAdcTCEhMO9Clxlxts="
2013-07-22 13:36:02 +00:00
matrix :
2013-11-17 08:04:37 +00:00
# =======================================================
# TESTCOV Build
# =======================================================
2015-05-11 20:15:34 +00:00
# TC. g++-4.9 | DEBUG | CDASH
- CMAKE_CXX_COMPILER=g++-4.9
2013-11-17 08:04:37 +00:00
CMAKE_BUILD_TYPE=Debug
2015-03-30 22:32:48 +00:00
TESTCOV=OFF
2013-11-17 08:04:37 +00:00
PUSH_TO_CDASH=TRUE
TCMALLOC=OFF
2013-12-13 20:07:19 +00:00
LUA=52
2014-09-29 19:44:29 +00:00
CONSERVE_MEMORY=ON
2013-11-17 08:04:37 +00:00
# =======================================================
# DEBUG Build
# =======================================================
# D1. clang++-3.3 | DEBUG | TCMALLOC | CDASH
- CMAKE_CXX_COMPILER=clang++-3.3
2015-03-30 22:32:48 +00:00
CMAKE_BUILD_TYPE=Debug
2013-11-17 08:04:37 +00:00
TCMALLOC=ON
PUSH_TO_CDASH=TRUE
2013-12-13 20:07:19 +00:00
LUA=52
2015-05-11 20:15:34 +00:00
# D2. g++-4.9 | DEBUG | TCMALLOC | CDASH + TRIGGERS
- CMAKE_CXX_COMPILER=g++-4.9
2015-03-30 22:32:48 +00:00
CMAKE_BUILD_TYPE=Debug
2013-11-17 08:04:37 +00:00
TRIGGER_BB=TRUE
TRIGGER_OSX=TRUE
TRIGGER_WINDOWS=TRUE
TCMALLOC=ON
PUSH_TO_CDASH=TRUE
2013-12-13 20:07:19 +00:00
LUA=52
2014-09-29 19:44:29 +00:00
CONSERVE_MEMORY=ON
2013-11-17 08:04:37 +00:00
# D3. clang++-3.3 | DEBUG
- CMAKE_CXX_COMPILER=clang++-3.3
2015-03-30 22:32:48 +00:00
CMAKE_BUILD_TYPE=Debug
2013-11-17 08:04:37 +00:00
TCMALLOC=OFF
PUSH_TO_CDASH=TRUE
2013-12-13 20:07:19 +00:00
LUA=52
2015-05-11 20:15:34 +00:00
# D4. g++-4.9 | DEBUG
- CMAKE_CXX_COMPILER=g++-4.9
2015-03-30 22:32:48 +00:00
CMAKE_BUILD_TYPE=Debug
2013-11-17 08:04:37 +00:00
TCMALLOC=OFF
PUSH_TO_CDASH=TRUE
2013-12-13 20:07:19 +00:00
LUA=52
2014-09-29 19:44:29 +00:00
CONSERVE_MEMORY=ON
2013-11-17 08:04:37 +00:00
# =======================================================
# RELEASE Build
# =======================================================
# R1. clang++-3.3 | RELEASE | TCMALLOC | CDASH
- CMAKE_CXX_COMPILER=clang++-3.3
2015-03-30 22:32:48 +00:00
CMAKE_BUILD_TYPE=Release
2013-11-17 08:04:37 +00:00
TCMALLOC=ON
PUSH_TO_CDASH=TRUE
2013-12-13 20:07:19 +00:00
LUA=52
2015-05-11 20:15:34 +00:00
# R2. g++-4.9 | RELEASE | TCMALLOC | CDASH + UPLOAD=>DROPBOX
- CMAKE_CXX_COMPILER=g++-4.9
2015-03-30 22:32:48 +00:00
CMAKE_BUILD_TYPE=Release
2013-11-17 08:04:37 +00:00
TCMALLOC=ON
UPLOAD=linux_tcmalloc
PUSH_TO_CDASH=TRUE
2013-12-13 20:07:19 +00:00
LUA=52
2013-12-26 07:25:09 +00:00
PACKAGE=TRUE
2014-09-29 19:44:29 +00:00
CONSERVE_MEMORY=ON
2013-11-17 08:04:37 +00:00
# R3. clang++-3.3 | RELEASE
- CMAKE_CXX_COMPILER=clang++-3.3
2015-03-30 22:32:48 +00:00
CMAKE_BUILD_TYPE=Release
2013-11-17 08:04:37 +00:00
TCMALLOC=OFF
PUSH_TO_CDASH=TRUE
2013-12-13 20:07:19 +00:00
LUA=52
2015-05-11 20:15:34 +00:00
# R4. g++-4.9 | RELEASE | UPLOAD=>DROPBOX
- CMAKE_CXX_COMPILER=g++-4.9
2015-03-30 22:32:48 +00:00
CMAKE_BUILD_TYPE=Release
2013-11-17 08:04:37 +00:00
TCMALLOC=OFF
UPLOAD=linux
PUSH_TO_CDASH=TRUE
2013-12-13 20:07:19 +00:00
LUA=52
2014-09-29 19:44:29 +00:00
CONSERVE_MEMORY=ON
2013-11-17 08:04:37 +00:00
# =======================================================
2013-09-13 21:51:39 +00:00
# DOXYGEN Build
# =======================================================
2015-05-11 20:15:34 +00:00
# DOC. g++-4.9 | DEBUG | TCMALLOC | DOXYGEN=>DROPBOX
- CMAKE_CXX_COMPILER=g++-4.9
2013-09-15 08:50:23 +00:00
CMAKE_BUILD_TYPE=DOXYGEN
2013-09-15 07:39:57 +00:00
BUILD_DOXYGEN=TRUE
2013-09-20 20:45:10 +00:00
TCMALLOC=OFF
2013-12-13 20:07:19 +00:00
LUA=52
2014-09-29 19:44:29 +00:00
CONSERVE_MEMORY=ON
2013-12-13 20:07:19 +00:00
# =======================================================
# Different Lua Versions
# =======================================================
2015-05-11 20:15:34 +00:00
# L51. g++-4.9 | RELEASE | | CDASH
- CMAKE_CXX_COMPILER=g++-4.9
2015-03-30 22:32:48 +00:00
CMAKE_BUILD_TYPE=Release
2013-12-13 20:07:19 +00:00
TCMALLOC=OFF
UPLOAD=linux
PUSH_TO_CDASH=TRUE
LUA=51
2014-09-29 19:44:29 +00:00
CONSERVE_MEMORY=ON
2015-05-11 20:15:34 +00:00
# LJIT. g++-4.9 | RELEASE | | CDASH
- CMAKE_CXX_COMPILER=g++-4.9
2015-03-30 22:32:48 +00:00
CMAKE_BUILD_TYPE=Release
2013-12-13 20:07:19 +00:00
TCMALLOC=OFF
UPLOAD=linux
PUSH_TO_CDASH=TRUE
LUA=JIT
2014-09-29 19:44:29 +00:00
CONSERVE_MEMORY=ON
2013-07-22 13:36:02 +00:00
install :
2013-08-08 21:02:09 +00:00
- until sudo add-apt-repository --yes ppa:ubuntu-toolchain-r/test; do echo retry; done
- until sudo add-apt-repository --yes ppa:h-rayflood/llvm; do echo retry; done
2013-09-04 07:52:42 +00:00
- until sudo add-apt-repository --yes ppa:kalakris/cmake; do echo retry; done
2013-08-08 21:02:09 +00:00
- until sudo apt-get -qq update; do echo retry; done
2013-09-20 20:45:10 +00:00
- if [[ $TCMALLOC == ON ]]; then until sudo add-apt-repository --yes ppa:agent-8131/ppa && sudo apt-get -qq update && sudo apt-get -qq install libgoogle-perftools-dev; do echo retry; done; fi
2013-08-08 21:02:09 +00:00
- until sudo apt-get -qq install libgmp-dev libmpfr-dev; do echo retry; done
2013-09-15 19:22:20 +00:00
- until sudo apt-get -qq install cmake python; do echo retry; done
2013-12-13 20:07:19 +00:00
- if [[ $LUA == 52 ]]; then
until sudo apt-get -qq install liblua5.2.0 lua5.2-0 lua5.2-dev; do echo retry; done;
fi
- if [[ $LUA == 51 ]]; then
2013-12-13 22:54:01 +00:00
until sudo apt-get -qq install liblua5.1-0 liblua5.1-0-dev lua5.1; do echo retry; done;
2013-12-13 20:07:19 +00:00
fi
- if [[ $LUA == JIT ]]; then
2013-12-23 21:42:24 +00:00
until sudo add-apt-repository --yes ppa:miurahr/openresty-devel; do echo retry; done;
2013-12-23 20:35:51 +00:00
until sudo apt-get -qq update; do echo retry; done;
2013-12-13 22:54:01 +00:00
until sudo apt-get -qq install libluajit-5.1-dev luajit; do echo retry; done;
2013-12-13 20:07:19 +00:00
fi
2013-09-15 18:53:33 +00:00
- wget http://dl.dropboxusercontent.com/u/203889738/gcc/ninja.tar.gz;
tar xfz ninja.tar.gz;
cd ninja;
2013-09-15 19:22:20 +00:00
./bootstrap.py > /dev/null 2>&1;
2013-09-15 18:53:33 +00:00
sudo cp -v ninja /usr/bin/;
cd ..;
2015-05-11 20:15:34 +00:00
- until sudo apt-get -qq install libstdc++-4.9-dev; do echo retry; done
2014-05-02 04:10:17 +00:00
- if [[ $REPO == BLESSED && $MEMCHECK == TRUE ]]; then
2013-09-04 04:55:40 +00:00
sudo apt-get -qq install valgrind;
fi
2015-05-11 20:15:34 +00:00
- if [[ $CMAKE_CXX_COMPILER == g++-4.9 ]]; then until sudo apt-get -qq install g++-4.9; do echo retry; done fi
2014-09-10 16:47:43 +00:00
- if [[ $CMAKE_CXX_COMPILER == clang++-3.3 ]]; then until sudo apt-get -qq install clang-3.3; do echo retry; done fi
2014-05-02 04:10:17 +00:00
- if [[ $REPO == BLESSED && ($UPLOAD || $BUILD_DOXYGEN == TRUE) ]]; then
2013-08-20 03:41:54 +00:00
sudo apt-get -qq install python python-pip;
sudo pip install dropbox;
fi
2013-09-27 05:24:24 +00:00
- if [[ $TESTCOV == ON ]]; then
2015-03-05 18:51:03 +00:00
wget http://downloads.sourceforge.net/ltp/lcov-1.11.tar.gz;
tar xvfz lcov-1.11.tar.gz;
2015-03-30 22:32:48 +00:00
sudo make -C lcov-1.11 install
2015-03-05 18:51:03 +00:00
rm -rf lcov-1.11.tar.gz lcov-1.11;
2015-05-11 20:15:34 +00:00
sudo cp -v `which gcov-4.9` `which gcov`;
2013-09-27 05:24:24 +00:00
fi
2013-08-20 03:41:54 +00:00
2013-09-11 00:05:14 +00:00
before_script :
2014-05-04 21:49:32 +00:00
- if [[ $REPO == BLESSED && $TRIGGER_BB == TRUE ]]; then
git fetch --unshallow;
git push -q https://soonhok:${BB_TOKEN}@bitbucket.org/leanprover/lean.git +HEAD:master;
fi
2014-05-02 04:10:17 +00:00
- if [[ $REPO == BLESSED && $TRIGGER_OSX == TRUE ]]; then
2013-08-22 19:12:32 +00:00
MSG=`git log --pretty=oneline --abbrev-commit -n 1 | cut -d ' ' -f 2-`;
cp .travis.yml /tmp/.travis.temp.yml;
cp .travis.osx.yml .travis.yml;
git config --global user.email "notifications@travis-ci.org";
git config --global user.name "Travis CI";
git add .travis.yml;
git commit -m "$MSG";
git push -q https://soonhokong:${GH_TOKEN}@github.com/soonhokong/lean-osx.git +HEAD:master;
mv /tmp/.travis.temp.yml .travis.yml;
git reset --hard HEAD~;
fi
2014-05-02 04:10:17 +00:00
- if [[ $REPO == BLESSED && $TRIGGER_WINDOWS == TRUE ]]; then
2013-08-22 19:12:32 +00:00
MSG=`git log --pretty=oneline --abbrev-commit -n 1 | cut -d ' ' -f 2-`;
cp .travis.yml /tmp/.travis.temp.yml;
cp .travis.windows.yml .travis.yml;
git config --global user.email "notifications@travis-ci.org";
git config --global user.name "Travis CI";
git add .travis.yml;
git commit -m "$MSG";
2013-08-22 23:48:05 +00:00
git push -q https://soonhokong:${GH_TOKEN}@github.com/soonhokong/lean-windows.git +HEAD:master;
2013-08-22 19:12:32 +00:00
mv /tmp/.travis.temp.yml .travis.yml;
git reset --hard HEAD~;
fi
2013-09-11 00:05:14 +00:00
script :
- mkdir -p build
- cd build
2015-03-30 22:32:48 +00:00
- if [[ $CMAKE_BUILD_TYPE == Release && $CMAKE_CXX_COMPILER=clang++-3.3 ]]; then
2013-09-27 20:53:01 +00:00
GENERATOR=;
2013-09-15 19:22:20 +00:00
else
2013-09-27 20:53:01 +00:00
GENERATOR=-GNinja;
fi
- if [[ $TESTCOV != ON ]]; then
TESTCOV=OFF;
2013-09-15 19:22:20 +00:00
fi
2014-09-29 19:44:29 +00:00
- /usr/bin/cmake -DIGNORE_SORRY=ON -DCONSERVE_MEMORY=${CONSERVE_MEMORY} -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE} -DTESTCOV=${TESTCOV} -DTCMALLOC=${TCMALLOC} -DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER} ${GENERATOR} -DCMAKE_PROGRAM_PATH=/usr/bin ../src;
2015-03-30 22:32:48 +00:00
- if [[ $CMAKE_BUILD_TYPE == Debug || $CMAKE_BUILD_TYPE == Release || $TESTCOV == ON ]]; then
2013-09-11 00:05:14 +00:00
SITE=Ubuntu12.04@Travis;
2015-03-30 22:32:48 +00:00
if [[ $CMAKE_BUILD_TYPE == Release ]]; then
2013-09-11 00:05:14 +00:00
BUILD_TYPE=Release;
else
BUILD_TYPE=Debug;
fi;
2013-12-13 20:07:19 +00:00
LUA_VERSION=LUA_${LUA};
BUILD_NAME=${TRAVIS_BRANCH}_${CMAKE_CXX_COMPILER}_${BUILD_TYPE}_${LUA_VERSION};
2013-09-27 19:22:44 +00:00
if [[ $TCMALLOC == ON ]]; then
BUILD_NAME=${BUILD_NAME}_TC;
fi;
2013-09-11 00:05:14 +00:00
CONFIG_FILE=DartConfiguration.tcl;
sed -i "s/^Site:.*/Site:$SITE/" $CONFIG_FILE;
sed -i "s/BuildName:.*/BuildName:$BUILD_NAME/" $CONFIG_FILE;
2013-09-13 21:51:39 +00:00
if [[ $MEMCHECK == TRUE ]]; then
2014-09-26 23:41:18 +00:00
ninja -j 1;
2013-09-13 21:51:39 +00:00
else
ctest -D ExperimentalConfigure;
sed -i "s/^Site:.*/Site:$SITE/" $CONFIG_FILE;
sed -i "s/BuildName:.*/BuildName:$BUILD_NAME/" $CONFIG_FILE;
ctest -D ExperimentalBuild -VV;
2013-09-29 23:29:02 +00:00
yes "C" | ctest -D ExperimentalTest -VV | ../script/demangle_cpptype.py;
2013-09-13 21:51:39 +00:00
fi;
2013-09-11 00:05:14 +00:00
fi
- cd ..
after_script :
2013-09-04 18:00:55 +00:00
- cd build
2014-05-02 04:10:17 +00:00
- if [[ $REPO == BLESSED && $TESTCOV == ON ]]; then
2013-09-04 23:00:53 +00:00
ctest -D ExperimentalCoverage;
2014-09-27 01:00:55 +00:00
ninja -j 1 cov;
2013-11-10 05:52:32 +00:00
npm install coveralls --save;
cat coverage.info.cleaned | ./node_modules/coveralls/bin/coveralls.js;
2013-09-04 23:00:53 +00:00
fi
2014-05-02 04:10:17 +00:00
- if [[ $REPO == BLESSED && $MEMCHECK == TRUE ]]; then
2013-09-17 01:14:55 +00:00
MEMCHECK_SUPP=`readlink -f ../src/memcheck.supp`;
CONFIG_FILE=DartConfiguration.tcl;
2013-09-17 01:51:59 +00:00
sed -i "s,^MemoryCheckSuppressionFile:\W*$,MemoryCheckSuppressionFile:$MEMCHECK_SUPP," $CONFIG_FILE;
2013-09-28 02:05:23 +00:00
ulimit -s unlimited;
2014-05-28 00:47:53 +00:00
yes "C" | ctest -D ExperimentalMemCheck -LE expensive -VV -I $MEMCHECK_RANGE | ../script/demangle_cpptype.py;
2013-09-04 18:00:55 +00:00
fi
2014-05-02 04:10:17 +00:00
- if [[ $REPO == BLESSED && $PUSH_TO_CDASH == TRUE ]]; then
2013-09-27 19:22:44 +00:00
GIT_COMMIT=`git log --oneline -n 1 | cut -d ' ' -f 1`;
GIT_SUBJECT=`git log --oneline -n 1 | cut -d ' ' -f 2-`;
2013-09-28 20:33:13 +00:00
GIT_SUBJECT=${GIT_SUBJECT//\"/\\\"};
GIT_SUBJECT=${GIT_SUBJECT//,/\,};
2013-09-27 19:22:44 +00:00
GIT_SUBJECT=$(echo -e $(printf '%q' "$GIT_SUBJECT"));
2013-09-28 20:33:13 +00:00
find Testing -name "*.xml" -exec sed -i "s,Generator=\".*\",Generator=\"${GIT_COMMIT}###${GIT_SUBJECT}\"," {} ";";
2013-09-29 23:29:02 +00:00
find Testing \( -name "LastTest_*.log" -o -name "LastDynamicAnalysis_*.log" \) -exec sh -c 'TMP=`mktemp /tmp/ctesttmp_XXXX`; ../script/demangle_cpptype.py {} > $TMP; mv -v $TMP {}' ";";
2013-09-04 18:00:55 +00:00
ctest -D ExperimentalSubmit;
fi
2014-05-02 04:10:17 +00:00
- if [[ $REPO == BLESSED && $PACKAGE == TRUE ]]; then
2013-12-26 07:57:13 +00:00
make package;
2013-12-26 07:25:09 +00:00
fi
2013-09-04 18:00:55 +00:00
- cd ..
2014-05-02 04:10:17 +00:00
- if [[ $REPO == BLESSED && $BUILD_DOXYGEN == TRUE ]]; then
2013-09-16 03:17:18 +00:00
sudo apt-get -qq install graphviz doxygen parallel;
2013-11-17 06:31:14 +00:00
script/doxygen.sh > /dev/null;
2013-09-15 07:39:57 +00:00
DOXYGEN_DIR=doc/html;
2013-09-16 03:17:18 +00:00
find $DOXYGEN_DIR -type f -name "*.md5" -exec rm {} ";";
2013-11-17 06:00:56 +00:00
find $DOXYGEN_DIR -type f | split -l 100 - doxygen_files.txt.;
2014-06-03 02:37:01 +00:00
ls -1 doxygen_files.txt.* | travis_wait parallel -u -j 10 ./script/dropbox_upload.py --destpath /Public --dropbox-token ${DROPBOX_KEY} --copylist {};
2013-08-20 03:41:54 +00:00
fi
2014-05-02 04:10:17 +00:00
- if [[ $REPO == BLESSED && $UPLOAD ]]; then
2013-08-20 03:41:54 +00:00
UPLOAD_DIR=bin;
BINARY=lean_${UPLOAD};
2013-09-15 07:54:43 +00:00
NOW=`TZ='America/Los_Angeles' date +"%Y%m%d_%H%M"`;
2013-09-11 00:05:14 +00:00
GIT_COMMIT=`git log --oneline -n 1 | cut -d ' ' -f 1`;
OS=linux;
2013-12-13 20:07:19 +00:00
LUA_VERSION=LUA_${LUA};
ARCHIVE_BINARY=${NOW}_${TRAVIS_BRANCH}_${GIT_COMMIT}_${OS}_${CMAKE_CXX_COMPILER}_${BUILD_TYPE}_${LUA_VERSION};
2013-09-20 20:45:10 +00:00
if [[ $TCMALLOC == ON ]]; then
2013-09-11 00:05:14 +00:00
ARCHIVE_BINARY=${ARCHIVE_BINARY}_tcmalloc;
fi;
2013-08-20 03:41:54 +00:00
mkdir ${UPLOAD_DIR};
2014-05-02 04:10:17 +00:00
if [[ $REPO == BLESSED && $PACKAGE == TRUE ]]; then
2013-12-26 07:34:22 +00:00
cp -v build/lean*.tar.gz ${UPLOAD_DIR}/;
2013-12-26 07:38:16 +00:00
fi;
2013-09-13 21:51:39 +00:00
cp -v build/shell/lean ${UPLOAD_DIR}/${BINARY};
2013-09-15 07:54:43 +00:00
tar cvfz ${UPLOAD_DIR}/${ARCHIVE_BINARY}.tar.gz ${UPLOAD_DIR}/${BINARY};
2013-09-15 07:39:57 +00:00
script/dropbox_upload.py --srcpath ${UPLOAD_DIR} --destpath /Public/${UPLOAD_DIR} --dropbox-token ${DROPBOX_KEY};
2013-08-20 03:41:54 +00:00
fi
2013-07-22 13:36:02 +00:00
notifications :
email :
recipients :
2014-05-02 21:21:18 +00:00
- lean-build@googlegroups.com
2015-03-30 22:32:48 +00:00
on_success : change
2013-07-22 13:36:02 +00:00
on_failure : always