=========
Changelog
=========


..
    Development version
    ===================

    Version 4.X.X, 2023-XX-XX
    -------------------------


Development version
===================

Version 4.5.0, 2023-06-20
-------------------------

- Change macOS default configuration dir from
  ``~/Library/Preferences`` to ``~/Library/Application Support``, :pr:`721`.
  This change is motivated by the upgrade in the ``platformdirs`` dependency.
  You can read more about the motivation in :github:`platformdirs/platformdirs#98`
- Simplify ``git`` command, by letting exceptions go through, :pr:`714`


Current versions
================

Version 4.4.1, 2023-04-18
-------------------------

- Re-use pre-built wheels in CI for upgrade tests in :pr:`702`
- Make security permissions explicit in GHA template :pr:`704`
- Fix ``GITHUB_TOKEN`` variable in GHA template :pr:`715`


Older versions
==============

Version 4.4, 2023-01-23
-----------------------

- Add ``codespell`` to ``pre-commit`` config, :pr:`674`
- Allow ``venv_install`` in config file, :pr:`680`
- Avoid problematic ``tox`` 4.0 and 4.1, :pr:`689`
- Update ``macos`` instances on Cirrus CI, :pr:`690`
- Replace deprecated ``set-output``, :pr:`688`
- Update CI templates, :pr:`693`
- Add comments about  building ``sdist`` in ``tox.ini`` and FAQ, :pr:`694`
- Update Python version in Read The Docs configuration, :pr:`695`

Version 4.3.1, 2022-09-20
-------------------------

- Modify ``tox.ini`` template to allow passing the ``TWINE_REPOSITORY_URL``
  environment variable, :pr:`666`.

Version 4.3, 2022-07-20
-----------------------

- Removed ``wheel`` from the set of build dependencies in ``pyproject.toml``
  (it is redundant since ``setuptools`` already includes it), :pr:`652`.
- Updated ``freebsd`` configuration in ``.cirrus.yml`` (with workaround for
  ``pipx`` in 2022Q3 repo), :pr:`657`.

Version 4.2.3, 2022-06-17
-------------------------

- Automatically create directory when saving config file, :issue:`648`

Version 4.2.2, 2022-05-26
-------------------------

- Update ``.github/workflows/ci.yml`` template, :pr:`637` and :pr:`640`
- Update note in ``skeleton.py`` template clarifying file can be renamed, :pr:`641`

Version 4.2.1, 2022-03-16
-------------------------

- Ensure ``.gitlab-ci.yml`` template works for GitLab Enterprise 14.7.4, :pr:`630`

Version 4.2, 2022-03-14
-----------------------

- Added ``--github-actions`` extension, :pr:`619`
- Updated and improved ``--gitlab`` extension, :pr:`622`
- Updated and improved ``--cirrus`` extension, :pr:`625`
- Fixed ``tox -e publish`` example in docs, :pr:`627`
- Added ``colorama`` as a runtime dependency for Windows, :pr:`624`

Version 4.1.5, 2022-02-22
-------------------------

- Added ``.python-version`` created by ``pyenv`` to ``.gitignore``
- Added more ``--very-verbose`` logging to make clearer what's going on, :issue:`562`
- Replace internal dependency on :pypi:`appdirs` with :pypi:`platformdirs`, :pr:`584`
- Fix :pypi:`coverage` config for namespaced packages, :pr:`610`

Version 4.1.4, 2022-01-13
-------------------------

- Ensure build configuration produces ``sdist`` as it is needed by conda, :issue:`570`

Version 4.1.3, 2022-01-11
-------------------------

- Fix pre-commit error: The unauthenticated git protocol on port 9418 is no longer supported, :issue:`565`

.. note::

    PyScaffold 4.1 is the last release to support Python 3.6

Version 4.1.2, 2022-01-04
-------------------------

- Added verification to prevent users from creating projects nested inside
  existing repositories, unless ``--force`` is explicitly given, :issue:`544`, :pr:`545`.
- Fixed problem with Windows Shell when running git, :pr:`560`.

Version 4.1.1, 2021-10-18
-------------------------

