Show More
@@ -8,7 +8,15 b' This document contains the process that is used to create an IPython release.' | |||||
8 |
|
8 | |||
9 | Conveniently, the ``release`` script in the ``tools`` directory of the ``IPython`` |
|
9 | Conveniently, the ``release`` script in the ``tools`` directory of the ``IPython`` | |
10 | repository automates most of the release process. This document serves as a |
|
10 | repository automates most of the release process. This document serves as a | |
11 | handy reminder and checklist for the release manager. |
|
11 | handy reminder and checklist for the release manager. | |
|
12 | ||||
|
13 | During the release process, you might need the extra following dependencies: | |||
|
14 | ||||
|
15 | - ``keyring`` to access your GitHub authentication tokens | |||
|
16 | - ``testpath`` to fake some file system operations | |||
|
17 | - ``graphviz`` to generate some graphs in the documentation | |||
|
18 | ||||
|
19 | ||||
12 |
|
|
20 | ||
13 | 1. Set Environment variables |
|
21 | 1. Set Environment variables | |
14 | ---------------------------- |
|
22 | ---------------------------- | |
@@ -72,6 +80,9 b' If a major release:' | |||||
72 | file you just created and remove temporarily the first entry called |
|
80 | file you just created and remove temporarily the first entry called | |
73 | ``development`` (you'll need to add it back after release). |
|
81 | ``development`` (you'll need to add it back after release). | |
74 |
|
82 | |||
|
83 | Make sure that the stats file have a header or it won't be rendered in | |||
|
84 | the final documentation. | |||
|
85 | ||||
75 | To find duplicates and update `.mailmap`, use:: |
|
86 | To find duplicates and update `.mailmap`, use:: | |
76 |
|
87 | |||
77 | git log --format="%aN <%aE>" $PREV_RELEASE... | sort -u -f |
|
88 | git log --format="%aN <%aE>" $PREV_RELEASE... | sort -u -f | |
@@ -174,9 +185,11 b' Use the following to actually upload the result of the build::' | |||||
174 |
|
185 | |||
175 | It should posts them to ``archive.ipython.org``. |
|
186 | It should posts them to ``archive.ipython.org``. | |
176 |
|
187 | |||
177 |
You will need to use `twine <https://github.com/pypa/twine>`_ |
|
188 | You will need to use `twine <https://github.com/pypa/twine>`_ ) manually to | |
178 |
|
|
189 | actually upload on PyPI. Unlike setuptools, twine is able to upload packages | |
179 | to upload packages over SSL. |
|
190 | over SSL. | |
|
191 | ||||
|
192 | twine upload dist/* | |||
180 |
|
193 | |||
181 |
|
194 | |||
182 | PyPI/Warehouse will automatically hide previous releases. If you are uploading |
|
195 | PyPI/Warehouse will automatically hide previous releases. If you are uploading | |
@@ -216,6 +229,13 b' The IPython website should document the new release:' | |||||
216 | - update current version and download links |
|
229 | - update current version and download links | |
217 | - update links on the documentation page (especially if a major release) |
|
230 | - update links on the documentation page (especially if a major release) | |
218 |
|
231 | |||
|
232 | 12. Update readthedocs | |||
|
233 | ---------------------- | |||
|
234 | ||||
|
235 | Make sure to update readthedocs and set the latest tag as stable, as well as | |||
|
236 | checked that previous release is still building under its own tag. | |||
|
237 | ||||
|
238 | ||||
219 | 12. Celebrate! |
|
239 | 12. Celebrate! | |
220 | -------------- |
|
240 | -------------- | |
221 |
|
241 |
@@ -45,44 +45,45 b' print()' | |||||
45 |
|
45 | |||
46 | # Perform local backup, go to tools dir to run it. |
|
46 | # Perform local backup, go to tools dir to run it. | |
47 | cd(tooldir) |
|
47 | cd(tooldir) | |
48 | sh('./make_tarball.py') |
|
|||
49 | sh('mv ipython-*.tgz %s' % ipbackupdir) |
|
|||
50 |
|
48 | |||
51 | # Build release files |
|
49 | if 'upload' in sys.argv: | |
52 | sh('./build_release %s' % ipdir) |
|
50 | cd(distdir) | |
|
51 | print( 'Uploading distribution files to GitHub...') | |||
53 |
|
52 | |||
54 | # Not Registering with PyPI, registering with setup.py is insecure as communication is not encrypted |
|
53 | for fname in os.listdir('.'): | |
55 | cd(ipdir) |
|
54 | # TODO: update to GitHub releases API | |
|
55 | continue | |||
|
56 | print('uploading %s to GitHub' % fname) | |||
|
57 | desc = "IPython %s source distribution" % version | |||
|
58 | post_download("ipython/ipython", fname, description=desc) | |||
56 |
|
59 | |||
57 | # Upload all files |
|
60 | # Make target dir if it doesn't exist | |
58 | sh(sdists) |
|
61 | print('Uploading IPython to backup site.') | |
|
62 | sh('ssh %s "mkdir -p %s/release/%s" ' % (archive_user, archive_dir, version)) | |||
|
63 | sh('scp * %s' % release_site) | |||
59 |
|
64 | |||
60 | buildwheels() |
|
65 | print( 'Uploading backup files...') | |
|
66 | cd(ipbackupdir) | |||
|
67 | sh('scp `ls -1tr *tgz | tail -1` %s' % backup_site) | |||
61 |
|
68 | |||
62 | if 'upload' not in sys.argv: |
|
69 | print('Done!') | |
63 | print("`./release upload` to register and release") |
|
70 | print('Use `twine upload dist/*` to upload the files to PyPI') | |
64 | sys.exit(0) |
|
71 | else: | |
|
72 | sh('./make_tarball.py') | |||
|
73 | sh('mv ipython-*.tgz %s' % ipbackupdir) | |||
65 |
|
74 | |||
|
75 | # Build release files | |||
|
76 | sh('./build_release %s' % ipdir) | |||
66 |
|
77 | |||
67 | print('Will not upload with setuptools as upload connection is insecure. Please use `twine upload dist/*` to upload the files to PyPI') |
|
78 | # Not Registering with PyPI, registering with setup.py is insecure as communication is not encrypted | |
|
79 | cd(ipdir) | |||
68 |
|
80 | |||
69 | cd(distdir) |
|
81 | # Upload all files | |
70 | print( 'Uploading distribution files to GitHub...') |
|
82 | sh(sdists) | |
71 |
|
83 | |||
72 | for fname in os.listdir('.'): |
|
84 | buildwheels() | |
73 | # TODO: update to GitHub releases API |
|
85 | print("`./release upload` to upload source distribution on github and ipython archive") | |
74 | continue |
|
86 | sys.exit(0) | |
75 | print('uploading %s to GitHub' % fname) |
|
|||
76 | desc = "IPython %s source distribution" % version |
|
|||
77 | post_download("ipython/ipython", fname, description=desc) |
|
|||
78 |
|
87 | |||
79 | # Make target dir if it doesn't exist |
|
|||
80 | print('Uploading IPython to backup site.') |
|
|||
81 | sh('ssh %s "mkdir -p %s/release/%s" ' % (archive_user, archive_dir, version)) |
|
|||
82 | sh('scp * %s' % release_site) |
|
|||
83 |
|
88 | |||
84 | print( 'Uploading backup files...') |
|
|||
85 | cd(ipbackupdir) |
|
|||
86 | sh('scp `ls -1tr *tgz | tail -1` %s' % backup_site) |
|
|||
87 |
|
89 | |||
88 | print('Done!') |
|
General Comments 0
You need to be logged in to leave comments.
Login now