-
Notifications
You must be signed in to change notification settings - Fork 2
190 lines (184 loc) · 6.64 KB
/
pip.yml
File metadata and controls
190 lines (184 loc) · 6.64 KB
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
---
# After building and testing the pip package,
# this workflow publishes it to Github Release by default
# and to Test PyPI (TEST) or PyPI (PROD) if requested
name: Pip Package
env:
DEFAULT_SAMPLES_REVISION: 11.0.0
on:
workflow_dispatch:
inputs:
samples-revision:
default: 11.0.0
description: khiops-samples repo revision
image-tag:
default: 11.0.0-b.0.0
description: Development Docker Image Tag
pypi-target:
type: choice
default: None # no publishing to any Package Index by default
options: [None, testpypi, pypi]
description: Publish to Test PyPI or PyPI
pull_request:
paths: [pyproject.toml, LICENSE.md, .github/workflows/pip.yml]
push:
tags: ['*']
concurrency:
group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }}
cancel-in-progress: true
jobs:
build:
runs-on: ubuntu-22.04
permissions:
checks: write
contents: read
id-token: write
packages: read
steps:
- name: Checkout sources
uses: actions/checkout@v4
with:
# Get Git tags so that versioneer can function correctly
# See issue https://github.com/actions/checkout/issues/701
fetch-depth: 0
- name: Build Pip package
run: |
# This is needed so that the Git tag is parsed and the version is retrieved
git config --global --add safe.directory $(realpath .)
# Upgrade Pip
pip install --upgrade pip
# Install required Python build dependency
pip install build
# Build the source package (sdist) only
python3 -m build --sdist
- name: Upload the package as artifact
uses: actions/upload-artifact@v4
with:
name: pip-package
path: ./dist/khiops*.tar.gz
test:
needs: build
runs-on: ubuntu-22.04
strategy:
fail-fast: false
matrix:
container: [ubuntu22.04, rocky9]
container:
# 'latest' default image tag cannot be set as an environment variable,
# because the `env` context is only accessible at the step level;
# hence, it is hard-coded
image: |-
ghcr.io/khiopsml/khiops-python/khiopspydev-${{ matrix.container }}:${{ inputs.image-tag || '11.0.0-b.0.0' }}
steps:
- name: Set parameters as env
run: |
SAMPLES_REVISION=${{ inputs.samples-revision || env.DEFAULT_SAMPLES_REVISION }}
echo "SAMPLES_REVISION=$SAMPLES_REVISION" >> "$GITHUB_ENV"
- name: Checkout Khiops samples
uses: actions/checkout@v4
with:
repository: khiopsml/khiops-samples
ref: ${{ env.SAMPLES_REVISION }}
token: ${{ secrets.GITHUB_TOKEN }}
path: khiops-samples
- name: Download package artifact
uses: actions/download-artifact@v4
with:
name: pip-package
- name: Install package
run: |
pip install --upgrade pip
pip install $(ls khiops*.tar.gz)
- name: Run tests
env:
KHIOPS_SAMPLES_DIR: ${{ github.workspace }}/khiops-samples
# Force > 2 CPU cores to launch mpiexec
KHIOPS_PROC_NUMBER: 4
# Oversubscribe for MPI 4.x
rmaps_base_oversubscribe: true
# Oversubscribe for MPI > 4.x
OMPI_MCA_rmaps_base_oversubscribe: true
run: |-
# Make sure MPI support is not loaded through env modules
# Note: As the Docker container's shell is non-interactive, environment
# modules are currently not initializing the shell anyway
if [ -n "$MODULESHOME" ]; then module unload mpi; fi
# Print khiops installation status
kh-status
# Run some simple training tasks
kh-samples core -i train_predictor -e
kh-samples core -i train_coclustering -e
kh-samples sklearn -i khiops_classifier -e
# Test that the line containing "MPI command" does not contain "<empty>"
# (as given by kh-status in the absence of MPI support)
# The MPI command is not always named mpiexec, but can be orterun etc
# (as given by khiops_env)
kh-status | grep "MPI command" | grep -vwq "<empty>"
# The implementation of a unique release job with multiple conditional steps
# for each publishing mode is not chosen
# because of the required job environment verified for Trusted Publishing
release-github:
# only publish on tag pushes
if: github.ref_type == 'tag' && github.repository_owner == 'KhiopsML'
needs: [build, test]
runs-on: ubuntu-22.04
permissions:
contents: write
steps:
- name: Download package artifact
uses: actions/download-artifact@v4
with:
name: pip-package
- name: Upload Pip source package to the github release
uses: ncipollo/release-action@v1.15.0
with:
allowUpdates: true
artifacts: khiops*.tar.gz
body: '**For testing purposes only**'
draft: false
makeLatest: false
prerelease: true
updateOnlyUnreleased: true
release-testpypi:
# only publish on testpypi if requested and on tag pushes
if: inputs.pypi-target == 'testpypi' && github.ref_type == 'tag' && github.repository_owner == 'KhiopsML'
needs: [build, test]
runs-on: ubuntu-22.04
permissions:
# IMPORTANT: OIDC token mandatory for trusted publishing on TestPyPI and PyPI
id-token: write
# required job environment verified for Trusted Publishing
environment:
name: testpypi
steps:
- name: Download package artifact
uses: actions/download-artifact@v4
with:
name: pip-package
path: dist/
- name: Publish Python distribution to TestPyPI
uses: pypa/gh-action-pypi-publish@release/v1
with:
verbose: true
repository-url: https://test.pypi.org/legacy/
release-pypi:
# only publish on pypi if requested and on tag pushes
if: inputs.pypi-target == 'pypi' && github.ref_type == 'tag' && github.repository_owner == 'KhiopsML'
needs: [build, test]
runs-on: ubuntu-22.04
permissions:
# IMPORTANT: OIDC token mandatory for trusted publishing on TestPyPI and PyPI
id-token: write
# required job environment verified for Trusted Publishing
environment:
name: pypi
steps:
- name: Download package artifact
uses: actions/download-artifact@v4
with:
name: pip-package
path: dist/
- name: Publish Python distribution to PyPI
uses: pypa/gh-action-pypi-publish@release/v1
with:
verbose: true