I’m trying to build my CMake project on GitHub Actions workflow. Everything is working locally on Ubuntu 22.04 LTS and building a Docker image, but not when using the same OS on GitHub Actions.
The error is the following:
CMake Error at /usr/local/share/cmake-3.23/Modules/FindPackageHandleStandardArgs.cmake:230 (message):
Could NOT find Boost (missing: Boost_INCLUDE_DIR system filesystem thread
date_time chrono regex serialization program_options)
Call Stack (most recent call first):
/usr/local/share/cmake-3.23/Modules/FindPackageHandleStandardArgs.cmake:594 (_FPHSA_FAILURE_MESSAGE)
/usr/local/share/cmake-3.23/Modules/FindBoost.cmake:2376 (find_package_handle_standard_args)
CMakeLists.txt:261 (find_package)
My GitHub Actions workflow job:
install:
name: Install Dependencies
runs-on: ubuntu-22.04
needs: [ clean ]
steps:
- uses: actions/checkout@v2
- name: Install General
run: |
sudo apt-get update
sudo apt-get install -y build-essential libboost-all-dev libssl-dev libffi-dev python3-dev gcc-11 g++-11 git cmake librocksdb-dev cron rpcbind libboost-system1.74.0 libboost-filesystem1.74.0 libboost-thread1.74.0 libboost-date-time1.74.0 libboost-chrono1.74.0 libboost-regex1.74.0 libboost-serialization1.74.0 libboost-program-options1.74.0 libicu70
build:
name: Build Target
runs-on: ubuntu-22.04
needs: [ install ]
steps:
- uses: actions/checkout@v2
- name: Create Build Dir
run: mkdir build
- name: CMake
run: cmake -DCMAKE_CXX_FLAGS="-g0 -Os -fPIC -std=gnu++17" -DBoost_DEBUG=ON -DBoost_ARCHITECTURE=-x64 ..
working-directory: build
- name: Make
run: make -j$(nproc) --ignore-errors
working-directory: build
My CMake configuration of Boost:
set(Boost_NO_BOOST_CMAKE ON)
set(Boost_USE_STATIC_LIBS ON)
set(Boost_USE_STATIC_RUNTIME ON)
find_package(Boost REQUIRED COMPONENTS system filesystem thread date_time chrono regex serialization program_options)
message(STATUS "Boost Found: ${Boost_INCLUDE_DIRS}")
include_directories(SYSTEM ${Boost_INCLUDE_DIRS})
When building it in a Docker container with Ubuntu 22.04 LTS it works without any problems.
My Dockerfile:
FROM ubuntu:22.04
COPY . /usr/src/project_name
WORKDIR /usr/src/project_name
# install build dependencies
RUN apt-get update &&
apt-get install -y
build-essential
libssl-dev
libffi-dev
python3-dev
gcc-11
g++-11
git
cmake
librocksdb-dev
libboost-all-dev
libboost-system1.74.0
libboost-filesystem1.74.0
libboost-thread1.74.0
libboost-date-time1.74.0
libboost-chrono1.74.0
libboost-regex1.74.0
libboost-serialization1.74.0
libboost-program-options1.74.0
libicu70
# create the build directory
RUN mkdir build
WORKDIR /usr/src/project_name/build
# build and install
RUN cmake -DCMAKE_CXX_FLAGS="-g0 -Os -fPIC -std=gnu++17" .. && make -j$(nproc) --ignore-errors
WORKDIR /usr/src/project_name/build/src
All of the dependencies are installed on the GitHub runner with a job before. Any ideas why this might occur? Anyone else had this issue? I can post the CMake debug info if requested.
2
Answers
Not an answer but a fragment to try. My
Github
action runner forubuntu-latest
looks as follows (you probably want to replace theinstall
target inCMake
build command withall
.github.com will give you a fresh runner for every job.
See here https://docs.github.com/en/actions/using-github-hosted-runners/about-github-hosted-runners#using-a-github-hosted-runner for details.
Thus it is not possible to prepare the machine in one job and use it in a later job.
You should move the installation of the needed packages inside your build job.
In case you need to exchange artifacts, like binaries from one job to a later job, you should take a look at the github actions upload-artifact and download-artifact.