Skip to content

Support for Azure storage #802

Support for Azure storage

Support for Azure storage #802

Workflow file for this run

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