Skip to content

Commit 9e237c1

Browse files
committed
checkout packages in mx.ini. remove obsolete lines in pyproject.toml
1 parent b33fc55 commit 9e237c1

File tree

4 files changed

+222
-35
lines changed

4 files changed

+222
-35
lines changed

.gitignore

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,9 @@
44
/.mxmake
55
/.ruff_cache
66
/.venv
7+
/build
78
/dist/
89
/htmlcov/
910
/requirements-mxdev.txt
10-
/build
11+
/constraints-mxdev.txt
12+
/sources/

Makefile

Lines changed: 163 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,12 @@
22
# THIS FILE IS GENERATED BY MXMAKE
33
#
44
# DOMAINS:
5+
#: applications.zest-releaser
56
#: core.base
67
#: core.mxenv
78
#: core.mxfiles
89
#: core.packages
10+
#: core.sources
911
#: qa.coverage
1012
#: qa.test
1113
#
@@ -37,30 +39,41 @@ INCLUDE_MAKEFILE?=include.mk
3739
# No default value.
3840
EXTRA_PATH?=
3941

42+
# Path to Python project relative to Makefile (repository root).
43+
# Leave empty if Python project is in the same directory as Makefile.
44+
# For monorepo setups, set to subdirectory name (e.g., `backend`).
45+
# Future-proofed for multi-language monorepos (e.g., PROJECT_PATH_NODEJS).
46+
# No default value.
47+
PROJECT_PATH_PYTHON?=
48+
4049
## core.mxenv
4150

4251
# Primary Python interpreter to use. It is used to create the
4352
# virtual environment if `VENV_ENABLED` and `VENV_CREATE` are set to `true`.
53+
# If global `uv` is used, this value is passed as `--python VALUE` to the venv creation.
54+
# uv then downloads the Python interpreter if it is not available.
55+
# for more on this feature read the [uv python documentation](https://docs.astral.sh/uv/concepts/python-versions/)
4456
# Default: python3
4557
PRIMARY_PYTHON?=python3
4658

4759
# Minimum required Python version.
48-
# Default: 3.9
49-
PYTHON_MIN_VERSION?=3.9
60+
# Default: 3.10
61+
PYTHON_MIN_VERSION?=3.10
5062

5163
# Install packages using the given package installer method.
52-
# Supported are `pip` and `uv`. If uv is used, its global availability is
53-
# checked. Otherwise, it is installed, either in the virtual environment or
54-
# using the `PRIMARY_PYTHON`, dependent on the `VENV_ENABLED` setting. If
55-
# `VENV_ENABLED` and uv is selected, uv is used to create the virtual
56-
# environment.
64+
# Supported are `pip` and `uv`. When `uv` is selected, a global installation
65+
# is auto-detected and used if available. Otherwise, uv is installed in the
66+
# virtual environment or using `PRIMARY_PYTHON`, depending on the
67+
# `VENV_ENABLED` setting.
5768
# Default: pip
5869
PYTHON_PACKAGE_INSTALLER?=uv
5970

60-
# Flag whether to use a global installed 'uv' or install
61-
# it in the virtual environment.
62-
# Default: false
63-
MXENV_UV_GLOBAL?=false
71+
# Python version for UV to install/use when creating virtual
72+
# environments with global UV. Passed to `uv venv -p VALUE`. Supports version
73+
# specs like `3.11`, `3.14`, `cpython@3.14`. Defaults to PRIMARY_PYTHON value
74+
# for backward compatibility.
75+
# Default: $(PRIMARY_PYTHON)
76+
UV_PYTHON?=$(PRIMARY_PYTHON)
6477

6578
# Flag whether to use virtual environment. If `false`, the
6679
# interpreter according to `PRIMARY_PYTHON` found in `PATH` is used.
@@ -107,7 +120,7 @@ PACKAGES_ALLOW_PRERELEASES?=false
107120
# The command which gets executed. Defaults to the location the
108121
# :ref:`run-tests` template gets rendered to if configured.
109122
# Default: .mxmake/files/run-tests.sh
110-
TEST_COMMAND?=$(VENV_FOLDER)/bin/pytest src/node/tests
123+
TEST_COMMAND?=.mxmake/files/run-tests.sh
111124

