jarn.mkrelease


Namejarn.mkrelease JSON
Version 5.3 PyPI version JSON
download
home_pagehttps://github.com/Jarn/jarn.mkrelease
SummaryPython package releaser
upload_time2023-09-23 07:30:25
maintainer
docs_urlNone
authorStefan H. Holek
requires_python!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,>=2.7
licenseBSD-2-Clause
keywords create release upload python sdist sdists wheel wheels pypi releaser package packages publish
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            ==============
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"
}
        
Elapsed time: 0.11582s