-
Notifications
You must be signed in to change notification settings - Fork 19
139 lines (109 loc) Β· 4.81 KB
/
build-ubuntu.yml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
name: Ubuntu
on:
push:
pull_request:
branches: [ master ]
env:
# Customize the CMake build type here (Release, Debug, RelWithDebInfo, etc.)
BUILD_TYPE: Release
PROJECT_NAME: tcp_pubsub
jobs:
build-ubuntu:
strategy:
matrix:
library_type: [static, shared]
os: [ubuntu-22.04, ubuntu-20.04]
# The CMake configure and build commands are platform agnostic and should work equally well on Windows or Mac.
# You can convert this to a matrix build if you need cross-platform coverage.
# See: https://docs.github.com/en/free-pro-team@latest/actions/learn-github-actions/managing-complex-workflows#using-a-build-matrix
runs-on: ${{ matrix.os }}
steps:
- name: Set Variables
run: |
if [[ '${{ matrix.library_type }}' == 'static' ]]; then
echo "build_shared_libs=OFF" >> "$GITHUB_ENV"
echo "package_postfix=static" >> "$GITHUB_ENV"
else
echo "build_shared_libs=ON" >> "$GITHUB_ENV"
echo "package_postfix=shared" >> "$GITHUB_ENV"
fi
- name: Getting closer to vanilla Ubuntu 18.04
run: |
if [[ '${{ matrix.os }}' == 'ubuntu-18.04' ]]; then
sudo apt-get -y update
echo "Creating directory for libgcc1"
mkdir libgcc1_deb
cd libgcc1_deb
pwd
echo "Downloading bionic-security libgcc1"
apt-get download -t bionic-security libgcc1
echo "Purging GH Actions toolchain PPA"
sudo apt-get -y install ppa-purge
sudo ppa-purge -y ubuntu-toolchain-r/test
echo "installing libgcc1_deb"
sudo dpkg -i *
echo "Installing g++"
sudo apt-get -y install g++
cd ..
fi
shell: bash
- name: Checkout
uses: actions/checkout@v4
with:
submodules: 'true'
fetch-depth: 0
############################################
# Test-compile the project
############################################
- name: Configure CMake
# Configure CMake in a 'build' subdirectory. `CMAKE_BUILD_TYPE` is only required if you are using a single-configuration generator such as make.
# See https://cmake.org/cmake/help/latest/variable/CMAKE_BUILD_TYPE.html?highlight=cmake_build_type
run: |
cmake -B ${{github.workspace}}/_build \
-DCMAKE_BUILD_TYPE=${{env.BUILD_TYPE}} \
-DBUILD_SHARED_LIBS=${{ env.build_shared_libs }}
- name: Build
# Build your program with the given configuration
run: cmake --build ${{github.workspace}}/_build --config ${{env.BUILD_TYPE}}
- name: Read Project Version from CMakeCache
run: |
cmake_project_version_string=$(cat "${{github.workspace}}/_build/CMakeCache.txt" | grep "^CMAKE_PROJECT_VERSION:")
arr=(${cmake_project_version_string//=/ })
cmake_project_version=${arr[1]}
echo "CMAKE_PROJECT_VERSION=$cmake_project_version" >> "$GITHUB_ENV"
shell: bash
- name: CPack
run: cpack -G DEB
working-directory: ${{ github.workspace }}/_build
- name: Rename .deb installer
run: |
mv *.deb '${{ env.PROJECT_NAME }}-${{ env.CMAKE_PROJECT_VERSION }}-${{ matrix.os }}-${{ env.package_postfix }}.deb'
shell: bash
working-directory: ${{github.workspace}}/_build/_package/
- name: Upload binaries
uses: actions/upload-artifact@v4
with:
name: ${{ env.PROJECT_NAME }}-${{ env.CMAKE_PROJECT_VERSION }}-${{ matrix.os }}-${{ env.package_postfix }}
path: ${{github.workspace}}/_build/_package/*.deb
############################################
# Test if our binary can be linked against
############################################
- name: Install binaries
shell: bash
run: sudo dpkg -i ${{ github.workspace }}/_build/_package/*.deb
- name: Compile integration test (Release)
run: |
cmake -B ${{github.workspace}}/samples/integration_test/_build/release -DCMAKE_BUILD_TYPE=Release
cmake --build ${{github.workspace}}/samples/integration_test/_build/release
working-directory: ${{ github.workspace }}/samples/integration_test
- name: Run integration test (Release)
run: ./integration_test
working-directory: ${{ github.workspace }}/samples/integration_test/_build/release
- name: Compile integration test (Debug)
run: |
cmake -B ${{github.workspace}}/samples/integration_test/_build/debug -DCMAKE_BUILD_TYPE=Debug
cmake --build ${{github.workspace}}/samples/integration_test/_build/debug
working-directory: ${{ github.workspace }}/samples/integration_test
- name: Run integration test (Debug)
run: ./integration_test
working-directory: ${{ github.workspace }}/samples/integration_test/_build/debug