Skip to content

CI

CI #920

Workflow file for this run

name: CI
on:
workflow_dispatch:
pull_request:
push:
schedule:
- cron: '0 0 * * *' # nightly job at midnight UTC
jobs:
build-and-test:
name: Run on ${{ matrix.os }} with SOFA ${{ matrix.sofa_branch }}
runs-on: ${{ matrix.os }}
continue-on-error: false
strategy:
fail-fast: false
matrix:
os: [ubuntu-22.04, macos-13, windows-2022]
sofa_branch: [master]
steps:
- name: Setup SOFA and environment
id: sofa
uses: sofa-framework/sofa-setup-action@v5
with:
sofa_root: ${{ github.workspace }}/sofa
sofa_version: ${{ matrix.sofa_branch }}
sofa_scope: 'standard'
- name: Checkout source code
uses: actions/checkout@v2
with:
path: ${{ env.WORKSPACE_SRC_PATH }}
- name: Install deps
shell: bash
run: |
if [[ "$RUNNER_OS" == "Linux" ]]; then
sudo apt-get update
sudo apt-get -qq install xorg-dev libgtk-3-dev
fi
- name: Build and install
shell: bash
run: |
if [[ "$RUNNER_OS" == "Windows" ]]; then
cmd //c "${{ steps.sofa.outputs.vs_vsdevcmd }} \
&& cd /d $WORKSPACE_BUILD_PATH \
&& cmake \
-GNinja \
-DCMAKE_PREFIX_PATH="$SOFA_ROOT/lib/cmake" \
-DCMAKE_BUILD_TYPE=Release \
-DCMAKE_INSTALL_PREFIX="$WORKSPACE_INSTALL_PATH" \
-DAPPLICATION_RUNSOFAGLFW=ON \
-DPLUGIN_SOFAGLFW=ON \
../src \
&& ninja -v install"
else
cd "$WORKSPACE_BUILD_PATH"
ccache -z
cmake \
-GNinja \
-DCMAKE_C_COMPILER_LAUNCHER=ccache \
-DCMAKE_CXX_COMPILER_LAUNCHER=ccache \
-DCMAKE_PREFIX_PATH=$SOFA_ROOT/lib/cmake \
-DCMAKE_BUILD_TYPE=Release \
-DCMAKE_INSTALL_PREFIX="$WORKSPACE_INSTALL_PATH" \
-DAPPLICATION_RUNSOFAGLFW=ON \
-DPLUGIN_SOFAGLFW=ON \
../src
ninja -v install
echo ${CCACHE_BASEDIR}
ccache -s
fi
- name: Sanitize artifact name
id: sanitize
# This step removes special characters from the artifact name to ensure compatibility with upload-artifact
# Characters removed: " : < > | * ? \r \n \ /
# Spaces are replaced with underscores
# This sanitization prevents errors in artifact creation and retrieval
shell: pwsh
run: |
$originalName = "SofaGLFW_${{ steps.sofa.outputs.run_branch }}_for-SOFA-${{ steps.sofa.outputs.sofa_version }}_${{ runner.os }}"
$artifact_name = $originalName -replace '[":;<>|*?\r\n\\/]', '' -replace ' ', '_'
echo "artifact_name=$artifact_name" >> $env:GITHUB_OUTPUT
- name: Create artifact
uses: actions/upload-artifact@v4.4.0
with:
name: ${{ steps.sanitize.outputs.artifact_name }}
path: ${{ env.WORKSPACE_INSTALL_PATH }}
- name: Install artifact
uses: actions/download-artifact@v4.1.7
with:
name: ${{ steps.sanitize.outputs.artifact_name }}
path: ${{ env.WORKSPACE_ARTIFACT_PATH }}
deploy:
name: Deploy artifacts
if: always() && startsWith(github.ref, 'refs/heads/') # we are on a branch (not a PR)
needs: [build-and-test]
runs-on: ubuntu-latest
continue-on-error: true
steps:
- name: Get artifacts
uses: actions/download-artifact@v2
with:
path: artifacts
- name: Zip artifacts and set env vars
shell: bash
run: |
cd $GITHUB_WORKSPACE/artifacts
for artifact in *; do
zip $artifact.zip -r $artifact/*
done
PROJECT_NAME="${GITHUB_REPOSITORY#*/}"
echo "PROJECT_NAME=$PROJECT_NAME" | tee -a $GITHUB_ENV
RELEASE_NAME="${{ github.ref_name }}"
RELEASE_TAGNAME="release-${{ github.ref_name }}"
RELEASE_DATE="$(date +'%Y-%m-%d (at %T UTC)')"
echo "RELEASE_NAME=$RELEASE_NAME" | tee -a $GITHUB_ENV
echo "RELEASE_TAGNAME=$RELEASE_TAGNAME" | tee -a $GITHUB_ENV
echo "RELEASE_DATE=$RELEASE_DATE" | tee -a $GITHUB_ENV
- name: Delete old release
uses: dev-drprasad/delete-tag-and-release@v1.0.1
with:
tag_name: ${{ env.RELEASE_TAGNAME }}
github_token: ${{ secrets.GITHUB_TOKEN }}
delete_release: true
- name: Create new release
if: success() || failure()
uses: softprops/action-gh-release@v1
with:
name: ${{ env.RELEASE_NAME }}
tag_name: ${{ env.RELEASE_TAGNAME }}
fail_on_unmatched_files: false
target_commitish: ${{ env.RELEASE_NAME }}
body: |
Last updated on ${{ env.RELEASE_DATE }}
files: |
artifacts/${{ env.PROJECT_NAME }}_*_Linux.zip
artifacts/${{ env.PROJECT_NAME }}_*_Windows.zip
artifacts/${{ env.PROJECT_NAME }}_*_macOS.zip
build-and-test-with-imgui:
name: Run on ${{ matrix.os }} with SOFA ${{ matrix.sofa_branch }} and imgui
runs-on: ${{ matrix.os }}
continue-on-error: false
strategy:
fail-fast: false
matrix:
os: [ubuntu-22.04, macos-13, windows-2022]
sofa_branch: [master]
steps:
- name: Setup SOFA and environment
id: sofa
uses: sofa-framework/sofa-setup-action@v5
with:
sofa_root: ${{ github.workspace }}/sofa
sofa_version: ${{ matrix.sofa_branch }}
sofa_scope: 'standard'
- name: Checkout source code
uses: actions/checkout@v2
with:
path: ${{ env.WORKSPACE_SRC_PATH }}
- name: Install deps
shell: bash
run: |
if [[ "$RUNNER_OS" == "Linux" ]]; then
sudo apt-get update
sudo apt-get -qq install xorg-dev libgtk-3-dev
fi
- name: Build and install
shell: bash
run: |
if [[ "$RUNNER_OS" == "Windows" ]]; then
cmd //c "${{ steps.sofa.outputs.vs_vsdevcmd }} \
&& cd /d $WORKSPACE_BUILD_PATH \
&& cmake \
-GNinja \
-DCMAKE_PREFIX_PATH="$SOFA_ROOT/lib/cmake" \
-DCMAKE_BUILD_TYPE=Release \
-DCMAKE_INSTALL_PREFIX="$WORKSPACE_INSTALL_PATH" \
-DAPPLICATION_RUNSOFAGLFW=ON \
-DPLUGIN_SOFAGLFW=ON \
-DPLUGIN_SOFAIMGUI=ON \
../src \
&& ninja -v install"
else
cd "$WORKSPACE_BUILD_PATH"
ccache -z
cmake \
-GNinja \
-DCMAKE_C_COMPILER_LAUNCHER=ccache \
-DCMAKE_CXX_COMPILER_LAUNCHER=ccache \
-DCMAKE_PREFIX_PATH=$SOFA_ROOT/lib/cmake \
-DCMAKE_BUILD_TYPE=Release \
-DCMAKE_INSTALL_PREFIX="$WORKSPACE_INSTALL_PATH" \
-DAPPLICATION_RUNSOFAGLFW=ON \
-DPLUGIN_SOFAGLFW=ON \
-DPLUGIN_SOFAIMGUI=ON \
../src
ninja -v install
echo ${CCACHE_BASEDIR}
ccache -s
fi
- name: Sanitize artifact name
id: sanitize
# This step removes special characters from the artifact name to ensure compatibility with upload-artifact
# Characters removed: " : < > | * ? \r \n \ /
# Spaces are replaced with underscores
# This sanitization prevents errors in artifact creation and retrieval
shell: pwsh
run: |
$originalName = "SofaGLFW_${{ steps.sofa.outputs.run_branch }}_with_imgui_for-SOFA-${{ steps.sofa.outputs.sofa_version }}_${{ runner.os }}"
$artifact_name = $originalName -replace '[":;<>|*?\r\n\\/]', '' -replace ' ', '_'
echo "artifact_name=$artifact_name" >> $env:GITHUB_OUTPUT
- name: Create artifact
uses: actions/upload-artifact@v4.4.0
with:
name: ${{ steps.sanitize.outputs.artifact_name }}
path: ${{ env.WORKSPACE_INSTALL_PATH }}
- name: Install artifact
uses: actions/download-artifact@v4.1.7
with:
name: ${{ steps.sanitize.outputs.artifact_name }}
path: ${{ env.WORKSPACE_ARTIFACT_PATH }}
deploy-with-imgui:
name: Deploy artifacts (with imgui)
if: always() && startsWith(github.ref, 'refs/heads/') # we are on a branch (not a PR)
needs: [build-and-test-with-imgui]
runs-on: ubuntu-latest
continue-on-error: true
steps:
- name: Get artifacts
uses: actions/download-artifact@v2
with:
path: artifacts
- name: Zip artifacts and set env vars
shell: bash
run: |
cd $GITHUB_WORKSPACE/artifacts
for artifact in *; do
zip $artifact.zip -r $artifact/*
done
PROJECT_NAME="${GITHUB_REPOSITORY#*/}"
echo "PROJECT_NAME=$PROJECT_NAME" | tee -a $GITHUB_ENV
RELEASE_RAWNAME="${{ github.ref_name }}"
RELEASE_NAME="${{ github.ref_name }}-with-imgui"
RELEASE_TAGNAME="release-${{ github.ref_name }}-with-imgui"
RELEASE_DATE="$(date +'%Y-%m-%d (at %T UTC)')"
echo "RELEASE_RAWNAME=$RELEASE_RAWNAME" | tee -a $GITHUB_ENV
echo "RELEASE_NAME=$RELEASE_NAME" | tee -a $GITHUB_ENV
echo "RELEASE_TAGNAME=$RELEASE_TAGNAME" | tee -a $GITHUB_ENV
echo "RELEASE_DATE=$RELEASE_DATE" | tee -a $GITHUB_ENV
- name: Delete old release
uses: dev-drprasad/delete-tag-and-release@v1.0.1
with:
tag_name: ${{ env.RELEASE_TAGNAME }}
github_token: ${{ secrets.GITHUB_TOKEN }}
delete_release: true
- name: Create new release
if: success() || failure()
uses: softprops/action-gh-release@v1
with:
name: ${{ env.RELEASE_NAME }}
tag_name: ${{ env.RELEASE_TAGNAME }}
fail_on_unmatched_files: false
target_commitish: ${{ env.RELEASE_RAWNAME }}
body: |
Last updated on ${{ env.RELEASE_DATE }}
files: |
artifacts/${{ env.PROJECT_NAME }}_*_with_imgui_*_Linux.zip
artifacts/${{ env.PROJECT_NAME }}_*_with_imgui_*_Windows.zip
artifacts/${{ env.PROJECT_NAME }}_*_with_imgui_*_macOS.zip