112125
# Additional Python requirements for running tests to be
113126
# installed (via pip).
@@ -123,12 +136,25 @@ TEST_DEPENDENCY_TARGETS?=
123136
# The command which gets executed. Defaults to the location the
124137
# :ref:`run-coverage` template gets rendered to if configured.
125138
# Default: .mxmake/files/run-coverage.sh
126-
COVERAGE_COMMAND?=\
127-
$(VENV_FOLDER)/bin/coverage run \
128-
--source=src/node \
129-
--omit=src/node/testing/profiling.py \
130-
-m pytest src/node/tests \
131-
&& $(VENV_FOLDER)/bin/coverage report --fail-under=100
139+
COVERAGE_COMMAND?=.mxmake/files/run-coverage.sh
140+
141+
## applications.zest-releaser
142+
143+
# Options to pass to zest.releaser prerelease command.
144+
# No default value.
145+
ZEST_RELEASER_PRERELEASE_OPTIONS?=
146+
147+
# Options to pass to zest.releaser release command.
148+
# No default value.
149+
ZEST_RELEASER_RELEASE_OPTIONS?=
150+
151+
# Options to pass to zest.releaser postrelease command.
152+
# No default value.
153+
ZEST_RELEASER_POSTRELEASE_OPTIONS?=
154+
155+
# Options to pass to zest.releaser fullrelease command.
156+
# No default value.
157+
ZEST_RELEASER_FULLRELEASE_OPTIONS?=
132158

133159
##############################################################################
134160
# END SETTINGS - DO NOT EDIT BELOW THIS LINE
@@ -144,6 +170,9 @@ FORMAT_TARGETS?=
144170

145171
export PATH:=$(if $(EXTRA_PATH),$(EXTRA_PATH):,)$(PATH)
146172

173+
# Helper variable: adds trailing slash to PROJECT_PATH_PYTHON only if non-empty
174+
PYTHON_PROJECT_PREFIX=$(if $(PROJECT_PATH_PYTHON),$(PROJECT_PATH_PYTHON)/,)
175+
147176
# Defensive settings for make: https://tech.davis-hansson.com/p/make/
148177
SHELL:=bash
149178
.ONESHELL:
@@ -168,7 +197,7 @@ $(SENTINEL): $(firstword $(MAKEFILE_LIST))
168197
# mxenv
169198
##############################################################################
170199

171-
export OS:=$(OS)
200+
OS?=
172201

173202
# Determine the executable path
174203
ifeq ("$(VENV_ENABLED)", "true")
@@ -184,26 +213,61 @@ else
184213
MXENV_PYTHON=$(PRIMARY_PYTHON)
185214
endif
186215

187-
# Determine the package installer
216+
# Determine the package installer with non-interactive flags
188217
ifeq ("$(PYTHON_PACKAGE_INSTALLER)","uv")
189-
PYTHON_PACKAGE_COMMAND=uv pip
218+
PYTHON_PACKAGE_COMMAND=uv pip --no-progress
190219
else
191220
PYTHON_PACKAGE_COMMAND=$(MXENV_PYTHON) -m pip
192221
endif
193222

