-
Notifications
You must be signed in to change notification settings - Fork 0
171 lines (165 loc) · 6.7 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
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
name: Build for Ubuntu-x64 and Windows-x64
on:
workflow_dispatch:
inputs:
create_release:
description: "Should a release be created?"
required: true
default: "false"
type: choice
options:
- "true"
- "false"
push:
permissions:
contents: write
jobs:
build:
name: Build Binaries
runs-on: ${{ matrix.os }}
strategy:
matrix:
os: [ubuntu-latest, windows-latest] # Windows and Linux builds
outputs:
linuxx64_artifact: ${{ steps.prepare_linux_artifact.outputs.linuxx64_build }}
windowsx64_matlab_artifact: ${{ steps.prepare_windows_matlab_artifact.outputs.windowsx64_matlab_build }}
windowsx64_octave_artifact: ${{ steps.prepare_windows_octave_artifact.outputs.windowsx64_octave_build }}
steps:
- name: Check out repository
uses: actions/checkout@v4
- name: Set up MATLAB
uses: matlab-actions/setup-matlab@v2
- name: run build (Linux)
if: runner.os == 'Linux'
shell: bash
run: |
mkdir build
cd build
cmake .. -DCMAKE_BUILD_TYPE=Release
cmake --build . --config Release -j
- name: run build (Windows)
if: runner.os == 'Windows'
shell: bash
run: |
mkdir build
cd build
cmake .. -DCMAKE_BUILD_TYPE=Release
cmake --build . --config Release -j
- name: Prepare artifact (Linux)
id: prepare_linux_artifact
if: runner.os == 'Linux'
shell: bash
run: |
mkdir -p artifacts
name="MEXlibCZI-linux-x64-$(git describe --always)"
mkdir -p artifacts/${name}
cp build/MEXlibCZI/MEXlibCZI.mexa64 artifacts/${name}/
echo "artifactName=${name}" >> "$GITHUB_ENV"
echo "artifactPath=artifacts/${name}" >> "$GITHUB_ENV"
echo "linuxx64_build=${name}" >> "$GITHUB_OUTPUT"
- name: install Octave (Windows)
if: runner.os == 'Windows'
shell: bash
run: |
choco install octave --no-progress
# I am not sure how to find the octave-cli-executable now, so we search for the link in the start menu
search_dir="/c/ProgramData/Microsoft/Windows/Start Menu/Programs"
octave_link=$(find "$search_dir" -type f -name "Octave*CLI*.lnk" 2>/dev/null)
octave_link_windows_path=$(cygpath -w "$octave_link")
echo "octave_link=$octave_link"
echo "octave_link_windows_path=$octave_link_windows_path"
echo "OCTAVECLI_LINK=$octave_link_windows_path" >> "$GITHUB_ENV"
- name: install Octave (Linux)
if: runner.os == 'Linux'
shell: bash
run: |
sudo apt install octave
- name: build Octave mex-file (Windows)
if: runner.os == 'Windows'
shell: cmd
run: |
REM We compile the mex file for Octave within Octave itself, this seems the easiest way. The
REM downside is that installing octave takes a long time.
REM Note that we are using cmd.exe here, because it can "execute" the .lnk file.
"%OCTAVECLI_LINK%" --version
REM echo "cd %GITHUB_WORKSPACE%/OctaveMex , mkoctfile --mex octavelibczi.c"
set "GITHUB_WORKSPACE_FORWARD_SLASHES=%GITHUB_WORKSPACE:\=/%
"%OCTAVECLI_LINK%" --eval "cd %GITHUB_WORKSPACE_FORWARD_SLASHES%/OctaveMex , mkoctfile --mex octavelibczi.c"
# now, copy the libmexlibczi.dll to this folder
cp build/MEXlibCZI/Release/libmexlibczi.dll %GITHUB_WORKSPACE%\OctaveMex
dir %GITHUB_WORKSPACE%\OctaveMex
- name: build Octave mex-file (Linux)
if: runner.os == 'Linux'
shell: cmd
run: |
cd OctaveMex
octave --cli "mkoctfile --mex octavelibczi.c"
cp build/MEXlibCZI/Release/libmexlibczi.so .
ls
- name: Prepare MATLAB-mex artifact (Windows)
id: prepare_windows_matlab_artifact
if: runner.os == 'Windows'
shell: bash
run: |
mkdir -p artifacts
name="MATLAB-MEXlibCZI-windows-x64-$(git describe --always)"
mkdir -p artifacts/${name}
cp build/MEXlibCZI/Release/MEXlibCZI.mexw64 artifacts/${name}/
echo "artifactName=${name}" >> "$GITHUB_ENV"
echo "artifactPath=artifacts/${name}" >> "$GITHUB_ENV"
echo "windowsx64_matlab_build=${name}" >> $GITHUB_OUTPUT
- name: Upload MATLAB-mex artifacts
uses: actions/upload-artifact@v4
with:
path: ${{ env.artifactPath }}/
name: ${{ env.artifactName }}
- name: Prepare Octave-mex artifact (Windows)
id: prepare_windows_octave_artifact
if: runner.os == 'Windows'
shell: bash
run: |
mkdir -p artifacts
name="Octave-MEXlibCZI-windows-x64-$(git describe --always)"
mkdir -p artifacts/${name}
cp $(cygpath "${GITHUB_WORKSPACE}")/libmexlibczi/libmexlibczi.dll artifacts/${name}/
cp $(cygpath "${GITHUB_WORKSPACE}")/OctaveMex/octavelibczi.mex artifacts/${name}/
echo "artifactName=${name}" >> "$GITHUB_ENV"
echo "artifactPath=artifacts/${name}" >> "$GITHUB_ENV"
echo "windowsx64_octave_build=${name}" >> $GITHUB_OUTPUT
- name: Upload Octave-mex artifacts
uses: actions/upload-artifact@v4
if: runner.os == 'Windows' # currently we only build Octave mex files on Windows
with:
path: ${{ env.artifactPath }}/
name: ${{ env.artifactName }}
release:
name: Create GitHub Release
runs-on: ubuntu-latest
needs: build
if: inputs.create_release == 'true' # Only run if release is selected
steps:
- name: Check out repository
uses: actions/checkout@v4
- name: Download All Artifacts
if: needs.build.outputs.linuxx64_artifact != '' || needs.build.outputs.windowsx64_matlab_artifact != ''
uses: actions/download-artifact@v4
with:
path: ./artifacts # download to a specific folder
- name: Script to prepare release
shell: bash
run: |
cd scripts
mexlibczi_version=$(bash get_version.sh)
cd ..
git_version=$(git describe --always)
echo "releaseName=version ${mexlibczi_version} (${git_version})" >> "$GITHUB_ENV"
echo "tagName=v${mexlibczi_version}" >> "$GITHUB_ENV"
- name: Release
uses: softprops/action-gh-release@v2
with:
name: ${{ env.releaseName }}
tag_name: ${{ env.tagName }}
files: |
./artifacts/${{ needs.build.outputs.linuxx64_artifact }}/MEXlibCZI.mexa64
./artifacts/${{ needs.build.outputs.windowsx64_matlab_artifact }}/MEXlibCZI.mexw64
prerelease: true