Skip to content

Update main.yml

Update main.yml #225

Workflow file for this run

name: Flow pipeline
on:
push:
branches:
- '*'
pull_request:
branches:
- '*'
# To run a workflow manually, the workflow must be configured to run on the workflow_dispatch event.
workflow_dispatch:
jobs:
doc:
strategy:
fail-fast: false
matrix:
compiler:
- id: clang-15
name: clang
version: 15
c-path: /usr/bin/clang-15
cpp-path: /usr/bin/clang++-15
build-type:
- id: release
conan-build-type: Release
conan-preset: release
runs-on: ubuntu-latest
name: |
doc-${{ matrix.compiler.id }}-${{ matrix.build-type.id }}
steps:
- name: Checkout Flow repository
uses: actions/checkout@v4
- name: Update available software list for apt-get
run: sudo apt-get update
- name: Install Flow dependencies (like Graphviz) with apt-get
run: |
sudo apt-get install -y graphviz
- name: Install the latest version of Conan which is less than 2
run: |
pip install "conan<2"
- name: Create Conan profile
run: |
cat <<EOF > conan_profile
[settings]
compiler = ${{ matrix.compiler.name }}
compiler.version = ${{ matrix.compiler.version }}
compiler.cppstd = 17
compiler.libcxx = libstdc++11
arch = x86_64
os = Linux
build_type = ${{ matrix.build-type.conan-build-type }}
[conf]
tools.build:compiler_executables = { "c": "${{ matrix.compiler.c-path }}", "cpp": "${{ matrix.compiler.cpp-path }}" }
tools.env.virtualenv:auto_use = True
[buildenv]
CC = ${{ matrix.compiler.c-path }}
CXX = ${{ matrix.compiler.cpp-path }}
[options]
flow:build = False
flow:doc = True
EOF
- name: Install Flow dependencies (like Doxygen) with Conan using the profile
run: |
conan install \
. \
--profile:build conan_profile \
--profile:host conan_profile \
--build missing
which cmake
echo $PATH
/usr/local/bin/cmake --version
cmake \
--preset ${{ matrix.build-type.conan-preset }} \
-DCFG_ENABLE_DOC_GEN=ON \
-DCFG_SKIP_CODE_GEN=ON
- name: Get the number of processor cores to generate documentation in parallel
uses: SimenB/github-actions-cpu-cores@v1
id: cpu-cores
- name: Generate code documentation (full and API-only) using Makefile and Doxygen
run: |
VERBOSE=1 make \
flow_doc_public \
flow_doc_full \
--directory $GITHUB_WORKSPACE/build/${{ matrix.build-type.conan-build-type }} \
-j${{ steps.cpu-cores.outputs.count }}
- name: Package documentation tarball [full, API-only and landing page]
run: |
cd $GITHUB_WORKSPACE/doc/flow_doc
$GITHUB_WORKSPACE/tools/doc/stage_generated_docs.sh $GITHUB_WORKSPACE/build/${{ matrix.build-type.conan-build-type }}
- name: Upload documentation tarball
uses: actions/upload-artifact@v3
with:
name: flow-doc-${{ matrix.compiler.id }}-${{ matrix.build-type.id }}
path: |
${{ github.workspace }}/doc/flow_doc.tgz
build:
strategy:
fail-fast: false
matrix:
compiler:
- id: gcc-9
name: gcc
version: 9
c-path: /usr/bin/gcc-9
cpp-path: /usr/bin/g++-9
- id: gcc-10
name: gcc
version: 10
c-path: /usr/bin/gcc-10
cpp-path: /usr/bin/g++-10
- id: gcc-11
name: gcc
version: 11
c-path: /usr/bin/gcc-11
cpp-path: /usr/bin/g++-11
- id: gcc-13
name: gcc
version: 13
c-path: /usr/bin/gcc-13
cpp-path: /usr/bin/g++-13
- id: clang-13
name: clang
version: 13
c-path: /usr/bin/clang-13
cpp-path: /usr/bin/clang++-13
- id: clang-15
name: clang
version: 15
c-path: /usr/bin/clang-15
cpp-path: /usr/bin/clang++-15
- id: clang-16
name: clang
version: 16
c-path: /usr/bin/clang-16
cpp-path: /usr/bin/clang++-16
install: True
- id: clang-17
name: clang
version: 17
c-path: /usr/bin/clang-17
cpp-path: /usr/bin/clang++-17
install: True
build-type:
- id: relwithdebinfo-tsan
conan-build-type: RelWithDebInfo
conan-preset: relwithdebinfo
conan-custom-settings: |
data['compiler']['gcc']['sanitizer'] = ['None', 'address', 'thread', 'memory', 'undefined-behavior']
data['compiler']['clang']['sanitizer'] = ['None', 'address', 'thread', 'memory', 'undefined-behavior']
conan-profile-custom-conf: |
tools.build:cflags = [ "-fsanitize=thread" ]
tools.build:cxxflags = [ "-fsanitize=thread" ]
tools.build:sharedlinkflags = [ "-fsanitize=thread" ]
tools.build:staticlinkflags = [ "-fsanitize=thread" ]
tools.build:exelinkflags = [ "-fsanitize=thread" ]
conan-profile-custom-settings: |
compiler.sanitizer = thread
before-each-test: |
export TSAN_OPTIONS="suppressions=$GITHUB_WORKSPACE/tsan_suppressions.cfg second_deadlock_stack=1"
exclude:
- compiler: { id: gcc-9 }
build-type: { id: relwithdebinfo-tsan }
- compiler: { id: gcc-10 }
build-type: { id: relwithdebinfo-tsan }
- compiler: { id: gcc-11 }
build-type: { id: relwithdebinfo-tsan }
- compiler: { id: gcc-13 }
build-type: { id: relwithdebinfo-tsan }
runs-on: ubuntu-latest
name: |
build-${{ matrix.compiler.id }}-${{ matrix.build-type.id }}
steps:
- name: Checkout Flow repository
uses: actions/checkout@v4
- name: Update available software list for apt-get
run: sudo apt-get update
- name: Install clang compiler
if: |
matrix.compiler.install && matrix.compiler.name == 'clang'
run: |
wget https://apt.llvm.org/llvm.sh
chmod u+x llvm.sh
sudo ./llvm.sh ${{ matrix.compiler.version }}
- name: Install GCC compiler
if: |
matrix.compiler.install && matrix.compiler.name == 'gcc'
run: |
sudo apt-get install -y software-properties-common
sudo add-apt-repository ppa:ubuntu-toolchain-r/test -y
sudo apt-get update
sudo apt-get install -y gcc-${{ matrix.compiler.version }} g++-${{ matrix.compiler.version }}
- name: Install the latest version of Conan which is less than 2
run: |
pip install "conan<2"
- name: Add custom settings for Conan packages
run: |
conan config init
pip install PyYAML
CONAN_SETTINGS_PATH=$(conan config home)/settings.yml
python -c "
import yaml
with open('$CONAN_SETTINGS_PATH', 'r') as file:
data = yaml.safe_load(file)
${{ matrix.build-type.conan-custom-settings }}
with open('$CONAN_SETTINGS_PATH', 'w') as file:
yaml.dump(data, file)
"
if: |
matrix.build-type.conan-custom-settings
- name: Create Conan profile
run: |
cat <<EOF > conan_profile
[settings]
compiler = ${{ matrix.compiler.name }}
compiler.version = ${{ matrix.compiler.version }}
compiler.cppstd = 17
# TODO: Consider testing with LLVM-libc++ also (with clang anyway).
compiler.libcxx = libstdc++11
arch = x86_64
os = Linux
build_type = ${{ matrix.build-type.conan-build-type }}
${{ matrix.build-type.conan-profile-custom-settings }}
[conf]
tools.build:compiler_executables = {"c": "${{ matrix.compiler.c-path }}", "cpp": "${{ matrix.compiler.cpp-path }}"}
${{ matrix.build-type.conan-profile-custom-conf }}
[buildenv]
CC = ${{ matrix.compiler.c-path }}
CXX = ${{ matrix.compiler.cpp-path }}
LD_FLAGS = -fsanitize=thread
LDFLAGS = -fsanitize=thread
[options]
flow:build = True
flow:doc = False
EOF
- name: Install Flow dependencies with Conan using the profile
run: |
conan install \
. \
--profile:build conan_profile \
--profile:host conan_profile \
--build missing
- name: Get the number of processor cores to enable parallelization when working with Makefile
uses: SimenB/github-actions-cpu-cores@v1
id: cpu-cores
- name: Prepare Makefile using CMake
run: |
which cmake
/usr/local/bin/cmake --version
echo $PATH
cmake \
--preset ${{ matrix.build-type.conan-preset }} \
-DCMAKE_INSTALL_PREFIX=$GITHUB_WORKSPACE/install/${{ matrix.build-type.conan-build-type }}
- name: Build library and demos/tests with Makefile
run: |
VERBOSE=1 make \
--keep-going \
--directory $GITHUB_WORKSPACE/build/${{ matrix.build-type.conan-build-type }} \
-j${{ steps.cpu-cores.outputs.count }}
- name: Install library and demos/tests with Makefile
run: |
VERBOSE=1 make install \
--directory $GITHUB_WORKSPACE/build/${{ matrix.build-type.conan-build-type }} \
-j${{ steps.cpu-cores.outputs.count }}
- name: Run 'NetFlow echo' demo/test
run: |
${{ matrix.build-type.before-each-test }}
cd $GITHUB_WORKSPACE/install/${{ matrix.build-type.conan-build-type }}/bin/
./net_flow_echo_srv.exec 8888 localhost &
sleep 1
./net_flow_echo_cli.exec 1 127.0.01 8888 "Hello world!"