Skip to content

Prevent unnecessary string copy #2508

Prevent unnecessary string copy

Prevent unnecessary string copy #2508

Workflow file for this run

name: Ubuntu build
on:
merge_group:
push:
branches:
- main
- develop
- dependabot/*
- release/*
pull_request:
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: [ ubuntu-20.04 ]
xprs: [
#{ value: XPRESS-ON, ref: 8.13a },
{ value: XPRESS-ON, ref: 9.2.5 },
# { value: XPRESS-OFF }
]
env:
XPRESSDIR: ${{ github.workspace }}/xpress
XPRESS: ${{ github.workspace }}/xpress/bin
XPRS_LIB_Path: ${{ github.workspace }}/xpress/lib
VCPKG_BINARY_SOURCES: "clear;files,${{ github.workspace }}/vcpkg_cache,readwrite"
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: Checkout xpressmp linux
if: matrix.xprs.value == 'XPRESS-ON'
uses: actions/checkout@v4
with:
repository: rte-france/xpress-mp
path: ${{ env.XPRESSDIR }}
ref: ${{ matrix.xprs.ref}}
token: ${{ secrets.AS_TOKEN }} #reniew token periodically
- 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/[email protected]
with:
key: ${{ matrix.os }}-${{ matrix.xprs.value }}
- name: Set up Python
uses: actions/setup-python@v5
with:
cache: 'pip'
python-version: 3.8
- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install -r requirements-tests.txt
pip install -r requirements-ui.txt
- 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
- 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 \
-DBUILD_UI=ON \
-DCMAKE_TOOLCHAIN_FILE=vcpkg/scripts/buildsystems/vcpkg.cmake
- name: Build
run: |
cmake --build _build --config Release -j$(nproc)
- name: Test
run: |
export PATH=${GITHUB_WORKSPACE}/_build/vcpkg_installed/x64-linux/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}}