aboutsummaryrefslogblamecommitdiffstatshomepage
path: root/docs/ci.md
blob: 2c02d98fbd9d13065213b82cd60abd6138f4f265 (plain) (tree)
1
2
3
                                                                                 

                                                                                



































                                                                   
                                                        





                                                        

                                                        




















                                                                              
`ci-boost` and `ci-cmake` are thin wrappers around `boost-download`/`boost-build`
and `project-build` accordingly.  They work by reading environment variables
and passing their values as command line parameters to the more generic scripts.
This facilitates matrix-building the project without too much fuss.

For example, the following Travis workflow:

```
language: cpp
os: linux
dist: focal

env:
  global:
    BOOST_VERSION: 1.65.0
  jobs:
    - CONFIGURATION=Debug   PLATFORM=x64
    - CONFIGURATION=Release PLATFORM=x64

before_script: ci-boost -- --with-filesystem
script: ci-cmake --install
```

is roughly equivalent to running

```
boost-download --cache "$TRAVIS_BUILD_DIR/../build" -- 1.65.0
mv -- \
    "$TRAVIS_BUILD_DIR/../build/boost_1_65_0" \
    "$TRAVIS_BUILD_DIR/../build/boost"

boost-build                            \
    --platform x64                     \
    --configuration Debug Release      \
    --                                 \
    "$TRAVIS_BUILD_DIR/../build/boost" \
    --with-filesystem

for configuration in Debug Release; do
    project-build                                      \
        --platform x64                                 \
        --configuration "$configuration"               \
        --boost "$TRAVIS_BUILD_DIR/../build/boost"     \
        --build "$TRAVIS_BUILD_DIR/../build/cmake"     \
        --install "$TRAVIS_BUILD_DIR/../build/install" \
        --                                             \
        "$TRAVIS_BUILD_DIR"                            \
        TMP
done
```

Caching
-------

`ci-boost` downloads the Boost distribution archive to the "../build/"
directory (resolved relatively to the root checkout directory).  You can cache
the archive like this (using GitHub Actions as an example):

```
- name: Cache Boost
  uses: actions/cache@v2
  with:
    path: '${{ runner.workspace }}/build/boost_*.tar.gz'
    key: 'boost_${{ env.BOOST_VERSION }}'

- name: Build Boost
  # This won't re-download the archive unnecessarily.
  run: ci-boost -- --with-filesystem
```