diff --git a/.travis.yml b/.travis.yml index b80b955eac..b5511b6791 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,72 +1,69 @@ # Control file for the Travis autobuilder -# http://about.travis-ci.org/docs/user/build-configuration/ +# http://docs.travis-ci.com/user/build-configuration/ language: c compiler: - gcc - clang + - cov-build env: global: # -- BEGIN Coverity Scan ENV # Used by https://scan.coverity.com/scripts/travisci_build_coverity_scan.sh # The build command with all of the arguments that you would apply to a manual `cov-build` - COVERITY_SCAN_BUILD_COMMAND="make" - - PROJECT_NAME="ClusterLabs/pacemaker" - # Email address for notifications related to this build - OWNER_EMAIL="andrew@beekhof.net" # Regular expression selects on which branches to run analysis # Be aware of quotas. Do not run on every branch/commit - COVERITY_SCAN_BRANCH_PATTERN="1.1" # COVERITY_SCAN_TOKEN via "travis encrypt" using the repo's public key - secure: "qnrF7L8RejLUY7URdNe7XP4Hu4R55C0tvAuMRg4EjVtelOpw+nIgA7BLiX19q/70VjFuKcGnMhW28TdYl0uwMMdWKKxmwTim04Sy3UfOE2BPeuQOBphr+8s9gd0U1MO8j2dZ84A40t5Mkk946wWZwT0okpjOr/PfBOZkU3o87FM=" # -- END Coverity Scan ENV - # http://docs.travis-ci.com/user/build-configuration/#The-Build-Matrix - matrix: - - COVERITY_SCAN=0 - - COVERITY_SCAN=1 - # sudo add-apt-repository ppa:hotot-team before_install: - - whoami - - env | sort - - sudo bash -c 'echo "deb http://archive.ubuntu.com/ubuntu/ raring universe" >> /etc/apt/sources.list' + - sudo add-apt-repository "deb http://archive.ubuntu.com/ubuntu/ raring universe" - sudo apt-get update -qq install: - sudo apt-get install -qq automake autoconf chrpath libglib2.0-dev perl net-tools python libtool libxml2-dev bison flex uuid-dev libbz2-dev zlib1g-dev libltdl3-dev libgnutls-dev python-central python-dev libpam0g-dev libncurses5-dev libcorosync-dev libxslt1-dev libdbus-1-dev - sudo apt-get install -qq cluster-glue-dev heartbeat-dev libheartbeat2-dev - sudo apt-get install -qq libqb-dev/raring before_script: +# Save and restore CC so that ./configure can pass + - export CC_SAVED=$CC + - export CC=`echo ${CC} | sed s/cov-build/gcc/` - ./autogen.sh - ./configure + - export CC=$CC_SAVED script: -- if test ${COVERITY_SCAN} = 0; then make; fi -- if test ${COVERITY_SCAN} = 1; then bash travisci_build_coverity_scan.sh; fi +- if test ${CC} != cov-build; then make && ./BasicSanity.sh -V; fi +- if test ${CC} = cov-build; then export CC=gcc; bash ./travisci_build_coverity_scan.sh; fi #after_script: -after_success: -- if test ${COVERITY_SCAN} = 0; then ./BasicSanity.sh -V; fi +#after_success: after_failure: - lsb_release -a - sudo cat /etc/apt/sources.list + - whoami + - env | sort notifications: irc: "irc.freenode.org#pcmk" email: recipients: - andrew@beekhof.net # whitelist branches: only: - master diff --git a/travisci_build_coverity_scan.sh b/travisci_build_coverity_scan.sh index 43256ce331..b8b24d28ca 100644 --- a/travisci_build_coverity_scan.sh +++ b/travisci_build_coverity_scan.sh @@ -1,98 +1,102 @@ #!/bin/sh set -e export RED="\033[33;1m" export NONE="\033[0m" +if [ -z "$PROJECT_NAME" ]; then + PROJECT_NAME=${TRAVIS_REPO_SLUG} +fi + # Environment check echo -e "${RED}Note: PROJECT_NAME and COVERITY_SCAN_TOKEN are available on Project Settings page on scan.coverity.com${NONE}" [ -z "$PROJECT_NAME" ] && echo "ERROR: PROJECT_NAME must be set" && exit 1 [ -z "$OWNER_EMAIL" ] && echo "ERROR: OWNER_EMAIL must be set" && exit 1 [ -z "$COVERITY_SCAN_BRANCH_PATTERN" ] && echo "ERROR: COVERITY_SCAN_BRANCH_PATTERN must be set" && exit 1 [ -z "$COVERITY_SCAN_BUILD_COMMAND" ] && echo "ERROR: COVERITY_SCAN_BUILD_COMMAND must be set" && exit 1 PLATFORM=`uname` TOOL_ARCHIVE=/tmp/cov-analysis-${PLATFORM}.tgz TOOL_URL=https://scan.coverity.com/download/${PLATFORM} TOOL_BASE=/tmp/coverity-scan-analysis UPLOAD_URL="http://scan5.coverity.com/cgi-bin/upload.py" SCAN_URL="https://scan.coverity.com" # Do not run on pull requests if [ "${TRAVIS_PULL_REQUEST}" = "true" ]; then echo -e "${RED}INFO: Skipping Coverity Analysis: branch is a pull request.${NONE}" exit 0 fi # Verify this branch should run IS_COVERITY_SCAN_BRANCH=`ruby -e "puts '${TRAVIS_BRANCH}' =~ /\\A$COVERITY_SCAN_BRANCH_PATTERN\\z/ ? 1 : 0"` if [ "$IS_COVERITY_SCAN_BRANCH" = "1" ]; then echo -e "${RED}Coverity Scan configured to run on branch ${TRAVIS_BRANCH}${NONE}" else echo -e "${RED}Coverity Scan NOT configured to run on branch ${TRAVIS_BRANCH}${NONE}" exit 0 # Nothing to do, exit with success otherwise the build will be considered failed fi # If COVERITY_SCAN_TOKEN isn't set, then we're probably running from somewhere # other than ClusterLabs/pacemaker and coverity shouldn't be running anyway [ -z "$COVERITY_SCAN_TOKEN" ] && echo "${RED}ERROR: COVERITY_SCAN_TOKEN must be set${NONE}" && exit 0 # Verify upload is permitted AUTH_RES=`curl -s --form project="$PROJECT_NAME" --form token="$COVERITY_SCAN_TOKEN" $SCAN_URL/api/upload_permitted` if [ "$AUTH_RES" = "Access denied" ]; then echo -e "${RED}Coverity Scan API access denied. Check PROJECT_NAME and COVERITY_SCAN_TOKEN.${NONE}" exit 1 else AUTH=`echo $AUTH_RES | ruby -e "require 'rubygems'; require 'json'; puts JSON[STDIN.read]['upload_permitted']"` if [ "$AUTH" = "true" ]; then echo -e "${RED}Coverity Scan analysis authorized per quota.${NONE}" else WHEN=`echo $AUTH_RES | ruby -e "require 'rubygems'; require 'json'; puts JSON[STDIN.read]['next_upload_permitted_at']"` echo -e "${RED}Coverity Scan analysis NOT authorized until $WHEN.${NONE}" exit 1 fi fi if [ ! -d $TOOL_BASE ]; then # Download Coverity Scan Analysis Tool if [ ! -e $TOOL_ARCHIVE ]; then echo -e "${RED}Downloading Coverity Scan Analysis Tool...${NONE}" wget -nv -O $TOOL_ARCHIVE $TOOL_URL --post-data "project=$PROJECT_NAME&token=$COVERITY_SCAN_TOKEN" fi # Extract Coverity Scan Analysis Tool echo -e "${RED}Extracting Coverity Scan Analysis Tool...${NONE}" mkdir -p $TOOL_BASE pushd $TOOL_BASE tar xzf $TOOL_ARCHIVE popd fi TOOL_DIR=`find $TOOL_BASE -type d -name 'cov-analysis*'` export PATH=$TOOL_DIR/bin:$PATH # Build echo -e "${RED}Running Coverity Scan Analysis Tool...${NONE}" COV_BUILD_OPTIONS="" #COV_BUILD_OPTIONS="--return-emit-failures 8 --parse-error-threshold 85" RESULTS_DIR="cov-int" eval "${COVERITY_SCAN_BUILD_COMMAND_PREPEND}" COVERITY_UNSUPPORTED=1 cov-build --dir $RESULTS_DIR $COV_BUILD_OPTIONS $COVERITY_SCAN_BUILD_COMMAND # Upload results echo -e "${RED}Tarring Coverity Scan Analysis results...${NONE}" RESULTS_ARCHIVE=analysis-results.tgz tar czf $RESULTS_ARCHIVE $RESULTS_DIR SHA=`git rev-parse --short HEAD` echo -e "${RED}Uploading Coverity Scan Analysis results...${NONE}" curl \ --progress-bar \ --form project=$PROJECT_NAME \ --form token=$COVERITY_SCAN_TOKEN \ --form email=$OWNER_EMAIL \ --form file=@$RESULTS_ARCHIVE \ --form version=$SHA \ --form description="Travis CI build" \ $UPLOAD_URL