223+
# Auto-detect global uv availability (simple existence check)
224+
ifeq ("$(PYTHON_PACKAGE_INSTALLER)","uv")
225+
UV_AVAILABLE:=$(shell command -v uv >/dev/null 2>&1 && echo "true" || echo "false")
226+
else
227+
UV_AVAILABLE:=false
228+
endif
229+
230+
# Determine installation strategy
231+
# depending on the PYTHON_PACKAGE_INSTALLER and UV_AVAILABLE
232+
# - both vars can be false or
233+
# - one of them can be true,
234+
# - but never boths.
235+
USE_GLOBAL_UV:=$(shell [[ "$(PYTHON_PACKAGE_INSTALLER)" == "uv" && "$(UV_AVAILABLE)" == "true" ]] && echo "true" || echo "false")
236+
USE_LOCAL_UV:=$(shell [[ "$(PYTHON_PACKAGE_INSTALLER)" == "uv" && "$(UV_AVAILABLE)" == "false" ]] && echo "true" || echo "false")
237+
238+
# Check if global UV is outdated (non-blocking warning)
239+
ifeq ("$(USE_GLOBAL_UV)","true")
240+
UV_OUTDATED:=$(shell uv self update --dry-run 2>&1 | grep -q "Would update" && echo "true" || echo "false")
241+
else
242+
UV_OUTDATED:=false
243+
endif
244+
194245
MXENV_TARGET:=$(SENTINEL_FOLDER)/mxenv.sentinel
195246
$(MXENV_TARGET): $(SENTINEL)
247+
# Validation: Check Python version if not using global uv
248+
ifneq ("$(USE_GLOBAL_UV)","true")
196249
@$(PRIMARY_PYTHON) -c "import sys; vi = sys.version_info; sys.exit(1 if (int(vi[0]), int(vi[1])) >= tuple(map(int, '$(PYTHON_MIN_VERSION)'.split('.'))) else 0)" \
197250
&& echo "Need Python >= $(PYTHON_MIN_VERSION)" && exit 1 || :
251+
else
252+
@echo "Using global uv for Python $(UV_PYTHON)"
253+
endif
254+
# Validation: Check VENV_FOLDER is set if venv enabled
198255
@[[ "$(VENV_ENABLED)" == "true" && "$(VENV_FOLDER)" == "" ]] \
199256
&& echo "VENV_FOLDER must be configured if VENV_ENABLED is true" && exit 1 || :
200-
@[[ "$(VENV_ENABLED)$(PYTHON_PACKAGE_INSTALLER)" == "falseuv" ]] \
257+
# Validation: Check uv not used with system Python
258+
@[[ "$(VENV_ENABLED)" == "false" && "$(PYTHON_PACKAGE_INSTALLER)" == "uv" ]] \
201259
&& echo "Package installer uv does not work with a global Python interpreter." && exit 1 || :
260+
# Warning: Notify if global UV is outdated
261+
ifeq ("$(UV_OUTDATED)","true")
262+
@echo "WARNING: A newer version of uv is available. Run 'uv self update' to upgrade."
263+
endif
264+
265+
# Create virtual environment
202266
ifeq ("$(VENV_ENABLED)", "true")
203267
ifeq ("$(VENV_CREATE)", "true")
204-
ifeq ("$(PYTHON_PACKAGE_INSTALLER)$(MXENV_UV_GLOBAL)","uvtrue")
205-
@echo "Setup Python Virtual Environment using package 'uv' at '$(VENV_FOLDER)'"
206-
@uv venv -p $(PRIMARY_PYTHON) --seed $(VENV_FOLDER)
268+
ifeq ("$(USE_GLOBAL_UV)","true")
269+
@echo "Setup Python Virtual Environment using global uv at '$(VENV_FOLDER)'"
270+
@uv venv --allow-existing --no-progress -p $(UV_PYTHON) --seed $(VENV_FOLDER)
207271
else
208272
@echo "Setup Python Virtual Environment using module 'venv' at '$(VENV_FOLDER)'"
209273
@$(PRIMARY_PYTHON) -m venv $(VENV_FOLDER)
@@ -213,10 +277,14 @@ endif
213277
else
214278
@echo "Using system Python interpreter"
215279
endif
216-
ifeq ("$(PYTHON_PACKAGE_INSTALLER)$(MXENV_UV_GLOBAL)","uvfalse")
217-
@echo "Install uv"
280+
281+
# Install uv locally if needed
282+
ifeq ("$(USE_LOCAL_UV)","true")
283+
@echo "Install uv in virtual environment"
218284
@$(MXENV_PYTHON) -m pip install uv
219285
endif
286+
287+
# Install/upgrade core packages
220288
@$(PYTHON_PACKAGE_COMMAND) install -U pip setuptools wheel
221289
@echo "Install/Update MXStack Python packages"
222290
@$(PYTHON_PACKAGE_COMMAND) install -U $(MXDEV) $(MXMAKE)
@@ -244,6 +312,31 @@ INSTALL_TARGETS+=mxenv
244312
DIRTY_TARGETS+=mxenv-dirty
245313
CLEAN_TARGETS+=mxenv-clean
246314

315+
##############################################################################
316+
# sources
317+
##############################################################################
318+
319+
SOURCES_TARGET:=$(SENTINEL_FOLDER)/sources.sentinel
320+
$(SOURCES_TARGET): $(PROJECT_CONFIG) $(MXENV_TARGET)
321+
@echo "Checkout project sources"
322+
@mxdev -f -c $(PROJECT_CONFIG)
323+
@touch $(SOURCES_TARGET)
324+
325+
.PHONY: sources
326+
sources: $(SOURCES_TARGET)
327+
328+
.PHONY: sources-dirty
329+
sources-dirty:
330+
@rm -f $(SOURCES_TARGET)
331+
332+
.PHONY: sources-purge
333+
sources-purge: sources-dirty
334+
@rm -rf sources
335+
336+
INSTALL_TARGETS+=sources
337+
DIRTY_TARGETS+=sources-dirty
338+
PURGE_TARGETS+=sources-purge
339+
247340
##############################################################################
248341
# mxfiles
249342
##############################################################################
@@ -271,7 +364,7 @@ else
271364
@echo "[settings]" > $(PROJECT_CONFIG)
272365
endif
273366

274-
LOCAL_PACKAGE_FILES:=$(wildcard pyproject.toml setup.cfg setup.py requirements.txt constraints.txt)
367+
LOCAL_PACKAGE_FILES:=$(wildcard $(PYTHON_PROJECT_PREFIX)pyproject.toml $(PYTHON_PROJECT_PREFIX)setup.cfg $(PYTHON_PROJECT_PREFIX)setup.py $(PYTHON_PROJECT_PREFIX)requirements.txt $(PYTHON_PROJECT_PREFIX)constraints.txt)
275368

