-
Notifications
You must be signed in to change notification settings - Fork 854
147 lines (120 loc) · 4.21 KB
/
build.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
139
140
141
142
143
144
145
146
147
name: Build
on: [push, pull_request]
env:
BUILD_TYPE: Release
defaults:
run:
shell: bash
jobs:
build:
runs-on: ${{ matrix.os }}
strategy:
fail-fast: false
matrix:
os: [ubuntu-22.04, ubuntu-24.04, macos-14, windows-2022]
shared_libs: ['ON', 'OFF']
include:
- os: ubuntu-22.04
package_manager: "apt"
test: "ON"
- os: ubuntu-24.04
package_manager: "apt"
test: "ON"
- os: macos-14
package_manager: "brew"
test: "OFF"
- os: windows-2022
package_manager: "vcpkg"
test: "OFF"
steps:
- name: Checkout Pangolin
uses: actions/checkout@v4
with:
submodules: true
- name: "(vcpkg only) Install Microsoft Visual C++"
if: ${{ matrix.package_manager == 'vcpkg' }}
uses: ilammy/msvc-dev-cmd@v1
- name: "(vcpkg only) Restore any cached ports"
uses: lukka/run-vcpkg@v11
if: ${{ matrix.package_manager == 'vcpkg' }}
with:
vcpkgDirectory: '${{github.workspace}}/scripts/vcpkg'
- name: "(vcpkg only) Setup CMake Toolchain file"
if: ${{ matrix.package_manager == 'vcpkg' }}
run: |
export TOOLCHAIN_FILE="${{github.workspace}}/scripts/vcpkg/scripts/buildsystems/vcpkg.cmake"
echo "${{github.workspace}}/scripts/vcpkg" >> $GITHUB_PATH
echo "TOOLCHAIN_FILE=$TOOLCHAIN_FILE" >> $GITHUB_ENV
- name: "(brew only) Remove Python symlinks"
if: ${{ matrix.package_manager == 'brew' }}
run: |
rm /usr/local/bin/2to3
rm /usr/local/bin/2to3-3.12
rm /usr/local/bin/idle3
rm /usr/local/bin/idle3.12
rm /usr/local/bin/pydoc3
rm /usr/local/bin/pydoc3.12
rm /usr/local/bin/python3
rm /usr/local/bin/python3.12
rm /usr/local/bin/python3-config
rm /usr/local/bin/python3.12-config
- name: Install Dependencies
env:
HOMEBREW_NO_INSTALLED_DEPENDENTS_CHECK: 1
run: |
echo "vcpkg location: $(which vcpkg)"
echo "CMake toolchain file: $TOOLCHAIN_FILE"
$GITHUB_WORKSPACE/scripts/install_prerequisites.sh -v -u -m ${{matrix.package_manager}} all
- name: Configure CMake
run: >
cmake -G Ninja -B build
-D CMAKE_BUILD_TYPE=$BUILD_TYPE
-D CMAKE_TOOLCHAIN_FILE="$TOOLCHAIN_FILE"
-D BUILD_SHARED_LIBS=${{ matrix.shared_libs }}
-D BUILD_TESTS=${{ matrix.test }}
- name: Build
run: cmake --build build --config $BUILD_TYPE
- name: Build Python wheel
run: cmake --build build -t pypangolin_wheel
- name: Install Python wheel
if: ${{ matrix.package_manager == 'apt' }}
env:
PIP_BREAK_SYSTEM_PACKAGES: 1
run: |
pip install build/pypangolin-*.whl
pip show pypangolin
python -c "import pypangolin"
- name: Run all tests
if: ${{ matrix.test == 'ON' }}
run: |
cmake --build build --target test
emscripten:
runs-on: ubuntu-22.04
steps:
- name: Checkout Pangolin
uses: actions/checkout@v4
- name: install build dependencies
run: |
sudo apt update
sudo apt install -y emscripten ninja-build libeigen3-dev catch2
- name: Configure Pangolin
run: emcmake cmake -G Ninja -B pangolin-build -D CMAKE_BUILD_TYPE=$BUILD_TYPE -D Eigen3_DIR=/usr/share/eigen3/cmake/
- name: Build Pangolin
run: cmake --build pangolin-build
- name: Copy Examples to www folder
run: |
mkdir -p ${{runner.workspace}}/www/emscripten
rsync -zarvm --include="*/" --include="*.html" --include="*.js" --include="*.wasm" --exclude="*" pangolin-build/examples ${{runner.workspace}}/www/emscripten
- name: Copy README to www folder
run: |
cp "${{github.workspace}}/README.md" "${{runner.workspace}}/www/index.md"
- name: Deploy Examples to GitHub Pages (for pushes to master)
if: success() && (github.ref == 'refs/heads/master')
uses: crazy-max/ghaction-github-pages@v4
with:
target_branch: gh-pages
keep_history: true
# build_dir path relative to ${{runner.workspace}}/Pangolin
build_dir: ../www
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}