==============
jarn.mkrelease
==============
---------------------------------------------------
Python package releaser
---------------------------------------------------
**mkrelease** is a no-frills Python package releaser. It is designed to take
the cumber out of building and distributing Python packages.
The releaser supports source distributions, eggs, and wheels.
Motivation
==========
After preparing a package for release (update version strings, dates) we
typically have to:
1. Commit modified files.
2. Tag the release.
3. Build a source distribution and wheel.
4. Distribute the results via scp or upload them to an index server.
If we are doing this a lot, the need for automation becomes obvious.
Contents
========
* Installation_
* Usage_
* Options_
* Arguments_
* Configuration_
* `Upload with SCP`_
* `Upload to Index Servers`_
* `Using GnuPG`_
* Requirements_
* Footnotes_
* Related_
* Changelog_
Installation
============
mkrelease works with Python 2.7 - 3.11 and all released versions of
setuptools.
Use ``pip install jarn.mkrelease`` to install the ``mkrelease`` script.
Since version 4.4 mkrelease requires twine_ for register and upload
operations. Twine may be installed as a global utility on the system PATH or
into the same environment as jarn.mkrelease. [1]_
Use ``pip install jarn.mkrelease[twine]`` to install mkrelease + twine.
Since version 5.0 file-finder extensions are no longer installed by default.
If you still want to use file-finders specify the ``filefinder`` extra.
Use ``pip install jarn.mkrelease[filefinder]`` to install mkrelease + file-finder
extensions.
Use ``pip uninstall setuptools-subversion setuptools-hg setuptools-git`` to
uninstall file-finder extensions.
.. _twine: https://twine.readthedocs.io/en/stable/
Usage
=====
``mkrelease [options] [scm-sandbox|scm-url [rev]]``
Options
=======
``-C, --no-commit``
Do not commit modified files from the sandbox.
``-T, --no-tag``
Do not tag the release in SCM.
``-P, --no-push``
Do not push commits and tags upstream.
``-R, --no-register``
Do not register the release with dist-location.
``-S, --no-upload``
Do not upload the release to dist-location.
``-n, --dry-run``
Dry-run; equivalent to ``-CTPRS``. This flag turns mkrelease into a
simple package builder.
``--svn, --hg, --git``
Select the SCM type. Only required if the SCM type
cannot be guessed from the argument.
``-d dist-location, --dist-location=dist-location``
An scp destination specification, an index
server configured in ``~/.pypirc``, or an alias name for
either. This option may be specified more than once.
``-s, --sign``
Sign the release with GnuPG.
``-i identity, --identity=identity``
The GnuPG identity to sign with. Implies ``-s``.
``-z, --zip``
Release a zip archive.
``-g, --gztar``
Release a tar.gz archive (default).
``-b, --egg``
Release a binary egg.
``-w, --wheel``
Release a wheel file (default).
``-m, --manifest-only``
Ignore setuptools file-finder extensions and collect files via
``MANIFEST.in`` only.
``-e, --develop``
Allow setuptools build tags. Implies ``-T``.
``-q, --quiet``
Suppress output of setuptools commands.
``-t twine, --twine=twine``
Override the twine executable used.
``-c config-file, --config-file=config-file``
Use config-file instead of the default ``~/.mkrelease``.
``-l, --list-locations``
List known dist-locations and exit.
``-h, --help``
Print the help message and exit.
``-v, --version``
Print the version string and exit.
``--no-color``
Disable output colors.
``--non-interactive``
Do not prompt for username and password if the
required credentials are missing.
Arguments
=========
``scm-sandbox``
A local SCM sandbox. Defaults to the current working
directory.
``scm-url [rev]``
The URL of a remote SCM repository. The optional ``rev``
argument specifies a branch or tag to check out.
Configuration
=============
mkrelease reads available index servers from the distutils_ configuration
file ``~/.pypirc``. This file should contain your PyPI account information: [2]_
.. code:: ini
[distutils]
index-servers =
pypi
[pypi]
repository = https://upload.pypi.org/legacy/
username = fred
password = secret
Next, mkrelease reads its own configuration file ``~/.mkrelease``.
It may be used to change defaults and to define location
aliases:
.. code:: ini
[mkrelease]
# Release steps
commit = yes
tag = yes
push = yes
register = no
upload = yes
# One or more of: zip gztar egg wheel
formats = gztar wheel
# Setuptools options
manifest-only = yes
develop = no
quiet = no
# Sign with GnuPG
sign = no
identity =
# Default dist-location
dist-location =
[aliases]
# Map name to one or more dist-locations
customerA =
jarn.com:/var/dist/customerA/
public =
jarn.com:/var/dist/public/
world =
pypi
public
.. _distutils: https://packaging.python.org/en/latest/specifications/pypirc/
Upload with SCP
===============
The simplest distribution location is a server directory reachable by ssh.
Releasing a package means scp-ing it to the appropriate place
on the server:
.. code::
$ mkrelease -d customerA
$ mkrelease -d jarn.com:/var/dist/customerB/
$ mkrelease -d scp://jarn.com/var/dist/customerC/
$ mkrelease -d stefan@jarn.com:eggs -C -e -q
To upload via sftp instead of scp, use the ``sftp`` URL scheme:
.. code::
$ mkrelease -d sftp://jarn.com/var/dist/customerD/
Note: Unlike scp, the sftp client does not prompt for login credentials.
This means that non-interactive login must be configured on the
destination server or the upload will fail.
Upload to Index Servers
=======================
Another way of publishing a Python package is by uploading it to a dedicated
index server like PyPI_.
Given the ``~/.pypirc``
file from above, we can release to PyPI simply by typing:
.. code::
$ mkrelease -d pypi
Index servers are not limited to PyPI though.
There is TestPyPI_, and there are alternative index servers like
devpi_.
We extend our ``~/.pypirc``: [2]_
.. code:: ini
[distutils]
index-servers =
pypi
testpypi
[pypi]
repository = https://upload.pypi.org/legacy/
username = fred
password = secret
[testpypi]
repository = https://test.pypi.org/legacy/
username = fred
password = secret
We can now release to TestPyPI with:
.. code::
$ mkrelease -d testpypi -C -e
.. _PyPI: https://pypi.org/
.. _TestPyPI: https://test.pypi.org/
.. _devpi: https://www.devpi.net
Using GnuPG
===========
Release a package and sign the distributions with GnuPG:
.. code::
$ mkrelease -d pypi -s -i fred@bedrock.com
The ``-i`` flag is optional and GnuPG will pick your default
key if not given.
Requirements
============
The following commands must be available on the system PATH (you only need
what you plan to use):
* svn
* hg
* git
* scp
* sftp
* gpg
* twine [1]_
Footnotes
=========
.. [1] The twine executable is determined by trying in order:
1. Value of ``--twine`` command line option, or
2. Value of ``TWINE`` environment variable, or
3. Value of ``twine`` configuration file setting, or
4. ``python -m twine`` if twine is importable, or
5. ``twine``
.. [2] There are more secure ways to handle login credentials:
1. Generate an `API token`_ on PyPI, and/or
2. Make use of twine's `keyring support`_.
.. _`API token`: https://pypi.org/help/#apitoken
.. _`keyring support`: https://twine.readthedocs.io/en/stable/index.html#keyring-support
Related
=======
Also see our Python documentation viewer `jarn.viewdoc`_.
.. _`jarn.viewdoc`: https://github.com/Jarn/jarn.viewdoc
Changelog
=========
5.3 - 2023-09-23
----------------
- Update tox.ini for latest tox.
[stefan]
- Filter deprecated config warning.
[stefan]
- Fix invalid escape sequences.
[stefan]
- The ``rev`` part of Git URLs no longer defaults to 'master'.
[stefan]
5.2 - 2023-01-20
----------------
- Support setuptools >= 65.6.0.
[stefan]
5.1 - 2022-11-13
----------------
- Support Python 2.7 - 3.11.
[stefan]
- Do not require setup.py or setup.cfg if pyproject.toml exists.
[stefan]
- Filter some deprecation warnings.
[stefan]
- Disable twine progress bars in non-interactive mode.
[stefan]
5.0 - 2022-02-26
----------------
- NEW: File finder extensions are no longer installed by default.
[stefan]
- NEW: push is now on by default
[stefan]
- NEW: register is now off by default
[stefan]
- NEW: formats now defaults to gztar + wheel
[stefan]
- Do not require setup.py if setup.cfg exists.
[stefan]
- Switch to the nose2 test runner for its fast multiprocessing plugin.
[stefan]
4.4 - 2022-02-26
----------------
- Support Python 2.7 - 3.10.
[stefan]
- Support local distutils in setuptools >= 60.0.0.
[stefan]
- Add output colors.
[stefan]
- Require twine_ for register and upload operations.
[stefan]
- Move metadata to setup.cfg.
[stefan]
- Move tests out of ``jarn.mkrelease`` namespace.
[stefan]
- Include tests in sdist but not in wheel.
[stefan]
4.3 - 2019-01-28
----------------
- Fix issue #10: Can no longer run from a zc.buildout.
[stefan]
- Support ``python -m jarn.mkrelease``.
[stefan]
4.2 - 2019-01-25
----------------
- Drop Python 2.6 support, add Python 3.7.
[stefan]
- Update wheel and keyring dependencies.
[stefan]
- Add a complete config file example to the README.
[stefan]
- Accept ``dist-location`` as alias for ``distdefault`` in config files.
[stefan]
- Convert dashes to underscores in config parser optionxform.
[stefan]
4.1 - 2017-10-06
----------------
- Add -m option to skip setuptools extensions.
[stefan]
- Never read existing ``SOURCES.txt`` files.
[stefan]
- Allow --egg as alias for --binary.
[stefan]
4.0.1 - 2017-07-20
------------------
- Fix conditional include of keyring.
[stefan]
4.0 - 2017-07-20
----------------
- Add support for source distributions in gztar format.
[stefan]
- Add support for wheel files.
[stefan]
- Allow multiple archive formats per release.
[stefan]
- Protect against bad or incomplete locale settings.
[stefan]
- The secondary thread would sometimes not terminate in Python 2.
[stefan]
3.10 - 2017-02-01
-----------------
- Support setuptools >= 33.1.0.
[stefan]
3.9 - 2017-01-31
----------------
- Catch up with late-2016 PyPI API change.
[stefan]
- Add -R option to skip the register step.
[stefan]
- Support Python 2.6 - 3.6 without 2to3.
[stefan]
- Handle return code changes in Mercurial 3.1.1.
[stefan]
3.8 - 2013-11-21
----------------
- Support Python 3.x.
[stefan]
3.7 - 2012-08-22
----------------
- Fix compilation of Python source files when the -b option is given.
[stefan]
- Run check command as part of sdist and register commands.
[stefan]
- Add SFTP support.
[stefan]
- Allow ``sftp://`` and ``scp://`` URLs as dist-locations.
[stefan]
3.6 - 2012-07-11
----------------
- Handle return code changes in Mercurial 2.1.
[stefan]
- Add setuptools-subversion dependency.
[stefan]
- Support Subversion 1.7 with the help of setuptools-subversion.
[stefan]
3.5 - 2011-11-25
----------------
- Allow multiple values for the ``distdefault`` config file option.
[stefan]
- Defer list-locations until after all arguments have been parsed.
[stefan]
- Make tests run twice as fast by avoiding Subversion checkouts.
[stefan]
3.4 - 2011-11-10
----------------
- Warn if -p is given but no upstream location is found.
[stefan]
- Always push to default in Mercurial.
[stefan]
- Avoid reading empty lines from terminating subprocesses.
[stefan]
- Fix bug in handling of distbase.
[stefan]
3.3 - 2011-10-31
----------------
- Add setuptools to the PYTHONPATH for subprocesses.
[stefan]
- Unset any PYTHONPATH while executing SCM commands.
[stefan]
- Support Git's short-form ``ssh://`` URLs.
[stefan]
- Add -c option to specify a config file other than ~/.mkrelease.
[stefan]
3.2 - 2011-10-21
----------------
- Fix the environment passed to subprocesses; Mercurial did not appreciate
the mangled PYTHONPATH.
[stefan]
- Allow to specify the branch or tag to check out from Git and Mercurial
repositories.
[stefan]
- Adapt to new status output in Subversion 1.6.
[stefan]
- Always include ``distdefault`` in list-locations.
[stefan]
- Detect Subversion repos from ``file://`` URLs.
[stefan]
- Detect bare Git repos from ``file://`` URLs.
[stefan]
3.1 - 2011-07-19
----------------
- Pass the PYTHONPATH to subprocesses so mkrelease works in zc.buildout
environments.
[stefan]
- Improve SCM detection in situations where one or more SCMs are nested.
[stefan]
- Add support for relative ``file:`` URLs.
[stefan]
- Depend on lazy_ instead of carrying a local implementation.
[stefan]
.. _lazy: https://github.com/stefanholek/lazy
3.0.10 - 2011-07-07
-------------------
- Add -l option to list known dist-locations (i.e. servers and aliases).
[stefan]
- Drop support for server URLs as dist-locations. Server URLs are
not unique.
[stefan]
- Update the Mercurial test repository so tagging tests don't fail
under Mercurial 1.8.
[stefan]
3.0.9 - 2010-12-31
------------------
- Rename ``[defaults]`` configuration file section to ``[mkrelease]``.
[stefan]
- Various internal code cleanups.
[stefan]
3.0.8 - 2010-08-13
------------------
- Avoid underscores in dependency names.
[stefan]
- Handle return code changes in Mercurial 1.6.
[stefan]
3.0.7 - 2010-07-07
------------------
- Improve documentation and error messages.
[stefan]
3.0.5 - 2010-03-23
------------------
- Allow per-server configuration of -s and -i defaults.
[stefan]
- Support the codespeak.net Subversion repository layout.
[stefan]
3.0.4 - 2010-03-16
------------------
- Status checks didn't use the same path restrictions as commits
(Mercurial and Git.)
[stefan]
3.0.3 - 2010-03-16
------------------
- Change how we check for existing tags in Subversion repositories.
[stefan]
- Make sandbox-status checks more robust in all three SCMs.
[stefan]
3.0.2 - 2010-03-12
------------------
- Add support for Git 1.7.
[stefan]
3.0.1 - 2010-02-07
------------------
- Stop when -d pypi is given but no configuration can be found.
[stefan]
- Use ``gnu_getopt`` to parse the command line.
[stefan]
3.0 - 2010-01-15
----------------
- Switch to -n for dry-run to be consistent with other tools.
[stefan]
- Rename --skip-* long options to --no-* for the same reason.
[stefan]
- Fix a bug in Mercurial and Git sandbox detection.
[stefan]
- Prepare for standalone distutils.
[stefan]
2.0.4 - 2010-01-10
------------------
- Improve Git support to handle remotes other than origin.
[stefan]
- Fix SCM detection in ``ssh://`` URLs.
[stefan]
2.0.3 - 2010-01-03
------------------
- Add -b option for releasing binary eggs.
[stefan]
- Don't choke on dirty sandboxes when dry-running.
[stefan]
2.0.2 - 2009-08-29
------------------
- Filter meta files (``.svn*``, ``.hg*``, ``.git*``) and never include
them in releases.
[stefan]
- Make sure to clean up all temporary files.
[stefan]
2.0.1 - 2009-07-24
------------------
- Fixed bug which could cause mkrelease to issue eggs with faulty manifest
files (Symptom: data files not installed).
[stefan]
- The -e flag now implies -T. We never want to tag a development release.
[stefan]
2.0 - 2009-07-16
----------------
- Allow command line options to appear after the argument. As in:
``mkrelease src/mypackage -q -d pypi``.
[stefan]
2.0b2 - 2009-07-09
------------------
- Improve user feedback in the SCM-detection part.
[stefan]
- Document the -e flag.
[stefan]
- Drop global configuration file for YAGNI.
[stefan]
- Allow to set default values for -s and -i in ~/.mkrelease.
[stefan]
2.0b1 - 2009-07-03
------------------
- By default, ignore all version number extensions (dev-r12345)
that may be configured in setup.cfg. Passing the -e flag
disables this safeguard.
[witsch, stefan]
- Delete any existing signature file before signing anew. This keeps
GnuPG from complaining about existing (but left-over) files.
[stefan]
2.0a2 - 2009-06-27
------------------
- Drop configurable Python and use sys.executable. This also means we
now require Python 2.6.
[stefan]
- Force setuptools to only use file-finders for the selected SCM type.
This is required to support multi-SCM sandboxes (think git-svn).
[stefan]
- Treat Subversion sandboxes just like the others and avoid the
temporary checkout step.
[stefan]
- Remove the -u flag for being pointless.
[stefan]
2.0a1 - 2009-06-14
------------------
- Added support for Mercurial and Git.
[stefan]
- Added 250+ unit tests.
[stefan]
1.0.2 - 2009-06-13
------------------
- Documented long options.
[stefan]
- Print a "Tagging ..." line before tagging.
[stefan]
1.0 - 2009-05-14
----------------
- Print help and version to stdout, not stderr.
[stefan]
1.0b4 - 2009-04-30
------------------
- Since distutils commands may return 0, successful or not, we must
check their output for signs of failure.
[stefan]
- Allow to pass argument list to ``main()``.
[stefan]
1.0b3 - 2009-03-23
------------------
- No longer depend on grep.
[stefan]
- Use subprocess.Popen instead of os.system and os.popen.
[stefan]
- Protect against infinite alias recursion.
[stefan]
- Drop -z option and always create zip files from now on.
[stefan]
1.0b2 - 2009-03-19
------------------
- Checkin everything that's been modified, not just "relevant" files.
[stefan]
- Expand aliases recursively.
[stefan]
1.0b1 - 2009-03-18
------------------
- The distbase and distdefault config file options no longer have
default values.
[stefan]
- Read index servers from ~/.pypirc and allow them to be used with -d.
[stefan]
- The -d option may be specified more than once.
[stefan]
- Dropped -p option. Use -d pypi instead.
[stefan]
- Dropped -c option. If your have non-standard SVN repositories you must
tag by hand.
[stefan]
0.19 - 2009-02-23
-----------------
- Absolute-ize the temp directory path.
[stefan]
0.18 - 2009-01-26
-----------------
- Include README.txt and CHANGES.txt in long_description.
[stefan]
- Rid unused imports and locals.
[stefan]
0.17 - 2009-01-23
-----------------
- Add -c option to enable codespeak support. The codespeak.net repository
uses ``branch`` and ``tag`` instead of ``branches`` and ``tags``.
[gotcha, stefan]
0.16 - 2009-01-13
-----------------
- Fold regex construction into find and make find a method.
[stefan]
- Update README.txt.
[stefan]
0.15 - 2009-01-13
-----------------
- Support for reading default options from a config file.
[fschulze, stefan]
0.14 - 2009-01-08
-----------------
- Add -s and -i options for signing PyPI uploads with GnuPG.
[stefan]
- Stop execution after any failing step.
[stefan]
0.13 - 2009-01-05
-----------------
- Stop execution when the checkin step fails.
[stefan]
0.12 - 2009-01-02
-----------------
- setup.cfg may not exist.
[stefan]
0.11 - 2008-12-02
-----------------
- Add setup.cfg to list of files we check in.
[stefan]
0.10 - 2008-10-21
-----------------
- Don't capitalize GetOptError messages.
[stefan]
0.9 - 2008-10-16
----------------
- Add -v option to print the script version.
[stefan]
0.8 - 2008-10-16
----------------
- Lift restriction where only svn trunk could be released.
[stefan]
0.7 - 2008-10-09
----------------
- Fix PyPI upload which must happen on the same command line as sdist.
[stefan]
0.6 - 2008-10-08
----------------
- Update README.txt.
[stefan]
0.5 - 2008-10-08
----------------
- Also locate and checkin HISTORY.txt to support ZopeSkel'ed eggs.
[stefan]
0.4 - 2008-10-08
----------------
- Use svn checkout instead of svn export because it makes a difference
to setuptools.
[stefan]
- Add -p option for uploading to PyPI instead of dist-location.
[stefan]
0.3 - 2008-10-06
----------------
- Also locate and checkin version.txt.
[stefan]
0.2 - 2008-10-01
----------------
- Add -z option to create zip archives instead of the default tar.gz.
[stefan]
0.1 - 2008-10-01
----------------
- Initial release
[stefan]
Raw data
{
"_id": null,
"home_page": "https://github.com/Jarn/jarn.mkrelease",
"name": "jarn.mkrelease",
"maintainer": "",
"docs_url": null,
"requires_python": "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,>=2.7",
"maintainer_email": "",
"keywords": "create,release,upload,python,sdist,sdists,wheel,wheels,pypi,releaser,package,packages,publish",
"author": "Stefan H. Holek",
"author_email": "stefan@epy.co.at",
"download_url": "https://files.pythonhosted.org/packages/5e/25/6dc63d548e0c7749a3566f9c4b46de80d6c301505e5b1a78aa2e282823fd/jarn.mkrelease-5.3.tar.gz",
"platform": null,
"description": "==============\njarn.mkrelease\n==============\n---------------------------------------------------\nPython package releaser\n---------------------------------------------------\n\n**mkrelease** is a no-frills Python package releaser. It is designed to take\nthe cumber out of building and distributing Python packages.\nThe releaser supports source distributions, eggs, and wheels.\n\nMotivation\n==========\n\nAfter preparing a package for release (update version strings, dates) we\ntypically have to:\n\n1. Commit modified files.\n\n2. Tag the release.\n\n3. Build a source distribution and wheel.\n\n4. Distribute the results via scp or upload them to an index server.\n\nIf we are doing this a lot, the need for automation becomes obvious.\n\nContents\n========\n\n* Installation_\n* Usage_\n* Options_\n* Arguments_\n* Configuration_\n* `Upload with SCP`_\n* `Upload to Index Servers`_\n* `Using GnuPG`_\n* Requirements_\n* Footnotes_\n* Related_\n* Changelog_\n\nInstallation\n============\n\nmkrelease works with Python 2.7 - 3.11 and all released versions of\nsetuptools.\n\nUse ``pip install jarn.mkrelease`` to install the ``mkrelease`` script.\n\nSince version 4.4 mkrelease requires twine_ for register and upload\noperations. Twine may be installed as a global utility on the system PATH or\ninto the same environment as jarn.mkrelease. [1]_\n\nUse ``pip install jarn.mkrelease[twine]`` to install mkrelease + twine.\n\nSince version 5.0 file-finder extensions are no longer installed by default.\nIf you still want to use file-finders specify the ``filefinder`` extra.\n\nUse ``pip install jarn.mkrelease[filefinder]`` to install mkrelease + file-finder\nextensions.\n\nUse ``pip uninstall setuptools-subversion setuptools-hg setuptools-git`` to\nuninstall file-finder extensions.\n\n.. _twine: https://twine.readthedocs.io/en/stable/\n\nUsage\n=====\n\n``mkrelease [options] [scm-sandbox|scm-url [rev]]``\n\nOptions\n=======\n\n``-C, --no-commit``\n Do not commit modified files from the sandbox.\n\n``-T, --no-tag``\n Do not tag the release in SCM.\n\n``-P, --no-push``\n Do not push commits and tags upstream.\n\n``-R, --no-register``\n Do not register the release with dist-location.\n\n``-S, --no-upload``\n Do not upload the release to dist-location.\n\n``-n, --dry-run``\n Dry-run; equivalent to ``-CTPRS``. This flag turns mkrelease into a\n simple package builder.\n\n``--svn, --hg, --git``\n Select the SCM type. Only required if the SCM type\n cannot be guessed from the argument.\n\n``-d dist-location, --dist-location=dist-location``\n An scp destination specification, an index\n server configured in ``~/.pypirc``, or an alias name for\n either. This option may be specified more than once.\n\n``-s, --sign``\n Sign the release with GnuPG.\n\n``-i identity, --identity=identity``\n The GnuPG identity to sign with. Implies ``-s``.\n\n``-z, --zip``\n Release a zip archive.\n\n``-g, --gztar``\n Release a tar.gz archive (default).\n\n``-b, --egg``\n Release a binary egg.\n\n``-w, --wheel``\n Release a wheel file (default).\n\n``-m, --manifest-only``\n Ignore setuptools file-finder extensions and collect files via\n ``MANIFEST.in`` only.\n\n``-e, --develop``\n Allow setuptools build tags. Implies ``-T``.\n\n``-q, --quiet``\n Suppress output of setuptools commands.\n\n``-t twine, --twine=twine``\n Override the twine executable used.\n\n``-c config-file, --config-file=config-file``\n Use config-file instead of the default ``~/.mkrelease``.\n\n``-l, --list-locations``\n List known dist-locations and exit.\n\n``-h, --help``\n Print the help message and exit.\n\n``-v, --version``\n Print the version string and exit.\n\n``--no-color``\n Disable output colors.\n\n``--non-interactive``\n Do not prompt for username and password if the\n required credentials are missing.\n\nArguments\n=========\n\n``scm-sandbox``\n A local SCM sandbox. Defaults to the current working\n directory.\n\n``scm-url [rev]``\n The URL of a remote SCM repository. The optional ``rev``\n argument specifies a branch or tag to check out.\n\nConfiguration\n=============\n\nmkrelease reads available index servers from the distutils_ configuration\nfile ``~/.pypirc``. This file should contain your PyPI account information: [2]_\n\n.. code:: ini\n\n [distutils]\n index-servers =\n pypi\n\n [pypi]\n repository = https://upload.pypi.org/legacy/\n username = fred\n password = secret\n\nNext, mkrelease reads its own configuration file ``~/.mkrelease``.\nIt may be used to change defaults and to define location\naliases:\n\n.. code:: ini\n\n [mkrelease]\n # Release steps\n commit = yes\n tag = yes\n push = yes\n register = no\n upload = yes\n\n # One or more of: zip gztar egg wheel\n formats = gztar wheel\n\n # Setuptools options\n manifest-only = yes\n develop = no\n quiet = no\n\n # Sign with GnuPG\n sign = no\n identity =\n\n # Default dist-location\n dist-location =\n\n [aliases]\n # Map name to one or more dist-locations\n customerA =\n jarn.com:/var/dist/customerA/\n public =\n jarn.com:/var/dist/public/\n world =\n pypi\n public\n\n.. _distutils: https://packaging.python.org/en/latest/specifications/pypirc/\n\nUpload with SCP\n===============\n\nThe simplest distribution location is a server directory reachable by ssh.\nReleasing a package means scp-ing it to the appropriate place\non the server:\n\n.. code::\n\n $ mkrelease -d customerA\n $ mkrelease -d jarn.com:/var/dist/customerB/\n $ mkrelease -d scp://jarn.com/var/dist/customerC/\n $ mkrelease -d stefan@jarn.com:eggs -C -e -q\n\nTo upload via sftp instead of scp, use the ``sftp`` URL scheme:\n\n.. code::\n\n $ mkrelease -d sftp://jarn.com/var/dist/customerD/\n\nNote: Unlike scp, the sftp client does not prompt for login credentials.\nThis means that non-interactive login must be configured on the\ndestination server or the upload will fail.\n\nUpload to Index Servers\n=======================\n\nAnother way of publishing a Python package is by uploading it to a dedicated\nindex server like PyPI_.\nGiven the ``~/.pypirc``\nfile from above, we can release to PyPI simply by typing:\n\n.. code::\n\n $ mkrelease -d pypi\n\nIndex servers are not limited to PyPI though.\nThere is TestPyPI_, and there are alternative index servers like\ndevpi_.\nWe extend our ``~/.pypirc``: [2]_\n\n.. code:: ini\n\n [distutils]\n index-servers =\n pypi\n testpypi\n\n [pypi]\n repository = https://upload.pypi.org/legacy/\n username = fred\n password = secret\n\n [testpypi]\n repository = https://test.pypi.org/legacy/\n username = fred\n password = secret\n\nWe can now release to TestPyPI with:\n\n.. code::\n\n $ mkrelease -d testpypi -C -e\n\n.. _PyPI: https://pypi.org/\n.. _TestPyPI: https://test.pypi.org/\n.. _devpi: https://www.devpi.net\n\nUsing GnuPG\n===========\n\nRelease a package and sign the distributions with GnuPG:\n\n.. code::\n\n $ mkrelease -d pypi -s -i fred@bedrock.com\n\nThe ``-i`` flag is optional and GnuPG will pick your default\nkey if not given.\n\nRequirements\n============\n\nThe following commands must be available on the system PATH (you only need\nwhat you plan to use):\n\n* svn\n\n* hg\n\n* git\n\n* scp\n\n* sftp\n\n* gpg\n\n* twine [1]_\n\nFootnotes\n=========\n\n.. [1] The twine executable is determined by trying in order:\n\n 1. Value of ``--twine`` command line option, or\n 2. Value of ``TWINE`` environment variable, or\n 3. Value of ``twine`` configuration file setting, or\n 4. ``python -m twine`` if twine is importable, or\n 5. ``twine``\n\n.. [2] There are more secure ways to handle login credentials:\n\n 1. Generate an `API token`_ on PyPI, and/or\n 2. Make use of twine's `keyring support`_.\n\n.. _`API token`: https://pypi.org/help/#apitoken\n.. _`keyring support`: https://twine.readthedocs.io/en/stable/index.html#keyring-support\n\nRelated\n=======\n\nAlso see our Python documentation viewer `jarn.viewdoc`_.\n\n.. _`jarn.viewdoc`: https://github.com/Jarn/jarn.viewdoc\n\n\nChangelog\n=========\n\n5.3 - 2023-09-23\n----------------\n\n- Update tox.ini for latest tox.\n [stefan]\n\n- Filter deprecated config warning.\n [stefan]\n\n- Fix invalid escape sequences.\n [stefan]\n\n- The ``rev`` part of Git URLs no longer defaults to 'master'.\n [stefan]\n\n5.2 - 2023-01-20\n----------------\n\n- Support setuptools >= 65.6.0.\n [stefan]\n\n5.1 - 2022-11-13\n----------------\n\n- Support Python 2.7 - 3.11.\n [stefan]\n\n- Do not require setup.py or setup.cfg if pyproject.toml exists.\n [stefan]\n\n- Filter some deprecation warnings.\n [stefan]\n\n- Disable twine progress bars in non-interactive mode.\n [stefan]\n\n5.0 - 2022-02-26\n----------------\n\n- NEW: File finder extensions are no longer installed by default.\n [stefan]\n\n- NEW: push is now on by default\n [stefan]\n\n- NEW: register is now off by default\n [stefan]\n\n- NEW: formats now defaults to gztar + wheel\n [stefan]\n\n- Do not require setup.py if setup.cfg exists.\n [stefan]\n\n- Switch to the nose2 test runner for its fast multiprocessing plugin.\n [stefan]\n\n4.4 - 2022-02-26\n----------------\n\n- Support Python 2.7 - 3.10.\n [stefan]\n\n- Support local distutils in setuptools >= 60.0.0.\n [stefan]\n\n- Add output colors.\n [stefan]\n\n- Require twine_ for register and upload operations.\n [stefan]\n\n- Move metadata to setup.cfg.\n [stefan]\n\n- Move tests out of ``jarn.mkrelease`` namespace.\n [stefan]\n\n- Include tests in sdist but not in wheel.\n [stefan]\n\n4.3 - 2019-01-28\n----------------\n\n- Fix issue #10: Can no longer run from a zc.buildout.\n [stefan]\n\n- Support ``python -m jarn.mkrelease``.\n [stefan]\n\n4.2 - 2019-01-25\n----------------\n\n- Drop Python 2.6 support, add Python 3.7.\n [stefan]\n\n- Update wheel and keyring dependencies.\n [stefan]\n\n- Add a complete config file example to the README.\n [stefan]\n\n- Accept ``dist-location`` as alias for ``distdefault`` in config files.\n [stefan]\n\n- Convert dashes to underscores in config parser optionxform.\n [stefan]\n\n4.1 - 2017-10-06\n----------------\n\n- Add -m option to skip setuptools extensions.\n [stefan]\n\n- Never read existing ``SOURCES.txt`` files.\n [stefan]\n\n- Allow --egg as alias for --binary.\n [stefan]\n\n4.0.1 - 2017-07-20\n------------------\n\n- Fix conditional include of keyring.\n [stefan]\n\n4.0 - 2017-07-20\n----------------\n\n- Add support for source distributions in gztar format.\n [stefan]\n\n- Add support for wheel files.\n [stefan]\n\n- Allow multiple archive formats per release.\n [stefan]\n\n- Protect against bad or incomplete locale settings.\n [stefan]\n\n- The secondary thread would sometimes not terminate in Python 2.\n [stefan]\n\n3.10 - 2017-02-01\n-----------------\n\n- Support setuptools >= 33.1.0.\n [stefan]\n\n3.9 - 2017-01-31\n----------------\n\n- Catch up with late-2016 PyPI API change.\n [stefan]\n\n- Add -R option to skip the register step.\n [stefan]\n\n- Support Python 2.6 - 3.6 without 2to3.\n [stefan]\n\n- Handle return code changes in Mercurial 3.1.1.\n [stefan]\n\n3.8 - 2013-11-21\n----------------\n\n- Support Python 3.x.\n [stefan]\n\n3.7 - 2012-08-22\n----------------\n\n- Fix compilation of Python source files when the -b option is given.\n [stefan]\n\n- Run check command as part of sdist and register commands.\n [stefan]\n\n- Add SFTP support.\n [stefan]\n\n- Allow ``sftp://`` and ``scp://`` URLs as dist-locations.\n [stefan]\n\n3.6 - 2012-07-11\n----------------\n\n- Handle return code changes in Mercurial 2.1.\n [stefan]\n\n- Add setuptools-subversion dependency.\n [stefan]\n\n- Support Subversion 1.7 with the help of setuptools-subversion.\n [stefan]\n\n3.5 - 2011-11-25\n----------------\n\n- Allow multiple values for the ``distdefault`` config file option.\n [stefan]\n\n- Defer list-locations until after all arguments have been parsed.\n [stefan]\n\n- Make tests run twice as fast by avoiding Subversion checkouts.\n [stefan]\n\n3.4 - 2011-11-10\n----------------\n\n- Warn if -p is given but no upstream location is found.\n [stefan]\n\n- Always push to default in Mercurial.\n [stefan]\n\n- Avoid reading empty lines from terminating subprocesses.\n [stefan]\n\n- Fix bug in handling of distbase.\n [stefan]\n\n3.3 - 2011-10-31\n----------------\n\n- Add setuptools to the PYTHONPATH for subprocesses.\n [stefan]\n\n- Unset any PYTHONPATH while executing SCM commands.\n [stefan]\n\n- Support Git's short-form ``ssh://`` URLs.\n [stefan]\n\n- Add -c option to specify a config file other than ~/.mkrelease.\n [stefan]\n\n3.2 - 2011-10-21\n----------------\n\n- Fix the environment passed to subprocesses; Mercurial did not appreciate\n the mangled PYTHONPATH.\n [stefan]\n\n- Allow to specify the branch or tag to check out from Git and Mercurial\n repositories.\n [stefan]\n\n- Adapt to new status output in Subversion 1.6.\n [stefan]\n\n- Always include ``distdefault`` in list-locations.\n [stefan]\n\n- Detect Subversion repos from ``file://`` URLs.\n [stefan]\n\n- Detect bare Git repos from ``file://`` URLs.\n [stefan]\n\n3.1 - 2011-07-19\n----------------\n\n- Pass the PYTHONPATH to subprocesses so mkrelease works in zc.buildout\n environments.\n [stefan]\n\n- Improve SCM detection in situations where one or more SCMs are nested.\n [stefan]\n\n- Add support for relative ``file:`` URLs.\n [stefan]\n\n- Depend on lazy_ instead of carrying a local implementation.\n [stefan]\n\n.. _lazy: https://github.com/stefanholek/lazy\n\n3.0.10 - 2011-07-07\n-------------------\n\n- Add -l option to list known dist-locations (i.e. servers and aliases).\n [stefan]\n\n- Drop support for server URLs as dist-locations. Server URLs are\n not unique.\n [stefan]\n\n- Update the Mercurial test repository so tagging tests don't fail\n under Mercurial 1.8.\n [stefan]\n\n3.0.9 - 2010-12-31\n------------------\n\n- Rename ``[defaults]`` configuration file section to ``[mkrelease]``.\n [stefan]\n\n- Various internal code cleanups.\n [stefan]\n\n3.0.8 - 2010-08-13\n------------------\n\n- Avoid underscores in dependency names.\n [stefan]\n\n- Handle return code changes in Mercurial 1.6.\n [stefan]\n\n3.0.7 - 2010-07-07\n------------------\n\n- Improve documentation and error messages.\n [stefan]\n\n3.0.5 - 2010-03-23\n------------------\n\n- Allow per-server configuration of -s and -i defaults.\n [stefan]\n\n- Support the codespeak.net Subversion repository layout.\n [stefan]\n\n3.0.4 - 2010-03-16\n------------------\n\n- Status checks didn't use the same path restrictions as commits\n (Mercurial and Git.)\n [stefan]\n\n3.0.3 - 2010-03-16\n------------------\n\n- Change how we check for existing tags in Subversion repositories.\n [stefan]\n\n- Make sandbox-status checks more robust in all three SCMs.\n [stefan]\n\n3.0.2 - 2010-03-12\n------------------\n\n- Add support for Git 1.7.\n [stefan]\n\n3.0.1 - 2010-02-07\n------------------\n\n- Stop when -d pypi is given but no configuration can be found.\n [stefan]\n\n- Use ``gnu_getopt`` to parse the command line.\n [stefan]\n\n3.0 - 2010-01-15\n----------------\n\n- Switch to -n for dry-run to be consistent with other tools.\n [stefan]\n\n- Rename --skip-* long options to --no-* for the same reason.\n [stefan]\n\n- Fix a bug in Mercurial and Git sandbox detection.\n [stefan]\n\n- Prepare for standalone distutils.\n [stefan]\n\n2.0.4 - 2010-01-10\n------------------\n\n- Improve Git support to handle remotes other than origin.\n [stefan]\n\n- Fix SCM detection in ``ssh://`` URLs.\n [stefan]\n\n2.0.3 - 2010-01-03\n------------------\n\n- Add -b option for releasing binary eggs.\n [stefan]\n\n- Don't choke on dirty sandboxes when dry-running.\n [stefan]\n\n2.0.2 - 2009-08-29\n------------------\n\n- Filter meta files (``.svn*``, ``.hg*``, ``.git*``) and never include\n them in releases.\n [stefan]\n\n- Make sure to clean up all temporary files.\n [stefan]\n\n2.0.1 - 2009-07-24\n------------------\n\n- Fixed bug which could cause mkrelease to issue eggs with faulty manifest\n files (Symptom: data files not installed).\n [stefan]\n\n- The -e flag now implies -T. We never want to tag a development release.\n [stefan]\n\n2.0 - 2009-07-16\n----------------\n\n- Allow command line options to appear after the argument. As in:\n ``mkrelease src/mypackage -q -d pypi``.\n [stefan]\n\n2.0b2 - 2009-07-09\n------------------\n\n- Improve user feedback in the SCM-detection part.\n [stefan]\n\n- Document the -e flag.\n [stefan]\n\n- Drop global configuration file for YAGNI.\n [stefan]\n\n- Allow to set default values for -s and -i in ~/.mkrelease.\n [stefan]\n\n2.0b1 - 2009-07-03\n------------------\n\n- By default, ignore all version number extensions (dev-r12345)\n that may be configured in setup.cfg. Passing the -e flag\n disables this safeguard.\n [witsch, stefan]\n\n- Delete any existing signature file before signing anew. This keeps\n GnuPG from complaining about existing (but left-over) files.\n [stefan]\n\n2.0a2 - 2009-06-27\n------------------\n\n- Drop configurable Python and use sys.executable. This also means we\n now require Python 2.6.\n [stefan]\n\n- Force setuptools to only use file-finders for the selected SCM type.\n This is required to support multi-SCM sandboxes (think git-svn).\n [stefan]\n\n- Treat Subversion sandboxes just like the others and avoid the\n temporary checkout step.\n [stefan]\n\n- Remove the -u flag for being pointless.\n [stefan]\n\n2.0a1 - 2009-06-14\n------------------\n\n- Added support for Mercurial and Git.\n [stefan]\n\n- Added 250+ unit tests.\n [stefan]\n\n1.0.2 - 2009-06-13\n------------------\n\n- Documented long options.\n [stefan]\n\n- Print a \"Tagging ...\" line before tagging.\n [stefan]\n\n1.0 - 2009-05-14\n----------------\n\n- Print help and version to stdout, not stderr.\n [stefan]\n\n1.0b4 - 2009-04-30\n------------------\n\n- Since distutils commands may return 0, successful or not, we must\n check their output for signs of failure.\n [stefan]\n\n- Allow to pass argument list to ``main()``.\n [stefan]\n\n1.0b3 - 2009-03-23\n------------------\n\n- No longer depend on grep.\n [stefan]\n\n- Use subprocess.Popen instead of os.system and os.popen.\n [stefan]\n\n- Protect against infinite alias recursion.\n [stefan]\n\n- Drop -z option and always create zip files from now on.\n [stefan]\n\n1.0b2 - 2009-03-19\n------------------\n\n- Checkin everything that's been modified, not just \"relevant\" files.\n [stefan]\n\n- Expand aliases recursively.\n [stefan]\n\n1.0b1 - 2009-03-18\n------------------\n\n- The distbase and distdefault config file options no longer have\n default values.\n [stefan]\n\n- Read index servers from ~/.pypirc and allow them to be used with -d.\n [stefan]\n\n- The -d option may be specified more than once.\n [stefan]\n\n- Dropped -p option. Use -d pypi instead.\n [stefan]\n\n- Dropped -c option. If your have non-standard SVN repositories you must\n tag by hand.\n [stefan]\n\n0.19 - 2009-02-23\n-----------------\n\n- Absolute-ize the temp directory path.\n [stefan]\n\n0.18 - 2009-01-26\n-----------------\n\n- Include README.txt and CHANGES.txt in long_description.\n [stefan]\n\n- Rid unused imports and locals.\n [stefan]\n\n0.17 - 2009-01-23\n-----------------\n\n- Add -c option to enable codespeak support. The codespeak.net repository\n uses ``branch`` and ``tag`` instead of ``branches`` and ``tags``.\n [gotcha, stefan]\n\n0.16 - 2009-01-13\n-----------------\n\n- Fold regex construction into find and make find a method.\n [stefan]\n\n- Update README.txt.\n [stefan]\n\n0.15 - 2009-01-13\n-----------------\n\n- Support for reading default options from a config file.\n [fschulze, stefan]\n\n0.14 - 2009-01-08\n-----------------\n\n- Add -s and -i options for signing PyPI uploads with GnuPG.\n [stefan]\n\n- Stop execution after any failing step.\n [stefan]\n\n0.13 - 2009-01-05\n-----------------\n\n- Stop execution when the checkin step fails.\n [stefan]\n\n0.12 - 2009-01-02\n-----------------\n\n- setup.cfg may not exist.\n [stefan]\n\n0.11 - 2008-12-02\n-----------------\n\n- Add setup.cfg to list of files we check in.\n [stefan]\n\n0.10 - 2008-10-21\n-----------------\n\n- Don't capitalize GetOptError messages.\n [stefan]\n\n0.9 - 2008-10-16\n----------------\n\n- Add -v option to print the script version.\n [stefan]\n\n0.8 - 2008-10-16\n----------------\n\n- Lift restriction where only svn trunk could be released.\n [stefan]\n\n0.7 - 2008-10-09\n----------------\n\n- Fix PyPI upload which must happen on the same command line as sdist.\n [stefan]\n\n0.6 - 2008-10-08\n----------------\n\n- Update README.txt.\n [stefan]\n\n0.5 - 2008-10-08\n----------------\n\n- Also locate and checkin HISTORY.txt to support ZopeSkel'ed eggs.\n [stefan]\n\n0.4 - 2008-10-08\n----------------\n\n- Use svn checkout instead of svn export because it makes a difference\n to setuptools.\n [stefan]\n\n- Add -p option for uploading to PyPI instead of dist-location.\n [stefan]\n\n0.3 - 2008-10-06\n----------------\n\n- Also locate and checkin version.txt.\n [stefan]\n\n0.2 - 2008-10-01\n----------------\n\n- Add -z option to create zip archives instead of the default tar.gz.\n [stefan]\n\n0.1 - 2008-10-01\n----------------\n\n- Initial release\n [stefan]\n\n",
"bugtrack_url": null,
"license": "BSD-2-Clause",
"summary": "Python package releaser",
"version": "5.3",
"project_urls": {
"Homepage": "https://github.com/Jarn/jarn.mkrelease"
},
"split_keywords": [
"create",
"release",
"upload",
"python",
"sdist",
"sdists",
"wheel",
"wheels",
"pypi",
"releaser",
"package",
"packages",
"publish"
],
"urls": [
{
"comment_text": "",
"digests": {
"blake2b_256": "73d52cb7cc2ec5fb357d55158ff171647ae918353314d3afccdcdca9c2b844f1",
"md5": "91e1f9cfcfb64b8fb476ae79ea62968b",
"sha256": "2295134f693063cbc093b4e055a196956802adc31d8cbaa507c763e4fcf213bb"
},
"downloads": -1,
"filename": "jarn.mkrelease-5.3-py2.py3-none-any.whl",
"has_sig": false,
"md5_digest": "91e1f9cfcfb64b8fb476ae79ea62968b",
"packagetype": "bdist_wheel",
"python_version": "py2.py3",
"requires_python": "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,>=2.7",
"size": 36618,
"upload_time": "2023-09-23T07:30:23",
"upload_time_iso_8601": "2023-09-23T07:30:23.804375Z",
"url": "https://files.pythonhosted.org/packages/73/d5/2cb7cc2ec5fb357d55158ff171647ae918353314d3afccdcdca9c2b844f1/jarn.mkrelease-5.3-py2.py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "5e256dc63d548e0c7749a3566f9c4b46de80d6c301505e5b1a78aa2e282823fd",
"md5": "481508028b158e98340b935180dc155e",
"sha256": "30d16bf31fc8b76b8ea055220547a132266d93426b147ab6b37bc851ed51148f"
},
"downloads": -1,
"filename": "jarn.mkrelease-5.3.tar.gz",
"has_sig": false,
"md5_digest": "481508028b158e98340b935180dc155e",
"packagetype": "sdist",
"python_version": "source",
"requires_python": "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,>=2.7",
"size": 102904,
"upload_time": "2023-09-23T07:30:25",
"upload_time_iso_8601": "2023-09-23T07:30:25.836431Z",
"url": "https://files.pythonhosted.org/packages/5e/25/6dc63d548e0c7749a3566f9c4b46de80d6c301505e5b1a78aa2e282823fd/jarn.mkrelease-5.3.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2023-09-23 07:30:25",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "Jarn",
"github_project": "jarn.mkrelease",
"travis_ci": false,
"coveralls": false,
"github_actions": false,
"tox": true,
"lcname": "jarn.mkrelease"
}