From b0e701605fcf56b71bc02c2586f5fd12356751ea Mon Sep 17 00:00:00 2001 From: TimotheeMathieu Date: Mon, 20 Feb 2023 11:10:40 +0100 Subject: [PATCH 01/18] manually trigger build --- .github/workflows/build-wheels.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build-wheels.yml b/.github/workflows/build-wheels.yml index d74fd5b1..47bc48bd 100644 --- a/.github/workflows/build-wheels.yml +++ b/.github/workflows/build-wheels.yml @@ -1,6 +1,6 @@ name: build_wheels -on: # [push, pull_request] +on: [push, pull_request] release: types: - created From 371a20bd7ab560085bac94f40b6fe3b71f3236e3 Mon Sep 17 00:00:00 2001 From: TimotheeMathieu Date: Mon, 20 Feb 2023 11:19:45 +0100 Subject: [PATCH 02/18] comment manual part --- .github/workflows/build-wheels.yml | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/.github/workflows/build-wheels.yml b/.github/workflows/build-wheels.yml index 47bc48bd..18bc090c 100644 --- a/.github/workflows/build-wheels.yml +++ b/.github/workflows/build-wheels.yml @@ -1,14 +1,14 @@ name: build_wheels on: [push, pull_request] - release: - types: - - created - workflow_dispatch: - inputs: - version: - description: 'Manually trigger wheel build in Github UI' - required: true + # release: + # types: + # - created + # workflow_dispatch: + # inputs: + # version: + # description: 'Manually trigger wheel build in Github UI' + # required: true jobs: From 749f29f2b54b307838e150c96fc7497138161645 Mon Sep 17 00:00:00 2001 From: TimotheeMathieu Date: Mon, 20 Feb 2023 11:23:41 +0100 Subject: [PATCH 03/18] switching to Ubuntu 22.04 --- .github/workflows/build-wheels.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build-wheels.yml b/.github/workflows/build-wheels.yml index 18bc090c..d742723e 100644 --- a/.github/workflows/build-wheels.yml +++ b/.github/workflows/build-wheels.yml @@ -17,7 +17,7 @@ jobs: runs-on: ${{ matrix.os }} strategy: matrix: - os: [ubuntu-18.04, windows-latest, macos-latest] + os: [ubuntu-22.04, windows-latest, macos-latest] steps: - uses: actions/checkout@v2 From 3156e7fa7d6f06234d29a5618a16604b95539c90 Mon Sep 17 00:00:00 2001 From: TimotheeMathieu Date: Mon, 20 Feb 2023 13:47:34 +0100 Subject: [PATCH 04/18] fix bug random test --- sklearn_extra/cluster/tests/test_k_medoids.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/sklearn_extra/cluster/tests/test_k_medoids.py b/sklearn_extra/cluster/tests/test_k_medoids.py index f695b569..42497a52 100644 --- a/sklearn_extra/cluster/tests/test_k_medoids.py +++ b/sklearn_extra/cluster/tests/test_k_medoids.py @@ -224,8 +224,9 @@ def test_precomputed(): kmedoids.fit(D_1) assert_allclose(kmedoids.inertia_, 0.2) - assert_array_equal(kmedoids.medoid_indices_, [2, 0]) - assert_array_equal(kmedoids.labels_, [1, 1, 0, 0]) + assert_array_equal(np.sort(kmedoids.medoid_indices_), np.sort([2, 0])) # the order may change + assert kmedoids.labels_[0]==kmedoids.labels_[1] + assert kmedoids.labels_[2]==kmedoids.labels_[3] assert kmedoids.cluster_centers_ is None med_1, med_2 = tuple(kmedoids.medoid_indices_) From 1305e88c35c4b5f0ea2ca1d6d8a006215eaa7958 Mon Sep 17 00:00:00 2001 From: TimotheeMathieu Date: Mon, 20 Feb 2023 13:51:19 +0100 Subject: [PATCH 05/18] black --- conftest.py | 1 - examples/cluster/plot_kmedoids_digits.py | 1 - examples/plot_clara_digits.py | 1 - examples/plot_kmedoids.py | 1 - sklearn_extra/cluster/tests/test_k_medoids.py | 8 +++++--- sklearn_extra/robust/robust_weighted_estimator.py | 2 -- sklearn_extra/robust/tests/test_mean_estimators.py | 1 + .../robust/tests/test_robust_weighted_estimator.py | 4 +++- 8 files changed, 9 insertions(+), 10 deletions(-) diff --git a/conftest.py b/conftest.py index 5c77aaeb..ee8dcf1c 100644 --- a/conftest.py +++ b/conftest.py @@ -7,7 +7,6 @@ def pytest_collection_modifyitems(config, items): - # numpy changed the str/repr formatting of numpy arrays in 1.14. We want to # run doctests only for numpy >= 1.14. skip_doctests = False diff --git a/examples/cluster/plot_kmedoids_digits.py b/examples/cluster/plot_kmedoids_digits.py index 11f7cc71..8bb7ab11 100644 --- a/examples/cluster/plot_kmedoids_digits.py +++ b/examples/cluster/plot_kmedoids_digits.py @@ -63,7 +63,6 @@ plot_cols = 2 for i, (model, description) in enumerate(selected_models): - # Obtain labels for each point in mesh. Use last trained model. model.fit(reduced_data) Z = model.predict(np.c_[xx.ravel(), yy.ravel()]) diff --git a/examples/plot_clara_digits.py b/examples/plot_clara_digits.py index e1bb1f54..a703c948 100644 --- a/examples/plot_clara_digits.py +++ b/examples/plot_clara_digits.py @@ -79,7 +79,6 @@ plot_cols = 2 for i, (model, description) in enumerate(selected_models): - # Obtain labels for each point in mesh. Use last trained model. init_time = time.time() model.fit(reduced_data) diff --git a/examples/plot_kmedoids.py b/examples/plot_kmedoids.py index 514ac41d..88856743 100644 --- a/examples/plot_kmedoids.py +++ b/examples/plot_kmedoids.py @@ -37,7 +37,6 @@ plt.cm.Spectral(each) for each in np.linspace(0, 1, len(unique_labels)) ] for k, col in zip(unique_labels, colors): - class_member_mask = labels == k xy = X[class_member_mask] diff --git a/sklearn_extra/cluster/tests/test_k_medoids.py b/sklearn_extra/cluster/tests/test_k_medoids.py index 42497a52..30f419a0 100644 --- a/sklearn_extra/cluster/tests/test_k_medoids.py +++ b/sklearn_extra/cluster/tests/test_k_medoids.py @@ -224,9 +224,11 @@ def test_precomputed(): kmedoids.fit(D_1) assert_allclose(kmedoids.inertia_, 0.2) - assert_array_equal(np.sort(kmedoids.medoid_indices_), np.sort([2, 0])) # the order may change - assert kmedoids.labels_[0]==kmedoids.labels_[1] - assert kmedoids.labels_[2]==kmedoids.labels_[3] + assert_array_equal( + np.sort(kmedoids.medoid_indices_), np.sort([2, 0]) + ) # the order may change + assert kmedoids.labels_[0] == kmedoids.labels_[1] + assert kmedoids.labels_[2] == kmedoids.labels_[3] assert kmedoids.cluster_centers_ is None med_1, med_2 = tuple(kmedoids.medoid_indices_) diff --git a/sklearn_extra/robust/robust_weighted_estimator.py b/sklearn_extra/robust/robust_weighted_estimator.py index e0165671..76140398 100644 --- a/sklearn_extra/robust/robust_weighted_estimator.py +++ b/sklearn_extra/robust/robust_weighted_estimator.py @@ -308,7 +308,6 @@ def fit(self, X, y=None): # Optimization algorithm for epoch in range(self.max_iter): - if self._estimator_type == "classifier": # If in classification, use decision_function pred = base_estimator.decision_function(X) @@ -1016,7 +1015,6 @@ def __init__( verbose=0, random_state=None, ): - self.weighting = weighting self.max_iter = max_iter self.c = c diff --git a/sklearn_extra/robust/tests/test_mean_estimators.py b/sklearn_extra/robust/tests/test_mean_estimators.py index 0bce4dab..2f005662 100644 --- a/sklearn_extra/robust/tests/test_mean_estimators.py +++ b/sklearn_extra/robust/tests/test_mean_estimators.py @@ -8,6 +8,7 @@ sample = rng.normal(size=100) + # Check good in normal case def test_normal(): assert np.abs(median_of_means(sample, 3, rng)) < 1e-1 diff --git a/sklearn_extra/robust/tests/test_robust_weighted_estimator.py b/sklearn_extra/robust/tests/test_robust_weighted_estimator.py index 346849d3..aaecc603 100644 --- a/sklearn_extra/robust/tests/test_robust_weighted_estimator.py +++ b/sklearn_extra/robust/tests/test_robust_weighted_estimator.py @@ -118,6 +118,7 @@ def test_corrupted_classif(loss, weighting, k, c, multi_class): random_state=rng, ) + # check binary throw an error def test_robust_estimator_unsupported_loss(): model = RobustWeightedClassifier(multi_class="binary") @@ -259,7 +260,6 @@ def test_corrupted_regression(loss, weighting, k, c): @pytest.mark.parametrize("loss", regression_losses) @pytest.mark.parametrize("weighting", weightings) def test_corrupted_regression_multidim(loss, weighting): - n = 1000 d = 10 @@ -299,6 +299,7 @@ def test_regression_corrupted_weights(weighting): y_r = X_r + 0.1 * rng.normal(size=1000) X_r = X_r.reshape(-1, 1) + # Check that the fit is close to SGD when in extremal parameter cases @pytest.mark.parametrize("loss", regression_losses) @pytest.mark.parametrize("weighting", weightings) @@ -383,6 +384,7 @@ def test_corrupted_cluster(weighting, k, c): n_samples=100, centers=np.array([[-1, -1], [1, 1]]), random_state=rng ) + # Check that the fit is close to KMeans when in extremal parameter cases @pytest.mark.parametrize("weighting", weightings) def test_not_robust_cluster(weighting): From d426f1d1181a370533649b4c978addb7b5f8f34e Mon Sep 17 00:00:00 2001 From: TimotheeMathieu Date: Tue, 21 Feb 2023 15:38:40 +0100 Subject: [PATCH 06/18] fix test ci --- sklearn_extra/robust/robust_weighted_estimator.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/sklearn_extra/robust/robust_weighted_estimator.py b/sklearn_extra/robust/robust_weighted_estimator.py index 76140398..f421d2b8 100644 --- a/sklearn_extra/robust/robust_weighted_estimator.py +++ b/sklearn_extra/robust/robust_weighted_estimator.py @@ -129,13 +129,13 @@ class _RobustWeightedEstimator(BaseEstimator): Maximum number of iterations. For more information, see the optimization scheme of base_estimator. - c : float>0 or None, default=None + c : float>0 or None, default=1 Parameter used for Huber weighting procedure, used only if weightings is 'huber'. Measure the robustness of the weighting procedure. A small value of c means a more robust estimator. Can have a big effect on efficiency. If None, c is estimated at each step using half the Inter-quartile - range, this tends to be conservative (robust). + range, this tends to be unstable. k : int < sample_size/2, default=1 Parameter used for mom weighting procedure, used only if weightings @@ -211,7 +211,7 @@ def __init__( loss, weighting="huber", max_iter=100, - c=None, + c=1, k=0, tol=1e-5, n_iter_no_change=10, From 41df6ae5a4c5442450fcb5cf481d3e9b146b635e Mon Sep 17 00:00:00 2001 From: Timothee Mathieu Date: Mon, 27 Mar 2023 13:32:48 +0200 Subject: [PATCH 07/18] update cibuildwheels --- .github/workflows/build-wheels.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build-wheels.yml b/.github/workflows/build-wheels.yml index d742723e..43103b4b 100644 --- a/.github/workflows/build-wheels.yml +++ b/.github/workflows/build-wheels.yml @@ -28,7 +28,7 @@ jobs: python-version: '3.8' - name: Install cibuildwheel run: | - python -m pip install cibuildwheel==1.10.0 + python -m pip install cibuildwheel==2.12.1 - name: Build wheels env: # We only build for Python 3.6+. On Linux manylinux2010 is used. From 80ea7ceced524e8ffbf2608b4170988f8ae50d83 Mon Sep 17 00:00:00 2001 From: Timothee Mathieu Date: Mon, 27 Mar 2023 14:04:57 +0200 Subject: [PATCH 08/18] try another image for manylinux i686 --- .github/workflows/build-wheels.yml | 2 +- pyproject.toml | 4 ++++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/.github/workflows/build-wheels.yml b/.github/workflows/build-wheels.yml index 43103b4b..fbdb105c 100644 --- a/.github/workflows/build-wheels.yml +++ b/.github/workflows/build-wheels.yml @@ -33,7 +33,7 @@ jobs: env: # We only build for Python 3.6+. On Linux manylinux2010 is used. # Skipping pypy wheels for now since scipy & scikit-learn haven't build them yet. - CIBW_SKIP: "pp* *p27* *p35*" + CIBW_SKIP: "pp* *p27* *p35* *p36*" CIBW_TEST_REQUIRES: "pytest pandas scikit-learn" CIBW_TEST_COMMAND: "pytest --pyargs sklearn_extra" run: | diff --git a/pyproject.toml b/pyproject.toml index 44088477..0e992677 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -14,3 +14,7 @@ requires = [ [tool.black] line-length = 79 + +[tool.cibuildwheel] +manylinux-i686-image = "manylinux2010" + From a57d0f1dd7f4ab9035459510faa30580712fa5a1 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Mon, 27 Mar 2023 12:09:45 +0000 Subject: [PATCH 09/18] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- pyproject.toml | 1 - 1 file changed, 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index 0e992677..24b7dfba 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -17,4 +17,3 @@ line-length = 79 [tool.cibuildwheel] manylinux-i686-image = "manylinux2010" - From bb5187ba7d54928092a36d4ea8c72ac886fa2916 Mon Sep 17 00:00:00 2001 From: Timothee Mathieu Date: Mon, 27 Mar 2023 14:31:27 +0200 Subject: [PATCH 10/18] Skip 3.11 for 32bit --- .github/workflows/build-wheels.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/build-wheels.yml b/.github/workflows/build-wheels.yml index fbdb105c..8dfd5035 100644 --- a/.github/workflows/build-wheels.yml +++ b/.github/workflows/build-wheels.yml @@ -34,6 +34,8 @@ jobs: # We only build for Python 3.6+. On Linux manylinux2010 is used. # Skipping pypy wheels for now since scipy & scikit-learn haven't build them yet. CIBW_SKIP: "pp* *p27* *p35* *p36*" + # Skip python3.11 for 32bit + CIBW_SKIP: "*p311*-manylinux_i686 *p311*-win32" CIBW_TEST_REQUIRES: "pytest pandas scikit-learn" CIBW_TEST_COMMAND: "pytest --pyargs sklearn_extra" run: | From dfb25ae8411c007b17fc1dd5cd60912e330597ca Mon Sep 17 00:00:00 2001 From: Timothee Mathieu Date: Mon, 27 Mar 2023 15:21:49 +0200 Subject: [PATCH 11/18] fix syntax --- .github/workflows/build-wheels.yml | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/.github/workflows/build-wheels.yml b/.github/workflows/build-wheels.yml index 8dfd5035..da9bed63 100644 --- a/.github/workflows/build-wheels.yml +++ b/.github/workflows/build-wheels.yml @@ -33,9 +33,8 @@ jobs: env: # We only build for Python 3.6+. On Linux manylinux2010 is used. # Skipping pypy wheels for now since scipy & scikit-learn haven't build them yet. - CIBW_SKIP: "pp* *p27* *p35* *p36*" - # Skip python3.11 for 32bit - CIBW_SKIP: "*p311*-manylinux_i686 *p311*-win32" + # Skip python3.11 for 32bit. + CIBW_SKIP: "pp* *p27* *p35* *p36* *p311*-manylinux_i686 *p311*-win32" CIBW_TEST_REQUIRES: "pytest pandas scikit-learn" CIBW_TEST_COMMAND: "pytest --pyargs sklearn_extra" run: | From 18daf141e05533878507e8df457cbbdaa5a44cca Mon Sep 17 00:00:00 2001 From: Timothee Mathieu Date: Mon, 27 Mar 2023 15:40:48 +0200 Subject: [PATCH 12/18] remove failing binary --- .github/workflows/build-wheels.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build-wheels.yml b/.github/workflows/build-wheels.yml index da9bed63..17ca7169 100644 --- a/.github/workflows/build-wheels.yml +++ b/.github/workflows/build-wheels.yml @@ -34,7 +34,7 @@ jobs: # We only build for Python 3.6+. On Linux manylinux2010 is used. # Skipping pypy wheels for now since scipy & scikit-learn haven't build them yet. # Skip python3.11 for 32bit. - CIBW_SKIP: "pp* *p27* *p35* *p36* *p311*-manylinux_i686 *p311*-win32" + CIBW_SKIP: "pp* *p311*-manylinux_i686 *p311*-win32 cp38-win32" CIBW_TEST_REQUIRES: "pytest pandas scikit-learn" CIBW_TEST_COMMAND: "pytest --pyargs sklearn_extra" run: | From 746b8410a544ecbeb4ffaedcdc9df054245bbf8f Mon Sep 17 00:00:00 2001 From: Timothee Mathieu Date: Mon, 27 Mar 2023 16:02:18 +0200 Subject: [PATCH 13/18] remove failing binary --- .github/workflows/build-wheels.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build-wheels.yml b/.github/workflows/build-wheels.yml index 17ca7169..46e68b0e 100644 --- a/.github/workflows/build-wheels.yml +++ b/.github/workflows/build-wheels.yml @@ -34,7 +34,7 @@ jobs: # We only build for Python 3.6+. On Linux manylinux2010 is used. # Skipping pypy wheels for now since scipy & scikit-learn haven't build them yet. # Skip python3.11 for 32bit. - CIBW_SKIP: "pp* *p311*-manylinux_i686 *p311*-win32 cp38-win32" + CIBW_SKIP: "pp* *p311*-manylinux_i686 *p311*-win32 cp38-win32 cp38-manylinux*i686" CIBW_TEST_REQUIRES: "pytest pandas scikit-learn" CIBW_TEST_COMMAND: "pytest --pyargs sklearn_extra" run: | From ed732b5452e16d3dae865fffef2ab2db8e4f78bd Mon Sep 17 00:00:00 2001 From: Timothee Mathieu Date: Mon, 27 Mar 2023 16:17:19 +0200 Subject: [PATCH 14/18] remove all 32 bits --- .github/workflows/build-wheels.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build-wheels.yml b/.github/workflows/build-wheels.yml index 46e68b0e..7eb7baa6 100644 --- a/.github/workflows/build-wheels.yml +++ b/.github/workflows/build-wheels.yml @@ -34,7 +34,7 @@ jobs: # We only build for Python 3.6+. On Linux manylinux2010 is used. # Skipping pypy wheels for now since scipy & scikit-learn haven't build them yet. # Skip python3.11 for 32bit. - CIBW_SKIP: "pp* *p311*-manylinux_i686 *p311*-win32 cp38-win32 cp38-manylinux*i686" + CIBW_SKIP: "pp* *-win32 *-manylinux*i686" CIBW_TEST_REQUIRES: "pytest pandas scikit-learn" CIBW_TEST_COMMAND: "pytest --pyargs sklearn_extra" run: | From bedef0fbb1e0fee3031bfe479f47927208f7ac85 Mon Sep 17 00:00:00 2001 From: Timothee Mathieu Date: Mon, 27 Mar 2023 16:21:48 +0200 Subject: [PATCH 15/18] remove all 32 bits --- .github/workflows/build-wheels.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build-wheels.yml b/.github/workflows/build-wheels.yml index 7eb7baa6..1cebdb25 100644 --- a/.github/workflows/build-wheels.yml +++ b/.github/workflows/build-wheels.yml @@ -34,7 +34,7 @@ jobs: # We only build for Python 3.6+. On Linux manylinux2010 is used. # Skipping pypy wheels for now since scipy & scikit-learn haven't build them yet. # Skip python3.11 for 32bit. - CIBW_SKIP: "pp* *-win32 *-manylinux*i686" + CIBW_SKIP: "pp* *-win32 *-manylinux_i686" CIBW_TEST_REQUIRES: "pytest pandas scikit-learn" CIBW_TEST_COMMAND: "pytest --pyargs sklearn_extra" run: | From ab17372229d63dc611dc40bab48b3faa7d28101e Mon Sep 17 00:00:00 2001 From: Timothee Mathieu Date: Mon, 27 Mar 2023 17:02:13 +0200 Subject: [PATCH 16/18] remove musllinux --- .github/workflows/build-wheels.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build-wheels.yml b/.github/workflows/build-wheels.yml index 1cebdb25..7d55a985 100644 --- a/.github/workflows/build-wheels.yml +++ b/.github/workflows/build-wheels.yml @@ -34,7 +34,7 @@ jobs: # We only build for Python 3.6+. On Linux manylinux2010 is used. # Skipping pypy wheels for now since scipy & scikit-learn haven't build them yet. # Skip python3.11 for 32bit. - CIBW_SKIP: "pp* *-win32 *-manylinux_i686" + CIBW_SKIP: "pp* *-win32 *-manylinux_i686 *musllinux*" CIBW_TEST_REQUIRES: "pytest pandas scikit-learn" CIBW_TEST_COMMAND: "pytest --pyargs sklearn_extra" run: | From 6f9c3ae51d447909c0f004756dfe3b68080c01b4 Mon Sep 17 00:00:00 2001 From: Timothee Mathieu Date: Mon, 27 Mar 2023 17:30:32 +0200 Subject: [PATCH 17/18] remove trigger of build wheels --- .github/workflows/build-wheels.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build-wheels.yml b/.github/workflows/build-wheels.yml index 7d55a985..936c8cbf 100644 --- a/.github/workflows/build-wheels.yml +++ b/.github/workflows/build-wheels.yml @@ -1,6 +1,6 @@ name: build_wheels -on: [push, pull_request] +on: #[push, pull_request] # release: # types: # - created From e1df03ed6d650d1f3ac0ef42cf29a2a1c33b55e9 Mon Sep 17 00:00:00 2001 From: Timothee Mathieu Date: Mon, 27 Mar 2023 17:35:14 +0200 Subject: [PATCH 18/18] syntax yml --- .github/workflows/build-wheels.yml | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/.github/workflows/build-wheels.yml b/.github/workflows/build-wheels.yml index 936c8cbf..aa9803ad 100644 --- a/.github/workflows/build-wheels.yml +++ b/.github/workflows/build-wheels.yml @@ -1,14 +1,14 @@ name: build_wheels on: #[push, pull_request] - # release: - # types: - # - created - # workflow_dispatch: - # inputs: - # version: - # description: 'Manually trigger wheel build in Github UI' - # required: true + release: + types: + - created + workflow_dispatch: + inputs: + version: + description: 'Manually trigger wheel build in Github UI' + required: true jobs: