Releases: mxstack/mxdev
Releases · mxstack/mxdev
5.1.0 - Multiple Push URLs
- Feature: Git repositories can now specify multiple push URLs using multiline syntax in the
pushurlconfiguration option. This enables pushing to multiple remotes (e.g., GitHub + GitLab mirrors) automatically. Syntax follows the same multiline pattern asversion-overridesandignores. Example:pushurl =followed by indented URLs on separate lines. Whengit pushis run in the checked-out repository, it will push to all configured pushurls sequentially, mirroring Git's native multi-pushurl behavior. Backward compatible with single pushurl strings.
[jensens, 2025-11-03] - Feature: Added
--versioncommand-line option to display the current mxdev version. The version is automatically derived from git tags via hatch-vcs during build. Example:mxdev --versionoutputs "mxdev 5.1.0" for releases or "mxdev 5.1.1.dev27+g62877d7" for development versions.
[jensens, 2025-11-03]
Proper Offline Mode
- Fix #70: HTTP-referenced requirements/constraints files are now properly cached and respected in offline mode. Previously, offline mode only skipped VCS operations but still fetched HTTP URLs. Now mxdev caches all HTTP content in
.mxdev_cache/during online mode and reuses it during offline mode, enabling true offline operation. This fixes the inconsistent behavior where-o/--offlinedidn't prevent all network activity.
[jensens] - Improvement: Enhanced help text for
-n/--no-fetch,-f/--fetch-only, and-o/--offlinecommand-line options to better explain their differences and when to use each one.
[jensens]
Critical bug fix and minor fixes
- Fix #65: Check source directories exist before writing to requirements-mxdev.txt. In offline mode: missing sources log WARNING and are written as comments (expected behavior). In non-offline mode: missing sources log ERROR and mxdev exits with RuntimeError (fatal error indicating checkout failure). This fixes mxmake two-stage installation workflow and prevents silent failures when sources fail to check out.
[jensens] - Fix: Configuration parsing no longer logs "Can not parse override:" errors when
version-overridesis empty. Empty lines inversion-overridesandignoresare now properly skipped during parsing. Also fixed bug whereignoreslines were not properly stripped of whitespace.
[jensens] - Fix: Three tests that were accidentally marked as skipped during PR #66 merge are now fixed and passing:
test_resolve_dependencies_simple_file(fixed assertion to check line contents),test_write_output_with_ignores(fixed to use read() for proper ignore processing), andtest_write_relative_constraints_path_different_dirs(fixed to include constraints content).
[jensens] - Chore: Improved test coverage for main.py from 42% to 100%. Added comprehensive tests for the main() function covering all CLI argument combinations (--verbose, --silent, --offline, --threads, --no-fetch, --fetch-only), ensuring robust testing of the entry point and all code paths.
[jensens] - Chore: Updated test fixture data versions to resolve Dependabot security alerts. Updated urllib3 from 1.26.9 to 2.5.0 and requests from 2.28.0 to 2.32.4 in test data files. These are test fixtures only and were never actual dependencies or security risks. Resolves GitHub Dependabot alerts #1-7.
[jensens] - Fix: Add 'synchronize' event to pull_request workflow triggers. This ensures CI runs when PRs are updated with new commits (e.g., after rebasing or pushing new changes), not just when opened or reopened.
[jensens] - Chore: Optimize GitHub Actions to prevent duplicate workflow runs on pull requests. Restrict
pushtrigger to only run onmainbranch, so PRs only trigger viapull_requestevent. This reduces CI resource usage by 50% for PR workflows.
[jensens] - Fix:
process_line()now correctly comments out packages inoverride_keysandignore_keysfor both requirements and constraints files. Previously, these settings only applied to constraints files (variety="c"). Now they work for requirements files (variety="r") as well, with the message "-> mxdev disabled (version override)" for override_keys in requirements.
[jensens]
Upgrades, Features and fixes
- Breaking: support for Python 3.8 and 3.9. Minimum required version is now Python 3.10.
[jensens] - Breaking: Modernize type hints to use Python 3.10+ syntax (PEP 604:
X | Yinstead ofUnion[X, Y]) - Use built-in generic types (
list,dict,tuple) instead oftyping.List,typing.Dict,typing.Tuple
[jensens] - Chore: Replace black with ruff for faster linting and formatting. Configure ruff with line-length=120 and appropriate rule selections. Keep isort for import sorting with plone profile and force-alphabetical-sort. This modernizes the tooling stack for better Python 3.10+ support and faster CI runs.
[jensens] - Feature: #54: Add
fixedinstall mode for non-editable installations to support production and Docker deployments. The neweditablemode replacesdirectas the default (same behavior, clearer naming). Thedirectmode is now deprecated but still works with a warning. Install modes:editable(with-e, for development),fixed(without-e, for production/Docker),skip(clone only).
[jensens] - Fix #35: Add
smart-threadingconfiguration option to prevent overlapping credential prompts when using HTTPS URLs. When enabled (default), HTTPS packages are processed serially first to ensure clean credential prompts, then other packages are processed in parallel for speed. Can be disabled withsmart-threading = falseif you have credential helpers configured.
[jensens] - Fix #34: The
offlineconfiguration setting and--offlineCLI flag are now properly respected to prevent VCS fetch/update operations. Previously, settingoffline = truein mx.ini or using the--offlineCLI flag was ignored, and VCS operations still occurred.
[jensens] - Fix #46: Git tags in branch option are now correctly detected and handled during updates. Previously, updating from one tag to another failed because tags were incorrectly treated as branches.
[jensens] - Fix #22 and #25: Constraints file path in requirements-out is now correctly calculated as a relative path from the requirements file's directory. This allows requirements and constraints files to be in different directories. Previously, the path was written from the config file's perspective, causing pip to fail when looking for the constraints file. On Windows, paths are now normalized to use forward slashes for pip compatibility.
[jensens] - Fix #53: Per-package target setting now correctly overrides default-target when constructing checkout paths.
[jensens] - Fix #55: UnicodeEncodeError on Windows when logging emoji. The emoji is now conditionally displayed only when the console encoding supports it (UTF-8), avoiding errors on Windows cp1252 encoding.
[jensens]
Modernized Package
- Modernize release method with hatchling. See RELEASE.md [jensens]
- Modernize tox setup. [jensens]
- Modernize Github workflows. [jensens]
- Enhance test coverage [jensens]
- Fix Makefile. [jensens]
Feat for env GIT_CLONE_DEPTH and fixes
What's Changed
- Do not add package with capital names uncommented at the bottom by @petschki in #48
- Support environment variable GIT_CLONE_DEPTH. by @mauritsvanrees in #51
New Contributors
Full Changelog: v4.0.3...v4.1.0
Fix ignores/overrides with upper case names.
This release fixes #45 "Packages with capital names do not get ignored when checked out".
Migrate from pkg_resources to importlib_resources
- Fix #42: deprecated use of
pkg_resouresto load entry points and parse requirements.
This enables mxdev to work on Python 3.12, wherepkg_resourcesis no longer installed by default in virtual_envs.
Minor git revision fix
Alternative package installer support
-
Breaking: Remove
--preon sources from generatedrequirements-mxdev.txt.
Usually it is not needed any longer, at least with pip 23.x.
This is a breaking change if you rely on the--preoption being present in the generated file.
Now the--preoption should be added topip installwhen the generated file is used.
This change enables the use of the generated file with the alternative pip replacementuv.
[jensens] -
Breaking: Drop official support for Python 3.7 (it is end of life).
[jensens] -
Document
mx.inisectionsvcssetting.
[jensens]