summaryrefslogtreecommitdiff
path: root/.travis.yml
blob: cb863a5d564f43bcb09a915fc2264a800c398632 (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
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
148
149
150
151
152
153
154
155
156
157
158
159
language: python
sudo: True

# Cache pip objects to speed up next build
cache:
  pip: True
  ccache: True


# We need a newer version of zlib to build notmuch from source as is available
# in precise.
dist: trusty

python:
  # We can add more version strings here when we support other python
  # versions.
  - "2.7"

# We start two containers in parallel, one to check and build the docs and the
# other to run the test suite.
env:
  - JOB=docs
  - JOB=tests

addons:
  apt:
    packages:
      # The notmuch libs are needed to actually run alot.  But currently the
      # available version is not compatible with alot, so we have to build
      # from source.
      #- notmuch
      # Dependencies to build notmuch from source.
      - libxapian-dev
      - libtalloc-dev
      - zlib1g-dev
      - libgmime-2.6-dev

      # dependencies to build the python-gpg module from source
      - swig

# Build notmuch and the python notmuch libs manually.  The versions of the
# notmuch library and the python module which are available in the 12.04 and
# 14.04 Ubuntu repos do not match and do not fullfill the version requirement
# for alot.
before_install: |
  set -e
  if [[ $JOB = tests ]]; then
    # Build with ccache to speed up rebuilds.
    export PATH=/usr/lib/ccache:$PATH

    # Set paths
    export LD_LIBRARY_PATH=$HOME/.local/lib
    export PKG_CONFIG_PATH=$HOME/.local/lib/pkgconfig

    # Clone the notmuch repository and move into it.
    git clone git://notmuchmail.org/git/notmuch --depth 1
    cd notmuch
    # Make and install the library.  We install the library without sudo as we
    # might want to switch to the travis container later.
    ./configure --prefix=$HOME/.local
    make -j3 -l2
    make install
    # Export the library search path.
    # Install the python bindings.
    cd bindings/python
    pip install .
    # Install the coverage programs to generate a coverage report and upload
    # it to codacy.com
    pip install coverage codacy-coverage
    # Move out of the notmuch dir again.
    cd ../../..

    # Build GPGME since the version shipping is far too old

    # needs a newer version of gpg-errors
    curl https://gnupg.org/ftp/gcrypt/libgpg-error/libgpg-error-1.27.tar.bz2 -o gpgerror.tar.bz2
    tar xvf gpgerror.tar.bz2
    pushd libgpg-error-1.27
    ./configure --prefix=$HOME/.local
    make -j3 -l2
    make install
    popd

    # and a newer version of libassaun
    curl https://gnupg.org/ftp/gcrypt/libassuan/libassuan-2.4.3.tar.bz2 -o assuan.tar.bz2
    tar xf assuan.tar.bz2
    pushd libassuan-2.4.3
    ./configure --prefix=$HOME/.local
    make -j3 -l2
    make install
    popd

    curl https://gnupg.org/ftp/gcrypt/gpgme/gpgme-1.9.0.tar.bz2 -o gpgme.tar.bz2
    tar xf gpgme.tar.bz2
    pushd gpgme-1.9.0
    ./configure --prefix=$HOME/.local
    make -j3 -l2
    make install
    popd
  fi

# Prepare a minimal config file for the test.
before_script: |
  set -e
  if [[ $JOB = tests ]]; then
    touch ~/.notmuch-config
    echo 'initial_command=call os._exit(0)' > conf
  fi

# Install or mock dependencies for alot as the package has to be imported
# during generation of the docs.
install:
  # urwid needs to be installed first.  The installation of urwidtrees will
  # fail otherwise.
  # TODO This should be fixed upstream.
  - pip install urwid
  # Install alot and the dependencies it declares.
  - |
    set -e
    if [[ $JOB = docs ]]; then
      pip install configobj twisted python-magic urwidtrees
      # Mock all "difficult" dependencies of alot in order to be able to import
      # alot when rebuilding the documentation.  Notmuch would have to be
      # installed by hand in order to get a recent enough version on travis.
      printf '%s = None\n' NotmuchError NullPointerError > notmuch.py
      touch gpgme.py
      # install sphinx for building the html docs
      pip install sphinx
    else
      pip install .[test]
    fi

script: |
  set -e
  if [[ $JOB = docs ]]; then
    # First remove the auto generated documentation source files.
    make -C docs cleanall
    # Regenerate them (run "true" instead of sphinx-build to speed things up).
    make -C docs html SPHINXBUILD=true
    # Check that the generated docs where already commited.
    git diff --exit-code
    # Generate the html docs and turn all warnings into errors.
    make -C docs html SPHINXBUILD='sphinx-build -W'
  else
    alot --config conf
    coverage run setup.py test
  fi

after_success: |
  set -e
  if [[ $JOB = tests ]]; then
    coverage xml
    export CODACY_PROJECT_TOKEN=df4443e7313e4ae599bcbbaf4835b00f
    python-codacy-coverage -r coverage.xml
  fi

notifications:
    irc: "chat.freenode.net#alot"
    on_success: change