Support for Azure storage #802
This file contains hidden or 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: Conda Package | |
| env: | |
| # Note: The default Khiops version must never be an alpha release as they are | |
| # ephemeral. To test alpha versions run the workflow manually. | |
| DEFAULT_KHIOPS_CORE_VERSION: 11.0.0 | |
| DEFAULT_SAMPLES_VERSION: 11.0.0 | |
| on: | |
| workflow_dispatch: | |
| inputs: | |
| khiops-core-version: | |
| default: 11.0.0 | |
| description: khiops-core version for testing | |
| khiops-samples-version: | |
| default: 11.0.0 | |
| description: khiops-samples version | |
| push: | |
| tags: ['*'] | |
| pull_request: | |
| paths: | |
| - pyproject.toml | |
| - LICENSE.md | |
| - packaging/conda/**, | |
| - '!packaging/conda/README.md' | |
| - .github/workflows/conda.yml | |
| defaults: | |
| run: | |
| shell: bash -el {0} | |
| concurrency: | |
| group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }} | |
| cancel-in-progress: true | |
| jobs: | |
| build: | |
| runs-on: ubuntu-22.04 | |
| steps: | |
| - name: Checkout Sources | |
| uses: actions/checkout@v4 | |
| with: | |
| # Checkout the full repository to have the tags so versioneer works properly | |
| # See issue https://github.com/actions/checkout/issues/701 | |
| fetch-depth: 0 | |
| - name: Install Miniforge | |
| uses: conda-incubator/setup-miniconda@v3 | |
| with: | |
| miniforge-version: 24.11.0-0 | |
| python-version: '3.12' | |
| conda-remove-defaults: true | |
| - name: Install Dependency Requirements for Building Conda Packages | |
| run: conda install -y conda-build | |
| - name: Build the Conda Package | |
| run: | | |
| conda build --output-folder ./khiops-conda ./packaging/conda | |
| - name: Upload Conda Package Artifact | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: khiops-conda | |
| path: ./khiops-conda | |
| retention-days: 7 | |
| # Test Conda package on brand new environments | |
| test: | |
| needs: build | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| python-version: ['3.10', '3.11', '3.12', '3.13', '3.14'] | |
| env: | |
| - {os: ubuntu-22.04, json-image: '{"image": "ubuntu:20.04"}'} | |
| - {os: ubuntu-22.04, json-image: '{"image": null}'} | |
| - {os: ubuntu-24.04, json-image: '{"image": null}'} | |
| - {os: ubuntu-22.04, json-image: '{"image": "rockylinux:8"}'} | |
| - {os: ubuntu-22.04, json-image: '{"image": "rockylinux:9"}'} | |
| - {os: windows-2022, json-image: '{"image": null}'} | |
| - {os: windows-2025, json-image: '{"image": null}'} | |
| - {os: macos-14, json-image: '{"image": null}'} | |
| - {os: macos-15, json-image: '{"image": null}'} | |
| - {os: macos-15-intel, json-image: '{"image": null}'} | |
| runs-on: ${{ matrix.env.os }} | |
| container: ${{ fromJSON(matrix.env.json-image) }} | |
| steps: | |
| - name: Install Miniforge | |
| uses: conda-incubator/setup-miniconda@v3 | |
| with: | |
| miniforge-version: 24.11.0-0 | |
| python-version: ${{ matrix.python-version }} | |
| conda-remove-defaults: true | |
| - name: Download Conda Package Artifact | |
| uses: actions/download-artifact@v4 | |
| with: | |
| name: khiops-conda | |
| path: ./khiops-conda | |
| - name: Put the khiops-core Version in the Environment | |
| run: | | |
| KHIOPS_CORE_VERSION="${{ inputs.khiops-core-version || env.DEFAULT_KHIOPS_CORE_VERSION }}" | |
| echo "KHIOPS_CORE_VERSION=$KHIOPS_CORE_VERSION" >> "$GITHUB_ENV" | |
| - name: Install the Khiops Conda package | |
| run: | | |
| # Add the Conda `rc` label for alpha or RC pre-releases | |
| if [[ $(echo ${KHIOPS_CORE_VERSION} | grep -E ".*(a|rc)\.[0-9]+") ]]; then | |
| RC_LABEL="conda-forge/label/rc::" | |
| else | |
| RC_LABEL="" | |
| fi | |
| conda install "${RC_LABEL}"khiops-core==$KHIOPS_CORE_VERSION | |
| conda install --channel ./khiops-conda/ khiops | |
| - name: Install JQ test dependency (Linux / MacOS) | |
| if: runner.os != 'Windows' | |
| run: conda install jq | |
| - name: Test Conda / Python Package Version Coherence | |
| run: | | |
| PACKAGE_VERSION=$(python -c "import khiops; print(khiops.__version__)") | |
| CONDA_VERSION=$(conda list ^khiops$ --json | jq ".[].version") | |
| # Fail if CONDA_VERSION is not identical to $PACKAGE_VERSION | |
| echo $CONDA_VERSION | grep -wq $PACKAGE_VERSION | |
| if [[ $? -ne 0 ]] | |
| then | |
| echo "::error::Conda package version $CONDA_VERSION does not match Python package version $PYTHON_VERSION" | |
| false | |
| fi | |
| - name: Test Khiops Installation Status | |
| run: kh-status | |
| - name: Test Khiops Installation Status (Conda-Based Environments) | |
| run: | | |
| # Set `python` to the current Conda Python executable | |
| PYTHON="$(type -P python)" | |
| # Remove $CONDA_PREFIX/bin from PATH | |
| PATH=$(echo $PATH | sed "s#$CONDA_PREFIX/bin:##g") | |
| # Unset *CONDA* environment variables | |
| # As a corollary, CONDA_PREFIX is unset | |
| # Note: There is no way to remove these variables from GITHUB_ENV | |
| # (see https://github.com/actions/runner/issues/1126) | |
| for CONDA_VAR in $(env | grep CONDA) | |
| do | |
| unset $(echo $CONDA_VAR | cut -d '=' -f 1) | |
| done | |
| # Note: kh-status is not reachable as it is not in PATH | |
| $PYTHON -c \ | |
| "import sys; import khiops.core as kh; return_code = kh.get_runner().print_status(); sys.exit(return_code)" | |
| - name: Download Sample Datasets | |
| run: | | |
| kh-download-datasets \ | |
| --version ${{ inputs.khiops-samples-version || env.DEFAULT_SAMPLES_VERSION }} | |
| - name: Run Samples | |
| env: | |
| # Force > 2 CPU cores to launch mpiexec | |
| KHIOPS_PROC_NUMBER: 4 | |
| run: | | |
| kh-samples core -i deploy_model -e | |
| kh-samples core -i deploy_coclustering -e | |
| kh-samples core -i train_predictor_error_handling -e | |
| kh-samples sklearn -i khiops_classifier -e | |
| kh-samples sklearn -i khiops_coclustering -e | |
| - name: Run Samples (Conda-Based Environments) | |
| env: | |
| # Force > 2 CPU cores to launch mpiexec | |
| KHIOPS_PROC_NUMBER: 4 | |
| run: | | |
| # Set `python` to the current Conda Python executable | |
| PYTHON="$(type -P python)" | |
| # Remove $CONDA_PREFIX/bin from PATH | |
| PATH=$(echo $PATH | sed "s#$CONDA_PREFIX/bin:##g") | |
| # Unset *CONDA* environment variables | |
| # As a corollary, CONDA_PREFIX is unset | |
| # Note: There is no way to remove these variables from GITHUB_ENV | |
| # (see https://github.com/actions/runner/issues/1126) | |
| for CONDA_VAR in $(env | grep CONDA) | |
| do | |
| unset $(echo $CONDA_VAR | cut -d '=' -f 1) | |
| done | |
| # Run samples | |
| # Note: kh-samples is not reachable as it is not in PATH | |
| $PYTHON -m khiops.samples.samples -i deploy_model -e | |
| $PYTHON -m khiops.samples.samples -i deploy_coclustering -e | |
| $PYTHON -m khiops.samples.samples -i train_predictor_error_handling -e | |
| $PYTHON -m khiops.samples.samples_sklearn -i khiops_classifier -e | |
| $PYTHON -m khiops.samples.samples_sklearn -i khiops_coclustering -e | |
| # Checkout the sources to obtain the tests | |
| # Note: The `sparse-checkout` option of this action is bugged so we checkout all the sources | |
| # See https://github.com/actions/checkout/issues/1628 | |
| - name: Checkout Sources | |
| uses: actions/checkout@v4 | |
| with: | |
| fetch-depth: 1 | |
| # This is needed so python does not retrieve the khiops module from PWD | |
| - name: Remove the khiops Module from the Sources | |
| run: rm -rf khiops | |
| - name: Install the Test Requirements | |
| run: conda install -y --file test-requirements.txt | |
| - name: Run the Runner Initialization Integration Test | |
| run: | | |
| python -m unittest -v \ | |
| tests.test_khiops_integrations.KhiopsRunnerEnvironmentTests.test_runner_environment_initialization | |
| - name: Run the Runner Initialization Integration Test (Conda-Based Environments) | |
| run: | | |
| # Set `python` to the current Conda Python executable | |
| PYTHON="$(type -P python)" | |
| # Remove $CONDA_PREFIX/bin from PATH | |
| PATH=$(echo $PATH | sed "s#$CONDA_PREFIX/bin:##g") | |
| # Unset *CONDA* environment variables | |
| # As a corolary, CONDA_PREFIX is unset | |
| # Note: There is no way to remove these variables from GITHUB_ENV | |
| # (see https://github.com/actions/runner/issues/1126) | |
| for CONDA_VAR in $(env | grep CONDA) | |
| do | |
| unset $(echo $CONDA_VAR | cut -d '=' -f 1) | |
| done | |
| # Execute the runner initialization integration test | |
| $PYTHON -m unittest -v \ | |
| tests.test_khiops_integrations.KhiopsRunnerEnvironmentTests.test_runner_environment_initialization | |
| # Release is only executed on tags | |
| # Note: For this job to work the secret variable KHIOPS_DEV_ANACONDA_CHANNEL_TOKEN | |
| # must be set with a valid anaconda.org access token | |
| release: | |
| if: github.ref_type == 'tag' | |
| needs: test | |
| runs-on: ubuntu-22.04 | |
| permissions: | |
| contents: write | |
| steps: | |
| - name: Download package artifacts | |
| uses: actions/download-artifact@v4 | |
| with: | |
| # See the upload-artifact step in the build job for the explanation of this pattern | |
| name: khiops-conda | |
| path: ./khiops-conda | |
| - name: Check Conda package / Git tag version coherence | |
| run: | | |
| # Don't exit on first error: print relevant error message | |
| set +e | |
| # Extract Conda package version from the package artifact | |
| PACKAGE_VERSION=$( \ | |
| unzip -p ./khiops-conda/noarch/*.conda info-*.tar.zst \ | |
| | tar --zstd -axf - info/index.json -O \ | |
| | jq -r ".version" \ | |
| ) | |
| # Convert pre-release version specification in the Git tag to the | |
| # Conda format and check that it matches the Conda package version | |
| echo ${{ github.ref_name }} | tr -d '-' | grep -wq $PACKAGE_VERSION | |
| if [[ $? -ne 0 ]] | |
| then | |
| echo "::error::Conda package version $PACKAGE_VERSION does not match Git tag ${{ github.ref_name }}" | |
| false | |
| fi | |
| - name: Install Miniforge | |
| uses: conda-incubator/setup-miniconda@v3 | |
| with: | |
| miniforge-version: 24.11.0-0 | |
| python-version: '3.12' | |
| conda-remove-defaults: true | |
| - name: Install Requirement Packages | |
| run: conda install -y anaconda-client conda-index | |
| - name: Reindex the package directory | |
| run: python -m conda_index ./khiops-conda | |
| - name: Upload the Package to anaconda.org | |
| run: |- | |
| # Override versions, as the packages are pushed to a dev channel | |
| anaconda --token "${{ secrets.KHIOPS_DEV_ANACONDA_CHANNEL_TOKEN }}" upload \ | |
| --user khiops-dev --force ./khiops-conda/noarch/*.conda |