From 4759ad424e440e00553c8581f654781ccb629518 Mon Sep 17 00:00:00 2001 From: Abdoulbari Zakir Date: Wed, 11 Dec 2024 11:11:37 +0100 Subject: [PATCH] Revert "update" This reverts commit b0759dc2cedf691b1de3e0f5a22c61e3b76e119d. --- .github/workflows/build_oracle8.yml | 268 +++++++++++++++++++++++ .github/workflows/build_ubuntu.yml | 318 ++++++++++++++++++++++++++++ .github/workflows/build_windows.yml | 302 ++++++++++++++++++++++++++ .github/workflows/sonarcloud.yml | 157 ++++++++++++++ 4 files changed, 1045 insertions(+) create mode 100644 .github/workflows/build_oracle8.yml create mode 100644 .github/workflows/build_ubuntu.yml create mode 100644 .github/workflows/build_windows.yml create mode 100644 .github/workflows/sonarcloud.yml diff --git a/.github/workflows/build_oracle8.yml b/.github/workflows/build_oracle8.yml new file mode 100644 index 000000000..0ab49eac4 --- /dev/null +++ b/.github/workflows/build_oracle8.yml @@ -0,0 +1,268 @@ +name: Oracle 8 Build + +on: + merge_group: + push: + branches: + - develop + - feature/* + - features/* + - fix/* + - issue-* + - release/* + - doc/* + - dependabot/* + release: + types: [ created ] + +env: + GITHUB_TOKEN: ${{ github.token }} + +jobs: + versions: + runs-on: ubuntu-latest + outputs: + antares-version: ${{steps.antares-version.outputs.result}} + antares-xpansion-version: ${{steps.antares-xpansion-version.outputs.result}} + steps: + - uses: actions/checkout@v4 + - name: Read antares-solver version + id: antares-version + uses: ./.github/actions/read-json-value + with: + path: 'antares-version.json' + key: 'antares_version' + + - name: Read antares-xpansion version + id: antares-xpansion-version + uses: ./.github/actions/read-json-value + with: + path: 'antares-version.json' + key: 'antares_xpansion_version' + + build: + name: Build + runs-on: ubuntu-latest + container: 'oraclelinux:8' + needs: [ versions ] + env: + ORTOOLS_DIR: $GITHUB_WORKSPACE/or-tools + ORTOOLS_URL: "https://github.com/rte-france/or-tools-rte/releases/download/v9.11-rte1.1/ortools_cxx_oraclelinux-8_static_sirius.zip" + + outputs: + zip_name: ${{ steps.zip_name.outputs.zip_name }} + singlefile_name: ${{ steps.zip_name.outputs.singlefile_name }} + + steps: + - name: Install System + run: | + dnf install -y epel-release git wget rpm-build redhat-lsb-core + dnf install -y unzip gcc-toolset-11-toolchain python3-devel zlib-devel + #make gcc &co available system wide and "action wide" + source /opt/rh/gcc-toolset-11/enable + echo $PATH >> $GITHUB_PATH + + - run: | + dnf module install -y nodejs:20/common + + - uses: lukka/get-cmake@latest + with: + useLocalCache: false + useCloudCache: true + + - uses: actions/checkout@v4 + with: + submodules: true + + - name: Set up Python + run: | + dnf update -y + dnf install -y python3 python3-pip + pip3 install wheel #Too late to install in requirements.txt + pip3 install -r requirements-tests.txt + + # the default python version (3.6) is too old to download xpress with pip + # this version of miniconda embeds python3.8 + - name: Set up conda + run: | + wget https://repo.anaconda.com/miniconda/Miniconda3-py38_23.5.1-0-Linux-x86_64.sh + bash Miniconda3-py38_23.5.1-0-Linux-x86_64.sh -b -p /root/miniconda3 + rm -f Miniconda3-py38_23.5.1-0-Linux-x86_64.sh + + - name: Set-up Xpress with pip for Oracle 8 + shell: bash + run: | + export PATH=/root/miniconda3/condabin:$PATH + conda install -c fico-xpress "xpress>=9.2,<9.3" + XPRESS_DIR=/root/miniconda3/lib/python3.8/site-packages/xpress + echo "XPRESSDIR=$XPRESS_DIR" >> $GITHUB_ENV + echo "XPAUTH_PATH=$XPRESS_DIR/license/community-xpauth.xpr" >> $GITHUB_ENV + echo "Create symbolic link for XPRESS library file because it is missing in the Python installation" + ln -s $XPRESS_DIR/lib/libxprs.so.42 $XPRESS_DIR/lib/libxprs.so + + - name: Download pre-compiled librairies + uses: ./.github/workflows/download-extract-precompiled-libraries-tgz + with: + antares-version: ${{needs.versions.outputs.antares-version}} + os: Oracle8 + os-full-name: OracleServer-8.10 + ortools-url: ${{env.ORTOOLS_URL}} + ortools-dir: ${{env.ORTOOLS_DIR}} + + - name: vcpkg install + run: | + git config --global safe.directory '*' + git submodule update --remote --init vcpkg + pushd vcpkg + git fetch --unshallow + ./bootstrap-vcpkg.sh -disableMetrics + echo "VCPKG_ROOT=$GITHUB_WORKSPACE/vcpkg" >> $GITHUB_ENV + echo "VCPKG_CACHE_DIR=$GITHUB_WORKSPACE/vcpkg_cache" >> $GITHUB_ENV + echo "VCPKG_BINARY_SOURCES=clear;files,$GITHUB_WORKSPACE/vcpkg_cache,readwrite" >> $GITHUB_ENV + + - name: Restore vcpkg binary dir from cache + id: cache-vcpkg-binary + uses: actions/cache/restore@v4 + with: + path: ${{ env.VCPKG_CACHE_DIR }} + key: vcpkg-cache-oracle8-${{ hashFiles('src/vcpkg.json', '.git/modules/vcpkg/HEAD') }} + # Allows to restore a cache when deps have only partially changed (like adding a dependency) + restore-keys: vcpkg-cache-oracle8- + + - name: Configure + run: | + cmake -B _build -S . \ + -DBUILD_TESTING=ON \ + -DCMAKE_BUILD_TYPE=Release \ + -DCMAKE_INSTALL_PREFIX=_install \ + -DCMAKE_PREFIX_PATH="${GITHUB_WORKSPACE}/deps;${{env.ORTOOLS_DIR}}/install" \ + -DBUILD_UI=OFF \ + -DALLOW_RUN_AS_ROOT=ON \ + -DVCPKG_TARGET_TRIPLET=x64-linux-release \ + -DCMAKE_TOOLCHAIN_FILE=vcpkg/scripts/buildsystems/vcpkg.cmake + + - name: Build + run: | + cmake --build _build --config Release -j$(nproc) + + + - name: Tests with Cucumber + uses: ./.github/workflows/cucumber-tests + with: + # feature: "features/outer_loop_tests.feature" + mpi_path: ${GITHUB_WORKSPACE}/_build/vcpkg_installed/x64-linux-release/tools/openmpi/bin + + - name: Running unit tests + timeout-minutes: 120 + shell: bash + run: | + export PATH=${GITHUB_WORKSPACE}/_build/vcpkg_installed/x64-linux-release/tools/openmpi/bin/:$PATH + cd _build + ctest -C Release --output-on-failure -L "unit|benders|lpnamer|medium" + + - name: Cache vcpkg binary dir + if: always() + id: save-cache-vcpkg-binary + uses: actions/cache/save@v4 + with: + path: ${{ env.VCPKG_CACHE_DIR }} + key: vcpkg-cache-oracle8-${{ hashFiles('src/vcpkg.json', '.git/modules/vcpkg/HEAD') }} + + ####################### + - name: Install + run: | + cd _build + cmake --install . + + - name: .tar.gz creation + run: | + cd _build + export FILE_NAME="antaresXpansion-${{needs.versions.outputs.antares-xpansion-version}}-OracleServer-8.10" + cpack -G TGZ -D CPACK_PACKAGE_FILE_NAME=$FILE_NAME + echo "TGZ_NAME=$FILE_NAME.tar.gz" >> $GITHUB_ENV + + - name: Upload .tar.gz + uses: actions/upload-artifact@v4 + with: + name: ${{env.TGZ_NAME}} + path: _build/${{env.TGZ_NAME}} + + - id: create-single-file + name: Single file .tar.gz creation + uses: ./.github/workflows/single-file-creation-tgz + with: + antares-xpansion-version: ${{needs.versions.outputs.antares-xpansion-version}} + + - name: Upload single file + uses: actions/upload-artifact@v4 + with: + name: ${{ steps.create-single-file.outputs.archive-name }} + path: ${{ steps.create-single-file.outputs.archive-path }} + + - id: zip_name + run: | + echo "singlefile_name=${{steps.create-single-file.outputs.archive-name}}" >> "$GITHUB_OUTPUT" + echo "zip_name=${{env.TGZ_NAME}}" >> "$GITHUB_OUTPUT" + ####################### + userguide: + if: github.event_name == 'release' && github.event.action == 'created' + runs-on: ubuntu-latest + outputs: + pdf-name: ${{ steps.create-user-guide.outputs.pdf-name }} + + steps: + - uses: actions/checkout@v4 + + - name: Read antares-xpansion version + id: antares-xpansion-version + uses: ./.github/actions/read-json-value + with: + path: 'antares-version.json' + key: 'antares_xpansion_version' + + - id: create-user-guide + name: user guide pdf creation + uses: ./.github/workflows/generate-userguide-pdf + with: + antares-xpansion-version: ${{steps.antares-xpansion-version.outputs.result}} + + - name: user guide upload + id: userguide_upload + uses: actions/upload-artifact@v4 + with: + name: user-guide + path: ${{ steps.create-user-guide.outputs.pdf-path }} + + upload_asset_to_release: + if: github.event_name == 'release' && github.event.action == 'created' + runs-on: ubuntu-latest + needs: [build, userguide] + env: + ZIP_NAME: ${{needs.build.outputs.zip_name}} + SINGLEFILE_NAME: ${{needs.build.outputs.singlefile_name}} + steps: + - name: Get release + id: get_release + uses: bruceadams/get-release@main + + - name: Download Artifact + uses: actions/download-artifact@v4 + with: + name: ${{env.ZIP_NAME}} + path: . + + - name: Download Artifact + uses: actions/download-artifact@v4 + with: + name: ${{env.SINGLEFILE_NAME}} + path: . + + - name: Upload Release Asset + env: + GH_REPO: ${{ github.repository }} + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + run: | + gh release upload --repo ${{env.GH_REPO}} ${{ steps.get_release.outputs.tag_name }} ${{env.ZIP_NAME}} + gh release upload --repo ${{env.GH_REPO}} ${{ steps.get_release.outputs.tag_name }} ${{env.SINGLEFILE_NAME}} + + ######################## \ No newline at end of file diff --git a/.github/workflows/build_ubuntu.yml b/.github/workflows/build_ubuntu.yml new file mode 100644 index 000000000..0c7dbf26d --- /dev/null +++ b/.github/workflows/build_ubuntu.yml @@ -0,0 +1,318 @@ +name: Ubuntu build + +on: + merge_group: + push: + branches: + - develop + - feature/* + - features/* + - fix/* + - issue-* + - release/* + - doc/* + - dependabot/* + release: + types: [ created ] + +env: + GITHUB_TOKEN: ${{ github.token }} + PYTHON_VERSION: 3.8 + +jobs: + build: + runs-on: ${{ matrix.os }} + if: "!contains(github.event.head_commit.message, '[skip ci]')" + strategy: + matrix: + os: [ ubuntu-20.04 ] + env: + VCPKG_BINARY_SOURCES: "clear;files,${{ github.workspace }}/vcpkg_cache,readwrite" + ORTOOLS_DIR: $GITHUB_WORKSPACE/or-tools + ORTOOLS_URL: "https://github.com/rte-france/or-tools-rte/releases/download/v9.11-rte1.1/ortools_cxx_ubuntu-20.04_static_sirius.zip" + + outputs: + TGZ_NAME: ${{ steps.export_output.outputs.TGZ_NAME }} + SINGLE_FILE_NAME: ${{ steps.export_output.outputs.SINGLE_FILE_NAME }} + + steps: + - uses: actions/checkout@v4 + with: + submodules: true + + - name: Install mandatory system libraries + run: | + sudo apt-get update --fix-missing + sudo apt-get install -y ccache + sudo apt-get install -y g++-10 gcc-10 + + + - name: ccache + uses: hendrikmuhs/ccache-action@v1.2.3 + with: + key: ${{ matrix.os }}-${{ matrix.xprs.value }} + + - name: Set up Python + uses: actions/setup-python@v5 + id: python-setup + with: + cache: 'pip' + python-version: ${{ env.PYTHON_VERSION }} + + - name: Install dependencies + run: | + python -m pip install --upgrade pip + pip install -r requirements-tests.txt + pip install -r requirements-ui.txt + + - name: Set-up Xpress with pip for Ubuntu + shell: bash + run: | + python -m pip install "xpress>=9.2,<9.3" + echo ${{ env.pythonLocation }} + XPRESS_DIR=${{ env.pythonLocation }}/lib/python${{ env.PYTHON_VERSION }}/site-packages/xpress + echo "XPRESSDIR=$XPRESS_DIR" >> $GITHUB_ENV + echo "XPAUTH_PATH=$XPRESS_DIR/license/community-xpauth.xpr" >> $GITHUB_ENV + echo "Create symbolic link for XPRESS library file because it is missing in the Python installation" + ln -s $XPRESS_DIR/lib/libxprs.so.42 $XPRESS_DIR/lib/libxprs.so + + - name: Update alternatives + #mpicxx uses "g++" so we need g++ to be symbolic link to g++-10 + run: | + sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-10 10 + sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-10 10 + sudo update-alternatives --install /usr/bin/cc cc /usr/bin/gcc 30 + sudo update-alternatives --set cc /usr/bin/gcc + sudo update-alternatives --install /usr/bin/c++ c++ /usr/bin/g++ 30 + sudo update-alternatives --set c++ /usr/bin/g++ + + - uses: lukka/get-cmake@latest + with: + useLocalCache: false + useCloudCache: true + + - name: Read antares-solver version + id: antares-version + uses: ./.github/actions/read-json-value + with: + path: 'antares-version.json' + key: 'antares_version' + + - name: Read antares-xpansion version + id: antares-xpansion-version + uses: ./.github/actions/read-json-value + with: + path: 'antares-version.json' + key: 'antares_xpansion_version' + + - name: Download pre-compiled librairies + uses: ./.github/workflows/download-extract-precompiled-libraries-tgz + with: + antares-version: ${{steps.antares-version.outputs.result}} + os: ${{matrix.os}} + os-full-name: Ubuntu-20.04 + ortools-url: ${{env.ORTOOLS_URL}} + ortools-dir: ${{env.ORTOOLS_DIR}} + + - name: vcpkg install + run: | + git submodule update --remote --init vcpkg + pushd vcpkg + git fetch --unshallow + ./bootstrap-vcpkg.sh -disableMetrics + + - name: Restore vcpkg binary dir from cache + id: cache-vcpkg-binary + uses: actions/cache/restore@v4 + with: + path: ${{ github.workspace }}/vcpkg_cache + key: vcpkg-cache-ubuntu-${{ hashFiles('src/vcpkg.json', '.git/modules/vcpkg/HEAD') }} + # Allows to restore a cache when deps have only partially changed (like adding a dependency) + restore-keys: vcpkg-cache-ubuntu- + + - name: Configure + shell: bash + run: | + cmake -B _build -S . \ + -DCMAKE_C_COMPILER_LAUNCHER=ccache \ + -DCMAKE_C_COMPILER=/usr/bin/gcc-10 \ + -DCMAKE_CXX_COMPILER_LAUNCHER=ccache \ + -DCMAKE_CXX_COMPILER=/usr/bin/g++-10 \ + -DBUILD_TESTING=ON \ + -DCMAKE_BUILD_TYPE=Release \ + -DCMAKE_INSTALL_PREFIX=_install \ + -DCMAKE_PREFIX_PATH="${{ github.workspace }}/deps;${{env.ORTOOLS_DIR}}/install" \ + -DBUILD_UI=ON \ + -DVCPKG_TARGET_TRIPLET=x64-linux-release \ + -DCMAKE_TOOLCHAIN_FILE=vcpkg/scripts/buildsystems/vcpkg.cmake + + - name: Build + run: | + cmake --build _build --config Release -j$(nproc) + + - name: Tests with Cucumber + uses: ./.github/workflows/cucumber-tests + with: + # feature: "features/outer_loop_tests.feature" + mpi_path: ${{ github.workspace }}/_build/vcpkg_installed/x64-linux-release/tools/openmpi/bin + + - name: Test + run: | + export PATH=${GITHUB_WORKSPACE}/_build/vcpkg_installed/x64-linux-release/tools/openmpi/bin:$PATH + cd _build + ctest -C Release --output-on-failure -L "medium|unit|benders|lpnamer" + + - name: Cache vcpkg binary dir + if: always() + id: save-cache-vcpkg-binary + uses: actions/cache/save@v4 + with: + path: ${{ github.workspace }}/vcpkg_cache + key: vcpkg-cache-ubuntu-${{ hashFiles('src/vcpkg.json', '.git/modules/vcpkg/HEAD') }} + + ####################### + - name: Install + run: | + cd _build + cmake --install . + + - id: create-single-file + name: Single file .tar.gz creation + uses: ./.github/workflows/single-file-creation-tgz + with: + antares-xpansion-version: ${{steps.antares-xpansion-version.outputs.result}} + + - name: Installer .tar.gz creation + run: | + cd _build + export FILE_NAME="antaresXpansion-${{steps.antares-xpansion-version.outputs.result}}-${{ matrix.os }}" + cpack -G TGZ -D CPACK_PACKAGE_FILE_NAME=$FILE_NAME + #Need to differentiate between xpress/no_xpress files + #Cpack command line doesn't seem to care about -P or -R options + echo "TGZ_NAME=$FILE_NAME.tar.gz" >> $GITHUB_ENV + + - name: Upload .tar.gz + uses: actions/upload-artifact@v4 + with: + name: ${{env.TGZ_NAME}} + path: _build/${{env.TGZ_NAME}} + + - name: Upload single file + uses: actions/upload-artifact@v4 + with: + name: ${{ steps.create-single-file.outputs.archive-name }} + path: ${{ steps.create-single-file.outputs.archive-path }} + + - name: export asset name in output + id: export_output + run: | + echo "TGZ_NAME=${{env.TGZ_NAME}}" >> $GITHUB_OUTPUT + echo "SINGLE_FILE_NAME=${{ steps.create-single-file.outputs.archive-name }}" >> $GITHUB_OUTPUT + + ####################### + userguide: + if: github.event_name == 'release' && github.event.action == 'created' + runs-on: ubuntu-latest + outputs: + pdf-name: ${{ steps.create-user-guide.outputs.pdf-name }} + + steps: + - uses: actions/checkout@v4 + + - name: Read antares-xpansion version + id: antares-xpansion-version + uses: ./.github/actions/read-json-value + with: + path: 'antares-version.json' + key: 'antares_xpansion_version' + + - id: create-user-guide + name: user guide pdf creation + uses: ./.github/workflows/generate-userguide-pdf + with: + antares-xpansion-version: ${{steps.antares-xpansion-version.outputs.result}} + + - name: user guide upload + id: userguide_upload + uses: actions/upload-artifact@v4 + with: + name: user-guide + path: ${{ steps.create-user-guide.outputs.pdf-path }} + + test_assets: + runs-on: ubuntu-latest + needs: [ build ] + steps: + - name: Download build assets + uses: actions/download-artifact@v4 + with: + name: ${{needs.build.outputs.TGZ_NAME}} + - name: setup + run: | + tar --strip-components=1 -xzf ${{needs.build.outputs.TGZ_NAME}} + sudo apt-get update -y + sudo apt-get install openmpi-bin -y + + - name: run launcher + run: | + ./antares-xpansion-launcher -i examples/SmallTestFiveCandidates + + - name: run launcher parallel + run: | + ./antares-xpansion-launcher -i examples/SmallTestFiveCandidates -n 2 + + test_single_file_asset: + runs-on: ubuntu-latest + needs: [ build ] + steps: + - name: Download build assets + uses: actions/download-artifact@v4 + with: + name: ${{needs.build.outputs.SINGLE_FILE_NAME}} + - name: setup + run: | + tar --strip-components=1 -xzf ${{needs.build.outputs.SINGLE_FILE_NAME}} + sudo apt-get update -y + sudo apt-get install openmpi-bin -y + + - name: run launcher + run: | + ./antares-xpansion-launcher -i examples/SmallTestFiveCandidates + - name: run launcher parallel + run: | + ./antares-xpansion-launcher -i examples/SmallTestFiveCandidates -n 2 + + release: + runs-on: ubuntu-latest + needs: [ build, userguide ] + if: github.event_name == 'release' && github.event.action == 'created' + steps: + - name: Download userguide + uses: actions/download-artifact@v4 + with: + name: user-guide + path: docs/ + + - name: Download build assets + uses: actions/download-artifact@v4 + with: + name: ${{needs.build.outputs.TGZ_NAME}} + path: _build/ + + - name: Download build assets single file + uses: actions/download-artifact@v4 + with: + name: ${{needs.build.outputs.SINGLE_FILE_NAME}} + path: . + + - name: Get release + id: get_release + uses: bruceadams/get-release@main + + - name: Upload Release Asset + env: + GH_REPO: ${{ github.repository }} + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + run: | + gh release upload --repo ${{env.GH_REPO}} ${{ steps.get_release.outputs.tag_name }} _build/${{needs.build.outputs.TGZ_NAME}} + gh release upload --repo ${{env.GH_REPO}} ${{ steps.get_release.outputs.tag_name }} ${{needs.build.outputs.SINGLE_FILE_NAME}} diff --git a/.github/workflows/build_windows.yml b/.github/workflows/build_windows.yml new file mode 100644 index 000000000..45c695e70 --- /dev/null +++ b/.github/workflows/build_windows.yml @@ -0,0 +1,302 @@ +name: Windows build + +on: + merge_group: + push: + branches: + - develop + - feature/* + - features/* + - fix/* + - issue-* + - release/* + - doc/* + - dependabot/* + release: + types: [ created ] + +env: + GITHUB_TOKEN: ${{ github.token }} + +jobs: + build: + runs-on: ${{ matrix.os }} + if: "!contains(github.event.head_commit.message, '[skip ci]')" + strategy: + matrix: + os: [ windows-latest ] + triplet: [ x64-windows-release ] + env: + # Indicates the location of the vcpkg as a Git submodule of the project repository. + VCPKG_ROOT: ${{ github.workspace }}/vcpkg + VCPKG_BINARY_SOURCES: "clear;files,${{ github.workspace }}/vcpkg_cache,readwrite" + ORTOOLS_DIR: $GITHUB_WORKSPACE/or-tools + ORTOOLS_URL: "https://github.com/rte-france/or-tools-rte/releases/download/v9.11-rte1.1/ortools_cxx_windows-latest_static_sirius.zip" + + outputs: + zip_name: ${{ steps.zip_name.outputs.zip_name }} + singlefile_name: ${{steps.zip_name.outputs.singlefile_name}} + version: ${{ steps.antares-xpansion-version.outputs.result }} + + steps: + - uses: actions/checkout@v4 + + - name: Set up Python + uses: actions/setup-python@v5 + with: + python-version: '3.8' + cache: 'pip' + cache-dependency-path: requirements*.txt + + - name: Install dependencies + run: | + python -m pip install --upgrade pip + pip install -r requirements-tests.txt + pip install -r requirements-ui.txt + + - name: Set-up Xpress with pip + shell: bash + run: | + python -m pip install --no-cache-dir "xpress>=9.2,<9.3" + XPRESS_DIR="${{ env.pythonLocation }}\Lib\site-packages\xpress" + cp -r $XPRESS_DIR/lib $XPRESS_DIR/bin + cp $XPRESS_DIR/license/community-xpauth.xpr $XPRESS_DIR/bin/xpauth.xpr + echo "XPRESSDIR=$XPRESS_DIR" >> $GITHUB_ENV + echo "$XPRESS_DIR/bin" >> $GITHUB_PATH + + - name: Pre-requisites + shell: cmd + run: | + choco install wget zip unzip --no-progress + wget -nv https://github.com/microsoft/Microsoft-MPI/releases/download/v10.1.1/msmpisetup.exe + msmpisetup.exe -unattend + + - name: Read antares-solver version + id: antares-version + uses: ./.github/actions/read-json-value + with: + path: 'antares-version.json' + key: 'antares_version' + + - name: Read antares-xpansion version + id: antares-xpansion-version + uses: ./.github/actions/read-json-value + with: + path: 'antares-version.json' + key: 'antares_xpansion_version' + + - name: vcpkg install + shell: bash + run: | + git submodule update --remote --init vcpkg + pushd vcpkg + ./bootstrap-vcpkg.bat -disableMetrics + + - name: Restore vcpkg binary dir from cache + id: cache-vcpkg-binary + uses: actions/cache/restore@v4 + with: + path: ${{ github.workspace }}/vcpkg_cache + key: vcpkg-cache-windows-${{ hashFiles('src/vcpkg.json', '.git/modules/vcpkg/HEAD') }} + # Allows to restore a cache when deps have only partially changed (like adding a dependency) + restore-keys: vcpkg-cache-windows- + + - run: echo ${{env.ORTOOLS_URL}} + - name: Download pre-compiled librairies + uses: ./.github/workflows/download-extract-precompiled-libraries-zip + with: + antares-version: ${{steps.antares-version.outputs.result}} + os: ${{matrix.os}} + ortools-url: ${{env.ORTOOLS_URL}} + ortools-dir: ${{env.ORTOOLS_DIR}} + + - name: Configure + shell: bash + run: > + cmake -B _build -S . + -DCMAKE_PREFIX_PATH="${{github.workspace}}/rte-antares-${{steps.antares-version.outputs.result}}-installer-64bits;${{env.ORTOOLS_DIR}}/install;${{github.workspace}}/windows-latest_sirius-solver-install" + -DBUILD_TESTING=ON + -DCMAKE_BUILD_TYPE=Release + -DCMAKE_TOOLCHAIN_FILE="${{env.VCPKG_ROOT}}/scripts/buildsystems/vcpkg.cmake" + -DVCPKG_TARGET_TRIPLET=${{ matrix.triplet }} + -DCMAKE_INSTALL_PREFIX=_install + -DPython3_EXECUTABLE="${{ env.Python3_ROOT_DIR }}/python.exe" + -DBUILD_UI=ON + + - name: Build + run: | + cmake --build _build --config Release -j4 + + + - name: Tests with Cucumber + uses: ./.github/workflows/cucumber-tests + with: + # feature: "features/outer_loop_tests.feature" + mpi_path: /c/Program Files/Microsoft MPI/Bin + + - name: Cache vcpkg binary dir + if: always() + id: save-cache-vcpkg-binary + uses: actions/cache/save@v4 + with: + path: ${{ github.workspace }}/vcpkg_cache + key: vcpkg-cache-windows-${{ hashFiles('src/vcpkg.json', '.git/modules/vcpkg/HEAD') }} + + - name: Running unit tests + timeout-minutes: 120 + shell: cmd + run: | + set PATH=%PATH%;C:\Program Files\Microsoft MPI\Bin + cd _build + ctest -C Release --output-on-failure -L "medium|unit|benders|lpnamer" + + ############## + - name: install + run: | + cd _build + cmake --install . + + - name: Create installer .zip + shell: bash + run: | + cd _build + cpack -G ZIP + export ZIP_NAME=$(ls *.zip) + echo "ZIP_NAME=$ZIP_NAME" >> $GITHUB_ENV + + - name: Upload installer + uses: actions/upload-artifact@v4 + with: + name: ${{env.ZIP_NAME}} + path: _build/${{env.ZIP_NAME}} + + - name: Create single file .zip + id: create-single-file + uses: ./.github/workflows/single-file-creation-zip + with: + antares-xpansion-version: ${{steps.antares-xpansion-version.outputs.result}} + + - name: Upload single file + uses: actions/upload-artifact@v4 + with: + name: ${{ steps.create-single-file.outputs.archive-name }} + path: ${{ steps.create-single-file.outputs.archive-path }} + + - id: zip_name + shell: bash + run: | + echo "zip_name=${{env.ZIP_NAME}}" >> "$GITHUB_OUTPUT" + echo "singlefile_name=${{steps.create-single-file.outputs.archive-name}}" >> "$GITHUB_OUTPUT" + + + + userguide: + runs-on: ubuntu-latest + if: github.event_name == 'release' && github.event.action == 'created' + outputs: + pdf-name: ${{ steps.create-user-guide.outputs.pdf-name }} + + steps: + - uses: actions/checkout@v4 + + - name: Read antares-xpansion version + id: antares-xpansion-version + uses: ./.github/actions/read-json-value + with: + path: 'antares-version.json' + key: 'antares_xpansion_version' + + - id: create-user-guide + name: user guide pdf creation + uses: ./.github/workflows/generate-userguide-pdf + with: + antares-xpansion-version: ${{steps.antares-xpansion-version.outputs.result}} + + - name: user guide upload + id: userguide_upload + uses: actions/upload-artifact@v4 + with: + name: user-guide + path: ${{ steps.create-user-guide.outputs.pdf-path }} + + test_assets: + runs-on: ${{ matrix.os }} + strategy: + matrix: + os: [ windows-latest ] + needs: [ build ] + steps: + - name: Download build assets + uses: actions/download-artifact@v4 + with: + name: ${{needs.build.outputs.zip_name}} + - name: setup + run: | + unzip ${{needs.build.outputs.zip_name}} + + - name: run launcher + run: | + cd antaresXpansion-${{needs.build.outputs.version}}-win64 + ./antares-xpansion-launcher -i examples/SmallTestFiveCandidates + + - name: run launcher parallel + run: | + cd antaresXpansion-${{needs.build.outputs.version}}-win64 + ./antares-xpansion-launcher -i examples/SmallTestFiveCandidates -n 2 + + test_single_file_asset: + runs-on: ${{ matrix.os }} + strategy: + matrix: + os: [ windows-latest ] + + needs: [ build ] + steps: + - name: Download build assets + uses: actions/download-artifact@v4 + with: + name: ${{needs.build.outputs.singlefile_name}} + - name: setup + run: | + unzip ${{needs.build.outputs.singlefile_name}} + + - name: run launcher + run: | + ./antares-xpansion-launcher -i examples/SmallTestFiveCandidates + - name: run launcher parallel + run: | + ./antares-xpansion-launcher -i examples/SmallTestFiveCandidates -n 2 + + upload_asset_to_release: + if: github.event_name == 'release' && github.event.action == 'created' + runs-on: ubuntu-latest + needs: [build, userguide] + env: + ZIP_NAME: ${{needs.build.outputs.zip_name}} + SINGLEFILE_NAME: ${{needs.build.outputs.singlefile_name}} + steps: + - name: Get release + id: get_release + uses: bruceadams/get-release@main + + - name: Download Artifact + uses: actions/download-artifact@v4 + with: + name: ${{env.ZIP_NAME}} + path: . + + - name: Download Artifact + uses: actions/download-artifact@v4 + with: + name: ${{env.SINGLEFILE_NAME}} + path: . + + - name: Upload Release Asset + env: + GH_REPO: ${{ github.repository }} + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + run: | + gh release upload --repo ${{env.GH_REPO}} ${{ steps.get_release.outputs.tag_name }} ${{env.ZIP_NAME}} + gh release upload --repo ${{env.GH_REPO}} ${{ steps.get_release.outputs.tag_name }} ${{env.SINGLEFILE_NAME}} + + ######################## \ No newline at end of file diff --git a/.github/workflows/sonarcloud.yml b/.github/workflows/sonarcloud.yml new file mode 100644 index 000000000..166ffe026 --- /dev/null +++ b/.github/workflows/sonarcloud.yml @@ -0,0 +1,157 @@ +name: SonarCloud + +on: + push: + branches: + - develop + - feature/* + - features/* + - fix/* + - issue-* + - release/* + - doc/* + - dependabot/* + +jobs: + sonarcloud: + name: SonarCloud + runs-on: ${{ matrix.os }} + if: "!contains(github.event.head_commit.message, '[skip ci]')" + strategy: + matrix: + os: [ ubuntu-20.04 ] + env: + VCPKG_BINARY_SOURCES: "clear;files,${{ github.workspace }}/vcpkg_cache,readwrite" + ORTOOLS_DIR: $GITHUB_WORKSPACE/or-tools + ORTOOLS_URL: "https://github.com/rte-france/or-tools-rte/releases/download/v9.11-rte1.1/ortools_cxx_ubuntu-20.04_static_sirius.zip" + + steps: + - uses: actions/checkout@v4 + with: + fetch-depth: 0 + + - id: sonar-install + name: Install sonar-scanner and build-wrapper + uses: SonarSource/sonarcloud-github-c-cpp@v3 + + - name: ccache + uses: hendrikmuhs/ccache-action@v1.2 + with: + key: ${{ matrix.os }}-${{ matrix.xprs.value }} + + - name: Set up Python + uses: actions/setup-python@v5 + with: + python-version: 3.8 + + - name: Install gcovr + run: sudo pip install gcovr==5.0 #5.1 generate issues with sonarcloud report parsing + + - name: Install dependencies + run: | + python -m pip install --upgrade pip + pip3 install -r requirements-tests.txt + + - name: Install libraries + run: | + sudo apt-get update --fix-missing + sudo apt-get install g++-10 gcc-10 + + - name: Update alternatives + #mpicxx uses "g++" so we need g++ to be symbolic link to g++-10 + run: | + sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-10 10 + sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-10 10 + sudo update-alternatives --install /usr/bin/cc cc /usr/bin/gcc 30 + sudo update-alternatives --set cc /usr/bin/gcc + sudo update-alternatives --install /usr/bin/c++ c++ /usr/bin/g++ 30 + sudo update-alternatives --set c++ /usr/bin/g++ + + - name: Read antares-solver version + id: antares-version + uses: ./.github/actions/read-json-value + with: + path: 'antares-version.json' + key: 'antares_version' + + - name: Read antares-xpansion version + id: antares-xpansion-version + uses: ./.github/actions/read-json-value + with: + path: 'antares-version.json' + key: 'antares_xpansion_version' + + - name: Download pre-compiled librairies + uses: ./.github/workflows/download-extract-precompiled-libraries-tgz + with: + antares-version: ${{steps.antares-version.outputs.result}} + os: ${{matrix.os}} + os-full-name: Ubuntu-20.04 + ortools-url: ${{env.ORTOOLS_URL}} + ortools-dir: ${{env.ORTOOLS_DIR}} + + - name: Init submodule + run: | + git submodule update --init --recursive . + + - name: vcpkg install + run: | + git submodule update --init vcpkg + ./vcpkg/bootstrap-vcpkg.sh -disableMetrics + + - name: Restore vcpkg binary dir from cache + id: cache-vcpkg-binary + uses: actions/cache/restore@v4 + with: + path: ${{ github.workspace }}/vcpkg_cache + key: vcpkg-cache-ubuntu-${{ hashFiles('src/vcpkg.json', '.git/modules/vcpkg/HEAD') }} + # Allows to restore a cache when deps have only partially changed (like adding a dependency) + restore-keys: vcpkg-cache-ubuntu- + + - name: Configure + shell: bash + run: | + cmake -B _build -S . \ + -DCMAKE_C_COMPILER_LAUNCHER=ccache \ + -DCMAKE_C_COMPILER=/usr/bin/gcc-10 \ + -DCMAKE_CXX_COMPILER_LAUNCHER=ccache \ + -DCMAKE_CXX_COMPILER=/usr/bin/g++-10 \ + -DCODE_COVERAGE=ON \ + -DBUILD_TESTING=ON \ + -DBUILD_antares_solver=OFF \ + -DCMAKE_BUILD_TYPE=Release \ + -DCMAKE_PREFIX_PATH="${{ github.workspace }}/deps;${{env.ORTOOLS_DIR}}/install" \ + -DCMAKE_INSTALL_PREFIX=_install \ + -DCMAKE_EXPORT_COMPILE_COMMANDS=ON \ + -DVCPKG_TARGET_TRIPLET=x64-linux-release \ + -DCMAKE_TOOLCHAIN_FILE=vcpkg/scripts/buildsystems/vcpkg.cmake + + - name: Cache vcpkg binary dir + if: always() + id: save-cache-vcpkg-binary + uses: actions/cache/save@v4 + with: + path: ${{ github.workspace }}/vcpkg_cache + key: vcpkg-cache-ubuntu-${{ hashFiles('src/vcpkg.json', '.git/modules/vcpkg/HEAD') }} + + - run: | + sed -i 's#: ".*/mpicxx #: "g++ #' $GITHUB_WORKSPACE/_build/compile_commands.json + + - name: Build + run: cmake --build _build --config Release -j$(nproc) + + - name: Test and generate coverage + continue-on-error: true + run: | + cd $GITHUB_WORKSPACE/_build + ctest -C Release --output-on-failure -L "unit|short" + + - name: Compile coverage reports + run: | + cmake --build $GITHUB_WORKSPACE/_build --target code-coverage + + - name: Run sonar-scanner + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + SONAR_TOKEN: ${{ secrets.SONAR_TOKEN_2022 }} + run: sonar-scanner --define sonar.host.url="${{ env.SONAR_HOST_URL }}" \ No newline at end of file