fixup! Use parallel jobs and caching to speed up slow CI #13
Workflow file for this run
This file contains 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
name: CI | ||
on: | ||
push: | ||
branches: ["**"] | ||
pull_request: | ||
branches: ["**"] | ||
workflow_call: | ||
workflow_dispatch: | ||
jobs: | ||
build-zenoh-c: | ||
name: Build Zenoh-C | ||
runs-on: ubuntu-latest | ||
steps: | ||
- name: Install Rust toolchain | ||
run: rustup component add rustfmt clippy | ||
- name: Clone Zenoh-C | ||
run: | | ||
pwd | ||
git clone https://github.com/eclipse-zenoh/zenoh-c.git | ||
cd zenoh-c && git rev-parse HEAD > .gh_head_rev && cat .gh_head_rev | ||
- name: Cached rust + c build | ||
uses: Swatinem/rust-cache@v2 | ||
with: | ||
shared-key: zenohc | ||
key: ${{ hashFiles('zenoh-c/.gh_head_rev') }} | ||
cache-directories: | | ||
zenoh-c/build | ||
# - name: Cached Cargo files | ||
# uses: actions/cache@v4 | ||
# with: | ||
# key: zenohc-cargo-${{ hashFiles('zenoh-c/.gh_head_rev') }} | ||
# restore-keys: | | ||
# zenohc-cargo- | ||
# path: | | ||
# ~/.cargo | ||
# - name: Cached Zenoh-C build | ||
# uses: actions/cache@v4 | ||
# with: | ||
# key: zenohc-${{ hashFiles('zenoh-c/.gh_head_rev') }} | ||
# path: | | ||
# zenoh-c/build | ||
- name: Build and install Zenoh-C | ||
shell: bash | ||
run: | | ||
cd zenoh-c | ||
if [ ! -e build ]; then | ||
mkdir -p build | ||
fi | ||
cd build | ||
cmake .. -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=~/local | ||
cmake --build . --target install --config Release -- -j | ||
- name: Upload artifacts for dependent jobs | ||
uses: actions/upload-artifact@v4 | ||
with: | ||
name: libzenohc | ||
path: ~/local | ||
retention-days: 1 | ||
build-up-cpp: | ||
name: Build up-cpp | ||
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: Create up-cpp Conan package | ||
shell: bash | ||
run: | | ||
git clone https://github.com/eclipse-uprotocol/up-cpp.git | ||
cd up-cpp | ||
git submodule update --init --recursive | ||
conan create . --build=missing | ||
- name: Upload artifacts for dependent jobs | ||
uses: actions/upload-artifact@v4 | ||
with: | ||
name: up-cpp-conan2 | ||
path: ~/.conan2 | ||
retention-days: 1 | ||
build-up-client-zenoh-cpp: | ||
name: Build up-client-zenoh-cpp | ||
needs: [ build-zenoh-c, build-up-cpp ] | ||
runs-on: ubuntu-latest | ||
steps: | ||
- name: Download libzenohc | ||
uses: actions/download-artifact@v4 | ||
with: | ||
name: libzenohc | ||
path: ~/local | ||
- name: Download up-cpp conan packages | ||
uses: actions/download-artifact@v4 | ||
with: | ||
name: up-cpp-conan2 | ||
path: ~/.conan2 | ||
- uses: actions/checkout@v4 | ||
- name: Install Conan | ||
id: conan | ||
uses: turtlebrowser/get-conan@main | ||
- name: Build && install up-client-zenoh-cpp | ||
shell: bash | ||
run: | | ||
export CMAKE_PREFIX_PATH="$HOME/local" | ||
export CMAKE_ZENOH_INCLUDE_PATH="$HOME/local/include" | ||
mkdir build | ||
cd build | ||
conan install ../ -o build_unbundled=True -o zenoh_package=False | ||
cmake ../ -DCMAKE_TOOLCHAIN_FILE=conan_toolchain.cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=~/local | ||
cmake --build . --target install --config Release -- -j | ||
# 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-zenoh-c, build-up-cpp, build-up-client-zenoh-cpp ] | ||
if: always() | ||
steps: | ||
- name: Check whether all jobs pass | ||
run: echo '${{ toJson(needs) }}' | jq -e 'all(.result == "success")' |