Proof of Concept: Migrate to Cmake #4
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: # yamllint disable-line rule:truthy | |
| pull_request: | |
| branches: | |
| - master | |
| push: | |
| workflow_dispatch: | |
| permissions: | |
| contents: read | |
| jobs: | |
| build: | |
| name: build ${{ matrix.build-os }} ${{ matrix.compiler }} | |
| 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 | |
| RANLIB: ${{ matrix.llvm-bindir }}/llvm-ranlib | |
| OBJDUMP: ${{ matrix.llvm-bindir }}/llvm-objdump | |
| STRIP: ${{ matrix.llvm-bindir }}/llvm-strip | |
| LUTOK_SRCDIR: ${{ github.workspace }}/src | |
| LUTOK_OBJDIR: ${{ github.workspace }}/obj | |
| JOB_NAME: ${{ matrix.build-os }} ${{ matrix.compiler }} | |
| 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 | |
| - cmake | |
| - doxygen | |
| - kyua | |
| - llvm@19 | |
| - lua | |
| llvm-bindir: /opt/homebrew/opt/llvm@19/bin | |
| - build-os: ubuntu-latest | |
| compiler: clang-18 | |
| pkgs: | |
| - atf-sh | |
| - cmake | |
| - doxygen | |
| - graphviz | |
| - kyua | |
| - libatf-dev | |
| - liblua5.4-dev | |
| - llvm-18 | |
| - lua5.4 | |
| llvm-bindir: /usr/lib/llvm-18/bin | |
| 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: | | |
| cd "${LUTOK_SRCDIR}" | |
| ./scripts/ci-build/01_configure.sh | |
| - name: Build and Test | |
| run: | | |
| cd "${LUTOK_SRCDIR}" | |
| ./scripts/ci-build/02_build_and_test.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 CMake configuration logs if they exist | |
| cp -a "${LUTOK_SRCDIR}"/build/CMakeFiles/*.log \ | |
| build_logs/ 2>/dev/null || true | |
| # Include the raw kyua logs. | |
| cp -a ~/.kyua/logs kyua_logs 2>/dev/null || true | |
| # Include the raw kyua results DBs. | |
| cp -a ~/.kyua/store kyua_store 2>/dev/null || true | |
| ) | |
| # 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() }} |