-
Notifications
You must be signed in to change notification settings - Fork 1
209 lines (201 loc) · 8 KB
/
conda.yml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
---
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: 10.2.4
DEFAULT_SAMPLES_VERSION: 10.2.4
on:
workflow_dispatch:
inputs:
khiops-core-version:
default: 10.2.4
description: khiops-core version for testing
khiops-samples-version:
default: 10.2.4
description: khiops-samples version
release-channel:
type: choice
default: khiops-dev
options: [khiops-dev, khiops]
description: Anaconda channel to release
push:
tags: ['*']
pull_request:
paths:
- setup.py
- setup.cfg
- pyproject.toml
- LICENSE.md
- versioneer.py
- khiops/_version.py
- 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: latest
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
# Note: The "khiops-dev" conda channel is needed to retrieve the "khiops-core" package.
# The "test" part of the conda recipe needs this package.
run: |
conda build --channel khiops-dev --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.8', '3.9', '3.10', '3.11', '3.12', '3.13']
env:
- {os: ubuntu-20.04, json-image: '{"image": null}'}
- {os: ubuntu-22.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-2019, json-image: '{"image": null}'}
- {os: windows-2022, json-image: '{"image": null}'}
- {os: macos-13, json-image: '{"image": null}'}
- {os: macos-14, json-image: '{"image": null}'}
- {os: macos-15, 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: latest # needed for macOS 13
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: |
conda install --channel khiops-dev khiops-core=$KHIOPS_CORE_VERSION
conda install --channel ./khiops-conda/ khiops
- 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 corrolary, 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 khiops.core as kh; kh.get_runner().print_status()"
- name: Download Sample Datasets
run: |
kh-download-datasets \
--version ${{ inputs.khiops-samples-version || env.DEFAULT_SAMPLES_VERSION }}
- name: Test Conda Package on Samples
env:
# Force > 2 CPU cores to launch mpiexec
KHIOPS_PROC_NUMBER: 4
run: |
kh-samples core -i train_predictor -e
kh-samples core -i train_predictor_error_handling -e
kh-samples core -i train_coclustering -e
kh-samples sklearn -i khiops_classifier -e
kh-samples sklearn -i khiops_coclustering -e
- name: Test Conda Package on Some 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 corrolary, 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 some Khiops and Khiops Coclustering 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
# Release is only executed on tags
# Note: For this job to work the secrets variables KHIOPS_ANACONDA_CHANNEL_TOKEN and
# KHIOPS_DEV_ANACONDA_CHANNEL_TOKEN must be set with valid anaconda.org access tokens
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: Install Miniforge
uses: conda-incubator/setup-miniconda@v3
with:
miniforge-version: latest
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: |-
# Set the anaconda.org channel
ANACONDA_CHANNEL="${{ inputs.release-channel || 'khiops-dev' }}"
# For the release channel: upload without forcing
if [[ "$ANACONDA_CHANNEL" == "khiops" ]]
then
anaconda --token "${{ secrets.KHIOPS_ANACONDA_CHANNEL_TOKEN }}" upload \
--user "$ANACONDA_CHANNEL" ./khiops-conda/noarch/*.tar.bz2
# For the dev channel: upload with forcing
else
anaconda --token "${{ secrets.KHIOPS_DEV_ANACONDA_CHANNEL_TOKEN }}" upload \
--user "$ANACONDA_CHANNEL" --force ./khiops-conda/noarch/*.tar.bz2
fi