Skip to content

Commit 751ac26

Browse files
committed
Add comprehensive migration guide covering all versions
- Completely rewrite migration.md with all versions from 0.1 to 2.0.1 - Document all breaking changes with Before/After examples - Mark versions with no breaking changes explicitly - Add migration steps for each breaking change - Include general migration tips and rollback procedures
1 parent d459ead commit 751ac26

File tree

1 file changed

+228
-39
lines changed

1 file changed

+228
-39
lines changed

docs/source/migration.md

Lines changed: 228 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -2,67 +2,158 @@
22

33
This guide documents breaking changes between mxmake versions and how to migrate your projects.
44

5-
## Version 1.3.1 (unreleased)
5+
## Version 2.0.1 (unreleased)
66

7-
### Removed: MXENV_UV_GLOBAL setting
7+
**No breaking changes**
8+
9+
## Version 2.0.0 (2025-10-24)
10+
11+
### Dropped: Python 3.9 Support
12+
13+
**Breaking Change**: Minimum Python version increased from 3.9 to 3.10.
14+
15+
**Migration**:
16+
- Ensure your system has Python 3.10 or later installed
17+
- If using UV, specify Python 3.10+ in `UV_PYTHON` setting:
18+
```makefile
19+
UV_PYTHON?=3.10 # or 3.11, 3.12, 3.13, 3.14
20+
```
21+
- If using pip, ensure `PRIMARY_PYTHON` points to Python 3.10+:
22+
```makefile
23+
PRIMARY_PYTHON?=python3.10
24+
```
25+
- Run `mxmake update` to regenerate Makefile with new `PYTHON_MIN_VERSION` default
26+
27+
### Removed: MXENV_UV_GLOBAL Setting
828

929
**Breaking Change**: The `MXENV_UV_GLOBAL` setting has been removed. UV is now automatically detected.
1030

11-
**Before (1.3.0 and earlier)**:
31+
**Before (1.x)**:
1232
```makefile
1333
PYTHON_PACKAGE_INSTALLER?=uv
1434
MXENV_UV_GLOBAL?=true
1535
```
1636

