@@ -31,10 +31,10 @@ all: format check test dist dist-test doc | conda-env
31
31
.PHONY : conda-env
32
32
conda-env : build/conda-env.${CONDA_ENV_NAME}.build-stamp
33
33
34
- MLOS_CORE_CONF_FILES := mlos_core/setup.py mlos_core/MANIFEST.in
35
- MLOS_BENCH_CONF_FILES := mlos_bench/setup.py mlos_bench/MANIFEST.in
36
- MLOS_VIZ_CONF_FILES := mlos_viz/setup.py mlos_viz/MANIFEST.in
37
- MLOS_GLOBAL_CONF_FILES := setup.cfg
34
+ MLOS_CORE_CONF_FILES := mlos_core/pyproject.toml mlos_core/ setup.py mlos_core/MANIFEST.in
35
+ MLOS_BENCH_CONF_FILES := mlos_bench/pyproject.toml mlos_bench/ setup.py mlos_bench/MANIFEST.in
36
+ MLOS_VIZ_CONF_FILES := mlos_viz/pyproject.toml mlos_viz/ setup.py mlos_viz/MANIFEST.in
37
+ MLOS_GLOBAL_CONF_FILES := setup.cfg # pyproject.toml
38
38
39
39
MLOS_PKGS := mlos_core mlos_bench mlos_viz
40
40
MLOS_PKG_CONF_FILES := $(MLOS_CORE_CONF_FILES ) $(MLOS_BENCH_CONF_FILES ) $(MLOS_VIZ_CONF_FILES ) $(MLOS_GLOBAL_CONF_FILES )
@@ -279,60 +279,93 @@ build/pytest.${CONDA_ENV_NAME}.build-stamp:
279
279
touch $@
280
280
281
281
282
+ # setuptools-scm needs a longer history than Github CI workers have by default.
283
+ .PHONY : unshallow
284
+ unshallow : build/unshallow.build-stamp
285
+
286
+ build/unshallow.build-stamp :
287
+ git rev-parse --is-shallow-repository | grep -x -q false || git fetch --unshallow --quiet
288
+ touch $@
289
+
282
290
.PHONY : dist
283
- dist : bdist_wheel
291
+ dist : sdist bdist_wheel
292
+
293
+ .PHONY : sdist
294
+ sdist : conda-env unshallow
295
+ sdist : mlos_core/dist/tmp/mlos_core-latest.tar.gz
296
+ sdist : mlos_bench/dist/tmp/mlos_bench-latest.tar.gz
297
+ sdist : mlos_viz/dist/tmp/mlos_viz-latest.tar.gz
284
298
285
299
.PHONY : bdist_wheel
286
- bdist_wheel : conda-env
300
+ bdist_wheel : conda-env unshallow
287
301
bdist_wheel : mlos_core/dist/tmp/mlos_core-latest-py3-none-any.whl
288
302
bdist_wheel : mlos_bench/dist/tmp/mlos_bench-latest-py3-none-any.whl
289
303
bdist_wheel : mlos_viz/dist/tmp/mlos_viz-latest-py3-none-any.whl
290
304
291
- mlos_core/dist/tmp/mlos_core-latest-py3-none-any.whl : mlos_core/dist/tmp/mlos_core-latest.tar
305
+ # Make the whl files depend on the .tar.gz files, mostly to prevent conflicts
306
+ # with shared use of the their build/ trees.
307
+
292
308
mlos_core/dist/tmp/mlos_core-latest-py3-none-any.whl : MODULE_NAME := mlos_core
293
309
mlos_core/dist/tmp/mlos_core-latest-py3-none-any.whl : PACKAGE_NAME := mlos_core
294
- mlos_core/dist/tmp/mlos_core-latest.tar : mlos_core/setup.py mlos_core/MANIFEST.in $(MLOS_CORE_PYTHON_FILES )
295
- mlos_core/dist/tmp/mlos_core-latest.tar : MODULE_NAME := mlos_core
296
- mlos_core/dist/tmp/mlos_core-latest.tar : PACKAGE_NAME := mlos_core
310
+ mlos_core/dist/tmp/mlos_core-latest-py3-none-any.whl : mlos_core/dist/tmp/mlos_core-latest.tar.gz
311
+ mlos_core/dist/tmp/mlos_core-latest.tar.gz : $(MLOS_CORE_CONF_FILES ) $(MLOS_CORE_PYTHON_FILES )
312
+ mlos_core/dist/tmp/mlos_core-latest.tar.gz : MODULE_NAME := mlos_core
313
+ mlos_core/dist/tmp/mlos_core-latest.tar.gz : PACKAGE_NAME := mlos_core
297
314
298
- mlos_bench/dist/tmp/mlos_bench-latest-py3-none-any.whl : mlos_bench/dist/tmp/mlos_bench-latest.tar
299
315
mlos_bench/dist/tmp/mlos_bench-latest-py3-none-any.whl : MODULE_NAME := mlos_bench
300
316
mlos_bench/dist/tmp/mlos_bench-latest-py3-none-any.whl : PACKAGE_NAME := mlos_bench
301
- mlos_bench/dist/tmp/mlos_bench-latest.tar : mlos_bench/setup.py mlos_bench/MANIFEST.in $(MLOS_BENCH_PYTHON_FILES )
302
- mlos_bench/dist/tmp/mlos_bench-latest.tar : MODULE_NAME := mlos_bench
303
- mlos_bench/dist/tmp/mlos_bench-latest.tar : PACKAGE_NAME := mlos_bench
317
+ mlos_bench/dist/tmp/mlos_bench-latest-py3-none-any.whl : mlos_bench/dist/tmp/mlos_bench-latest.tar.gz
318
+ mlos_bench/dist/tmp/mlos_bench-latest.tar.gz : $(MLOS_BENCH_CONF_FILES ) $(MLOS_BENCH_PYTHON_FILES )
319
+ mlos_bench/dist/tmp/mlos_bench-latest.tar.gz : MODULE_NAME := mlos_bench
320
+ mlos_bench/dist/tmp/mlos_bench-latest.tar.gz : PACKAGE_NAME := mlos_bench
304
321
305
- mlos_viz/dist/tmp/mlos_viz-latest-py3-none-any.whl : mlos_viz/dist/tmp/mlos_viz-latest.tar
306
322
mlos_viz/dist/tmp/mlos_viz-latest-py3-none-any.whl : MODULE_NAME := mlos_viz
307
323
mlos_viz/dist/tmp/mlos_viz-latest-py3-none-any.whl : PACKAGE_NAME := mlos_viz
308
- mlos_viz/dist/tmp/mlos_viz-latest.tar : mlos_viz/setup.py mlos_viz/MANIFEST.in $(mlos_viz_PYTHON_FILES )
309
- mlos_viz/dist/tmp/mlos_viz-latest.tar : MODULE_NAME := mlos_viz
310
- mlos_viz/dist/tmp/mlos_viz-latest.tar : PACKAGE_NAME := mlos_viz
324
+ mlos_viz/dist/tmp/mlos_viz-latest-py3-none-any.whl : mlos_viz/dist/tmp/mlos_viz-latest.tar.gz
325
+ mlos_viz/dist/tmp/mlos_viz-latest.tar.gz : $(MLOS_VIZ_CONF_FILES ) $(MLOS_VIZ_PYTHON_FILES )
326
+ mlos_viz/dist/tmp/mlos_viz-latest.tar.gz : MODULE_NAME := mlos_viz
327
+ mlos_viz/dist/tmp/mlos_viz-latest.tar.gz : PACKAGE_NAME := mlos_viz
311
328
312
- % -latest.tar : build/conda-env.${CONDA_ENV_NAME}.build-stamp
313
- % -latest.tar :
329
+ % -latest.tar.gz : build/conda-env.${CONDA_ENV_NAME}.build-stamp build/unshallow.build-stamp $(FORMAT_PREREQS )
330
+ mkdir -p $(MODULE_NAME ) /dist/tmp
331
+ rm -f $(MODULE_NAME ) /dist/$(PACKAGE_NAME ) -* .tar{,.gz}
332
+ rm -f $(MODULE_NAME ) /dist/tmp/$(PACKAGE_NAME ) -latest.tar{,.gz}
333
+ rm -rf $(MODULE_NAME ) /build/
334
+ rm -rf $(MODULE_NAME ) /$(MODULE_NAME ) .egg-info/
335
+ cd $(MODULE_NAME ) / && conda run -n ${CONDA_ENV_NAME} python3 -m build --sdist
336
+ # Do some sanity checks on the sdist tarball output.
337
+ BASE_VERS=` conda run -n ${CONDA_ENV_NAME} python3 $( MODULE_NAME) /$( MODULE_NAME) /version.py | cut -d. -f-2 | egrep -x ' [0-9.]+' || echo err-unknown-base-version` \
338
+ && ls $(MODULE_NAME ) /dist/$(PACKAGE_NAME ) -* .tar.gz | grep -F $$ BASE_VERS
339
+ # Make sure tests were excluded.
340
+ ! ( tar tzf $( MODULE_NAME) /dist/$( PACKAGE_NAME) -* .tar.gz | grep -m1 tests/ )
341
+ # Make sure the py.typed marker file exists.
342
+ tar tzf $(MODULE_NAME ) /dist/$(PACKAGE_NAME ) -* .tar.gz | grep -m1 /py.typed
343
+ # Check to make sure the mlos_bench module has the config directory.
344
+ [ " $( MODULE_NAME) " != " mlos_bench" ] || tar tzf $(MODULE_NAME ) /dist/$(PACKAGE_NAME ) -* .tar.gz | grep -m1 mlos_bench/config/
345
+ cd $(MODULE_NAME ) /dist/tmp && ln -s ../$(PACKAGE_NAME ) -* .tar.gz $(PACKAGE_NAME ) -latest.tar.gz
346
+
347
+ % -latest-py3-none-any.whl : build/conda-env.${CONDA_ENV_NAME}.build-stamp build/unshallow.build-stamp $(FORMAT_PREREQS )
314
348
mkdir -p $(MODULE_NAME ) /dist/tmp
315
- rm -f $(MODULE_NAME ) /dist/$(PACKAGE_NAME ) -* .tar
316
- rm -f $(MODULE_NAME ) /dist/tmp/$(PACKAGE_NAME ) -latest.tar
317
- cd $(MODULE_NAME ) / && conda run -n ${CONDA_ENV_NAME} python3 setup.py sdist --formats tar
318
- ls $(MODULE_NAME ) /dist/$(PACKAGE_NAME ) -* .tar
319
- ! ( tar tf $( MODULE_NAME) /dist/$( PACKAGE_NAME) -* .tar | grep -m1 tests/ )
320
- [ " $( MODULE_NAME) " != " mlos_bench" ] || tar tf $(MODULE_NAME ) /dist/$(PACKAGE_NAME ) -* .tar | grep -m1 mlos_bench/config/
321
- cd $(MODULE_NAME ) /dist/tmp && ln -s ../$(PACKAGE_NAME ) -* .tar $(PACKAGE_NAME ) -latest.tar
322
-
323
- % -latest-py3-none-any.whl : build/conda-env.${CONDA_ENV_NAME}.build-stamp
324
- % -latest-py3-none-any.whl :
325
349
rm -f $(MODULE_NAME ) /dist/$(MODULE_NAME ) -* -py3-none-any.whl
326
350
rm -f $(MODULE_NAME ) /dist/tmp/$(MODULE_NAME ) -latest-py3-none-any.whl
327
- cd $(MODULE_NAME ) / && conda run -n ${CONDA_ENV_NAME} pip wheel --no-index --no-deps --wheel-dir dist dist/tmp/$(PACKAGE_NAME ) -latest.tar
328
- ls $(MODULE_NAME ) /dist/$(MODULE_NAME ) -* -py3-none-any.whl
351
+ rm -rf $(MODULE_NAME ) /build/
352
+ rm -rf $(MODULE_NAME ) /$(MODULE_NAME ) .egg-info/
353
+ cd $(MODULE_NAME ) / && conda run -n ${CONDA_ENV_NAME} python3 -m build --wheel
354
+ # Do some sanity checks on the wheel output.
355
+ BASE_VERS=` conda run -n ${CONDA_ENV_NAME} python3 $( MODULE_NAME) /$( MODULE_NAME) /version.py | cut -d. -f-2 | egrep -o ' ^[0-9.]+' || echo err-unknown-base-version` \
356
+ && ls $(MODULE_NAME ) /dist/$(MODULE_NAME ) -* -py3-none-any.whl | grep -F $$ BASE_VERS
329
357
# Check to make sure the tests were excluded from the wheel.
330
358
! ( unzip -t $( MODULE_NAME) /dist/$( MODULE_NAME) -* -py3-none-any.whl | grep -m1 tests/ )
359
+ # Make sure the py.typed marker file exists.
360
+ unzip -t $(MODULE_NAME ) /dist/$(MODULE_NAME ) -* -py3-none-any.whl | grep -m1 /py.typed
331
361
# Check to make sure the mlos_bench module has the config directory.
332
362
[ " $( MODULE_NAME) " != " mlos_bench" ] || unzip -t $(MODULE_NAME ) /dist/$(MODULE_NAME ) -* -py3-none-any.whl | grep -m1 mlos_bench/config/
333
- cd $(MODULE_NAME ) /dist/tmp && ln -s ../$(MODULE_NAME ) -* -py3-none-any.whl $(MODULE_NAME ) -latest-py3-none-any.whl
334
363
# Check to make sure the README contents made it into the package metadata.
335
- unzip -p $(MODULE_NAME ) /dist/tmp/$(MODULE_NAME ) -latest-py3-none-any.whl * /METADATA | egrep -v ' ^[A-Z][a-zA-Z-]+:' | grep -q -i ' ^# mlos'
364
+ unzip -p $(MODULE_NAME ) /dist/$(MODULE_NAME ) -* -py3-none-any.whl * /METADATA | egrep -v ' ^[A-Z][a-zA-Z-]+:' | grep -q -i ' ^# mlos'
365
+ # Also check that the they include the URL
366
+ unzip -p $(MODULE_NAME ) /dist/$(MODULE_NAME ) -* -py3-none-any.whl * /METADATA | grep -q -e ' ](https://github.com/microsoft/MLOS/'
367
+ # Link it into place
368
+ cd $(MODULE_NAME ) /dist/tmp && ln -s ../$(MODULE_NAME ) -* -py3-none-any.whl $(MODULE_NAME ) -latest-py3-none-any.whl
336
369
337
370
.PHONY : clean-dist-test-env
338
371
clean-dist-test-env :
@@ -379,6 +412,8 @@ build/dist-test.$(PYTHON_VERSION).build-stamp: $(PYTHON_FILES) build/dist-test-e
379
412
conda run -n mlos-dist-test-$(PYTHON_VERSION ) python3 -m pytest mlos_core/mlos_core/tests/spaces/spaces_test.py
380
413
# Run a simple test that uses the mlos_bench wheel (full tests can be checked with `make test`).
381
414
conda run -n mlos-dist-test-$(PYTHON_VERSION ) python3 -m pytest mlos_bench/mlos_bench/tests/environments/mock_env_test.py
415
+ # Run a basic cli tool check.
416
+ conda run -n mlos-dist-test-$(PYTHON_VERSION ) mlos_bench --help 2>&1 | grep ' ^usage: mlos_bench '
382
417
# Run a simple test that uses the mlos_viz wheel (full tests can be checked with `make test`).
383
418
# To do that, we need the fixtures from mlos_bench, so make those available too.
384
419
PYTHONPATH=mlos_bench conda run -n mlos-dist-test-$(PYTHON_VERSION ) python3 -m pytest mlos_viz/mlos_viz/tests/test_dabl_plot.py
@@ -400,13 +435,18 @@ build/publish-pypi-deps.${CONDA_ENV_NAME}.build-stamp: build/conda-env.${CONDA_E
400
435
401
436
PUBLISH_DEPS := build/publish-pypi-deps.${CONDA_ENV_NAME}.build-stamp
402
437
PUBLISH_DEPS += build/pytest.${CONDA_ENV_NAME}.build-stamp
438
+ PUBLISH_DEPS += mlos_core/dist/tmp/mlos_core-latest.tar.gz
439
+ PUBLISH_DEPS += mlos_bench/dist/tmp/mlos_bench-latest.tar.gz
440
+ PUBLISH_DEPS += mlos_viz/dist/tmp/mlos_viz-latest.tar.gz
403
441
PUBLISH_DEPS += build/dist-test.$(PYTHON_VERSION ) .build-stamp
404
442
PUBLISH_DEPS += build/check-doc.build-stamp
405
443
PUBLISH_DEPS += build/linklint-doc.build-stamp
406
444
407
445
build/publish.${CONDA_ENV_NAME}.% .py.build-stamp : $(PUBLISH_DEPS )
408
- rm -f mlos_* /dist/* .tar.gz
409
- ls mlos_* /dist/* .tar | xargs -I% gzip -k %
446
+ test ` ls -1 mlos_core/dist/* .tar.gz | wc -l` -eq 1
447
+ test ` ls -1 mlos_bench/dist/* .tar.gz | wc -l` -eq 1
448
+ test ` ls -1 mlos_viz/dist/* .tar.gz | wc -l` -eq 1
449
+ test ` ls -1 mlos_* /dist/* .tar.gz | wc -l` -eq 3
410
450
repo_name=` echo " $@ " | sed -r -e ' s|build/publish\.[^.]+\.||' -e ' s|\.py\.build-stamp||' ` \
411
451
&& conda run -n ${CONDA_ENV_NAME} python3 -m twine upload --repository $$ repo_name \
412
452
mlos_* /dist/mlos* -* .tar.gz mlos_* /dist/mlos* -* .whl
@@ -422,7 +462,7 @@ build/doc-prereqs.${CONDA_ENV_NAME}.build-stamp: doc/requirements.txt
422
462
touch $@
423
463
424
464
.PHONY : doc-prereqs
425
- doc-prereqs : build/doc-prereqs.${CONDA_ENV_NAME}.build-stamp
465
+ doc-prereqs : build/doc-prereqs.${CONDA_ENV_NAME}.build-stamp build/unshallow.build-stamp
426
466
427
467
.PHONY : clean-doc-env
428
468
clean-doc-env :
@@ -612,6 +652,7 @@ clean-dist:
612
652
613
653
.PHONY : clean
614
654
clean : clean-format clean-check clean-test clean-dist clean-doc clean-doc-env clean-dist-test
655
+ rm -f build/unshallow.build-stamp
615
656
rm -f .* .build-stamp
616
657
rm -f build/conda-env.build-stamp build/conda-env.* .build-stamp
617
658
rm -rf mlos_core.egg-info
0 commit comments