Fix bug related to unsupported entries containi… #623
Workflow file for this run
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
--- | |
name: Run Standard Tests | |
# Run minimal end-to-end tests for Khiops, Khiops Coclustering and KNITransfer | |
# Tests are lauched on Linux, Windows and macOS ; in serial and in parallel (4 procs) | |
# On release, it runs Standard test for binary. Plus MultiTables/SpliceJunction for KNITransfer | |
# On debug, it runs only Standard/Iris for Coclustering and KNITransfer and Standard/IrisLight for Khiops | |
# In case of errors, test results are available as artifacts for 7 days | |
# It is automatically triggered on PR when sources files are modified (files in src directory) | |
on: | |
workflow_dispatch: | |
pull_request: | |
paths: | |
- '**CMakeLists.txt' | |
- src/**.h | |
- src/**.cpp | |
- src/**.java | |
- src/**.dd | |
- src/**.inc | |
- src/**.lex | |
- src/**.yac | |
- test/LearningTest/** | |
# Cancel any ongoing run of this workflow on the same PR or ref | |
concurrency: | |
group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref | |
}} | |
cancel-in-progress: true | |
env: | |
KhiopsBatchMode: true | |
jobs: | |
# Build the project on each platform for all targets to ensure that all sources and cmake files are correct | |
# The useful binaries are cached for the current run_id. It will be restored only in the same run of the | |
# build. The cached binaries are delete in the last job (cleanup-cache) | |
build-full-project: | |
strategy: | |
matrix: | |
build-setup: | |
- {os: windows-2022, cmake-preset: windows-msvc} | |
- {os: ubuntu-latest, cmake-preset: linux-gcc} | |
- {os: macos-latest, cmake-preset: macos-clang} | |
config: [debug, release] | |
runs-on: ${{ matrix.build-setup.os }} | |
env: | |
PRESET_NAME: ${{ matrix.build-setup.cmake-preset }}-${{ matrix.config }} | |
steps: | |
- name: Checkout sources | |
uses: actions/checkout@v3 | |
- name: Build all binaries | |
uses: ./.github/actions/build-khiops | |
with: | |
preset-name: ${{ env.PRESET_NAME }} | |
- name: Cache binaries | |
id: cache-binaries-unix | |
uses: actions/cache@v3 | |
with: | |
# We add binaries path one by one to avoid *.pdb and other msvc stuffs that generate a cache of 200Mo for windows | |
path: | | |
${{ github.workspace }}/build/${{ env.PRESET_NAME }}/bin/MODL | |
${{ github.workspace }}/build/${{ env.PRESET_NAME }}/bin/MODL_Coclustering | |
${{ github.workspace }}/build/${{ env.PRESET_NAME }}/bin/KNITransfer | |
${{ github.workspace }}/build/${{ env.PRESET_NAME }}/bin/MODL.exe | |
${{ github.workspace }}/build/${{ env.PRESET_NAME }}/bin/MODL_Coclustering.exe | |
${{ github.workspace }}/build/${{ env.PRESET_NAME }}/bin/KNITransfer.exe | |
${{ github.workspace }}/build/${{ env.PRESET_NAME }}/bin/KhiopsNativeInterface.dll | |
${{ github.workspace }}/build/${{ env.PRESET_NAME }}/lib/libKhiopsNativeInterface.* | |
${{ github.workspace }}/build/${{ env.PRESET_NAME }}/lib/KhiopsNativeInterface.lib | |
key: ${{ github.run_id }}-${{ matrix.build-setup.os }}-${{ env.PRESET_NAME | |
}} | |
fail-on-cache-miss: false | |
run-standard-tests: | |
needs: build-full-project | |
strategy: | |
fail-fast: false | |
matrix: | |
build-setup: | |
- {os: windows-2022, cmake-preset: windows-msvc} | |
- {os: ubuntu-latest, cmake-preset: linux-gcc} | |
- {os: macos-latest, cmake-preset: macos-clang} | |
running-mode: [parallel, serial] | |
config: [debug, release] | |
runs-on: ${{ matrix.build-setup.os }} | |
env: | |
PRESET_NAME: ${{ matrix.build-setup.cmake-preset }}-${{ matrix.config }} | |
steps: | |
- name: Checkout sources | |
uses: actions/checkout@v3 | |
- name: Restore cached binaries | |
id: restore-binaries | |
uses: actions/cache/restore@v3 | |
with: | |
path: | | |
${{ github.workspace }}/build/${{ env.PRESET_NAME }}/bin/MODL | |
${{ github.workspace }}/build/${{ env.PRESET_NAME }}/bin/MODL_Coclustering | |
${{ github.workspace }}/build/${{ env.PRESET_NAME }}/bin/KNITransfer | |
${{ github.workspace }}/build/${{ env.PRESET_NAME }}/bin/MODL.exe | |
${{ github.workspace }}/build/${{ env.PRESET_NAME }}/bin/MODL_Coclustering.exe | |
${{ github.workspace }}/build/${{ env.PRESET_NAME }}/bin/KNITransfer.exe | |
${{ github.workspace }}/build/${{ env.PRESET_NAME }}/bin/KhiopsNativeInterface.dll | |
${{ github.workspace }}/build/${{ env.PRESET_NAME }}/lib/libKhiopsNativeInterface.* | |
${{ github.workspace }}/build/${{ env.PRESET_NAME }}/lib/KhiopsNativeInterface.lib | |
key: ${{ github.run_id }}-${{ matrix.build-setup.os }}-${{ env.PRESET_NAME | |
}} | |
fail-on-cache-miss: true | |
- name: Setup Python | |
uses: actions/setup-python@v4 | |
with: | |
python-version: '3.10' | |
- name: Set environment variables | |
shell: bash | |
run: | | |
echo "TEST_PY=test/LearningTest/cmd/python/test_khiops.py" >> "$GITHUB_ENV" | |
echo "APPLY_PY=test/LearningTest/cmd/python/apply_command.py" >> "$GITHUB_ENV" | |
echo "BIN_PATH=${{ github.workspace }}/build/${{ env.PRESET_NAME }}/bin" >> "$GITHUB_ENV" | |
- name: Setup MPI | |
uses: mpi4py/setup-mpi@v1 | |
- name: Run Tests | |
# Run test on linux and macOS as describe in the top comment: | |
# - In parallel, run only MODL tests | |
# - In debug run only Standard/Iris for KNITRansfer and MODL_Coclustering, Standard/IrisLight for MODL | |
# - In release run all Standard tests | |
shell: bash | |
run: | | |
if [[ "${{ matrix.build-setup.os }}" == 'windows-2022' ]]; then | |
export EXT=".exe" | |
fi | |
if [[ "${{ matrix.running-mode }}" == "parallel" ]] ; then | |
export KhiopsMPIProcessNumber=4 | |
fi | |
if [[ "${{ matrix.config }}" == "release" ]] ; then | |
python $TEST_PY Khiops ${BIN_PATH}/MODL${EXT} Standard | |
if [[ "${{ matrix.running-mode }}" != "parallel" ]] ; then | |
python $TEST_PY Coclustering ${BIN_PATH}/MODL_Coclustering${EXT} Standard | |
python $TEST_PY KNI ${BIN_PATH}/KNITransfer${EXT} Standard | |
python $TEST_PY KNI ${BIN_PATH}/KNITransfer${EXT} MultiTables SpliceJunction | |
fi | |
else | |
python $TEST_PY Khiops ${BIN_PATH}/MODL${EXT} Standard IrisLight | |
if [[ "${{ matrix.running-mode }}" != "parallel" ]] ; then | |
python $TEST_PY Coclustering ${BIN_PATH}/MODL_Coclustering${EXT} Standard Iris | |
python $TEST_PY KNI ${BIN_PATH}/KNITransfer${EXT} Standard Iris | |
fi | |
fi | |
- name: Collect results | |
shell: bash | |
if: success() || failure() | |
run: | | |
if [[ "${{ matrix.config }}" == "release" ]] ; then | |
python3 $APPLY_PY errors test/LearningTest/TestKhiops/Standard | tee test/LearningTest/TestKhiops/Standard/errors.txt | |
if [[ "${{ matrix.running-mode }}" != "parallel" ]] ; then | |
python $APPLY_PY errors test/LearningTest/TestCoclustering/Standard | tee test/LearningTest/TestCoclustering/Standard/errors.txt | |
python $APPLY_PY errors test/LearningTest/TestKNITransfer/Standard | tee test/LearningTest/TestKNITransfer/Standard/errors.txt | |
python $APPLY_PY errors test/LearningTest/TestKNITransfer/MultiTables SpliceJunction | tee test/LearningTest/TestKNITransfer/MultiTables/errors.txt | |
fi | |
else | |
python3 $APPLY_PY errors test/LearningTest/TestKhiops/Standard IrisLight | tee test/LearningTest/TestKhiops/Standard/errors.txt | |
if [[ "${{ matrix.running-mode }}" != "parallel" ]] ; then | |
python $APPLY_PY errors test/LearningTest/TestCoclustering/Standard Iris | tee test/LearningTest/TestCoclustering/Standard/errors.txt | |
python $APPLY_PY errors test/LearningTest/TestKNITransfer/Standard Iris | tee test/LearningTest/TestKNITransfer/Standard/errors.txt | |
fi | |
fi | |
- name: Check results | |
shell: bash | |
run: | | |
if grep -qr "error" --include="errors.txt" test/LearningTest/ ; then | |
echo "::error::Errors in test" | |
false | |
fi | |
if grep -qr "The test has not been launched" --include="errors.txt" test/LearningTest/ ; then | |
echo "::error::Test not launched" | |
false | |
fi | |
- name: Upload test results | |
if: failure() | |
uses: actions/upload-artifact@v3 | |
with: | |
name: test-results-${{ env.PRESET_NAME }}-${{ matrix.running-mode}} | |
retention-days: 7 | |
path: |- | |
test/LearningTest/**/results | |
test/LearningTest/**/results.ref | |
test/LearningTest/**/errors.txt | |
test/LearningTest/**/comparisonResults.log | |
cleanup-cache: | |
# Clean up all caches belonging to the current run | |
if: ${{ always() }} | |
needs: run-standard-tests | |
runs-on: ubuntu-latest | |
permissions: | |
actions: write | |
steps: | |
- name: Checkout sources | |
uses: actions/checkout@v3 | |
with: | |
sparse-checkout: .git | |
- name: Cleanup cache | |
shell: bash | |
env: | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
run: |- | |
gh extension install actions/gh-actions-cache | |
echo "Fetching list of cache key for the current workflow" | |
cache_keys_for_delete=$(gh actions-cache list --key ${{ github.run_id }} | cut -f 1 ) | |
set +e | |
echo "Deleting caches..." | |
for cache_key in $cache_keys_for_delete | |
do | |
gh actions-cache delete $cache_key --confirm | |
done | |
echo "Done" |