276369
FILES_TARGET:=requirements-mxdev.txt
277370
$(FILES_TARGET): $(PROJECT_CONFIG) $(MXENV_TARGET) $(SOURCES_TARGET) $(LOCAL_PACKAGE_FILES)
@@ -402,6 +495,48 @@ INSTALL_TARGETS+=$(COVERAGE_TARGET)
402495
DIRTY_TARGETS+=coverage-dirty
403496
CLEAN_TARGETS+=coverage-clean
404497

498+
##############################################################################
499+
# zest-releaser
500+
##############################################################################
501+
502+
ZEST_RELEASER_TARGET:=$(SENTINEL_FOLDER)/zest-releaser.sentinel
503+
$(ZEST_RELEASER_TARGET): $(MXENV_TARGET)
504+
@echo "Install zest.releaser"
505+
@$(PYTHON_PACKAGE_COMMAND) install zest.releaser
506+
@touch $(ZEST_RELEASER_TARGET)
507+
508+
.PHONY: zest-releaser-prerelease
509+
zest-releaser-prerelease: $(ZEST_RELEASER_TARGET)
510+
@echo "Run prerelease"
511+
@prerelease $(ZEST_RELEASER_PRERELEASE_OPTIONS)
512+
513+
.PHONY: zest-releaser-release
514+
zest-releaser-release: $(ZEST_RELEASER_TARGET)
515+
@echo "Run release"
516+
@release $(ZEST_RELEASER_RELEASE_OPTIONS)
517+
518+
.PHONY: zest-releaser-postrelease
519+
zest-releaser-postrelease: $(ZEST_RELEASER_TARGET)
520+
@echo "Run postrelease"
521+
@postrelease $(ZEST_RELEASER_POSTRELEASE_OPTIONS)
522+
523+
.PHONY: zest-releaser-fullrelease
524+
zest-releaser-fullrelease: $(ZEST_RELEASER_TARGET)
525+
@echo "Run fullrelease"
526+
@fullrelease $(ZEST_RELEASER_FULLRELEASE_OPTIONS)
527+
528+
.PHONY: zest-releaser-dirty
529+
zest-releaser-dirty:
530+
@rm -f $(ZEST_RELEASER_TARGET)
531+
532+
.PHONY: zest-releaser-clean
533+
zest-releaser-clean: zest-releaser-dirty
534+
@test -e $(MXENV_PYTHON) && $(MXENV_PYTHON) -m pip uninstall -y zest.releaser || :
535+
536+
INSTALL_TARGETS+=$(ZEST_RELEASER_TARGET)
537+
DIRTY_TARGETS+=zest-releaser-dirty
538+
CLEAN_TARGETS+=zest-releaser-clean
539+
405540
##############################################################################
406541
# Custom includes
407542
##############################################################################

mx.ini

Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,58 @@
11
[settings]
2+
threads = 5
3+
4+
# conestack git URLs
5+
cs = https://github.com/conestack
6+
cs_push = git@github.com:conestack
7+
8+
# checkout source packages
9+
checkout_packages = true
10+
11+
# feature branch to checkout
12+
feature_branch = refactor-package-layout
13+
14+
# main package
215
main-package = -e .[test]
16+
17+
mxmake-test-runner = pytest
18+
# fixed dependency package versions
19+
version-overrides =
20+
pyramid==2.0.2
21+
22+
# templates and environment
23+
mxmake-templates =
24+
run-tests
25+
run-coverage
26+
27+
mxmake-test-path = src
28+
mxmake-source-path = src/node
29+
30+
[mxmake-env]
31+
TESTRUN_MARKER = 1
32+
33+
[mxmake-run-tests]
34+
environment = env
35+
36+
[mxmake-run-coverage]
37+
environment = env
38+
39+
###############################################################################
40+
# base packages
41+
###############################################################################
42+
43+
[odict]
44+
use = ${settings:checkout_packages}
45+
url = ${settings:cs}/odict.git
46+
pushurl = ${settings:cs_push}/odict.git
47+
branch = ${settings:feature_branch}
48+
mxmake-test-path = tests
49+
mxmake-source-path = src/odict
50+
51+
[plumber]
52+
use = ${settings:checkout_packages}
53+
url = ${settings:cs}/plumber.git
54+
pushurl = ${settings:cs_push}/plumber.git
55+
branch = ${settings:feature_branch}
56+
extras = test
57+
mxmake-test-path = tests
58+
mxmake-source-path = src/plumber

pyproject.toml

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -41,12 +41,6 @@ test = [
4141
[project.urls]
4242
Homepage = "http://github.com/conestack/node"
4343

44-
[tool.hatch.version]
45-
source = "vcs"
46-
47-
[tool.hatch.metadata]
48-
allow-direct-references = true
49-
5044
[tool.hatch.metadata.hooks.fancy-pypi-readme]
5145
content-type = "text/x-rst"
5246

0 commit comments

Comments
 (0)