aboutsummaryrefslogtreecommitdiff
path: root/.travis.yml
blob: 3e9aaf913b384ca6f7ec4547342d0b006e820119 (plain)
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
# One may have a look at http://docs.travis-ci.com/user/installing-dependencies/

language: c

notifications:
  - email: true

sudo: false

cache:
  ccache: true
  directories:
    - $HOME/downloads

git:
  depth: 1000000

before_script:
  # Store the home repository
  - export MYHOME=$PWD

  # Download checkpatch.pl
  - export DST_KERNEL=$PWD/linux && mkdir -p $DST_KERNEL/scripts && cd $DST_KERNEL/scripts
  - wget https://raw.githubusercontent.com/torvalds/linux/master/scripts/checkpatch.pl && chmod a+x checkpatch.pl
  - wget https://raw.githubusercontent.com/torvalds/linux/master/scripts/spelling.txt
  - echo "invalid.struct.name" >const_structs.checkpatch
  - cd $MYHOME

  - export DL_DIR=$HOME/downloads
  - function _download() { url="$1"; f="${2:-$(basename $url)}"; if [ ! -e $DL_DIR/$f ] ; then mkdir -p $DL_DIR ; wget $url -O $DL_DIR/$f ; fi }
  - function download() { _download "$1" "" ; }

  # Travis assigns 2 CPU cores to the container-based environment, so -j3 is
  # a good concurrency level
  # https://docs.travis-ci.com/user/ci-environment/
  - export make="make -j3 -s"

  # Download  and build Git to be used by the checkpatch step
  # The Travis container-based infrastructure runs Ubuntu 12.04 (Precise) which
  # comes with git 1.8.5.6. The path exclusion syntax ':(exclude)' used below
  # requires a more recent version.
  - cd $HOME
  - _download https://github.com/git/git/archive/v2.9.3.tar.gz git-2.9.3.tar.gz
  - tar xf $DL_DIR/git-2.9.3.tar.gz
  - $make -C git-2.9.3 CC="ccache gcc" NO_CURL=1

  # Tools required for QEMU tests
  # 'apt-get install' cannot be used in the new container-based infrastructure
  # (which is the only allowing caching), so we just build from sources
  # bc is used during kernel configuration
  - cd $HOME
  - download http://ftp.gnu.org/gnu/bc/bc-1.06.tar.gz
  - tar xf $DL_DIR/bc-1.06.tar.gz
  - (cd bc-1.06 && CC="ccache gcc" ./configure --quiet && $make)
  - export PATH=${HOME}/bc-1.06/bc:$PATH
  # Tcl/Expect
  - download http://prdownloads.sourceforge.net/tcl/tcl8.6.4-src.tar.gz
  - tar xf $DL_DIR/tcl8.6.4-src.tar.gz
  - (cd tcl8.6.4/unix && ./configure --quiet --prefix=${HOME}/inst CC="ccache gcc" && $make install)
  - _download http://sourceforge.net/projects/expect/files/Expect/5.45/expect5.45.tar.gz/download expect5.45.tar.gz
  - tar xf $DL_DIR/expect5.45.tar.gz
  - (cd expect5.45 && ./configure --quiet --with-tcl=${HOME}/inst/lib --prefix=${HOME}/inst CC="ccache gcc" && $make expect && $make install)
  - export PATH=$HOME/inst/bin:$PATH
  # pycrypto 2.6.1 or later has Crypto.Signature, 2.4.1 does not. It is needed to sign the test TAs.
  - pip install --upgrade --user pycrypto
  - pip install --upgrade --user wand
  # Clone repositories for the QEMU test environment
  - mkdir -p $HOME/bin
  - (cd $HOME/bin && wget https://storage.googleapis.com/git-repo-downloads/repo && chmod +x repo)
  - export PATH=$HOME/bin:$PATH
  - mkdir $HOME/optee_repo
  - (cd $HOME/optee_repo && repo init -u https://github.com/OP-TEE/manifest.git </dev/null && repo sync --no-clone-bundle --no-tags -j 20)
  - (cd $HOME/optee_repo && mv optee_os optee_os_old && ln -s $MYHOME optee_os)
  - cd $MYHOME
  - git fetch https://github.com/OP-TEE/optee_os --tags
  - unset CC

  - export PATH=$HOME/git-2.9.3/:$DST_KERNEL/scripts/:$PATH
  - source ${HOME}/optee_repo/optee_os/scripts/checkpatch_inc.sh

script:
  - if [ "${COVERITY_SCAN_BRANCH}" == 1 ]; then
      echo "Skip script for Coverity";
      travis_terminate 0;
    fi

  # Run checkpatch.pl on:
  # - the tip of the branch if we're not in a pull request
  # - each commit in the development branch that's not in the target branch otherwise
  - if [ "$TRAVIS_PULL_REQUEST" == "false" ]; then checkpatch HEAD; else for c in $(git rev-list HEAD^1..HEAD^2); do checkpatch $c || failed=1; done; [ -z "$failed" ]; fi
  # If we have a pull request with more than 1 commit, also check the squashed commits
  # Useful to check if fix-up commits do indeed solve previous checkpatch errors
  - if [ "$TRAVIS_PULL_REQUEST" != "false" ]; then if [ "$(git rev-list --count HEAD^1..HEAD^2)" -gt 1 ]; then checkdiff $(git rev-parse HEAD^1) $(git rev-parse HEAD^2); fi; fi

  # Run regression tests (xtest in QEMU)
  - (cd ${HOME}/optee_repo/build && make toolchains COMPILE_LEGACY=y)
  - (cd ${HOME}/optee_repo/build && $make check COMPILE_LEGACY=y CFG_TEE_CORE_DEBUG=y DUMP_LOGS_ON_ERROR=1)

env:
  global:
    secure: "k30FG3hL6dQywtvMeEjSM0FQ7A0r+AQriUkGSFv7bmwD3EX2H17tJsfZt/h3dj+Pj6lQPdhVg3YO6O6pksJLqBLyz86bN15JEik0e1zftZplzK00oT89eoQr+qgqyrbs6CZBRvS98EAneCNbvgJto9sIPJs0SGu0u31Pr06bTAg="

addons:
  coverity_scan:
    project:
      name: "OP-TEE/optee_os"
      description: "Build submitted via Travis CI"
    notification_email: op-tee@linaro.org
    build_command_prepend: "cov-configure --comptype gcc --compiler arm-linux-gnueabihf-gcc --template"
    build_command: "make"
    branch_pattern: coverity_scan