From a0951e299ad62e2a0afc30149758a5a7398a406c Mon Sep 17 00:00:00 2001 From: Hugo Date: Mon, 6 Dec 2021 14:47:39 +0100 Subject: [PATCH] Add ci workflow (#2) * Create ci.yml --- .github/workflows/ci.yml | 122 +++++++++++++++ BeamAdapterConfig.cmake.in | 6 + BeamAdapter_test/BeamInterpolation_test.cpp | 2 +- BeamAdapter_test/CMakeLists.txt | 6 +- .../WireBeamInterpolation_test.cpp | 148 ------------------ CMakeLists.txt | 7 + 6 files changed, 139 insertions(+), 152 deletions(-) create mode 100644 .github/workflows/ci.yml delete mode 100644 BeamAdapter_test/WireBeamInterpolation_test.cpp diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml new file mode 100644 index 000000000..60ffd88ad --- /dev/null +++ b/.github/workflows/ci.yml @@ -0,0 +1,122 @@ +name: CI + +on: + workflow_dispatch: + pull_request: + push: + +jobs: + build-and-test: + name: Run on ${{ matrix.os }} with SOFA ${{ matrix.sofa_branch }} + runs-on: ${{ matrix.os }} + strategy: + fail-fast: false + matrix: + os: [ubuntu-20.04, macos-10.15, windows-2019] + sofa_branch: [master] + + steps: + - name: Setup SOFA and environment + id: sofa + uses: sofa-framework/sofa-setup-action@v3 + with: + sofa_root: ${{ github.workspace }}/sofa + sofa_version: ${{ matrix.sofa_branch }} + sofa_scope: 'full' + - name: Checkout source code + uses: actions/checkout@v2 + with: + path: ${{ env.WORKSPACE_SRC_PATH }} + + - 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" \ + ../src \ + && ninja 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" \ + ../src + ninja install + echo ${CCACHE_BASEDIR} + ccache -s + fi + - name: Create artifact + uses: actions/upload-artifact@v2 + with: + name: BeamAdapter_${{ steps.sofa.outputs.run_branch }}_for-SOFA-${{ steps.sofa.outputs.sofa_version }}_${{ runner.os }} + path: ${{ env.WORKSPACE_INSTALL_PATH }} + + - name: Install artifact + uses: actions/download-artifact@v2 + with: + name: BeamAdapter_${{ steps.sofa.outputs.run_branch }}_for-SOFA-${{ steps.sofa.outputs.sofa_version }}_${{ runner.os }} + path: ${{ env.WORKSPACE_ARTIFACT_PATH }} + + #- name: Check environment for tests + # shell: bash + # run: | + # echo '------ ls -la "$WORKSPACE_SRC_PATH" ------' + # ls -la "$WORKSPACE_SRC_PATH" + # echo '------ ls -la "$WORKSPACE_BUILD_PATH" ------' + # ls -la "$WORKSPACE_BUILD_PATH" + # echo '------ ls -la "$WORKSPACE_INSTALL_PATH" ------' + # ls -la "$WORKSPACE_INSTALL_PATH" + # echo '------ ls -la "$WORKSPACE_ARTIFACT_PATH" ------' + # ls -la "$WORKSPACE_ARTIFACT_PATH" + # echo '----------------------' + # echo "SOFA_ROOT = $SOFA_ROOT" + + - name: Run BeamAdapter_test + if: always() + shell: bash + run: | + chmod +x $WORKSPACE_BUILD_PATH/bin/BeamAdapter_test${{ steps.sofa.outputs.exe }} + cd $WORKSPACE_BUILD_PATH + ./bin/BeamAdapter_test${{ steps.sofa.outputs.exe }} + + + 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 + shell: bash + run: | + cd $GITHUB_WORKSPACE/artifacts + for artifact in *; do + zip $artifact.zip -r $artifact/* + done + - name: Upload release + uses: softprops/action-gh-release@v1 + with: + name: ${{ github.ref_name }} + tag_name: release-${{ github.ref_name }} + fail_on_unmatched_files: true + files: | + artifacts/BeamAdapter_*_Linux.zip + artifacts/BeamAdapter_*_Windows.zip + artifacts/BeamAdapter_*_macOS.zip diff --git a/BeamAdapterConfig.cmake.in b/BeamAdapterConfig.cmake.in index 8ed8f5801..c7cc1578e 100644 --- a/BeamAdapterConfig.cmake.in +++ b/BeamAdapterConfig.cmake.in @@ -3,7 +3,13 @@ @PACKAGE_INIT@ find_package(SofaFramework REQUIRED) +find_package(SofaBaseMechanics REQUIRED) +find_package(SofaConstraint REQUIRED) +find_package(SofaUserInteraction REQUIRED) find_package(SofaImplicitField REQUIRED) +find_package(Sofa.GL REQUIRED) + +find_package(SofaImplicitField QUIET) find_package(SofaAdvancedConstraint QUIET) diff --git a/BeamAdapter_test/BeamInterpolation_test.cpp b/BeamAdapter_test/BeamInterpolation_test.cpp index 86a7ae25b..e0a0c6c45 100644 --- a/BeamAdapter_test/BeamInterpolation_test.cpp +++ b/BeamAdapter_test/BeamInterpolation_test.cpp @@ -72,7 +72,7 @@ struct BeamInterpolationTest : public sofa::testing::BaseSimulationTest, "" " " " " - " " + " " " " " $line1" " " diff --git a/BeamAdapter_test/CMakeLists.txt b/BeamAdapter_test/CMakeLists.txt index 4179fd131..85b1e10e4 100644 --- a/BeamAdapter_test/CMakeLists.txt +++ b/BeamAdapter_test/CMakeLists.txt @@ -2,13 +2,13 @@ cmake_minimum_required(VERSION 3.1) project(BeamAdapter_test VERSION 1.0) -find_package(BeamAdapter REQUIRED) +#find_package(BeamAdapter REQUIRED) find_package(Sofa.Testing REQUIRED) find_package(SofaBaseUtils REQUIRED) +find_package(Threads REQUIRED) set(SOURCE_FILES BeamInterpolation_test.cpp - WireBeamInterpolation_test.cpp component/constraint/AdaptiveBeamSlidingConstraintTest.cpp component/forcefield/AdaptiveBeamForceFieldAndMassTest.cpp ) @@ -17,7 +17,7 @@ add_executable(${PROJECT_NAME} ${SOURCE_FILES}) target_include_directories(${PROJECT_NAME} PUBLIC "$") -target_link_libraries(${PROJECT_NAME} BeamAdapter Sofa.Testing SofaCore SofaConstraint SofaBaseMechanics SofaUserInteraction SofaBaseUtils) +target_link_libraries(${PROJECT_NAME} BeamAdapter Sofa.Testing SofaCore SofaConstraint SofaBaseMechanics SofaUserInteraction SofaBaseUtils Threads::Threads) add_definitions("-DBEAMADAPTER_TEST_DIR=\"${CMAKE_CURRENT_SOURCE_DIR}/\"") diff --git a/BeamAdapter_test/WireBeamInterpolation_test.cpp b/BeamAdapter_test/WireBeamInterpolation_test.cpp deleted file mode 100644 index 6bf54526d..000000000 --- a/BeamAdapter_test/WireBeamInterpolation_test.cpp +++ /dev/null @@ -1,148 +0,0 @@ -/****************************************************************************** -* BeamAdapter plugin * -* (c) 2006 Inria, University of Lille, CNRS * -* * -* This program is free software; you can redistribute it and/or modify it * -* under the terms of the GNU Lesser General Public License as published by * -* the Free Software Foundation; either version 2.1 of the License, or (at * -* your option) any later version. * -* * -* This program is distributed in the hope that it will be useful, but WITHOUT * -* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * -* FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License * -* for more details. * -* * -* You should have received a copy of the GNU Lesser General Public License * -* along with this program. If not, see . * -******************************************************************************* -* Authors: see Authors.md * -* * -* Contact information: contact@sofa-framework.org * -******************************************************************************/ -#include - -#include -#include -#include -using std::string ; - -#include - -#include - -#include - -using sofa::core::topology::BaseMeshTopology ; -using sofa::core::objectmodel::Data ; - -#include -using sofa::component::topology::TetrahedronSetTopologyContainer ; - -using sofa::helper::WriteAccessor ; -using sofa::defaulttype::Rigid3dTypes ; -using sofa::core::ExecParams ; - -#include -using sofa::simulation::SceneLoaderXML ; - -#include -using sofa::simulation::Simulation ; -using sofa::simulation::Node ; -using sofa::simulation::setSimulation ; -using sofa::core::objectmodel::New ; -using sofa::core::objectmodel::BaseData ; -using sofa::component::container::MechanicalObject ; - -#include - -namespace sofa -{ - -struct WireBeamInterpolationTest : public sofa::testing::BaseSimulationTest, - public ::testing::WithParamInterface> -{ - void simpleScene(const std::vector& lines) - { - assert(lines.size()==3); - sofa::component::initSofaBaseUtils(); - - string scene = - "" - "" - " " - " " - " " - " " - " " - " " - " " - " $line1" - " " - " $line2" - " " ; - - scene = std::regex_replace(scene, std::regex("\\$line1"), lines[0]) ; - scene = std::regex_replace(scene, std::regex("\\$line2"), lines[1]) ; - - if(lines[2]=="T") - { - EXPECT_MSG_NOEMIT(Error, Warning) ; - - Node::SPtr root = SceneLoaderXML::loadFromMemory ( "test1", scene.c_str(), scene.size()); - ASSERT_NE(root.get(), nullptr); - - root->init(ExecParams::defaultInstance()); - root->reinit(ExecParams::defaultInstance()) ; - }else if(lines[2]=="W") - { - EXPECT_MSG_EMIT(Error) ; - EXPECT_MSG_NOEMIT(Warning) ; - - Node::SPtr root = SceneLoaderXML::loadFromMemory ( "test1", scene.c_str(), scene.size()); - ASSERT_NE(root.get(), nullptr); - - root->init(ExecParams::defaultInstance()); - root->reinit(ExecParams::defaultInstance()) ; - } - } -}; - -static std::vector> teststrings ={ - { - "" - "" - "" - "" - ,"" - , "T" - }, - { - "" - ,"" - , "T" - }, - { - "" - ,"" - , "W" - }, - { - "" - ,"" - , "W" - }, - { - "" - ,"" - , "W" - } -}; - -TEST_P(WireBeamInterpolationTest, checkMinimalScene) { - ASSERT_NO_THROW(this->simpleScene(GetParam())) ; -} - -INSTANTIATE_TEST_CASE_P(checkMinimalScene, - WireBeamInterpolationTest, ::testing::ValuesIn(teststrings) ) ; - -} diff --git a/CMakeLists.txt b/CMakeLists.txt index 2d037baa7..541b1c552 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -4,6 +4,12 @@ project(BeamAdapter VERSION 1.0) include(cmake/environment.cmake) find_package(SofaFramework REQUIRED) +find_package(SofaBaseMechanics REQUIRED) +find_package(SofaConstraint REQUIRED) +find_package(SofaUserInteraction REQUIRED) +find_package(SofaImplicitField REQUIRED) +find_package(Sofa.GL REQUIRED) + find_package(SofaImplicitField QUIET) find_package(SofaAdvancedConstraint QUIET) @@ -118,6 +124,7 @@ target_include_directories(${PROJECT_NAME} PUBLIC "$") target_link_libraries(${PROJECT_NAME} Sofa.Helper Sofa.Core SofaConstraint SofaBaseMechanics SofaUserInteraction SofaImplicitField Sofa.GL) + sofa_create_package_with_targets( PACKAGE_NAME ${PROJECT_NAME} PACKAGE_VERSION ${PROJECT_VERSION}