Skip to content

Prepare for update to new up-cpp API #162

Prepare for update to new up-cpp API

Prepare for update to new up-cpp API #162

Workflow file for this run

name: CI
on:
push:
branches: [ main ]
pull_request:
branches: ["**"]
jobs:
build:
name: Build up-transport-zenoh-cpp and dependencies
runs-on: ubuntu-latest
steps:
- name: Install Conan
id: conan
uses: turtlebrowser/get-conan@main
- name: Create default Conan profile
run: conan profile detect
- name: Conan cache archive
id: conan-cache
uses: actions/cache@v4
with:
key: ${{ runner.os }}-conan-cache
path: conan-cache.tgz
- name: Restore conan cache from archive
if: ${{ steps.conan-cache.outputs.cache-hit == 'true' }}
shell: bash
run: |
conan cache restore conan-cache.tgz
rm conan-cache.tgz
- name: Fetch up-core-api conan recipe
uses: actions/checkout@v4
with:
path: up-conan-recipes
repository: gregmedd/up-conan-recipes
- name: Build up-core-api conan package
shell: bash
run: |
conan create --version 1.5.8 up-conan-recipes/up-core-api/developer
- name: Build up-cpp conan package
shell: bash
run: |
conan create --version 0.2.0 up-conan-recipes/up-cpp/developer
- name: Build zenohc conan package
shell: bash
run: |
conan create --version 1.5.8 up-conan-recipes/zenohc-tmp/prebuilt
- name: Fetch up-transport-zenoh-cpp
uses: actions/checkout@v4
with:
path: up-transport-zenoh-cpp
- name: Build up-transport-zenoh-cpp with tests
shell: bash
run: |
cd up-transport-zenoh-cpp
conan install . --build=missing
cd build
cmake -S .. -DCMAKE_TOOLCHAIN_FILE=Release/generators/conan_toolchain.cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_EXPORT_COMPILE_COMMANDS=yes
cmake --build . -- -j
- name: Save conan cache to archive
shell: bash
run: |
conan cache save --file ./conan-cache.tgz '*'
- name: Upload build artifacts
uses: actions/upload-artifact@v4
with:
name: build-artifacts
path: up-transport-zenoh-cpp/build
- name: Upload compile commands
uses: actions/upload-artifact@v4
with:
name: compile-commands
path: up-transport-zenoh-cpp/build/compile_commands.json
test:
name: Run up-transport-zenoh-cpp tests
runs-on: ubuntu-latest
needs: build
steps:
- name: Get build artifacts
uses: actions/download-artifact@v4
with:
name: build-artifacts
path: up-transport-zenoh-cpp/build
- name: Run all tests
shell: bash
run: |
cd up-transport-zenoh-cpp/build
chmod +x bin/*
ctest
- name: Upload test results
uses: actions/upload-artifact@v4
if: success() || failure()
with:
name: test-results
path: 'up-transport-zenoh-cpp/build/test/results/*.xml'
lint:
name: Lint C++ sources
runs-on: ubuntu-latest
needs: build
steps:
- name: Get build commands
uses: actions/download-artifact@v4
with:
name: compile-commands
- name: Install Conan
id: conan
uses: turtlebrowser/get-conan@main
- name: Create default Conan profile
run: conan profile detect
- name: Conan cache archive
id: conan-cache
uses: actions/cache@v4
with:
key: ${{ runner.os }}-conan-cache
fail-on-cache-miss: true
path: conan-cache.tgz
- name: Restore conan cache from archive
shell: bash
run: |
conan cache restore conan-cache.tgz
- name: Fetch up-transport-zenoh-cpp
uses: actions/checkout@v4
with:
path: up-transport-zenoh-cpp
- name: Run linters on source
id: source-linter
uses: cpp-linter/cpp-linter-action@v2
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
repo-root: up-transport-zenoh-cpp
ignore: 'test'
style: 'file' # read .clang-format for configuration
tidy-checks: '' # Read .clang-tidy for configuration
database: compile_commands.json
- name: Run linters on tests
id: test-linter
uses: cpp-linter/cpp-linter-action@v2
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
repo-root: up-transport-zenoh-cpp
ignore: 'src|include'
style: 'file' # read .clang-format for configuration
tidy-checks: '' # Read .clang-tidy for configuration
database: compile_commands.json
- name: Report lint failure
if: steps.source-linter.outputs.checks-failed > 0 || steps.test-linter.outputs.checks-failed > 0
run: |
exit 1
# NOTE: In GitHub repository settings, the "Require status checks to pass
# before merging" branch protection rule ensures that commits are only merged
# from branches where specific status checks have passed. These checks are
# specified manually as a list of workflow job names. Thus we use this extra
# job to signal whether all CI checks have passed.
ci:
name: CI status checks
runs-on: ubuntu-latest
needs: [build, test]
if: always()
steps:
- name: Check whether all jobs pass
run: echo '${{ toJson(needs) }}' | jq -e 'all(.result == "success")'