Repository navigation
Add runtime code coverage support #110
Workflow file for this run
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| --- | |
| # GitHub action to compile and test lutok on supported platforms. | |
| # | |
| # Steps executed: | |
| # * Handle prerequisites | |
| # * Install binary packages | |
| # * Build packages from source (if needed). | |
| # * Build | |
| # * Install | |
| # * Run tests | |
| # | |
| # On MacOS we build with: | |
| # * latest clang from brew (system provided clang lacks sanitizers). | |
| # * ld from system | |
| name: build | |
| "on": | |
| pull_request: | |
| branches: | |
| - master | |
| push: | |
| workflow_dispatch: | |
| permissions: | |
| contents: read | |
| jobs: | |
| build-and-test: | |
| # yamllint disable-line rule:line-length | |
| name: ${{ matrix.build-os }} ${{ matrix.compiler }} ${{ join(matrix.sanitize, '+') }} | |
| env: | |
| AR: ${{ matrix.llvm-bindir }}/llvm-ar | |
| CC: ${{ matrix.llvm-bindir }}/clang | |
| CPP: ${{ matrix.llvm-bindir }}/clang-cpp | |
| CXX: ${{ matrix.llvm-bindir }}/clang++ | |
| NM: ${{ matrix.llvm-bindir }}/llvm-nm | |
| OBJDUMP: ${{ matrix.llvm-bindir }}/llvm-objdump | |
| RANLIB: ${{ matrix.llvm-bindir }}/llvm-ranlib | |
| STRIP: ${{ matrix.llvm-bindir }}/llvm-strip | |
| LUTOK_SRCDIR: ${{ github.workspace }}/src | |
| LUTOK_OBJDIR: ${{ github.workspace }}/obj | |
| # yamllint disable-line rule:line-length | |
| JOB_NAME: ${{ matrix.build-os }} ${{ matrix.compiler }} ${{ join(matrix.sanitize, '+') }} | |
| runs-on: "${{ matrix.build-os }}" | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| build-os: | |
| - macos-latest | |
| - ubuntu-latest | |
| include: | |
| # The macOS runner uses a homebrew provided compiler as the | |
| # system compiler lacks ASAN/LSAN/UBSAN support. | |
| - build-os: macos-latest | |
| compiler: clang-19 | |
| pkgs: | |
| - atf | |
| - autoconf | |
| - automake | |
| - doxygen | |
| - kyua | |
| - libtool | |
| - llvm@19 | |
| - lua | |
| - pkgconf | |
| llvm-bindir: /opt/homebrew/opt/llvm@19/bin | |
| - build-os: ubuntu-latest | |
| compiler: clang-18 | |
| pkgs: | |
| - atf-sh | |
| - autoconf | |
| - automake | |
| - clang-18 | |
| - doxygen | |
| - graphviz | |
| - kyua | |
| - libatf-dev | |
| - liblua5.4-dev | |
| - libtool | |
| - lua5.4 | |
| - pkgconf | |
| llvm-bindir: /usr/lib/llvm-18/bin | |
| sanitize: | |
| - "" | |
| # TODO(ngie,77): tests currently fail when these options | |
| # are enabled. | |
| # - ["asan", "lsan"] | |
| - ubsan | |
| steps: | |
| - name: Install packages (macOS) | |
| if: runner.os == 'macOS' | |
| run: | | |
| brew update --quiet || true | |
| brew install ${{ join(matrix.pkgs, ' ') }} | |
| - name: Install packages (Ubuntu) | |
| if: runner.os == 'Linux' | |
| run: | | |
| sudo apt update --quiet | |
| sudo apt --quiet -y --no-install-suggests \ | |
| --no-install-recommends install \ | |
| ${{ join(matrix.pkgs, ' ') }} | |
| - name: Checking out source | |
| uses: actions/checkout@v4 | |
| with: | |
| path: src | |
| - name: Sanity checks | |
| run: | | |
| which -a kyua | |
| - name: Configure | |
| run: | | |
| CFG_ARGS="--enable-atf" | |
| for i in ${{ join(matrix.sanitize, ' ') }}; do | |
| CFG_ARGS="${CFG_ARGS} --enable-${i}" | |
| done | |
| echo "uname -a: $(uname -a)" | |
| echo "uname -m: $(uname -m)" | |
| echo "uname -p: $(uname -p)" | |
| echo "Build environment:" | |
| kyua about | head -1 | |
| cd "${LUTOK_SRCDIR}" | |
| ./admin/ci-build/01_configure.sh ${CFG_ARGS} | |
| - name: Distcheck (builds and tests) | |
| run: | | |
| CFG_ARGS="--disable-dependency-tracking --enable-atf" | |
| for i in ${{ join(matrix.sanitize, ' ') }}; do | |
| CFG_ARGS="${CFG_ARGS} --enable-${i}" | |
| done | |
| cd "${LUTOK_SRCDIR}" | |
| env "EXTRA_DISTCHECK_CONFIGURE_ARGS=${CFG_ARGS}" \ | |
| ./admin/ci-build/02_distcheck.sh | |
| - name: Gather/Archive Logs and Reports | |
| run: | | |
| REPORTS_DIR="${LUTOK_OBJDIR}/reports" | |
| mkdir -p "${REPORTS_DIR}" | |
| ( | |
| cd "${REPORTS_DIR}" | |
| mkdir -p build_logs | |
| # Gather the distcheck failure log if the target failed. | |
| # It's easier to ignore the failure than create yet another | |
| # conditional variable step. | |
| cp -a "${LUTOK_SRCDIR}"/lutok-*/_build/sub/*.log \ | |
| build_logs/ 2>/dev/null || true | |
| # Include the raw kyua logs. | |
| cp -a ~/.kyua/logs kyua_logs | |
| # Include the raw kyua results DBs. | |
| cp -a ~/.kyua/store kyua_store | |
| ) | |
| # Create an archive of the reports. | |
| job_name_encoded=$(echo "${JOB_NAME}" | tr ' ' '_') | |
| tar -cvf "lutok-test-reports-${job_name_encoded}.tar" \ | |
| -C "${REPORTS_DIR}" . | |
| if: ${{ ! cancelled() }} | |
| - name: Archive Build Artifacts | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: Test Report for ${{ env.JOB_NAME }} | |
| path: lutok-test-reports-*.tar | |
| compression-level: 0 | |
| retention-days: 10 | |
| overwrite: true | |
| if: ${{ ! cancelled() }} |