Skip to content

Refresh v24.12

Refresh v24.12 #1376

Workflow file for this run

name: Linux
on:
pull_request:
branches:
- master
schedule:
# Runs every day at 23:15
- cron: '15 23 * * *'
jobs:
build:
name: Run on ${{ matrix.os }} with SOFA ${{ matrix.sofa_branch }}
runs-on: ${{ matrix.os }}
strategy:
fail-fast: false
matrix:
os: [ubuntu-22.04]
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: Build caribou
run: |
sudo apt install libeigen3-dev
cd "$WORKSPACE_BUILD_PATH"
cmake \
-GNinja \
-DCARIBOU_BUILD_TESTS=ON \
-DCMAKE_BUILD_TYPE=Release \
-DCMAKE_INSTALL_PREFIX="$WORKSPACE_INSTALL_PATH" \
-DCMAKE_PREFIX_PATH=$SOFA_ROOT/lib/cmake \
../src
cmake --build . && cmake --install .
- 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 = "Caribou_${{ 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/[email protected]
with:
name: ${{ steps.sanitize.outputs.artifact_name }}
path: ${{ env.WORKSPACE_INSTALL_PATH }}
- name: Install artifact
uses: actions/[email protected]
with:
name: ${{ steps.sanitize.outputs.artifact_name }}
path: ${{ env.WORKSPACE_ARTIFACT_PATH }}
- name: Set env vars for tests
shell: bash
run: |
echo "LD_LIBRARY_PATH=$WORKSPACE_ARTIFACT_PATH/lib:$SOFA_ROOT/lib:$SOFA_ROOT/plugins/SofaPython3/lib:$LD_LIBRARY_PATH" | tee -a $GITHUB_ENV
# export PYTHONPATH=$PYTHONPATH:$CARIBOU_ROOT/lib/python3/site-packages
- name: Caribou.unittests.Geometry
if: ${{ always() }}
run: |
cd $WORKSPACE_BUILD_PATH
./bin/Caribou.unittests.Geometry
- name: Caribou.Geometry.PyTest
if: ${{ always() }}
run: |
export PYTHONPATH=$PYTHONPATH:$WORKSPACE_INSTALL_PATH/lib/python3/site-packages:$WORKSPACE_INSTALL_PATH/plugins/SofaPython3/lib/python3/site-packages
cd "$WORKSPACE_BUILD_PATH"/../src
python3 src/Caribou/Python/Geometry/pytest/Caribou_Geometry_Test.py
- name: Caribou.unittests.Topology
if: ${{ always() }}
run: |
cd $WORKSPACE_BUILD_PATH
./bin/Caribou.unittests.Topology
- name: Caribou.Topology.PyTest
if: ${{ always() }}
run: |
cd $${{ env.WORKSPACE_SRC_PATH }}
python3 src/Caribou/Python/Topology/pytest/Caribou_Topology_Test.py
- name: Caribou.unittests.Mechanics
if: ${{ always() }}
run: |
cd $WORKSPACE_BUILD_PATH
./bin/Caribou.unittests.Mechanics
- name: Caribou.unittests.SofaCaribou
if: ${{ always() }}
run: |
cd $WORKSPACE_BUILD_PATH
./bin/Caribou.unittests.SofaCaribou
- name: SofaCaribou.PyTest
if: ${{ always() }}
run: |
cd $WORKSPACE_BUILD_PATH
export PYTHONPATH=$PYTHONPATH:$CARIBOU_ROOT/lib/python3/site-packages:$SOFA_ROOT/plugins/SofaPython3/lib/python3/site-packages
python3 src/SofaCaribou/Python/pytest/SofaCaribou_Forcefield_HyperelasticForcefield.py
deploy:
name: Deploy ${{ matrix.sofa_version }}
needs: [build]
runs-on: ubuntu-20.04
if: github.event_name == 'schedule'
strategy:
matrix:
sofa_version: [ master ]
env:
SOFA_VERSION: ${{ matrix.sofa_version }}
steps:
- name: Download artifact
uses: actions/[email protected]
with:
name: caribou_${{ matrix.sofa_version }}
- name: Get current date
id: date
run: echo "::set-output name=date::$(date +'%Y_%m_%d')"
- name: Get SOFA major/minor
id: sofa_version
run: |
if [ "$SOFA_VERSION" = "master" ]; then
echo "::set-output name=value::master"
else
echo "::set-output name=value::${SOFA_VERSION%.*}"
fi
- name: Create artifact directory
uses: appleboy/ssh-action@master
env:
ARTIFACT_TARGET: ${{ format('{0}/linux/{1}', secrets.ARTIFACT_TARGET, steps.sofa_version.outputs.value) }}
with:
host: ${{ secrets.ARTIFACT_HOST }}
username: ${{ secrets.ARTIFACT_USERNAME }}
key: ${{ secrets.ARTIFACT_KEY }}
port: ${{ secrets.ARTIFACT_PORT }}
envs: ARTIFACT_TARGET
script: mkdir -p $ARTIFACT_TARGET
- name: Deploy artifact
uses: appleboy/scp-action@master
with:
host: ${{ secrets.ARTIFACT_HOST }}
username: ${{ secrets.ARTIFACT_USERNAME }}
port: ${{ secrets.ARTIFACT_PORT }}
key: ${{ secrets.ARTIFACT_KEY }}
source: "SofaCaribou.tar.gz"
target: ${{ format('{0}/linux/{1}/SofaCaribou_{2}', secrets.ARTIFACT_TARGET, steps.sofa_version.outputs.value, steps.date.outputs.date) }}
debug: true
- name: Tag as latest
uses: appleboy/ssh-action@master
env:
ARTIFACT_TARGET: ${{ format('{0}/linux/{1}/SofaCaribou_{2}', secrets.ARTIFACT_TARGET, steps.sofa_version.outputs.value, steps.date.outputs.date) }}
ARTIFACT_LATEST: ${{ format('{0}/linux/{1}/SofaCaribou_latest.tar.gz', secrets.ARTIFACT_TARGET, steps.sofa_version.outputs.value) }}
with:
host: ${{ secrets.ARTIFACT_HOST }}
username: ${{ secrets.ARTIFACT_USERNAME }}
key: ${{ secrets.ARTIFACT_KEY }}
port: ${{ secrets.ARTIFACT_PORT }}
envs: ARTIFACT_TARGET,ARTIFACT_LATEST
script: |
mv $ARTIFACT_TARGET/SofaCaribou.tar.gz $ARTIFACT_TARGET.tar.gz
rm -rf $ARTIFACT_TARGET
rm -f $ARTIFACT_LATEST
ln -s $ARTIFACT_TARGET.tar.gz $ARTIFACT_LATEST