233 lines
10 KiB
YAML
233 lines
10 KiB
YAML
name: CI
|
|
on: ['push', 'pull_request']
|
|
|
|
jobs:
|
|
build:
|
|
name: CI
|
|
strategy:
|
|
fail-fast: false
|
|
matrix:
|
|
os:
|
|
- macos-10.15
|
|
- ubuntu-18.04
|
|
- ubuntu-20.04
|
|
compiler:
|
|
- cxx: g++-7
|
|
cc: gcc-7
|
|
macos_cxx: g++-7
|
|
macos_cc: gcc-7
|
|
homebrew_package: gcc@7
|
|
apt_package: g++-7
|
|
- cxx: g++-8
|
|
cc: gcc-8
|
|
macos_cxx: g++-8
|
|
macos_cc: gcc-8
|
|
homebrew_package: gcc@8
|
|
apt_package: g++-8
|
|
- cxx: g++-9
|
|
cc: gcc-9
|
|
macos_cxx: g++-9
|
|
macos_cc: gcc-9
|
|
apt_package: g++-9
|
|
homebrew_package: gcc@9
|
|
# - cxx: g++-10
|
|
# cc: gcc-10
|
|
# macos_cxx: g++-10
|
|
# macos_cc: gcc-10
|
|
# apt_package: g++-10
|
|
# homebrew_package: gcc@10
|
|
- cxx: clang++-7
|
|
cc: clang-7
|
|
macos_cxx: /usr/local/opt/llvm@7/bin/clang++
|
|
macos_cc: /usr/local/opt/llvm@7/bin/clang
|
|
apt_package: clang-7
|
|
homebrew_package: llvm@7
|
|
- cxx: clang++-8
|
|
cc: clang-8
|
|
macos_cxx: /usr/local/opt/llvm@8/bin/clang++
|
|
macos_cc: /usr/local/opt/llvm@8/bin/clang
|
|
apt_package: clang-8
|
|
homebrew_package: llvm@8
|
|
- cxx: clang++-9
|
|
cc: clang-9
|
|
macos_cxx: /usr/local/opt/llvm@9/bin/clang++
|
|
macos_cc: /usr/local/opt/llvm@9/bin/clang
|
|
apt_package: clang-9
|
|
homebrew_package: llvm@9
|
|
# TODO Clang-10 on linux? macos homebrew doesn't seem to have it
|
|
- cxx: clang++-11
|
|
cc: clang-11
|
|
macos_cxx: /usr/local/opt/llvm@11/bin/clang++
|
|
macos_cc: /usr/local/opt/llvm@11/bin/clang
|
|
apt_package: clang-11
|
|
homebrew_package: llvm@11
|
|
# Apple Clang
|
|
# - cxx: clang++
|
|
# cc: clang
|
|
# homebrew_package: ""
|
|
build_type:
|
|
- Debug
|
|
- Release
|
|
- RelWithDebInfo
|
|
runs-on: ${{matrix.os}}
|
|
env:
|
|
# Setting conan cache dir to a location where our Github Cache Action can find it
|
|
CONAN_USER_HOME: "${{ github.workspace }}/conan-cache/"
|
|
steps:
|
|
- name: Checkout
|
|
uses: actions/checkout@v1
|
|
#TODO Ideally, all the setup actions would be in their own subaction, but Github doesn't support using third party actions (e.g. cache) from nested actions yet, see https://github.com/actions/runner/issues/862
|
|
- name: Install OSX dependencies
|
|
if: ${{ runner.os == 'macOS' }}
|
|
shell: bash
|
|
run: |
|
|
brew install ninja macfuse libomp ccache ${{matrix.compiler.homebrew_package}}
|
|
- name: Install Linux dependencies
|
|
if: ${{ runner.os == 'Linux' }}
|
|
shell: bash
|
|
run: |
|
|
if [[ "${{matrix.os}}" == "ubuntu-18.04" ]]; then
|
|
echo Adding apt repositories for newer clang versions on Ubuntu 18.04
|
|
wget -O - https://apt.llvm.org/llvm-snapshot.gpg.key|sudo apt-key add -
|
|
sudo touch /etc/apt/sources.list.d/clang.list
|
|
sudo chmod o+w /etc/apt/sources.list.d/clang.list
|
|
echo "deb http://apt.llvm.org/bionic/ llvm-toolchain-bionic-11 main" >> /etc/apt/sources.list.d/clang.list
|
|
echo "deb-src http://apt.llvm.org/bionic/ llvm-toolchain-bionic-11 main" >> /etc/apt/sources.list.d/clang.list
|
|
sudo chmod o-w /etc/apt/sources.list.d/clang.list
|
|
elif [[ "${{matrix.os}}" == "ubuntu-20.04" ]]; then
|
|
echo Adding apt repositories for newer clang versions on Ubuntu 20.04
|
|
wget -O - https://apt.llvm.org/llvm-snapshot.gpg.key|sudo apt-key add -
|
|
sudo touch /etc/apt/sources.list.d/clang.list
|
|
sudo chmod o+w /etc/apt/sources.list.d/clang.list
|
|
echo "deb http://apt.llvm.org/focal/ llvm-toolchain-focal-11 main" >> /etc/apt/sources.list.d/clang.list
|
|
echo "deb-src http://apt.llvm.org/focal/ llvm-toolchain-focal-11 main" >> /etc/apt/sources.list.d/clang.list
|
|
sudo chmod o-w /etc/apt/sources.list.d/clang.list
|
|
fi
|
|
sudo apt-get update
|
|
sudo apt-get install ninja-build libcurl4-openssl-dev libfuse-dev ccache ${{matrix.compiler.apt_package}}
|
|
- name: Find pip cache location
|
|
id: pip_cache_dir
|
|
run: |
|
|
# We need at least pip 20.1 to get the "pip cache dir" command. Ubuntu doesn't have pip 20.1 by default yet, let's upgrade it
|
|
python3 -m pip install -U pip
|
|
python3 -m pip --version
|
|
echo "::set-output name=pip_cache_dir::$(python3 -m pip cache dir)"
|
|
shell: bash
|
|
- name: Retrieve pip cache
|
|
# We're using an S3 based cache because the standard GitHub Action cache (actions/cache) only gives us 5GB of storage and we need more
|
|
uses: leroy-merlin-br/action-s3-cache@8d75079437b388688b9ea9c7d73dff4ef975c5fa # v1.0.5
|
|
with:
|
|
action: get
|
|
aws-access-key-id: ${{ secrets.CACHE_AWS_ACCESS_KEY_ID }}
|
|
aws-secret-access-key: ${{ secrets.CACHE_AWS_SECRET_ACCESS_KEY }}
|
|
aws-region: ${{ secrets.CACHE_AWS_REGION }}
|
|
bucket: ${{ secrets.CACHE_AWS_S3_BUCKET }}
|
|
key: v0-${{ runner.os }}-${{ matrix.os }}-setup-pip
|
|
- name: Install Conan
|
|
shell: bash
|
|
run: |
|
|
# Using "python3 -m pip" instead of "pip3" to make sure we get the same pip that we queried the cache dir for the Github Cache action
|
|
if [[ "${{matrix.os}}" == "ubuntu-18.04" ]]; then
|
|
python3 -m pip install setuptools
|
|
fi
|
|
python3 -m pip install conan
|
|
conan profile new default --detect
|
|
conan profile update settings.compiler.libcxx=libstdc++11 default
|
|
- name: Save pip cache
|
|
uses: leroy-merlin-br/action-s3-cache@8d75079437b388688b9ea9c7d73dff4ef975c5fa # v1.0.5
|
|
with:
|
|
action: put
|
|
aws-access-key-id: ${{ secrets.CACHE_AWS_ACCESS_KEY_ID }}
|
|
aws-secret-access-key: ${{ secrets.CACHE_AWS_SECRET_ACCESS_KEY }}
|
|
aws-region: ${{ secrets.CACHE_AWS_REGION }}
|
|
bucket: ${{ secrets.CACHE_AWS_S3_BUCKET }}
|
|
key: v0-${{ runner.os }}-${{ matrix.os }}-setup-pip
|
|
artifacts: ${{ steps.pip_cache_dir.outputs.pip_cache_dir }}
|
|
#TODO Ideally, the Setup ccache step would be part of the build action, but Github doesn't support nested actions yet, see https://github.com/actions/runner/issues/862
|
|
- name: Configure ccache
|
|
shell: bash
|
|
run: |
|
|
set -v
|
|
ccache --set-config=compiler_check=content
|
|
ccache --set-config=max_size=500M
|
|
ccache --set-config=cache_dir=${{github.workspace}}/.ccache
|
|
ccache --set-config=compression=true
|
|
echo CCache config:
|
|
ccache -p
|
|
echo Clearing ccache statistics
|
|
ccache -z
|
|
- name: Retrieve ccache cache
|
|
# We're using an S3 based cache because the standard GitHub Action cache (actions/cache) only gives us 5GB of storage and we need more
|
|
uses: leroy-merlin-br/action-s3-cache@8d75079437b388688b9ea9c7d73dff4ef975c5fa # v1.0.5
|
|
with:
|
|
action: get
|
|
aws-access-key-id: ${{ secrets.CACHE_AWS_ACCESS_KEY_ID }}
|
|
aws-secret-access-key: ${{ secrets.CACHE_AWS_SECRET_ACCESS_KEY }}
|
|
aws-region: ${{ secrets.CACHE_AWS_REGION }}
|
|
bucket: ${{ secrets.CACHE_AWS_S3_BUCKET }}
|
|
key: v0-${{ runner.os }}-${{ matrix.os }}-ccache__${{matrix.compiler.cxx}}__${{matrix.compiler.cc}}__${{matrix.build_type}}__
|
|
- name: Show ccache statistics
|
|
shell: bash
|
|
run: |
|
|
set -v
|
|
ccache -s
|
|
# TODO Ideally, the Setup conan cache step would be part of the build action, but Github doesn't support nested actions yet, see https://github.com/actions/runner/issues/862
|
|
- name: Retrieve conan cache
|
|
# We're using an S3 based cache because the standard GitHub Action cache (actions/cache) only gives us 5GB of storage and we need more
|
|
uses: leroy-merlin-br/action-s3-cache@8d75079437b388688b9ea9c7d73dff4ef975c5fa # v1.0.5
|
|
with:
|
|
action: get
|
|
aws-access-key-id: ${{ secrets.CACHE_AWS_ACCESS_KEY_ID }}
|
|
aws-secret-access-key: ${{ secrets.CACHE_AWS_SECRET_ACCESS_KEY }}
|
|
aws-region: ${{ secrets.CACHE_AWS_REGION }}
|
|
bucket: ${{ secrets.CACHE_AWS_S3_BUCKET }}
|
|
key: v0-${{ runner.os }}-${{ matrix.os }}-conancache__${{matrix.compiler.cxx}}__${{matrix.compiler.cc}}__${{matrix.build_type}}__
|
|
- name: Build (macOS)
|
|
if: ${{ runner.os == 'macOS' }}
|
|
uses: ./.github/workflows/actions/run_build
|
|
with:
|
|
cxx: ${{ matrix.compiler.macos_cxx }}
|
|
cc: ${{ matrix.compiler.macos_cc }}
|
|
build_type: ${{ matrix.build_type }}
|
|
- name: Build (Linux)
|
|
if: ${{ runner.os == 'Linux' }}
|
|
uses: ./.github/workflows/actions/run_build
|
|
with:
|
|
cxx: ${{ matrix.compiler.cxx }}
|
|
cc: ${{ matrix.compiler.cc }}
|
|
build_type: ${{ matrix.build_type }}
|
|
- name: Show ccache statistics
|
|
shell: bash
|
|
run: |
|
|
set -v
|
|
ccache -s
|
|
- name: Reduce ccache size
|
|
if: ${{ runner.os == 'macOS' }}
|
|
shell: bash
|
|
run: |
|
|
set -v
|
|
ccache --evict-older-than 7d
|
|
ccache -s
|
|
- name: Save ccache cache
|
|
uses: leroy-merlin-br/action-s3-cache@8d75079437b388688b9ea9c7d73dff4ef975c5fa # v1.0.5
|
|
with:
|
|
action: put
|
|
aws-access-key-id: ${{ secrets.CACHE_AWS_ACCESS_KEY_ID }}
|
|
aws-secret-access-key: ${{ secrets.CACHE_AWS_SECRET_ACCESS_KEY }}
|
|
aws-region: ${{ secrets.CACHE_AWS_REGION }}
|
|
bucket: ${{ secrets.CACHE_AWS_S3_BUCKET }}
|
|
key: v0-${{ runner.os }}-${{ matrix.os }}-ccache__${{matrix.compiler.cxx}}__${{matrix.compiler.cc}}__${{matrix.build_type}}__
|
|
artifacts: ${{ github.workspace }}/.ccache
|
|
- name: Save conan cache
|
|
uses: leroy-merlin-br/action-s3-cache@8d75079437b388688b9ea9c7d73dff4ef975c5fa # v1.0.5
|
|
with:
|
|
action: put
|
|
aws-access-key-id: ${{ secrets.CACHE_AWS_ACCESS_KEY_ID }}
|
|
aws-secret-access-key: ${{ secrets.CACHE_AWS_SECRET_ACCESS_KEY }}
|
|
aws-region: ${{ secrets.CACHE_AWS_REGION }}
|
|
bucket: ${{ secrets.CACHE_AWS_S3_BUCKET }}
|
|
key: v0-${{ runner.os }}-${{ matrix.os }}-conancache__${{matrix.compiler.cxx}}__${{matrix.compiler.cc}}__${{matrix.build_type}}__
|
|
artifacts: ${{ env.CONAN_USER_HOME }}
|
|
- name: Test
|
|
uses: ./.github/workflows/actions/run_tests
|