-
-
Notifications
You must be signed in to change notification settings - Fork 2.6k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #3199 from nicoddemus/publish-tag-3060
Implement deploying to PyPI by pushing a tag
- Loading branch information
Showing
5 changed files
with
37 additions
and
96 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -22,44 +22,28 @@ taking a lot of time to make a new one. | |
|
||
Ensure your are in a clean work tree. | ||
|
||
#. Generate docs, changelog, announcements and upload a package to | ||
your ``devpi`` staging server:: | ||
#. Generate docs, changelog, announcements and a **local** tag:: | ||
|
||
invoke generate.pre-release <VERSION> <DEVPI USER> --password <DEVPI PASSWORD> | ||
|
||
If ``--password`` is not given, it is assumed the user is already logged in ``devpi``. | ||
If you don't have an account, please ask for one. | ||
invoke generate.pre-release <VERSION> | ||
|
||
#. Open a PR for this branch targeting ``master``. | ||
|
||
#. Test the package | ||
|
||
* **Manual method** | ||
|
||
Run from multiple machines:: | ||
#. After all tests pass and the PR has been approved, publish to PyPI by pushing the tag:: | ||
|
||
devpi use https://devpi.net/USER/dev | ||
devpi test pytest==VERSION | ||
git push [email protected]:pytest-dev/pytest.git <VERSION> | ||
|
||
Check that tests pass for relevant combinations with:: | ||
Wait for the deploy to complete, then make sure it is `available on PyPI <https://pypi.org/project/pytest>`_. | ||
|
||
devpi list pytest | ||
#. Send an email announcement with the contents from:: | ||
|
||
* **CI servers** | ||
doc/en/announce/release-<VERSION>.rst | ||
|
||
Configure a repository as per-instructions on | ||
devpi-cloud-test_ to test the package on Travis_ and AppVeyor_. | ||
All test environments should pass. | ||
To the following mailing lists: | ||
|
||
#. Publish to PyPI:: | ||
* [email protected] (all releases) | ||
* [email protected] (all releases) | ||
* [email protected] (only major/minor releases) | ||
|
||
invoke generate.publish-release <VERSION> <DEVPI USER> <PYPI_NAME> | ||
|
||
where PYPI_NAME is the name of pypi.python.org as configured in your ``~/.pypirc`` | ||
file `for devpi <http:https://doc.devpi.net/latest/quickstart-releaseprocess.html?highlight=pypirc#devpi-push-releasing-to-an-external-index>`_. | ||
And announce it on `Twitter <https://twitter.com/>`_ with the ``#pytest`` hashtag. | ||
|
||
#. After a minor/major release, merge ``release-X.Y.Z`` into ``master`` and push (or open a PR). | ||
|
||
.. _devpi-cloud-test: https://github.com/obestwalter/devpi-cloud-test | ||
.. _AppVeyor: https://www.appveyor.com/ | ||
.. _Travis: https://travis-ci.org |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1 @@ | ||
pytest has changed the publication procedure and is now being published to PyPI directly from Travis. |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,4 +1,6 @@ | ||
import os | ||
""" | ||
Invoke development tasks. | ||
""" | ||
from pathlib import Path | ||
from subprocess import check_output, check_call | ||
|
||
|
@@ -57,7 +59,7 @@ def regen(ctx): | |
|
||
@invoke.task() | ||
def make_tag(ctx, version): | ||
"""Create a new (local) tag for the release, only if the repository is clean.""" | ||
"""Create a new, local tag for the release, only if the repository is clean.""" | ||
from git import Repo | ||
|
||
repo = Repo('.') | ||
|
@@ -74,81 +76,24 @@ def make_tag(ctx, version): | |
repo.create_tag(version) | ||
|
||
|
||
@invoke.task() | ||
def devpi_upload(ctx, version, user, password=None): | ||
"""Creates and uploads a package to devpi for testing.""" | ||
if password: | ||
print("[generate.devpi_upload] devpi login {}".format(user)) | ||
check_call(['devpi', 'login', user, '--password', password]) | ||
|
||
check_call(['devpi', 'use', 'https://devpi.net/{}/dev'.format(user)]) | ||
|
||
env = os.environ.copy() | ||
env['SETUPTOOLS_SCM_PRETEND_VERSION'] = version | ||
check_call(['devpi', 'upload', '--formats', 'sdist,bdist_wheel'], env=env) | ||
print("[generate.devpi_upload] package uploaded") | ||
|
||
|
||
@invoke.task(help={ | ||
'version': 'version being released', | ||
'user': 'name of the user on devpi to stage the generated package', | ||
'password': 'user password on devpi to stage the generated package ' | ||
'(if not given assumed logged in)', | ||
}) | ||
def pre_release(ctx, version, user, password=None): | ||
"""Generates new docs, release announcements and uploads a new release to devpi for testing.""" | ||
def pre_release(ctx, version): | ||
"""Generates new docs, release announcements and creates a local tag.""" | ||
announce(ctx, version) | ||
regen(ctx) | ||
changelog(ctx, version, write_out=True) | ||
|
||
msg = 'Preparing release version {}'.format(version) | ||
check_call(['git', 'commit', '-a', '-m', msg]) | ||
|
||
make_tag(ctx, version) | ||
|
||
devpi_upload(ctx, version=version, user=user, password=password) | ||
|
||
print() | ||
print('[generate.pre_release] Please push your branch and open a PR.') | ||
|
||
|
||
@invoke.task(help={ | ||
'version': 'version being released', | ||
'user': 'name of the user on devpi to stage the generated package', | ||
'pypi_name': 'name of the pypi configuration section in your ~/.pypirc', | ||
}) | ||
def publish_release(ctx, version, user, pypi_name): | ||
"""Publishes a package previously created by the 'pre_release' command.""" | ||
from git import Repo | ||
repo = Repo('.') | ||
tag_names = [x.name for x in repo.tags] | ||
if version not in tag_names: | ||
print('Could not find tag for version {}, exiting...'.format(version)) | ||
raise invoke.Exit(code=2) | ||
|
||
check_call(['devpi', 'use', 'https://devpi.net/{}/dev'.format(user)]) | ||
check_call(['devpi', 'push', 'pytest=={}'.format(version), 'pypi:{}'.format(pypi_name)]) | ||
check_call(['git', 'push', '[email protected]:pytest-dev/pytest.git', version]) | ||
|
||
emails = [ | ||
'[email protected]', | ||
'[email protected]' | ||
] | ||
if version.endswith('.0'): | ||
emails.append('[email protected]') | ||
print('Version {} has been published to PyPI!'.format(version)) | ||
print() | ||
print('Please send an email announcement with the contents from:') | ||
print() | ||
print(' doc/en/announce/release-{}.rst'.format(version)) | ||
print() | ||
print('To the following mail lists:') | ||
print() | ||
print(' ', ','.join(emails)) | ||
print() | ||
print('And announce it on twitter adding the #pytest hash tag.') | ||
|
||
|
||
@invoke.task(help={ | ||
'version': 'version being released', | ||
'write_out': 'write changes to the actual changelog' | ||
|
@@ -159,4 +104,3 @@ def changelog(ctx, version, write_out=False): | |
else: | ||
addopts = ['--draft'] | ||
check_call(['towncrier', '--version', version] + addopts) | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,6 +1,4 @@ | ||
devpi-client | ||
gitpython | ||
invoke | ||
towncrier | ||
tox | ||
wheel |