Skip to content

Fix bug related to unsupported entries containi… #623

Fix bug related to unsupported entries containi…

Fix bug related to unsupported entries containi… #623

---
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"