name: Linux on: [push, pull_request] env: # this test case does not actually test anything but tries to access system # directories that might be inaccessible on build hosts TESTS_CASES_EXCLUDE: sw_collector TESTS_REDUCED_KEYLENGTHS: yes CCACHE_BASEDIR: ${{ github.workspace }} CCACHE_COMPRESS: true CCACHE_MAXSIZE: 200M OS_NAME: linux jobs: pre-check: runs-on: ubuntu-latest outputs: should_skip: ${{ steps.skip-check.outputs.should_skip }} steps: - id: skip-check uses: fkirc/skip-duplicate-actions@master with: concurrent_skipping: 'same_content' latest: needs: pre-check if: ${{ needs.pre-check.outputs.should_skip != 'true' }} runs-on: ubuntu-latest strategy: matrix: test: [ all, default, printf-builtin ] compiler: [ gcc, clang ] leak-detective: [ no, yes ] monolithic: [ no, yes ] exclude: # leaks will show up whether we build monolithic or not - leak-detective: yes monolithic: yes # monolithic builds don't affect the printf-hook implementation - test: printf-builtin monolithic: yes include: - test: apidoc - test: coverage - test: dist - test: nm-no-glib - test: fuzzing compiler: clang monolithic: yes env: LEAK_DETECTIVE: ${{ matrix.leak-detective || 'no' }} MONOLITHIC: ${{ matrix.monolithic || 'no' }} CC: ${{ matrix.compiler || 'gcc' }} TEST: ${{ matrix.test }} steps: - uses: actions/checkout@v2 - uses: actions/cache@v2 with: path: ~/.ccache # with regards to ccache, monolithic builds don't differ from regular # builds and, similarly, builds with leak-detective only differ in two # files (LD itself and library.c); but different tests build different # dependencies, so different caches are needed key: ccache-${{ runner.os }}-${{ env.CC }}-${{ matrix.test }}-${{ github.ref }}:${{ github.sha }} restore-keys: | ccache-${{ runner.os }}-${{ env.CC }}-${{ matrix.test }}-${{ github.ref }}: ccache-${{ runner.os }}-${{ env.CC }}-${{ matrix.test }}- ccache-${{ runner.os }}-${{ env.CC }}- - run: | sudo apt-get install -qq ccache echo "PATH=/usr/lib/ccache:$PATH" >> $GITHUB_ENV ccache -z - uses: ./.github/actions/default - run: ccache -s - if: ${{ success() && matrix.test == 'coverage' }} run: bash <(curl -s https://codecov.io/bash) - if: ${{ failure() }} uses: actions/upload-artifact@v2 with: name: Logs ${{ github.job }} path: config.log retention-days: 5 crypto-plugins: needs: pre-check if: ${{ needs.pre-check.outputs.should_skip != 'true' }} runs-on: ubuntu-latest strategy: matrix: test: [ botan, wolfssl, openssl, gcrypt ] leak-detective: [ no, yes ] env: LEAK_DETECTIVE: ${{ matrix.leak-detective || 'no' }} TEST: ${{ matrix.test }} steps: - uses: actions/checkout@v2 - uses: actions/cache@v2 with: path: ~/.ccache key: ccache-${{ runner.os }}-${{ env.CC }}-${{ matrix.test }}-${{ github.ref }}:${{ github.sha }} restore-keys: | ccache-${{ runner.os }}-${{ env.CC }}-${{ matrix.test }}-${{ github.ref }}: ccache-${{ runner.os }}-${{ env.CC }}-${{ matrix.test }}- ccache-${{ runner.os }}-${{ env.CC }}- ccache-${{ runner.os }}-${{ env.CC }}-all-${{ github.ref }}:${{ github.sha }} ccache-${{ runner.os }}-${{ env.CC }}-all-${{ github.ref }}: ccache-${{ runner.os }}-${{ env.CC }}-all- ccache-${{ runner.os }}-${{ env.CC }}- - run: | sudo apt-get install -qq ccache echo "PATH=/usr/lib/ccache:$PATH" >> $GITHUB_ENV ccache -z - uses: ./.github/actions/default - run: ccache -s - if: ${{ failure() }} uses: actions/upload-artifact@v2 with: name: Logs ${{ github.job }} path: config.log retention-days: 5 bionic: needs: pre-check if: ${{ needs.pre-check.outputs.should_skip != 'true' }} runs-on: ubuntu-18.04 strategy: matrix: test: [ all ] compiler: [ gcc, clang ] include: - test: nm env: LEAK_DETECTIVE: ${{ matrix.leak-detective || 'no' }} CC: ${{ matrix.compiler || 'gcc' }} TEST: ${{ matrix.test }} UBUNTU_BIONIC: yes steps: - uses: actions/checkout@v2 - uses: actions/cache@v2 with: path: ~/.ccache key: ccache-bionic-${{ env.CC }}-${{ matrix.test }}-${{ github.ref }}:${{ github.sha }} restore-keys: | ccache-bionic-${{ env.CC }}-${{ matrix.test }}-${{ github.ref }}: ccache-bionic-${{ env.CC }}-${{ matrix.test }}- ccache-bionic-${{ env.CC }}- - run: | sudo apt-get install -qq ccache echo "PATH=/usr/lib/ccache:$PATH" >> $GITHUB_ENV ccache -z - uses: ./.github/actions/default - run: ccache -s - if: ${{ failure() }} uses: actions/upload-artifact@v2 with: name: Logs ${{ github.job }} path: config.log retention-days: 5 xenial: needs: pre-check if: ${{ needs.pre-check.outputs.should_skip != 'true' }} runs-on: ubuntu-16.04 strategy: matrix: test: [ all ] compiler: [ gcc, clang ] include: - test: openssl-1.0 - test: openssl-1.0 leak-detective: yes env: LEAK_DETECTIVE: ${{ matrix.leak-detective || 'no' }} CC: ${{ matrix.compiler || 'gcc' }} TEST: ${{ matrix.test }} # this is the default with newer versions and fixes builds with clang CCACHE_CPP2: true steps: - uses: actions/checkout@v2 - uses: actions/cache@v2 with: path: ~/.ccache key: ccache-xenial-${{ env.CC }}-${{ matrix.test }}-${{ github.ref }}:${{ github.sha }} restore-keys: | ccache-xenial-${{ env.CC }}-${{ matrix.test }}-${{ github.ref }}: ccache-xenial-${{ env.CC }}-${{ matrix.test }}- ccache-xenial-${{ env.CC }}- - run: | sudo apt-get install -qq ccache echo "PATH=/usr/lib/ccache:$PATH" >> $GITHUB_ENV ccache -z - uses: ./.github/actions/default - run: ccache -s - if: ${{ failure() }} uses: actions/upload-artifact@v2 with: name: Logs ${{ github.job }} path: config.log retention-days: 5