- Ensure required extensions are installed on ``--update``, :pr:`512`
- Prevent extension from crashing when persisting ``None`` in ``setup.cfg``, :pr:`510`
- Prevent multi-line descriptions to crash ``putup``, :pr:`509`
- Warn users about empty namespaces, :pr:`508`
- Prevent parsing errors during dependency deduplication, :pr:`518`
- Add ``license_files`` to ``setup.cfg`` template, :issue:`524`

Version 4.1, 2021-09-22
-----------------------

- Added *linkcheck* task to ``tox.ini``, :pr:`456`
- Updated configuration for Sphinx and ReadTheDocs, :pr:`455`
- Note that templates and the generated boilerplate code is 0BSD-licensed, :pr:`461`
- Added 0BSD license template
- Added ``CONTRIBUTING.rst`` template, :issue:`376`
- Added PyScaffold badge to ``README`` template, :issue:`473`
- Updated Cirrus CI config and templates, including better ``coveralls`` integration, :issue:`449`
- Adopted global ``isolated_build`` for ``tox`` configuration, :issue:`483`, :pr:`491`
- Loop counter explicitly marked as unused in ``skeleton.py`` (``flake8-bugbear B007``), :pr:`495`
- Ensure update include added extensions in ``setup.cfg``, :pr:`496`

Version 4.0.2, 2021-05-26
-------------------------

- Restructured docs
- Fix WSL2 installation problem, :issue:`440`
- Fix for interactive mode under Windows, :issue:`430`

Version 4.0.1, 2021-03-17
-------------------------

- Fix ``tox -e build`` issue when running on Conda, :pr:`417`
- Ensure ``snake_case`` for keys in ``setup.cfg``, :issue:`418`
- Update dependencies on ``configupdater`` and ``pyscaffoldext-django``
- Remove broken checks for old ``setuptools``, :issue:`428`

Version 4.0, 2021-03-04
-----------------------

