CI: Use caching
Change-Id: I4c70241b122c915195d3dbf10ef6758444c35126
diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 23bd552..340ec01 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -1,13 +1,41 @@
image: metacpan/metacpan-api
+variables:
+ # Set `CCACHE_BASEDIR` and `CCACHE_DIR` to point `ccache` towards the cached
+ # path on the gitlab-runner. This enables to cache the output of `ccache`
+ # between various runs.
+ CCACHE_BASEDIR: "${CI_PROJECT_DIR}"
+ CCACHE_DIR: "${CI_PROJECT_DIR}/ccache"
+ # Set `ccache` to `content` to prevent rebuilding of the CI/CD containers to
+ # trigger a recreate of the cache. By using `content` the compiler's `mtime`
+ # is not considered as part of the hash.
+ CCACHE_COMPILERCHECK: "content"
+ # Enable caching for `apt-get`.
+ APT_CACHE_DIR: "${CI_PROJECT_DIR}/apt-cache"
+ # Export `noninteractive` frontend to prevent requesting user input.
+ DEBIAN_FRONTEND: "noninteractive"
+ PERL_LOCAL_LIB_ROOT: ./perl5
+ PERL5LIB: ./perl5/lib/perl5
+
build-and-test:
stage: build
+ cache:
+ # Cache is shared between branches, but has a unique cache per job.
+ key: derekovecs
+ paths:
+ # Note: directories should align with `$APT_CACHE_DIR` and `$CCACHE_DIR`.
+ - apt-cache/
+ - ccache/
+ - perl5/
before_script:
- pwd
- source `find .. -name section_helper.sh`
- start_section install_linux_packages "Installing missing Linux packages"
- - apt update && apt -y install cmake libgflags-dev libsnappy-dev zlib1g-dev libbz2-dev liblz4-dev libzstd-dev libomp-dev
+ - mkdir -pv $APT_CACHE_DIR ccache
+ - apt-get update && apt-get -o dir::cache::archives="$APT_CACHE_DIR" -y install ccache cmake libgflags-dev libsnappy-dev zlib1g-dev libbz2-dev liblz4-dev libzstd-dev libomp-dev
+ - ln -s $(which ccache) /usr/local/sbin/gcc
+ - ln -s $(which ccache) /usr/local/sbin/g++
- end_section install_linux_packages
- start_section install_rocksdb_static "Building and installing rocksdb-static"
@@ -15,6 +43,7 @@
- cd rocksdb-5.11.3
- export PROCS=$(nproc)
- make -j $PROCS static_lib DISABLE_WARNING_AS_ERROR=1 WARNING_FLAGS=-w
+ - ccache --show-stats
- make install-static DISABLE_WARNING_AS_ERROR=1 WARNING_FLAGS=-w
- end_section install_rocksdb_static
@@ -30,8 +59,9 @@
- cd collocatordb
- mkdir -p build
- cd build
- - cmake ..
+ - cmake -DCMAKE_C_COMPILER_LAUNCHER=ccache ..
- make
+ - ccache --show-stats
- make install # && ctest --extra-verbose
- ldconfig
- end_section install_collocatordb
@@ -39,8 +69,8 @@
script:
- start_section build_perl_dependencies "Installing Perl dependencies"
- - cpanm https://github.com/Akron/Mojolicious-Plugin-Localize.git
- - cpanm --installdeps .
+ - cpanm -n -l $PERL_LOCAL_LIB_ROOT https://github.com/Akron/Mojolicious-Plugin-Localize.git
+ - cpanm -n -l $PERL_LOCAL_LIB_ROOT --installdeps .
- end_section build_perl_dependencies
- start_section build_derekovecs-server "Building DeReKoVecs server"