Skip to content

Update README.md

Update README.md #86

Workflow file for this run

name: Build Anira
on:
workflow_dispatch: # lets you run a build from github.com
# Runs the workflow on push events but only for the main branch
push:
branches:
- main
- develop
# This is needed otherwise the github.ref is not set with ref/tags/v...
tags:
- 'v*.*.*'
# When pushing new commits, cancel any running builds on that branch
concurrency:
group: ${{ github.ref }}
cancel-in-progress: true
env:
PROJECT_NAME: anira
# Customize the CMake build type here (Release, Debug, RelWithDebInfo, etc.)
BUILD_TYPE: Release
# Use up to 4 cpus to build
CMAKE_BUILD_PARALLEL_LEVEL: 4
# Name of the build directory
BUILD_DIR: build
# Needed for mozilla sccache action
SCCACHE_GHA_ENABLED: "true"
jobs:
build:
name: ${{ matrix.name }}
strategy:
fail-fast: false # show all errors for each platform (vs. cancel jobs on error)
matrix:
include:
- name: Linux-x86_64
os: ubuntu-latest
- name: macOS-x86_64
os: macOS-latest
- name: macOS-arm64
os: macOS-latest
- name: Windows-x86_64
os: windows-latest
runs-on: ${{ matrix.os }}
steps:
#A simple printout of the matrix
- name: printout
shell: bash
run: |
echo ${{ github.ref }}
echo "matrix.name=${{ matrix.name }}";
echo "matrix.os=${{ matrix.os }}";
if [ "${{ matrix.name }}" == "Linux-x86_64" ]; then
echo "$(uname -a)"
elif [ "${{ matrix.os }}" == "macOS-latest" ]; then
echo "$(uname -a)"
fi;
# We need the osxutils to get the codesign and notorization tools
- name: install deps
shell: bash
run: |
if [ "${{ matrix.name }}" == "Linux-x86_64" ]; then
sudo apt-get update && sudo apt install ninja-build
elif [ "${{ matrix.name }}" == "macOS-x86_64" ]; then
brew install osxutils ninja
echo "brew prefix: $(brew --prefix)"
elif [ "${{ matrix.name }}" == "macOS-arm64" ]; then
if [ "$(uname -m)" == "arm64" ]; then
brew install libomp
fi;
brew install osxutils ninja
echo "brew prefix: $(brew --prefix)"
elif [ "${{ matrix.name }}" == "Windows-x86_64" ]; then
choco install ninja
else
echo "Unknown OS";
fi;
# With this we checkout to our repo
- name: get repo and submodules
uses: actions/checkout@v4
with:
submodules: true
# We cache the build to speed up the build process
- name: cache the build
uses: mozilla-actions/sccache-action@v0.0.3
# Typical cmake configuration with default generator
# With DCMAKE_OSX_ARCHITECTURES="arm64;x86_64" we can build universal binaries for apple computers
- name: cmake configure
shell: bash
run: |
if [ "${{ matrix.name }}" == "Linux-x86_64" ]; then
cmake -B build -G Ninja -DCMAKE_BUILD_TYPE=${{ env.BUILD_TYPE }} -DCMAKE_C_COMPILER_LAUNCHER=sccache -DCMAKE_CXX_COMPILER_LAUNCHER=sccache -DBUILD_SHARED_LIBS=ON -DANIRA_WITH_INSTALL=ON
elif [ "${{ matrix.name }}" == "macOS-x86_64" ]; then
cmake -B build -G Ninja -DCMAKE_BUILD_TYPE=${{ env.BUILD_TYPE }} -DCMAKE_C_COMPILER_LAUNCHER=sccache -DCMAKE_CXX_COMPILER_LAUNCHER=sccache -DCMAKE_OSX_ARCHITECTURES=x86_64 -DBUILD_SHARED_LIBS=ON -DANIRA_WITH_INSTALL=ON
elif [ "${{ matrix.name }}" == "macOS-arm64" ]; then
cmake -B build -G Ninja -DCMAKE_BUILD_TYPE=${{ env.BUILD_TYPE }} -DCMAKE_C_COMPILER_LAUNCHER=sccache -DCMAKE_CXX_COMPILER_LAUNCHER=sccache -DCMAKE_OSX_ARCHITECTURES=arm64 -DBUILD_SHARED_LIBS=ON -DANIRA_WITH_INSTALL=ON
elif [ "${{ matrix.name }}" == "Windows-x86_64" ]; then
cmake -B build -DCMAKE_BUILD_TYPE=${{ env.BUILD_TYPE }} -DCMAKE_C_COMPILER_LAUNCHER=sccache -DCMAKE_CXX_COMPILER_LAUNCHER=sccache -DBUILD_SHARED_LIBS=ON -DANIRA_WITH_INSTALL=ON
else
echo "Unknown OS";
fi;
# Build the project
- name: cmake build
shell: bash
run: cmake --build build --config ${{ env.BUILD_TYPE }} --parallel ${{ env.CMAKE_BUILD_PARALLEL_LEVEL }}
# Build the install target
- name: install target
run: cmake --install build --config ${{ env.BUILD_TYPE }}
- name: define the anira version
shell: bash
run: |
version=$(grep 'CMAKE_PROJECT_VERSION:STATIC' build/CMakeCache.txt | cut -d'=' -f2)
echo "ANIRA_VERSION=${version}" >> $GITHUB_ENV
echo "current anira version: ${version}"
# Declaring the product name and the packaging directory
- name: declare artefact variables
shell: bash
run: |
echo "PACKAGE_DIR=artefacts/${{ env.PROJECT_NAME }}-${{ env.ANIRA_VERSION }}-${{ matrix.name }}" >> $GITHUB_ENV
echo "PRODUCT_NAME=${{ env.PROJECT_NAME }}-${{ env.ANIRA_VERSION }}-${{ matrix.name }}" >> $GITHUB_ENV
# Moving the artefacts to a packaging directory
- name: move artefacts
shell: bash
run: |
mkdir -p artefacts;
mv "${{ env.BUILD_DIR }}/${{ env.PROJECT_NAME }}-${{ env.ANIRA_VERSION }}" ${{ env.PACKAGE_DIR }};
# We need to import the apple developer certificate so that we can codesign our binaries
- name: import certificates (macOS)
uses: apple-actions/import-codesign-certs@v2
if: ${{ matrix.os == 'macOS-latest' }}
with:
# GitHub encrypted secrets
p12-file-base64: ${{ secrets.DEV_ID_APP_CERT }}
p12-password: ${{ secrets.DEV_ID_APP_PWD }}
# Codesigning all the libraries
- name: codesign (macOS)
if: ${{ matrix.os == 'macOS-latest' }}
run: |
# codesign all libs
codesign --force -s "${{ secrets.DEV_ID_APP }}" -v ${{ env.PACKAGE_DIR }}/lib/*.dylib --deep --strict --options=runtime --timestamp;
# Zip the artefact
- name: zip artefacts
working-directory: ${{github.workspace}}/artefacts
shell: bash
run: |
if [ "${{ matrix.name }}" == "Linux-x86_64" ]; then
zip -r ${{ env.PRODUCT_NAME }}.zip ${{ env.PRODUCT_NAME }}/
elif [ "${{ matrix.os }}" == "macOS-latest" ]; then
zip -vr ${{ env.PRODUCT_NAME }}.zip ${{ env.PRODUCT_NAME }}/ -x "*.DS_Store"
elif [ "${{ matrix.name }}" == "Windows-x86_64" ]; then
pwsh -command "Compress-Archive -Path '${{ env.PRODUCT_NAME }}/' -DestinationPath '${{ env.PRODUCT_NAME }}.zip'"
else
echo "Unknown OS";
fi;
- name: upload artifact
uses: actions/upload-artifact@v4
with:
name: ${{ env.PRODUCT_NAME }}.zip
path: ${{ env.PACKAGE_DIR }}.zip
release:
if: startsWith(github.ref, 'refs/tags/')
runs-on: ubuntu-latest
needs: build
steps:
- name: Get Artifacts
uses: actions/download-artifact@v4
- name: Create Release
uses: softprops/action-gh-release@v2
with:
files: |
*/*.zip