17-
**After (1.3.1+)**:
37+
**After (2.0+)**:
1838
```makefile
1939
PYTHON_PACKAGE_INSTALLER?=uv
20-
UV_PYTHON?=3.14 # Optional: specify Python version for UV
40+
UV_PYTHON?=3.14 # Optional: specify Python version
2141
```
2242
2343
**Migration**:
24-
- Remove the `MXENV_UV_GLOBAL` setting from your Makefile
25-
- If you need a specific Python version with UV, add the `UV_PYTHON` setting
26-
- UV will be auto-detected if installed globally, or installed locally in the virtual environment
44+
- Remove `MXENV_UV_GLOBAL` from your Makefile or preseed configurations
45+
- UV will be automatically detected if installed globally
46+
- To force local UV installation, ensure UV is not in your PATH
47+
- Add `UV_PYTHON` setting if you need a specific Python version
48+
- Run `mxmake update` to apply changes
49+
50+
### Changed: SOURCES_TARGET Implementation
2751
28-
## Version 1.0a7
52+
**Critical Fix**: `SOURCES_TARGET` incorrectly used mxdev's `-o` (offline) flag instead of `-f` (no fetch).
2953
30-
### Renamed: npm domain to nodejs
54+
**Impact**: This affects projects using mxdev with source checkouts. The `-o` flag had a bug (fixed in mxdev 5.0).
3155
32-
**Breaking Change**: The `npm` domain was renamed to `nodejs`.
56+
**Migration**:
57+
- Update mxdev to version 5.0 or later: `pip install -U mxdev>=5`
58+
- Run `mxmake update` in your project directory to regenerate the Makefile
59+
- The new Makefile will use the correct `-f` flag
60+
61+
### Added: UV_PYTHON Setting
62+
63+
**New Feature**: Introduced `UV_PYTHON` setting for semantic clarity.
64+
65+
**Purpose**:
66+
- `PRIMARY_PYTHON`: System interpreter path (e.g., `python3`, `/usr/bin/python3.11`)
67+
- `UV_PYTHON`: Python version spec for UV (e.g., `3.14`, `cpython@3.14`)
68+
69+
**Migration** (optional but recommended):
70+
```makefile
71+
# Old approach (still works)
72+
PYTHON_PACKAGE_INSTALLER?=uv
73+
PRIMARY_PYTHON?=3.14
74+
75+
# New approach (clearer semantics)
76+
PYTHON_PACKAGE_INSTALLER?=uv
77+
UV_PYTHON?=3.14
78+
```
79+
80+
## Version 1.3.0 (2025-09-03)
81+
82+
**No breaking changes**
83+
84+
## Version 1.2.2 (2025-06-30)
85+
86+
**No breaking changes**
87+
88+
## Version 1.2.1 (2025-06-23)
89+
90+
**No breaking changes**
91+
92+
## Version 1.2.0 (2025-06-04)
93+
94+
**No breaking changes**
95+
96+
## Version 1.1.0 (2025-03-20)
97+
98+
**No breaking changes**
99+
100+
## Version 1.0 (2025-02-11)
101+
102+
**No breaking changes**
103+
104+
## Version 1.0a8 (2024-10-24)
105+
106+
**No breaking changes**
107+
108+
## Version 1.0a7 (2024-10-24)
109+
110+
### Renamed: npm Domain to nodejs
111+
112+
**Breaking Change**: The `npm` domain was renamed to `nodejs` to better reflect its purpose (Node.js tooling, supporting both npm and pnpm).
33113
34114
**Before**:
35115
```yaml
116+
# preseed.yaml or mx.ini
36117
topics:
37118
js:
38119
npm:
39120
```
40121
41122
**After**:
42123
```yaml
124+
# preseed.yaml or mx.ini
43125
topics:
44126
js:
45127
nodejs:
46128
```
47129
48-
**Migration**: Update your `mx.ini` or preseed files to use `nodejs` instead of `npm`.
130+
**Migration**:
131+
- Update your preseed files to use `nodejs` instead of `npm`
132+
- Run `mxmake update` or `mxmake init` to regenerate Makefile
133+
- The domain now supports both npm and pnpm package managers
49134
50-
## Version 1.0a6
135+
## Version 1.0a6 (2024-08-02)
51136
52-
### Dropped: Python 3.8 and 3.9 support
137+
### Dropped: Python 3.8 Support
53138
54-
**Breaking Change**: Minimum Python version changed from 3.8 to 3.10.
139+
**Breaking Change**: Minimum Python version increased from 3.8 to 3.9.
55140
56141
**Migration**:
57-
- Ensure your project uses Python 3.10 or later
58-
- Update `PYTHON_MIN_VERSION` setting if needed:
142+
- Ensure your project uses Python 3.9 or later
143+
- Update `PYTHON_MIN_VERSION` if you've customized it:
59144
```makefile
60-
PYTHON_MIN_VERSION?=3.10
145+
PYTHON_MIN_VERSION?=3.9
61146
```
62147
63-
## Version 1.0a4
148+
**Note**: This change was superseded by version 2.0.0 which requires Python 3.10+.
149+
150+
## Version 1.0a5 (2024-06-07)
151+
152+
**No breaking changes**
64153
65-
### Changed: Default venv folder
154+
## Version 1.0a4 (2024-03-12)
155+
156+
### Changed: Default venv Folder
66157
67158
**Breaking Change**: Default virtual environment folder changed from `venv` to `.venv`.
68159
@@ -77,8 +168,17 @@ VENV_FOLDER?=.venv
77168
```
78169
79170
**Migration**:
80-
- If you want to keep using `venv`, explicitly set `VENV_FOLDER=venv` in your Makefile
81-
- Or switch to `.venv` and update your `.gitignore` if needed
171+
- **Option 1** (Use new default): Delete old `venv` folder, run `make install` to create `.venv`
172+
- **Option 2** (Keep old folder): Explicitly set `VENV_FOLDER=venv` in your Makefile
173+
174+
**Update .gitignore**:
175+
```gitignore
176+
# Old
177+
venv/
178+
179+
# New
180+
.venv/
181+
```
82182
83183
### Renamed: PYTHON_BIN to PRIMARY_PYTHON
84184
@@ -94,34 +194,123 @@ PYTHON_BIN?=python3
94194
PRIMARY_PYTHON?=python3
95195
```
96196
97-
**Migration**: Update your Makefile to use `PRIMARY_PYTHON` instead of `PYTHON_BIN`.
197+
**Migration**:
198+
- Run `mxmake update` to regenerate Makefile with new setting name
199+
- If you have custom scripts referencing `PYTHON_BIN`, update them to use `PRIMARY_PYTHON`
98200
99201
### Removed: MXENV_PATH
100202
101-
**Breaking Change**: `MXENV_PATH` has been removed. Use `$(MXENV_PYTHON)` directly.
203+
**Breaking Change**: `MXENV_PATH` variable has been removed. Use `$(MXENV_PYTHON)` directly.
204+
205+
**Before**:
206+
```makefile
207+
$(MXENV_PATH)pip install something
208+
$(MXENV_PATH)pytest tests/
209+
```
210+
211+
**After**:
212+
```makefile
213+
$(MXENV_PYTHON) -m pip install something
214+
$(MXENV_PYTHON) -m pytest tests/
215+
```
216+
217+
**Migration**:
218+
- Search your custom Makefile targets for `MXENV_PATH`
219+
- Replace with `$(MXENV_PYTHON) -m <command>`
220+
- Common replacements:
221+
- `$(MXENV_PATH)pip``$(MXENV_PYTHON) -m pip`
222+
- `$(MXENV_PATH)pytest``$(MXENV_PYTHON) -m pytest`
223+
- `$(MXENV_PATH)black``$(MXENV_PYTHON) -m black`
102224
103-
**Migration**: If you have custom targets using `MXENV_PATH`, replace:
104-
- `$(MXENV_PATH)pip``$(MXENV_PYTHON) -m pip`
105-
- `$(MXENV_PATH)pytest``$(MXENV_PYTHON) -m pytest`
225+
## Version 1.0a3 (2024-02-06)
106226
107-
## Version 1.0a1
227+
**No breaking changes** (added typecheck target, CI config generation, ruff domain)
108228
109-
### Changed: Terminology (Semantic overhaul)
229+
## Version 1.0a2 (2023-07-07)
110230
111-
**Breaking Change**: Terminology changes in custom domain development:
231+
**No breaking changes** (fixes and pip.conf support)
232+
233+
## Version 1.0a1 (2023-05-05)
234+
235+
### Semantic Overhaul: Terminology Changes
236+
237+
**Breaking Change**: Major terminology changes in custom domain development.
238+
239+
**Changes**:
112240
- "Domains" are now called "Topics"
113241
- "Makefile" is now called "Domain"
242+
- `_SENTINEL` variables renamed to `_TARGET`
243+
- `.sentinels` folder renamed to `.mxmake-sentinels`
114244
115-
**Migration**:
116-
- This only affects custom domain development and plugin authoring
117-
- Update your documentation and code comments accordingly
118-
- The user-facing API remains the same
245+
**Impact**: Only affects custom domain/plugin authors, not regular users.
119246
120-
### Renamed: _SENTINEL to _TARGET in domains
247+
**Migration** (for plugin developers):
248+
- Update custom domain files to use new terminology
249+
- Rename `*_SENTINEL` variables to `*_TARGET`:
250+
```makefile
251+
# Before
252+
MYDOM_SENTINEL?=.sentinels/mydom
253+
254+
# After
255+
MYDOM_TARGET?=.mxmake-sentinels/mydom
256+
```
257+
258+
### Renamed: Multiple Domains
259+
260+
**Breaking Changes**: Several domains renamed for clarity.
121261
122-
**Breaking Change**: Internal variable naming in custom domains.
262+
| Old Name | New Name |
263+
|----------|----------|
264+
| `install` | `packages` |
265+
| `files` | `mxfiles` |
266+
| `venv` | `mxenv` |
267+
| `docs` | `sphinx` |
123268
124269
**Migration**:
125-
- This only affects custom domain development
126-
- If you wrote custom domains, rename `*_SENTINEL` variables to `*_TARGET`
127-
- Example: `MYDOM_SENTINEL``MYDOM_TARGET`
270+
- Run `mxmake init` to regenerate Makefile with new domain names
271+
- Update preseed files if using old domain names
272+
273+
## Version 0.1 (2022-05-19)
274+
275+
Initial release - no migration needed.
276+
277+
---
278+
279+
## General Migration Tips
280+
281+
### Before Upgrading
282+
283+
1. **Read Release Notes**: Check [CHANGES.md](https://github.com/mxstack/mxmake/blob/main/CHANGES.md) for your target version
284+
2. **Backup**: Commit your current Makefile to version control
285+
3. **Test**: If possible, test the upgrade in a separate branch
286+
287+
### Upgrade Process
288+
289+
1. **Upgrade mxmake**:
290+
```bash
291+
pip install -U mxmake
292+
# or with UV:
293+
uv pip install -U mxmake
294+
```
295+
296+
2. **Update Makefile**:
297+
```bash
298+
mxmake update
299+
```
300+
301+
3. **Review Changes**: Check the diff to ensure settings are preserved
302+
4. **Test**: Run `make install` and `make test` to verify functionality
303+
304+
### Rolling Back
305+
306+
If you encounter issues:
307+
```bash
308+
git checkout Makefile # Restore previous version
309+
pip install mxmake==<previous-version> # Downgrade mxmake
310+
```
311+
312+
### Getting Help
313+
314+
- **Documentation**: https://mxmake.readthedocs.io
315+
- **Issues**: https://github.com/mxstack/mxmake/issues
316+
- **Changelog**: https://github.com/mxstack/mxmake/blob/main/CHANGES.md

0 commit comments

Comments
 (0)