- Use 'uv run mike' in release_docs to find mike in virtual environment (#89) [Copilot, skullydazed]
New release: 1.11.0 → 2.0.0. [Zach White]
Add @cli.prerun lifecycle hook with optional argument forwarding (#90) [Copilot, Copilot, Zach White, skullydazed]
- Add core and interface support for cli.prerun
Add missing intermediate versions. [Zach White]
Fix tests. [Zach White]
Make the clankers happy. [Zach White]
Housekeeping. [Zach White]
Fix the devel_docs job. [Zach White]
Remove context manager, inline initialization into __call__ (#88) [Copilot, skullydazed]
- Remove context manager, inline initialization into __call__
- Remove __enter__/__exit__ from both MILC and MILCInterface
- Rename _inside_context_manager to _initialized
- Inline initialization logic (colorama, arg parsing, config merge, logging setup) directly into __call__()
- Preserve error handling: catch non-SystemExit/KeyboardInterrupt exceptions, log them, and sys.exit(255)
- Update guard error messages to reference cli() instead of "with statement"
- Update setup_logging docstring
- Remove unused TracebackType and Type imports
- Regenerate API docs
Add CLAUDE.md that points to AGENTS.md. [Zach White]
Fix spinner() params silently dropped and sync MILCInterface docs. [Claude Sonnet 4.6, Zach White]
- Pass stream and enabled through to Halo() constructor (they were accepted but silently ignored)
- Fix enabled default documented as True; actual default is sys.stdout.isatty() since commit 78c1339
- Fix MILCInterface.spinner type for spinner param: was Optional[str], should be Optional[Union[str, Dict[str, Union[int, Sequence[str]]]]]
- Add docstring to milc_options() (was absent from generated API docs)
- Document msys2/cygwin stdin-breaks-after-subprocess behavior in run()
- Add docstrings to __enter__, __exit__, subcommand_name, subcommand_path on MILCInterface to match underlying MILC class
- Regenerate docs
Add check to ensure api docs stay up to date. [Zach White]
Generate_docs: skip files that start with _ [Zach White]
Allow spinner() to accept a dict and fix documentation errors. [Claude Sonnet 4.6, Zach White]
- MILC.spinner() now accepts a dict directly as the spinner parameter, bypassing name lookup; type annotation updated accordingly
- Fix sparklines.md: missing closing parens on print() calls and positional args on keyword-only min_value/max_value parameters
- Add env_prefix to metadata.md parameter list with link to env vars docs
- Fix tutorial.md ConfigParser link from Python 2 to Python 3 docs
Fix documentation discrepancies and spinner TTY default. [Claude Sonnet 4.6, Zach White]
- Correct Python version requirement to 3.9+ across README and installation docs
- Fix set_metadata() example to use keyword-only arguments (was a TypeError)
- Fix completer kwarg name (was incorrectly documented as 'completers')
- Fix config file paths: Linux ~/.config/ (not ~/.local/share/), modern Windows path
- Update configuration.md to reference cli.milc_options() instead of deprecated set_metadata()
- Remove non-existent --save-config flag from README help output; add --log-file-level
- Add subcommands and env_prefix to README feature list
- Fix !!! warn -> !!! warning admonition in subcommand_config.md
- Fix incomplete sentence in configuration.md
- Add internal-only note to write_config_option in api_milc.md
- Fix spinner enabled default in MILCInterface to match MILC (sys.stdout.isatty())
- Regenerated API docs include env_prefix, parent/name params, subcommand_name/path properties
Add env_prefix support for environment variable configuration. [Claude Sonnet 4.6, Zach White]
App authors can now opt in to automatic env var defaults by passing env_prefix to milc_options(). The framework handles type coercion, required validation, and provenance tracking (cli.config_source) with priority order: argv > env var > config file > default.
Also fixes pre-existing ruff/ty/yapf violations in configuration.py, milc.py, and subcommand/config.py.
Update docs for nested subcommands and write_config_option deprecation. [Claude Sonnet 4.6, Zach White]
- tutorial.md: add Nested Subcommands section with full example, config path access, same-name collision note, and subcommand_path
- configuration.md: document hierarchical config paths for nested subcommands
- subcommand_config.md: update token grammar and add nested subcommand example
Add nested subcommand support. [Claude Sonnet 4.6, Zach White]
Adds a parent= parameter to @cli.subcommand() that accepts a function object previously registered as a subcommand, enabling git-style hierarchical commands like prog remote add.
Key changes: - ConfigurationSection is now fully hierarchical: leaf values and
nested sections coexist in the same _data dict
- _config_navigate(root, 'remote.add') always-creates the path, consistent with existing lazy-creation semantics
- _collect_config_sections recursively yields all leaves for save/display
- _subcommand_keys: Dict[int, str] reverse-maps id(handler) to its dotted key (e.g. 'remote.add'), resolving same-name handler collisions under different parents
- Config storage uses underscore paths (remote.add → remote_add in Python attribute access); INI file uses dotted section names [remote.add]
- merge_args_into_config now prefers the active subcommand section when a subcommand arg and a general arg share the same dest name
- subcommand_path property added, returning e.g. ['remote', 'add']
- config subcommand updated to handle dotted section paths via rsplit('.', 1) and nested-section display
Disable spinners when stdout isn't a tty. [Zach White]
Bump cryptography from 46.0.6 to 46.0.7 (#86) [dependabot[bot], dependabot[bot]]
Bumps [cryptography](https://github.com/pyca/cryptography) from 46.0.6 to 46.0.7. - [Changelog](https://github.com/pyca/cryptography/blob/main/CHANGELOG.rst) - [Commits](https://github.com/pyca/cryptography/compare/46.0.6...46.0.7)
--- updated-dependencies: - dependency-name: cryptography
dependency-version: 46.0.7 dependency-type: indirect
...
Minor: changelog update. [Zach White]
- New release: 1.10.0 → 1.11.0. [Zach White]
- Remove python 3.8 support. [Zach White]
- Fix pygments requirement for 3.8. [Zach White]
- Add uv.lock to bumpversion. [Zach White]
- Add args_passed property to MILCInterface (#87) [Copilot, skullydazed]
- Minor: changelog update. [Zach White]
New release: 1.9.1 → 1.10.0. [Zach White]
[ci] Updated API documentation. [Zach White]
Fix multiple bugs found in library review (#2) [Claude Sonnet 4.6, Zach White]
- _sparkline.py: handle all-non-numeric input gracefully (use min/max default=None + early return); replace if spark_int > 7 with min() to stay within complexity limit
- milc.py: fix IndexError when --config-file is last argv token; fix spinner() format string crash when called with no args; fix KeyError in _handle_deprecated() when help= is omitted; fix __exit__() absorbing KeyboardInterrupt (now exits cleanly); correct _config_store_true/false type annotations from Sequence to List; remove @lru_cache from find_config_file() to prevent self reference leak
- questions.py: catch EOFError in all input functions (yesno, password, _question, choice); fix password() infinite loop when validate always returns False
- subcommand/config.py: fix ValueError on config tokens with multiple = signs (split with maxsplit=1); fix KeyError when deleting non-existent config option
Fix LogRecord mutation corrupting multi-handler output in MILCFormatter. [Claude Sonnet 4.6, Zach White]
LogRecord objects are shared across all handlers. MILCFormatter.format() was mutating record.levelname in place, causing the second handler (e.g., file handler) to receive an already-modified ANSI/emoji string instead of the original level name. Fix by operating on a shallow copy of the record so the original is never modified.
Fix exception safety, format string bug, and type annotation issues found in library review (#84) [Copilot, skullydazed]
- Initial plan
- Fix _save_config_file exception safety, format string bug in questions, type annotation in sparkline, and typos
Bump nltk from 3.9.1 to 3.9.4 (#83) [dependabot[bot], dependabot[bot]]
Bumps [nltk](https://github.com/nltk/nltk) from 3.9.1 to 3.9.4. - [Changelog](https://github.com/nltk/nltk/blob/develop/ChangeLog) - [Commits](https://github.com/nltk/nltk/compare/3.9.1...3.9.4)
--- updated-dependencies: - dependency-name: nltk
dependency-version: 3.9.4 dependency-type: indirect
...
Bump tornado from 6.4.2 to 6.5.5 (#82) [dependabot[bot], dependabot[bot]]
Bumps [tornado](https://github.com/tornadoweb/tornado) from 6.4.2 to 6.5.5. - [Changelog](https://github.com/tornadoweb/tornado/blob/master/docs/releases.rst) - [Commits](https://github.com/tornadoweb/tornado/compare/v6.4.2...v6.5.5)
--- updated-dependencies: - dependency-name: tornado
dependency-version: 6.5.5 dependency-type: indirect
...
Bump urllib3 from 2.2.3 to 2.6.3 (#80) [dependabot[bot], dependabot[bot]]
Bumps [urllib3](https://github.com/urllib3/urllib3) from 2.2.3 to 2.6.3. - [Release notes](https://github.com/urllib3/urllib3/releases) - [Changelog](https://github.com/urllib3/urllib3/blob/main/CHANGES.rst) - [Commits](https://github.com/urllib3/urllib3/compare/2.2.3...2.6.3)
--- updated-dependencies: - dependency-name: urllib3
dependency-version: 2.6.3 dependency-type: indirect
...
Bump black from 23.12.1 to 26.3.1 (#79) [dependabot[bot], dependabot[bot]]
Bumps [black](https://github.com/psf/black) from 23.12.1 to 26.3.1. - [Release notes](https://github.com/psf/black/releases) - [Changelog](https://github.com/psf/black/blob/main/CHANGES.md) - [Commits](https://github.com/psf/black/compare/23.12.1...26.3.1)
--- updated-dependencies: - dependency-name: black
dependency-version: 26.3.1 dependency-type: indirect
...
Bump pymdown-extensions from 10.15 to 10.16.1 (#81) [dependabot[bot], dependabot[bot]]
Bumps [pymdown-extensions](https://github.com/facelessuser/pymdown-extensions) from 10.15 to 10.16.1. - [Release notes](https://github.com/facelessuser/pymdown-extensions/releases) - [Commits](https://github.com/facelessuser/pymdown-extensions/compare/10.15...10.16.1)
--- updated-dependencies: - dependency-name: pymdown-extensions
dependency-version: 10.16.1 dependency-type: indirect
...
Track uv.lock for reproducible CI. [Claude Sonnet 4.6, Zach White]
uv.lock was gitignored, causing setup-uv's cache to never invalidate (no matching file for its cache-dependency-glob). Committing it gives CI a stable, reproducible dev environment and fixes the cache warning.
Does not affect downstream users — uv.lock is ignored by pip and only used by uv sync during development and CI.
Remove obsolete Python 3.6 stdin=None workaround. [Claude Sonnet 4.6, Zach White]
Introduced in 30fb0eb to fix a Python 3.6 subprocess.run behavior. In Python 3.8+ (now the minimum), stdin=None is identical to omitting stdin entirely — both inherit the parent's stdin. Dead code that misleads readers into thinking there's a meaningful edge case.
Fix confirm_prompt ignoring kwargs in password() [Claude Sonnet 4.6, Zach White]
The confirm prompt used args directly, raising TypeError if the caller formatted the original prompt with kwargs instead. Mirror the same args or kwargs pattern used for the main prompt.
Initialize spinner_obj to None to prevent potential NameError. [Claude Sonnet 4.6, Zach White]
spinner_obj was only defined inside the if-block, making the spinner=spinner_name or spinner_obj expression fragile if spinner_name is ever falsy without entering that block.
Remove unreachable assert in _sparkline.py. [Claude Sonnet 4.6, Zach White]
The assert after the min/max assignments can never be False: min() and max() either assign a value or raise ValueError on empty input. Dead code that misleads readers into thinking it is a real guard.
Replace assert with ValueError in handle_store_boolean. [Claude Sonnet 4.6, Zach White]
assert is stripped by python -O and gives an unhelpful AssertionError. Raises ValueError with a clear message instead, and moves the check before add_argument calls so the first flag isn't registered before the error fires.
Fix broken __exit__ error handling. [Claude Sonnet 4.6, Zach White]
Four issues in MILC.__exit__: - isinstance(SystemExit(), exc_type) is semantically inverted; use issubclass - print(exc_type) emits unhelpful class repr with no message - logging.exception() outside an except block captures no traceback - exit() is a REPL convenience wrapper; use sys.exit()
Switch AttrDict from UserDict to MutableMapping with private _data store. [Claude Sonnet 4.6, Zach White]
UserDict uses self.data as its backing store, making 'data' a reserved key for attribute access — a problem for a CLI library where --data is a likely argument name. MutableMapping lets us own the internal store name (_data), eliminating the reserved-key hazard entirely.
Key implementation notes: - __contains__ is overridden to check _data directly, bypassing
MutableMapping's default which calls self[key] and would cause infinite recursion in ConfigurationSection.__getitem__
- __getattr__ delegates to self.__getitem__ (not _data directly) so subclass overrides like Configuration's auto-creation are respected
- ConfigurationSection.__setattr__ simplified: non-_ keys write only to _data; _-prefixed internal state goes to object.__setattr__
- ConfigurationSection.__getattr__ now delegates to __getitem__ rather than only checking _parent['user'], fixing attribute access for values set via bracket notation
Rewrite AttrDict using collections.UserDict to fix stale attribute bug. [Claude Sonnet 4.6, Zach White]
__setitem__ was writing keys to both self._data and self.__dict__, but __delitem__ only removed from _data, leaving stale values accessible via attribute access. Switching to UserDict eliminates the dual-storage pattern entirely — UserDict manages its own self.data backing store and provides all dict protocol methods, so __getattr__ is the only override needed.
Also adds test_AttrDict_delete to cover this case.
Fix Windows CI hang by using stdin pipe instead of DEVNULL. [Claude Sonnet 4.6, Zach White]
On Windows CI with ConPTY, nul device can report isatty()==True, causing cli.interactive=True and question loops to hang. Always using input= ensures stdin is a real pipe, which never reports isatty()==True on any platform.
Fix Windows CI hang by closing stdin for subprocess calls. [Claude Sonnet 4.6, Zach White]
Migrate from nose2 to pytest. [Claude Sonnet 4.6, Zach White]
Fix Windows CI test failures on native Windows runners. [Claude Sonnet 4.6, Zach White]
- Scope milc.run() shell wrapping to msys2 only (MSYSTEM env var check), since cmd.exe does not support the -c flag used previously
- Replace cli.run() in test helper with subprocess.run directly, using sys.executable so tests always use the correct venv Python
- Add PYTHONUTF8=1 and encoding='utf-8' for correct Unicode handling across all Python versions on Windows
- Replace '/dev/null' with os.devnull in test_script_example.py
- Use sys.executable throughout all test_script_* files
Fixup tests on windows. [Zach White]
Migrate from mypy to ty for type checking. [Claude Sonnet 4.6, Zach White]
Replace mypy with ty in dev dependencies and ci_tests. Fix all 23 diagnostics ty surfaces: add TypeGuard to is_number, remove the Python-3-era threading try/except, replace mypy-specific type: ignore[rule] comments with blanket ignores or proper fixes, use getattr for __name__ on Callable types, fix a latent logic bug in the subparser metavar ternary, and cast sparkline arithmetic to float to avoid mixed-type operator errors.
Fix windows CI. [Zach White]
Make the ci_tests automatically fix what it can. [Zach White]
Ignore N999 for test files. [Claude Sonnet 4.6, Zach White]
Test files use CamelCase in their names to mirror the class under test (e.g. test_configuration_Configuration.py). Suppress the ruff N999 module-naming violation for tests/**
Don't commit uv.lock for library package. [Claude Sonnet 4.6, Zach White]
Libraries should resolve fresh against unpinned deps rather than pinning to a lockfile. Add uv.lock to .gitignore and drop --frozen from CI.
Migrate to uv for dependency management. [Claude Sonnet 4.6, Zach White]
Replace pip + requirements files with uv. Deps consolidated into [dependency-groups] in pyproject.toml (PEP 735). CI workflows updated to use astral-sh/setup-uv@v5 with a frozen lockfile. uv.lock committed for reproducible installs across all Python/OS matrix combinations.
Add isort support via ruff I ruleset, fix import ordering. [Claude Sonnet 4.6, Zach White]
Migrate from setup.py/setup.cfg to pyproject.toml, replace flake8 with ruff. [Claude Sonnet 4.6, Zach White]
- Add pyproject.toml with all package metadata, tool config (ruff, yapf, mypy)
- Delete setup.py; strip setup.cfg to bumpversion sections only
- Replace flake8 with ruff in requirements-dev.txt and ci_tests
- Update python-publish.yml to use python -m build instead of setup.py
- Add build to requirements-release.txt
- Bump minimum Python from 3.7 (EOL) to 3.8 to match CI reality
Type _subparsers as Optional[_SubParsersAction] [Claude Sonnet 4.6, Zach White]
Replace Optional[Any] and its FIXME comment with the concrete private argparse type, imported under TYPE_CHECKING to avoid runtime coupling. Suppress the one index check on the metavar formatting line where mypy cannot prove the str invariant that holds at runtime.
Clarify confirm_limit=0 sentinel in password loop. [Claude Sonnet 4.6, Zach White]
Replace not confirm_limit with confirm_limit == 0 so the intent is explicit: 0 means no limit. The previous form would treat any falsy value the same way.
Implement NO_COLOR standard support (#78) [Copilot, skullydazed]
- Initial plan
- Implement NO_COLOR standard support (issue #77)
Update README: Python 3.8+, add venv setup instructions. [Claude Sonnet 4.6, Zach White]
Bump the stated minimum Python version from 3.7 to 3.8 to match the CI matrix. Add a dev environment setup block to the Contributing section so contributors know to activate their venv before running ci_tests.
Fix mypy errors in handle_store_boolean. [Claude Sonnet 4.6, Zach White]
Add _arg_parser assignment to SubparserWrapper.__init__ so both MILC and SubparserWrapper satisfy the union type without the getattr hack. Assert disabled_args is not None before unpacking to satisfy the variadic argument type check.
Update CI to Python 3.8-3.14, fix runs-on matrix bug. [Claude Sonnet 4.6, Zach White]
Drop EOL 3.7, add 3.14 to the test matrix. Update single-version pins in devel_docs and python-publish workflows to 3.14. Fix ci.yml runs-on hardcoded to ubuntu-22.04 — it now uses ${{ matrix.os }} so Windows jobs actually run on Windows.
Type handle_store_boolean self param as MILC | SubparserWrapper. [Claude Sonnet 4.6, Zach White]
Replaces the self: Any hack with an explicit union type, using a TYPE_CHECKING guard to import MILC without introducing a circular import.
Fix arg deduplication. [Zach White]
Fix KeyError when SHELL env var is not set on Windows. [Claude Sonnet 4.6, Zach White]
Use os.environ.get('SHELL', 'cmd.exe') instead of os.environ['SHELL'] to avoid crashes on Windows/MSYS2 where SHELL may not be defined.
Add AI contribution docs. [Zach White]
More typing (#76) [Pablo Martínez]
- some more typing improvements
- make comment more readable, do not leak defaults in @overload
- move @overload, try and word the comment better
- move things around
Move where spark_int gets cast to int. [Zach White]
Mypy. [Zach White]
Fix a divide by zero bug. [Zach White]
Fix location of typing marker (#75) [Pablo Martínez]
Bump python version for devel docs job. [Zach White]
Improve type hint for decorators (#74) [Pablo Martínez]
Minor: changelog update. [Zach White]
New release: 1.9.0 → 1.9.1. [Zach White]
Let's try 3.10. [Zach White]
Make cli.echo more robust. [Zach White]
Move from python 3.7 to latest. [Zach White]
Fix the milc.cli.subcommand_name property value (#73) [Sergey Vlasov]
The implementation of the subcommand_name property in MILCInterface was wrong (it actually returned the _subcommand function object instead of the subcommand name).
Mypy. [Zach White]
Flake8. [Zach White]
Mypy. [Zach White]
Style update. [Zach White]
Properly (I hope) fix CI. [Zach White]
Style update. [Zach White]
Fix windows too. [Zach White]
Style update. [Zach White]
Update the python version support. [Zach White]
Minor: changelog update. [Zach White]
- New release: 1.8.0 → 1.9.0. [Zach White]
- [ci] Updated API documentation. [Zach White]
- Document change to platformdirs. [Zach White]
- Replace deprecated appdirs with platformdirs fork (#72) [Alexandre Detiste]
- Add some properties clients are using to MILCInterface. [Zach White]
- Fix typing. [Zach White]
- Preserve name, author, version, and logger in case cli.milc_options() is called multiple times. [Zach White]
- Use an interface so we don't have to replace the milc.cli object. [Zach White]
- Minor: changelog update. [Zach White]
- New release: 1.7.0 → 1.8.0. [Zach White]
- [ci] Updated API documentation. [Zach White]
- Update the breaking changes log. [Zach White]
- Improve how custom loggers work. [Zach White]
- Minor updates for setup.py and setup.cfg. [Zach White]
- Bump codeql to v3. [Zach White]
- Minor: changelog update. [Zach White]
- New release: 1.6.10 → 1.7.0. [Zach White]
- [ci] Updated API documentation. [Zach White]
- Remove unneeded type ignore. [Zach White]
- Fix typing for 3.7. [Zach White]
- Fixup requirements. [Zach White]
- Turn max_complexity down to 12. [Zach White]
- Small doc updates. [Zach White]
- Fix python version. [Zach White]
- Update ci and expand the python versions. [Zach White]
- Increase ci coverage. [Zach White]
- Add type hints to milc (now we'll never have a bug again!) [Zach White]
- Make it possible to instantiate MILC directly. [Zach White]
- Minor: changelog update. [Zach White]
- New release: 1.6.9 → 1.6.10. [Zach White]
- Switch to api token auth. [Zach White]
- Minor: changelog update. [Zach White]
- New release: 1.6.8 → 1.6.9. [Zach White]
- [ci] Updated API documentation. [Zach White]
- Document custom loggers. [Zach White]
- Add the ability to pass custom loggers. [Zach White]
- Publish docs before the python package. [Zach White]
- Minor: changelog update. [Zach White]
- New release: 1.6.7 → 1.6.8. [Zach White]
- Minor: changelog update. [Zach White]
- New release: 1.6.6 → 1.6.7. [Zach White]
- [ci] Updated API documentation. [Zach White]
- Upgrade all workflow versions. [Zach White]
- Upgrade workflows. [Zach White]
- Remove the trivial change. [Zach White]
- Fix the python version specification. [Zach White]
- Trivial change to kick off ci. [Zach White]
- Update to codeql 2. [Zach White]
- Remove python 3.6, add 3.10. [Zach White]
- Fix test. [Zach White]
- Fix during-initialization logging. [Zach White]
- Fix whitespace. [Zach White]
- Handle '--config-file=CONFIG_FILE' syntax (#66) [Ken Bingham, Zach
White]
- handle --config-file=CONFIG_FILE syntax
- Update milc/milc.py
- Minor: changelog update. [Zach White]
- New release: 1.6.5 → 1.6.6. [Zach White]
- [ci] Updated API documentation. [Zach White]
- Support --foo=bar options. Fixes #65. [Zach White]
- Fix the metadata documentation. [Zach White]
- Minor: changelog update. [Zach White]
New release: 1.6.4 → 1.6.5. [Zach White]
Fix a bug in cli.config_source. [Zach White]
Before this change arguments that weren't passed were incorrectly marked as argument instead of None.
Minor: changelog update. [Zach White]
- New release: 1.6.3 → 1.6.4. [Zach White]
- Change cli.echo to display ansi in passed vars too. [Zach White]
- Minor: changelog update. [Zach White]
- New release: 1.6.2 → 1.6.3. [Zach White]
- [ci] Updated API documentation. [Zach White]
- More robust detection for passed arguments (#44) [Zach White]
- Minor: changelog update. [Zach White]
- New release: 1.6.1 → 1.6.2. [Zach White]
- Add the ability to highlight values below a threshold (#43) [Zach
White]
- add support for high and low thresholds
- update sparklines documentation
- update the sparkline api docs
- Minor: changelog update. [Zach White]
- New release: 1.6.0 → 1.6.1. [Zach White]
- [ci] Updated API documentation. [Zach White]
- Change highlight_color to threshold_color before anyone starts using it. [Zach White]
- Fix test. [Zach White]
- Change highlight_color to threshold_color before anyone starts using it. [Zach White]
- Fix the fetch depth for python-publish. [Zach White]
- Minor: changelog update. [Zach White]
- New release: 1.5.0 → 1.6.0. [Zach White]
- [ci] Updated API documentation. [Zach White]
- Fix indent. [Zach White]
- Remove vestiges of docsify. [Zach White]
- Update old link. [Zach White]
- Add breaking changes for 1.6.0. [Zach White]
- Go back to working fetch-depth. [Zach White]
- Fix the name for ref and fetch-depth. [Zach White]
- Change the git strategy. [Zach White]
- Put fetch_depth under width. [Zach White]
- Fetch_depth: 0 so that we have gh-pages. [Zach White]
- Adjust paths for triggering workflows. [Zach White]
- Configure git. [Zach White]
- Switch our documentation to mkdocs material (#42) [Zach White]
- initial version of docs using mkdocs material
- tweak the visual look
- CSS tweaks
- remove _summar
- font tweak
- update README to reflect mkdocs
- workflows to update documentation
- add site to .gitignore
- Support for displaying sparklines (#41) [Zach White]
- Add support for displaying sparklines
- regenerate api docs
- tweak the script docstring
- improve corner case handling
- improve and document whitespace
- Add the ability to color sparklines to indicate positive and negative numbers
- add the ability to highlight values over a particular threshold
- add unit tests for sparkline
- fix a bug found by the unit tests
- generate docs
- clarify int vs number
- add sparklines to the TOC
- Regenerate changelog. [Zach White]
- Minor: changelog update. [Zach White]
- Add release changelog. [Zach White]
- Add a cli.config_dir. [Zach White]
- Add deprecation to arguments and commands (#39) [Fyrebright]
- Perform CodeQL analysis on all PRs. [Zach White]
- Fix choice() default handling (#40) [Ryan]
- New release: 1.4.2 → 1.5.0. [Zach White]
- [ci] Updated API documentation. [Zach White]
- Add 1.5.0 to breaking changes. [Zach White]
- Minor: update docs. [Zach White]
New release: 1.4.1 → 1.4.2. [Zach White]
[ci] Updated API documentation. [Zach White]
Make the config subcommand more resiliant. [Zach White]
Make questions more robust. [Zach White]
Fix how we use stdin on python 3.6. [Zach White]
Remove the milc.questions unit tests. [Zach White]
It would be better if these were in place, but they don't work in github actions (reproducable locally with ci-tests | cat) and we have coverage of the same code in the test_script_question.py integration test.
Fix one last test for windows. [Zach White]
Improve our log_file check. [Zach White]
Use a tempfile for testing --log-file. [Zach White]
Turns out that /dev/stdout doesn't work on windows. Use a tempfile instead so that our CI tests work on all platforms.
Improve ci tests for windows. [Zach White]
Ci: show result.stdout/stderr when an assertion fails. [Zach White]
Move the comparisons to its own file. [Zach White]
New release: 1.4.0 → 1.4.1. [Zach White]
Setup: add missing dependencies (#36) [francisco souza, francisco souza]
- setup: add missing dependencies
Alternatively, we could make setup.py read from requirements.txt for dependencies.
IMO, a better option is to always keep setup.py up-to-date with library dependencies and add -e . to requirements-dev.txt.
- Add -e . to requirements.txt
Fix the author logic to match 1.3.0 (#37) [Zach White]
Ensure ci_tests actually fail. [Zach White]
- New release: 1.3.0 → 1.4.0. [Zach White]
- Improve the docs in preparation for 1.4.0. [Zach White]
- Update docs. [Zach White]
- Work around a bug with input on windows (#34) [Zach White]
- Add support for securely collecting passwords. (#32) [Zach White]
- Only ask questions if we are an interactive process
- add tests for the question script
- add a breaking changes entry
- typo
- first pass at implementing #1
- Second pass
- make flake8 happy
- get the tests working correctly
- Basic spinner support (#33) [Erovia <Erovia@users.noreply.github.com>
Co-authored-by: Erovia <Erovia@users.noreply.github.com>, Zach White]
- basic spinner support
- update readme
- add a spinner for QMK
- Apply suggestions from code review
- Only ask questions if we are an interactive process (#30) [Zach White]
- Only ask questions if we are an interactive process
- add tests for the question script
- tweak color
- add a breaking changes entry
- typo
- make ci happy
- Allow config values to be set by attribute (#31) [Zach White]
- Eliminate the need to use environment variables for metadata (#29)
[Zach White]
- Eliminate the need to use environment variables for metadata
- properly handle dashes in subcommands
- correctly handle subcommands and arguments with dashes
- fix automatic app name detection
- add a warning about importing set_metadata and cli
- update docs
- yapf
- fix the description for config --all
- Improve the config command (#28) [Zach White]
- The config command now filters out configuration that has not been set
- tweak
- remove print
- typo
- sort the config before printing it
- Script to show the available ANSI colors. [Zach White]
New release: 1.2.1 → 1.3.0. [Zach White]
[ci] Updated API documentation. [Zach White]
Add argcomplete to the summary. [Zach White]
Flesh out the argcomplete support. [Zach White]
Support for setting the version number. [Zach White]
fixes #14
Overhaul how ansi/unicode are supported. [Zach White]
fixes #26
Misc cleanups. [Zach White]
New release: 1.2.0 → 1.2.1. [Zach White]
Update python-publish.yml. [Zach White]
Create python-publish.yml. [Zach White]
Improve generate_docs. [Zach White]
We now automatically update the _summary.md and commit changes if requested.
- New release: 1.1.0 → 1.2.0. [Zach White]
- Document the new version 1.2.0. [Zach White]
- Adjust ci_tests. [Zach White]
- Bump supported python versions. [Zach White]
- Change the order of tests. [Zach White]
- Resolve config file paths. [Zach White]
- Add more integration tests. [Zach White]
- Fix handling of store_boolean (#25) [Joel Challis]
- New release: 1.0.13 → 1.1.0. [Zach White]
- New release: 1.0.12 → 1.0.13. [Zach White]
- Add breaking changes. [Zach White]
- Add the ability to bump major and minor versions too. [Zach White]
- Improve default value handling (#24) [Zach White]
- improve default value handling
- small optimization
- New release: 1.0.11 → 1.0.12. [Zach White]
- Generated API documentation. [Zach White]
- Add version parameter to constructor. [Zed Chance]
- New release: 1.0.10 → 1.0.11. [Zach White]
- Don't pass both universal_newlines and text. [Zach White]
- New release: 1.0.9 → 1.0.10. [skullY]
- Generated API documentation. [skullY]
- Fix cli.print_help() and cli.print_usage() [skullY]
- New release: 1.0.8 → 1.0.9. [skullY]
- Generated API documentation. [skullY]
- Don't install tests together with package. [s-ol]
- Questions.yesno: always add a y/n prompt (#19) [Zach White]
- Typo fix. [skullY]
- Improve cli.run docs. [skullY]
- Document and improve cli.run. [skullY]
- New release: 1.0.7 → 1.0.8. [skullY]
- Update API docs. [skullY]
- Add pydoc-markdown to requirements-release.txt. [skullY]
- Make yapf happy. [skullY]
- Temporarily import format_ansi for qmk. [skullY]
- Improve log file handling. Add tests. (#17) [Zach White]
- Generated API documentation. [skullY]
- Improve ANSI support and --no-color (#16) [Zach White]
- support --no-color for cli.echo and support emojis when --no-color is used
- tweak when levelname gets stripped of ansi
- Add --log-file-level option to set file loggging level from CLI. [Cédric Tissières]
- Set logging level for file accordingly to console level. [Cédric Tissières]
- New release: 1.0.6 → 1.0.7. [skullY]
- Enable space in config values. fixes #10. [skullY]
- New release: 1.0.5 → 1.0.6. [skullY]
- Generated API documentation. [skullY]
- Add the ability to selectively save config options. [skullY]
- New release: 1.0.4 → 1.0.5. [skullY]
- Fix the get_argument_name call. fixes #7. [skullY]
- New release: 1.0.3 → 1.0.4. [skullY]
- Make arg_only subcommand specific. [skullY]
- Fix setting config values for store_true and store_false. [skullY]
- New release: 1.0.2 → 1.0.3. [skullY]
- Generated API documentation. [skullY]
- Fix configuration handling. [Erovia]
- Cleanup a couple QMK references. [skullY]
- Add tests for milc.questions. [skullY]
- Add tests for milc.configuration. [skullY]
- Add a test for milc.ansi. [skullY]
- Add tests for milc/__init__.py. [skullY]
- Install dev requirements from requirements-dev.txt. [skullY]
- Write some tests for attrdict. [skullY]
- New release: 1.0.1 → 1.0.2. [skullY]
- Fix typos and selling mistakes. [skullY]
- Add EMOJI_LOGLEVELS to the main milc module. [skullY]
- New release: 1.0.0 → 1.0.1. [skullY]
- Do not check docs if no changes. [skullY]
- More release fixing. [skullY]
- Fix doc generation. [skullY]
- Fixup the release script. [skullY]
- Enhance the ci test. [skullY]
- Add missing quotes. [skullY]
- Fix the release script. [skullY]
- Temporarily put requirements.txt back. [skullY]
- Release infrastructure. [skullY]
- Add some documentation to the scripts. [skullY]
- Add a contributing section. [skullY]
- Enhance the workflows. [skullY]
- Add windows and caching to CI. [skullY]
- Add missing addirs. [skullY]
- Setup CI. [skullydazed]
- Add a script to run ci tests. [skullY]
- Yapf. [skullY]
- Add generated api docs. [skullY]
- Clean up the sidebar. [skullY]
- Yapfify. [skullY]
- Add flake8 and yapf configs. [skullY]
- Remove the link. [skullY]
- Make the question.md formatting nicer. [skullY]
- Remove qmk references. [skullY]
- Fix the chart. [skullY]
- Add some missing docs. [skullY]
- Polish some rough edges. [skullY]
- Print->cli.echo. [skullY]
- Remove unused getting_started.md. [skullY]
- Fix up the examples in the tutorial. [skullY]
- Update the example in the tutorial. [skullY]
- Add note about cli.config.general. [skullY]
- Add backtics around None. [skullY]
- Add configuration to the sidebar. [skullY]
- Document configuration, make cli.args an attrdict. [skullY]
- Create CNAME. [skullydazed]
- Delete CNAME. [skullydazed]
- Create CNAME. [skullydazed]
- Disable jekyll. [skullY]
- Flesh out the MILC documentation. [skullY]
- Allow programs to override app_name and app_author. [skullY]
- Rearrange the docs and add docsify. [skullY]
- Break milc up into pieces. [skullY]
- Sync with qmk_firmware and fix a couple bugs. [skullY]
- Cleanup. [skullY]
- Update screenshots. [skullY]
- Refactor the API to require descriptions. [skullY]
- Cleanup a bit and add some documentation. [skullY]
- Add cli.print() [skullY]
- Cleanup for first github push. [skullY]
- Add a flake8 config and fixup flake8 errors. [skullY]
- Add a .gitignore. [skullY]
- Add support for store_boolean arguments. [skullY]
- Add support for reading and writing config files. [skullY]
- Add spinner support. [skullY]
- Fix a typo. [skullY]
- Make the printed log level output colored icons instead of text. [skullY]
- Add ANSI support to CLIM. [skullY]
- Minor tweak. [skullY]
- Add an RLock for thread safety. [skullY]
- Add support for both printed and file logs. [skullY]
- Flesh out the module's docstring. [skullY]
- Strip whitespace. [skullY]
- Add a documentation stub. [skullY]
- Add argument decorator, flesh out docs. [skullY]
- Small cleanup. [skullY]
- Barebones skeleton for the qmk cli. [skullY]