jenkins: use ccache if available
[gnupg-doc.git] / misc / jenkins / README.org
1 * Notes
2 ** Setting up a Jenkins build slave
3  - on soro, create an entry in /etc/hosts
4  - copy root@soro's ssh key to /root/.ssh/authorized_keys
5  - install a jre, make, autoconf, automake, libtool, gcc, git, bison,
6    fig2dev, ghostscript, gnutls, sqlite3, pkg-config, imagemagick,
7    rngd, python2/3, SWIG, Qt5 base
8  - setup rngd (test suites will consume quite a bit of entropy)
9  - create a user jenkins
10  - clone gnupg-doc
11    $ git clone git://git.gnupg.org/gnupg-doc.git
12  - link ~/bin
13    $ ln -s gnupg-doc/misc/jenkins/bin
14  - download slave.jar
15    $ wget https://jenkins.gnupg.org/jnlpJars/slave.jar -O bin/slave.jar
16  - copy and adapt launcher
17    $ cp bin/jenkins-slave.dist bin/jenkins-slave
18  - make sure that jenkins@soro can ssh to the new node
19  - go to https://jenkins.gnupg.org/computer/new and copy an existing
20    configuration, adapting it as needed
21  - setup 'GPGME tests for GnuPG' as described below
22  - for each project, add the new nodes distinct label to the
23    configuration matrix, and force a rebuild.  Start with libgpg-error
24    and walk your way up the dependency chain:
25    - libgpg-error, libnpth, libassuan, libksba, libgcrypt, ntbtls,
26      gnupg, gpgme
27 ** GPGME tests for GnuPG
28 There is a reasonably up-to-date (but this is currently a manual
29 process) GPGME source at
30
31   $ mkdir $HOME/src
32   $ git clone git://git.gnupg.org/gpgme.git $HOME/src/gpgme-for-gnupgs-tests
33   $ cd $HOME/src/gpgme-for-gnupgs-tests
34   $ ./autogen.sh
35
36 and a build tree at
37
38   $ mkdir $HOME/src/gpgme-for-gnupgs-tests/obj
39   $ cd $HOME/src/gpgme-for-gnupgs-tests/obj
40   $ export PATH=$HOME/prefix/native/bin:$PATH
41   $ ../configure --enable-maintainer-mode
42   $ make
43   $ make check
44
45 and specialized build trees, e.g. for the sanitizer target at
46
47   $ mkdir $HOME/src/gpgme-for-gnupgs-tests/obj-sanitizer
48   $ cd $HOME/src/gpgme-for-gnupgs-tests/obj-sanitizer
49   $ export PATH=$HOME/prefix/sanitizer/bin:$PATH
50   $ ../configure --enable-maintainer-mode \
51       --enable-languages="cpp qt" \
52      CFLAGS="-fsanitize=undefined -fsanitize=address" \
53      CXXFLAGS="-fsanitize=undefined -fsanitize=address"
54   $ make
55   $ make check
56
57
58 and a w32 build tree at
59
60   $HOME/src/gpgme-for-gnupgs-tests/obj.w32
61
62 The tests from there are executed in GnuPG's test suite.
63 * Virtual machines
64 ** openbsd60
65 Packages installed:
66
67   # pkg_add zile zsh git autoconf-2.69p2 automake-1.15p0 gettext-tools \
68     gmake xfig bison readline libusb-compat ImageMagick makeinfo \
69     gcc-4.9.3p9 g++-4.9.3p9 qt5
70
71 Add some compatibility links to PATH:
72
73   $ mkdir -p ~/compat/{bin,lib,include}
74   $ cd ~/compat/bin
75   $ ln -s /usr/local/bin/gmakeinfo makeinfo
76   $ [ add $HOME/compat/bin to ~/.profile ]
77   $ cd ~/compat/lib
78   $ for F in /usr/local/lib/libbz2* /usr/local/lib/libiconv* /usr/local/lib/libintl* ; do ln -s $F ; done
79   $ cd ~/compat/include
80   $ for F in /usr/local/include/*bz*h /usr/local/include/*iconv*h /usr/local/include/*intl*h ; do ln -s $F ; done
81
82 Tweak limits:
83
84   # echo 'jenkins:\
85         :maxproc-max=1024:\
86         :maxproc-cur=1024:\
87         :tc=pbuild:
88 ' >> /etc/login.conf
89   # user mod -L jenkins jenkins