Workflow file for this run
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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_artifact: ${{ steps.prepare_windows_artifact.outputs.windowsx64_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: install Octave | |
if: runner.os == 'Windows' | |
shell: bash | |
run: | | |
choco install octave --no-progress | |
- name: build Octave mex-file (Windows) | |
if: runner.os == 'Windows' | |
shell: bash | |
run: | | |
# We compile the mex file for Octave within Octave itself, this seems the easiest way. The | |
# downside is that installing octave takes a long time. | |
octave --version | |
octave_command = "cd ${{github.workspace}}/OctaveOct , mkoctfile --mex octavelibczi.c" | |
octave --eval "$octave_command" | |
- 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: Prepare artifact (Windows) | |
id: prepare_windows_artifact | |
if: runner.os == 'Windows' | |
shell: bash | |
run: | | |
mkdir -p artifacts | |
name="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 "::set-output name=windowsx64_build::${name}" | |
echo "windowsx64_build=${name}" >> $GITHUB_OUTPUT | |
- name: Upload artifacts | |
uses: actions/upload-artifact@v4 | |
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_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_artifact }}/MEXlibCZI.mexw64 | |
prerelease: true | |