- Cookiecutter, Django and Travis extensions extracted to their own repositories, :issue:`175` and :issue:`355`
- Support for Python 3.4 and 3.5 dropped, :issue:`226`
- Dropped deprecated ``requirements.txt`` file, :issue:`182`
- Added support for global configuration (avoid retyping common ``putup``'s options), :issue:`236`
- PyScaffold is no longer a build-time dependency, it just generates the project structure
- Removed ``contrib`` subpackage, vendorized packages are now runtime dependencies, :pr:`290`
- ``setuptools_scm`` is included by default in ``setup.cfg``, ``setup.py`` and ``pyproject.toml``
- API changed to use ``pyscaffold.operations`` instead of integer flags, :pr:`271`
- Allow ``string.Template`` and ``callable`` as file contents in project structure, :pr:`295`
- Extract file system functions from ``utils.py`` into ``file_system.py``
- Extract identification/naming functions from ``utils.py`` into ``identification.py``
- Extract action related functions from ``api/__init__.py`` to ``actions.py``
- ``helpers.{modify,ensure,reject}`` moved to ``structure.py``
- ``helpers.{register,unregister}`` moved to ``actions.py``
- New extension for automatically creating virtual environments (``--venv``)
- Added instructions to use ``pip-tools`` to docs
- ``pre-commit`` extension now attempts to install hooks automatically
- A nice message is now displayed when PyScaffold finishes running (``actions.report_done``)
- Removed mutually exclusive argparse groups for extensions, :pr:`315`
- Progressive type annotations adopted in the code base together with mypy linting
- Simplified isort config
- ``pyproject.toml`` and isolated builds adopted by default, :issue:`256`
- Added comment to ``setup.cfg`` template instructing about extra links, :issue:`268`
- Generate ``tox.ini`` by default, :issue:`296`
- Replace ``pkg_resources`` with ``importlib.{metadata,resources}`` and ``packaging``, :issue:`309`
- Adopt PEP 420 for namespaces, :issue:`218`
- Adopt SPDX identifiers for the license field in ``setup.cfg``, :issue:`319`
- Removed deprecated ``log.configure_logger``
- Add links to issues and pull requests to changelog, :pr:`363`
- Add an experimental ``--interactive`` *mode* (inspired by ``git rebase -i``), :issue:`191`
  (additional discussion: :pr:`333`, :pr:`325`, :pr:`362`)
- Reorganise the **FAQ** (including version questions previously in **Features**)
- Updated ``setuptools`` and ``setuptools_scm`` dependencies to minimal versions 46.1 and 5, respectively
- Adopted ``no-guess-dev`` version scheme from ``setuptools_scm`` (semantically all stays the same, but
  non-tag commits are now versioned ``LAST_TAG.post1.devN`` instead of ``LAST_TAG.post0.devN``)
- Fix problem of not showing detailed log with ``--verbose`` if error happens when loading extensions :issue:`378`

Version 3.3, 2020-12-24
-----------------------

- Code base changed to Black's standards
- New docs about version numbers and git integration
- Updated pre-commit hooks
- Updated ``docs/Makefile`` to use Sphinx "make mode"
- *deprecated* setuptools extensions/commands ``python setup.py test/docs/doctests``, :issue:`245`
- New tox test environments for generating docs and running doctests
- New built-in extension for Cirrus CI, :issue:`251`
- *experimental* ``get_template`` is now part of the public API and can be used by extensions, :issue:`252`
- Updated ``setuptools_scm`` to version 4.1.2 in contrib
- Updated ``configupdater`` to version 1.1.2 in contrib
- precommit automatically fixes line endings by default
- *deprecated* ``log.configure_logger``, use ``log.logger.reconfigure`` instead

.. note::

    PyScaffold 3.3 is the last release to support Python 3.5

Version 3.2.3, 2019-10-12
-------------------------

- Updated ``configupdater`` to version 1.0.1
- Changed Travis to Cirrus CI
- Fix some problems with Windows

Version 3.2.2, 2019-09-12
-------------------------

- Write files as UTF-8, fixes ``codec can't encode characters`` error

Version 3.2.1, 2019-07-11
-------------------------

- Updated pre-commit configuration and set max-line-length to 88 (Black's default)
- Change build folder of Sphinx's Makefile
- Fix creation of empty files which were just ignored before

Version 3.2, 2019-06-30
-----------------------

- *deprecated* use of lists with ``helpers.{modify,ensure,reject}``, :issue:`211`
- Add support for ``os.PathLike`` objects in ``helpers.{modify,ensure,reject}``, :issue:`211`
- Remove ``release`` alias in ``setup.cfg``, use ``twine`` instead
- Set ``project-urls`` and ``long-description-content-type`` in ``setup.cfg``, :issue:`216`
- Added additional command line argument ``very-verbose``
- Assure clean workspace when updating existing project, :issue:`190`
- Show stacktrace on errors if ``--very-verbose`` is used
- Updated ``configupdater`` to version 1.0
- Use ``pkg_resources.resource_string`` instead of ``pkgutil.get_data`` for templates
- Update ``setuptools_scm`` to version 3.3.3
- Updated pytest-runner to version 5.1
- Some fixes regarding the order of executing extensions
- Consider ``GIT_AUTHOR_NAME`` and ``GIT_AUTHOR_EMAIL`` environment variables
- Updated ``tox.ini``
- Switch to using tox in ``.travis.yml`` template
- Reworked all official extensions ``--pyproject``, ``--custom-extension`` and ``--markdown``

Version 3.1, 2018-09-05
-----------------------

- Officially dropped Python 2 support, :issue:`177`
- Moved ``entry_points`` and ``setup_requires`` to ``setup.cfg``, :issue:`176`
- Updated ``travis.yml`` template, :issue:`181`
- Set ``install_requires`` to setuptools>=31
- Better isolation of unit tests, :issue:`119`
- Updated tox template, issues :issue:`160` & :issue:`161`
- Use ``pkg_resources.parse_version`` instead of old ``LooseVersion`` for parsing
- Use ``ConfigUpdater`` instead of ``ConfigParser``
- Lots of internal cleanups and improvements
- Updated pytest-runner to version 4.2
- Updated setuptools_scm to version 3.1
- Fix Django extension problem with src-layout, :issue:`196`
- *experimental* extension for MarkDown usage in README, :issue:`163`
- *experimental* support for Pipenv, :issue:`140`
- *deprecated* built-in Cookiecutter and Django extensions (to be moved to separated packages), :issue:`175`

Version 2.5.11, 2018-04-14
--------------------------

- Updated pbr to version 4.0.2
- Fixes Sphinx version 1.6 regression, :issue:`152`

Version 3.0.3, 2018-04-14
-------------------------

- Set install_requires to setuptools>=30.3.0

Version 3.0.2, 2018-03-21
-------------------------

- Updated setuptools_scm to version 1.17.0
- Fix wrong docstring in skeleton.py about entry_points, :issue:`147`
- Fix error with setuptools version 39.0 and above, :issue:`148`
- Fixes in documentation, thanks Vicky

Version 2.5.10, 2018-03-21
--------------------------

- Updated setuptools_scm to version 1.17.0

Version 2.5.9, 2018-03-20
-------------------------

- Updated setuptools_scm to version 1.16.1
- Fix error with setuptools version 39.0 and above, :issue:`148`

Version 3.0.1, 2018-02-13
-------------------------

- Fix confusing error message when ``python setup.py docs`` and Sphinx is not installed, :issue:`142`
- Fix 'unknown' version in case project name differs from the package name, :issue:`141`
- Fix missing ``file:`` attribute in long-description of setup.cfg
- Fix ``sphinx-apidoc`` invocation problem with Sphinx 1.7

Version 3.0, 2018-01-07
-----------------------

- Improved Python API thanks to an extension system
- Dropped pbr in favor of setuptools >= 30.3.0
- Updated setuptools_scm to v1.15.6
- Changed ``my_project/my_package`` to recommended ``my_project/src/my_package`` structure
- Renamed ``CHANGES.rst`` to more standard ``CHANGELOG.rst``
- Added platforms parameter in ``setup.cfg``
- Call Sphinx api-doc from ``conf.py``, :issue:`98`
- Included six 1.11.0 as contrib sub-package
- Added ``CONTRIBUTING.rst``
- Removed ``test-requirements.txt`` from template
- Added support for GitLab
- License change from New BSD to MIT
- FIX: Support of git submodules, :issue:`98`
- Support of Cython extensions, :issue:`48`
- Removed redundant ``--with-`` from most command line flags
- Prefix ``n`` was removed from the local_version string of dirty versions
- Added a ``--pretend`` flag for easier development of extensions
- Added a ``--verbose`` flag for more output what PyScaffold is doing
- Use pytest-runner 4.4 as contrib package
- Added a ``--no-skeleton`` flag to omit the creation of ``skeleton.py``
- Save parameters used to create project scaffold in ``setup.cfg`` for later updating

A special thanks goes to Anderson Bravalheri for his awesome support
and `inovex <https://www.inovex.de/en/>`_ for sponsoring this release.

Version 2.5.8, 2017-09-10
-------------------------

- Use ``sphinx.ext.imgmath`` instead of ``sphinx.ext.mathjax``
- Added ``--with-gitlab-ci`` flag for GitLab CI support
- Fix Travis install template dirties git repo, :issue:`107`
- Updated setuptools_scm to version 1.15.6
- Updated pbr to version 3.1.1

Version 2.5.7, 2016-10-11
-------------------------

- Added encoding to __init__.py
- Few doc corrections in setup.cfg
- [tool:pytest] instead of [pytest] in setup.cfg
- Updated skeleton
- Switch to Google Sphinx style
- Updated setuptools_scm to version 1.13.1
- Updated pbr to version 1.10.0

Version 2.5.6, 2016-05-01
-------------------------

- Prefix error message with ERROR:
- Suffix of untagged commits changed from {version}-{hash} to {version}-n{hash}
- Check if package identifier is valid
- Added log level command line flags to the skeleton
- Updated pbr to version 1.9.1
- Updated setuptools_scm to version 1.11.0

Version 2.5.5, 2016-02-26
-------------------------

- Updated pbr to master at 2016-01-20
- Fix sdist installation bug when no git is installed, :issue:`90`

Version 2.5.4, 2016-02-10
-------------------------

- Fix problem with ``fibonacci`` terminal example
- Update setuptools_scm to v1.10.1

Version 2.5.3, 2016-01-16
-------------------------

- Fix classifier metadata (``classifiers`` to ``classifier`` in ``setup.cfg``)

Version 2.5.2, 2016-01-02
-------------------------

- Fix ``is_git_installed``

Version 2.5.1, 2016-01-01
-------------------------

- Fix: Do some sanity checks first before gathering default options
- Updated setuptools_scm to version 1.10.0

Version 2.5, 2015-12-09
-----------------------

- Usage of ``test-requirements.txt`` instead of ``tests_require`` in
  ``setup.py``, :issue:`71`
- Removed ``--with-numpydoc`` flag since this is now included by default with
  ``sphinx.ext.napoleon`` in Sphinx 1.3 and above
- Added small template for unittest
- Fix for the example skeleton file when using namespace packages
- Fix typo in devpi:upload section, :issue:`82`
- Include ``pbr`` and ``setuptools_scm`` in PyScaffold to avoid dependency
  problems, :issue:`71` and :issue:`72`
- Cool logo was designed by Eva Schmücker, :issue:`66`

Version 2.4.4, 2015-10-29
-------------------------

- Fix problem with bad upload of version 2.4.3 to PyPI, :issue:`80`

Version 2.4.3, 2015-10-27
-------------------------

- Fix problem with version numbering if setup.py is not in the root directory, :issue:`76`

Version 2.4.2, 2015-09-16
-------------------------

- Fix version conflicts due to too tight pinning, :issue:`69`

Version 2.4.1, 2015-09-09
-------------------------

- Fix installation with additional requirements ``pyscaffold[ALL]``
- Updated pbr version to 1.7

Version 2.4, 2015-09-02
-----------------------

- Allow different py.test options when invoking with ``py.test`` or
  ``python setup.py test``
- Check if Sphinx is needed and add it to *setup_requires*
- Updated pre-commit plugins
- Replaced pytest-runner by an improved version
- Let pbr do ``sphinx-apidoc``, removed from ``conf.py``, :issue:`65`

.. note::

    Due to the switch to a modified pytest-runner version it is necessary
    to update ``setup.cfg``. Please check the :ref:`example <configuration>`.

Version 2.3, 2015-08-26
-----------------------

- Format of setup.cfg changed due to usage of pbr, :issue:`59`
- Much cleaner setup.py due to usage of pbr, :issue:`59`
- PyScaffold can be easily called from another script, :issue:`58`
- Internally dictionaries instead of namespace objects are used for options, :issue:`57`
- Added a section for devpi in setup.cfg, :issue:`62`

.. note::

    Due to the switch to `pbr <https://docs.openstack.org/pbr/latest/>`_, it
    is necessary to update ``setup.cfg`` according to the new syntax.

Version 2.2.1, 2015-06-18
-------------------------

- FIX: Removed putup console script in setup.cfg template

Version 2.2, 2015-06-01
-----------------------

- Allow recursive inclusion of data files in setup.cfg, :issue:`49`
- Replaced hand-written PyTest runner by `pytest-runner <https://pypi.org/project/pytest-runner>`_, :issue:`47`
- Improved default README.rst, :issue:`51`
- Use tests/conftest.py instead of tests/__init__.py, :issue:`52`
- Use setuptools_scm for versioning, :issue:`43`
- Require setuptools>=9.0, :issue:`56`
- Do not create skeleton.py during an update, :issue:`55`

.. note::

    Due to the switch to *setuptools_scm* the following changes apply:

    - use ``python setup.py --version`` instead of ``python setup.py version``
    - ``git archive`` can no longer be used for packaging (and was never meant for it anyway)
    - initial tag ``v0.0`` is no longer necessary and thus not created in new projects
    - tags do no longer need to start with *v*

Version 2.1, 2015-04-16
-----------------------

- Use alabaster as default Sphinx theme
- Parameter data_files is now a section in setup.cfg
- Allow definition of extras_require in setup.cfg
- Added a CHANGES.rst file for logging changes
- Added support for cookiecutter
- FIX: Handle an empty Git repository if necessary

Version 2.0.4, 2015-03-17
-------------------------

- Typo and wrong Sphinx usage in the RTD documentation

Version 2.0.3, 2015-03-17
-------------------------

- FIX: Removed misleading `include_package_data` option in setup.cfg
- Allow selection of a proprietary license
- Updated some documentations
- Added -U as short parameter for --update

Version 2.0.2, 2015-03-04
-------------------------

- FIX: Version retrieval with setup.py install
- argparse example for version retrieval in skeleton.py
- FIX: import my_package should be quiet (verbose=False)

Version 2.0.1, 2015-02-27
-------------------------

- FIX: Installation bug under Windows 7

Version 2.0, 2015-02-25
-----------------------

- Split configuration and logic into setup.cfg and setup.py
- Removed .pre from version string (newer PEP 440)
- FIX: Sphinx now works if package name does not equal project name
- Allow namespace packages with --with-namespace
- Added a skeleton.py as a console_script template
- Set `v0.0` as initial tag to support PEP440 version inference
- Integration of the Versioneer functionality into setup.py
- Usage of `data_files` configuration instead of `MANIFEST.in`
- Allow configuration of `package_data` in `setup.cfg`
- Link from Sphinx docs to AUTHORS.rst

Version 1.4, 2014-12-16
-----------------------

- Added numpydoc flag --with-numpydoc
- Fix: Add django to requirements if --with-django
- Fix: Don't overwrite index.rst during update

Version 1.3.2, 2014-12-02
-------------------------

- Fix: path of Travis install script

Version 1.3.1, 2014-11-24
-------------------------

- Fix: --with-tox tuple bug, :pr:`28`

Version 1.3, 2014-11-17
-----------------------

- Support for Tox (https://tox.wiki/en/stable/)
- flake8: exclude some files
- Usage of UTF8 as file encoding
- Fix: create non-existent files during update
- Fix: unit tests on MacOS
- Fix: unit tests on Windows
- Fix: Correct version when doing setup.py install

Version 1.2, 2014-10-13
-----------------------

- Support pre-commit hooks (https://pre-commit.com/)

Version 1.1, 2014-09-29
-----------------------

- Changed COPYING to LICENSE
- Support for all licenses from https://choosealicense.com/
- Fix: Allow update of license again
- Update to Versioneer 0.12

Version 1.0, 2014-09-05
-----------------------

- Fix when overwritten project has a git repository
- Documentation updates
- License section in Sphinx
- Django project support with --with-django flag
- Travis project support with --with-travis flag
- Replaced sh with own implementation
- Fix: new `git describe` version to PEP440 conversion
- conf.py improvements
- Added source code documentation
- Fix: Some Python 2/3 compatibility issues
- Support for Windows
- Dropped Python 2.6 support
- Some classifier updates

Version 0.9, 2014-07-27
-----------------------

- Documentation updates due to RTD
- Added a --force flag
- Some cleanups in setup.py

Version 0.8, 2014-07-25
-----------------------

- Update to Versioneer 0.10
- Moved sphinx-apidoc from setup.py to conf.py
- Better support for `make html`

Version 0.7, 2014-06-05
-----------------------

- Added Python 3.4 tests and support
- Flag --update updates only some files now
- Usage of setup_requires instead of six code

Version 0.6.1, 2014-05-15
-------------------------

- Fix: Removed six dependency in setup.py

Version 0.6, 2014-05-14
-----------------------

- Better usage of six
- Return non-zero exit status when doctests fail
- Updated README
- Fixes in Sphinx Makefile

Version 0.5, 2014-05-02
-----------------------

- Simplified some Travis tests
- Nicer output in case of errors
- Updated PyScaffold's own setup.py
- Added --junit_xml and --coverage_xml/html option
- Updated .gitignore file

Version 0.4.1, 2014-04-27
-------------------------

- Problem fixed with pytest-cov installation

Version 0.4, 2014-04-23
-----------------------

- PEP8 and PyFlakes fixes
- Added --version flag
- Small fixes and cleanups

Version 0.3, 2014-04-18
-----------------------

- PEP8 fixes
- More documentation
- Added update feature
- Fixes in setup.py

Version 0.2, 2014-04-15
-----------------------

- Checks when creating the project
- Fixes in COPYING
- Usage of sh instead of GitPython
- PEP8 fixes
- Python 3 compatibility
- Coverage with Coverall.io
- Some more unittests

Version 0.1.2, 2014-04-10
-------------------------

- Bugfix in Manifest.in
- Python 2.6 problems fixed

Version 0.1.1, 2014-04-10
-------------------------

- Unittesting with Travis
- Switch to string.Template
- Minor bugfixes

Version 0.1, 2014-04-03
-----------------------

- First release
