##// END OF EJS Templates
back to development
Paul Ivanov -
Show More
@@ -1,119 +1,119 b''
1 1 # -*- coding: utf-8 -*-
2 2 """Release data for the IPython project."""
3 3
4 4 #-----------------------------------------------------------------------------
5 5 # Copyright (c) 2008, IPython Development Team.
6 6 # Copyright (c) 2001, Fernando Perez <fernando.perez@colorado.edu>
7 7 # Copyright (c) 2001, Janko Hauser <jhauser@zscout.de>
8 8 # Copyright (c) 2001, Nathaniel Gray <n8gray@caltech.edu>
9 9 #
10 10 # Distributed under the terms of the Modified BSD License.
11 11 #
12 12 # The full license is in the file COPYING.txt, distributed with this software.
13 13 #-----------------------------------------------------------------------------
14 14
15 15 # Name of the package for release purposes. This is the name which labels
16 16 # the tarballs and RPMs made by distutils, so it's best to lowercase it.
17 17 name = 'ipython'
18 18
19 19 # IPython version information. An empty _version_extra corresponds to a full
20 20 # release. 'dev' as a _version_extra string means this is a development
21 21 # version
22 22 _version_major = 7
23 23 _version_minor = 0
24 24 _version_patch = 0
25 25 _version_extra = '.dev'
26 _version_extra = 'b1'
26 # _version_extra = 'b1'
27 27 # _version_extra = '' # Uncomment this for full releases
28 28
29 29 # Construct full version string from these.
30 30 _ver = [_version_major, _version_minor, _version_patch]
31 31
32 32 __version__ = '.'.join(map(str, _ver))
33 33 if _version_extra:
34 34 __version__ = __version__ + _version_extra
35 35
36 36 version = __version__ # backwards compatibility name
37 37 version_info = (_version_major, _version_minor, _version_patch, _version_extra)
38 38
39 39 # Change this when incrementing the kernel protocol version
40 40 kernel_protocol_version_info = (5, 0)
41 41 kernel_protocol_version = "%i.%i" % kernel_protocol_version_info
42 42
43 43 description = "IPython: Productive Interactive Computing"
44 44
45 45 long_description = \
46 46 """
47 47 IPython provides a rich toolkit to help you make the most out of using Python
48 48 interactively. Its main components are:
49 49
50 50 * A powerful interactive Python shell
51 51 * A `Jupyter <https://jupyter.org/>`_ kernel to work with Python code in Jupyter
52 52 notebooks and other interactive frontends.
53 53
54 54 The enhanced interactive Python shells have the following main features:
55 55
56 56 * Comprehensive object introspection.
57 57
58 58 * Input history, persistent across sessions.
59 59
60 60 * Caching of output results during a session with automatically generated
61 61 references.
62 62
63 63 * Extensible tab completion, with support by default for completion of python
64 64 variables and keywords, filenames and function keywords.
65 65
66 66 * Extensible system of 'magic' commands for controlling the environment and
67 67 performing many tasks related either to IPython or the operating system.
68 68
69 69 * A rich configuration system with easy switching between different setups
70 70 (simpler than changing $PYTHONSTARTUP environment variables every time).
71 71
72 72 * Session logging and reloading.
73 73
74 74 * Extensible syntax processing for special purpose situations.
75 75
76 76 * Access to the system shell with user-extensible alias system.
77 77
78 78 * Easily embeddable in other Python programs and GUIs.
79 79
80 80 * Integrated access to the pdb debugger and the Python profiler.
81 81
82 82 The latest development version is always available from IPython's `GitHub
83 83 site <http://github.com/ipython>`_.
84 84 """
85 85
86 86 license = 'BSD'
87 87
88 88 authors = {'Fernando' : ('Fernando Perez','fperez.net@gmail.com'),
89 89 'Janko' : ('Janko Hauser','jhauser@zscout.de'),
90 90 'Nathan' : ('Nathaniel Gray','n8gray@caltech.edu'),
91 91 'Ville' : ('Ville Vainio','vivainio@gmail.com'),
92 92 'Brian' : ('Brian E Granger', 'ellisonbg@gmail.com'),
93 93 'Min' : ('Min Ragan-Kelley', 'benjaminrk@gmail.com'),
94 94 'Thomas' : ('Thomas A. Kluyver', 'takowl@gmail.com'),
95 95 'Jorgen' : ('Jorgen Stenarson', 'jorgen.stenarson@bostream.nu'),
96 96 'Matthias' : ('Matthias Bussonnier', 'bussonniermatthias@gmail.com'),
97 97 }
98 98
99 99 author = 'The IPython Development Team'
100 100
101 101 author_email = 'ipython-dev@python.org'
102 102
103 103 url = 'https://ipython.org'
104 104
105 105
106 106 platforms = ['Linux','Mac OSX','Windows']
107 107
108 108 keywords = ['Interactive','Interpreter','Shell', 'Embedding']
109 109
110 110 classifiers = [
111 111 'Framework :: IPython',
112 112 'Intended Audience :: Developers',
113 113 'Intended Audience :: Science/Research',
114 114 'License :: OSI Approved :: BSD License',
115 115 'Programming Language :: Python',
116 116 'Programming Language :: Python :: 3',
117 117 'Programming Language :: Python :: 3 :: Only',
118 118 'Topic :: System :: Shells'
119 119 ]
@@ -1,322 +1,322 b''
1 1 .. _core_developer_guide:
2 2
3 3 =================================
4 4 Guide for IPython core Developers
5 5 =================================
6 6
7 7 This guide documents the development of IPython itself. Alternatively,
8 8 developers of third party tools and libraries that use IPython should see the
9 9 :doc:`../development/index`.
10 10
11 11
12 12 For instructions on how to make a developer install see :ref:`devinstall`.
13 13
14 14 Backporting Pull requests
15 15 -------------------------
16 16
17 17 All pull requests should usually be made against ``master``, if a Pull Request
18 18 need to be backported to an earlier release; then it should be tagged with the
19 19 correct ``milestone``.
20 20
21 21 If you tag a pull request with a milestone **before** merging the pull request,
22 22 and the base ref is ``master``, then our backport bot should automatically create
23 23 a corresponding pull-request that backport on the correct branch.
24 24
25 25 If you have write access to the IPython repository you can also just mention the
26 26 **backport bot** to do the work for you. The bot is evolving so instructions may
27 27 be different. At the time of this writing you can use::
28 28
29 29 @meeseeksdev[bot] backport [to] <branchname>
30 30
31 31 The bot will attempt to backport the current pull-request and issue a PR if
32 32 possible.
33 33
34 34 .. note::
35 35
36 36 The ``@`` and ``[bot]`` when mentioning the bot should be optional and can
37 37 be omitted.
38 38
39 39 If the pull request cannot be automatically backported, the bot should tell you
40 40 so on the PR and apply a "Need manual backport" tag to the origin PR.
41 41
42 42
43 43 Backport with ghpro
44 44 -------------------
45 45
46 46 We can also use `ghpro <https://pypi.python.org/pypi/ghpro>`_
47 47 to automatically list and apply the PR on other branches. For example:
48 48
49 49 .. code-block:: bash
50 50
51 51 $ backport-pr todo --milestone 5.2
52 52 [...snip..]
53 53 The following PRs have been backported
54 54 9848
55 55 9851
56 56 9953
57 57 9955
58 58 The following PRs should be backported:
59 59 9417
60 60 9863
61 61 9925
62 62 9947
63 63
64 64 $ backport-pr apply 5.x 9947
65 65 [...snip...]
66 66
67 67
68 68 .. _release_process:
69 69
70 70 =======================
71 71 IPython release process
72 72 =======================
73 73
74 74 This document contains the process that is used to create an IPython release.
75 75
76 76 Conveniently, the ``release`` script in the ``tools`` directory of the ``IPython``
77 77 repository automates most of the release process. This document serves as a
78 78 handy reminder and checklist for the release manager.
79 79
80 80 During the release process, you might need the extra following dependencies:
81 81
82 82 - ``keyring`` to access your GitHub authentication tokens
83 83 - ``graphviz`` to generate some graphs in the documentation
84 84 - ``ghpro`` to generate the stats
85 85
86 86 Make sure you have all the required dependencies to run the tests as well.
87 87
88 88
89 89 1. Set Environment variables
90 90 ----------------------------
91 91
92 92 Set environment variables to document previous release tag, current
93 93 release milestone, current release version, and git tag.
94 94
95 95 These variables may be used later to copy/paste as answers to the script
96 96 questions instead of typing the appropriate command when the time comes. These
97 97 variables are not used by the scripts directly; therefore, there is no need to
98 98 ``export`` them. The format for bash is as follows, but note that these values
99 99 are just an example valid only for the 5.0 release; you'll need to update them
100 100 for the release you are actually making::
101 101
102 102 PREV_RELEASE=4.2.1
103 103 MILESTONE=5.0
104 104 VERSION=5.0.0
105 105 BRANCH=master
106 106
107 107
108 108 2. Create GitHub stats and finish release note
109 109 ----------------------------------------------
110 110
111 111 .. note::
112 112
113 113 This step is optional if making a Beta or RC release.
114 114
115 115 .. note::
116 116
117 117 Before generating the GitHub stats, verify that all closed issues and pull
118 118 requests have `appropriate milestones
119 119 <https://github.com/ipython/ipython/wiki/Dev:-GitHub-workflow#milestones>`_.
120 120 `This search
121 121 <https://github.com/ipython/ipython/issues?q=is%3Aclosed+no%3Amilestone+is%3Aissue>`_
122 122 should return no results before creating the GitHub stats.
123 123
124 124 If a major release:
125 125
126 126 - merge any pull request notes into what's new::
127 127
128 128 python tools/update_whatsnew.py
129 129
130 130 - update ``docs/source/whatsnew/development.rst``, to ensure it covers
131 131 the major release features
132 132
133 133 - move the contents of ``development.rst`` to ``versionX.rst`` where ``X`` is
134 134 the numerical release version
135 135
136 136 - generate summary of GitHub contributions, which can be done with::
137 137
138 138 python tools/github_stats.py --milestone $MILESTONE > stats.rst
139 139
140 140 which may need some manual cleanup of ``stats.rst``. Add the cleaned
141 141 ``stats.rst`` results to ``docs/source/whatsnew/github-stats-X.rst``
142 142 where ``X`` is the numerical release version (don't forget to add it to
143 143 the git repository as well). If creating a major release, make a new
144 144 ``github-stats-X.rst`` file; if creating a minor release, the content
145 145 from ``stats.rst`` may simply be added to the top of an existing
146 146 ``github-stats-X.rst`` file.
147 147
148 148 - Edit ``docs/source/whatsnew/index.rst`` to list the new ``github-stats-X``
149 149 file you just created.
150 150
151 151 - You do not need to temporarily remove the first entry called
152 152 ``development``, nor re-add it after the release, it will automatically be
153 153 hidden when releasing a stable version of IPython (if ``_version_extra``
154 154 in ``release.py`` is an empty string.
155 155
156 156 Make sure that the stats file has a header or it won't be rendered in
157 157 the final documentation.
158 158
159 159 To find duplicates and update `.mailmap`, use::
160 160
161 161 git log --format="%aN <%aE>" $PREV_RELEASE... | sort -u -f
162 162
163 163 If a minor release you might need to do some of the above points manually, and
164 164 forward port the changes.
165 165
166 166 3. Make sure the repository is clean
167 167 ------------------------------------
168 168
169 169 of any file that could be problematic.
170 170 Remove all non-tracked files with:
171 171
172 172 .. code::
173 173
174 174 git clean -xfdi
175 175
176 176 This will ask for confirmation before removing all untracked files. Make
177 177 sure the ``dist/`` folder is clean to avoid any stale builds from
178 178 previous build attempts.
179 179
180 180
181 181 4. Update the release version number
182 182 ------------------------------------
183 183
184 184 Edit ``IPython/core/release.py`` to have the current version.
185 185
186 186 in particular, update version number and ``_version_extra`` content in
187 187 ``IPython/core/release.py``.
188 188
189 189 Step 5 will validate your changes automatically, but you might still want to
190 190 make sure the version number matches pep440.
191 191
192 192 In particular, ``rc`` and ``beta`` are not separated by ``.`` or the ``sdist``
193 193 and ``bdist`` will appear as different releases. For example, a valid version
194 194 number for a release candidate (rc) release is: ``1.3rc1``. Notice that there
195 195 is no separator between the '3' and the 'r'. Check the environment variable
196 196 ``$VERSION`` as well.
197 197
198 198 You will likely just have to modify/comment/uncomment one of the lines setting
199 199 ``_version_extra``
200 200
201 201
202 202 5. Run the `tools/build_release` script
203 203 ---------------------------------------
204 204
205 205 Running ``tools/build_release`` does all the file checking and building that
206 206 the real release script will do. This makes test installations, checks that
207 207 the build procedure runs OK, and tests other steps in the release process.
208 208
209 209 The ``build_release`` script will in particular verify that the version number
210 210 match PEP 440, in order to avoid surprise at the time of build upload.
211 211
212 212 We encourage creating a test build of the docs as well.
213 213
214 214 6. Create and push the new tag
215 215 ------------------------------
216 216
217 217 Commit the changes to release.py::
218 218
219 219 git commit -am "release $VERSION"
220 220 git push origin $BRANCH
221 221
222 222 Create and push the tag::
223 223
224 224 git tag -am "release $VERSION" "$VERSION"
225 git push origin --tags
225 git push origin $VERSION
226 226
227 227 Update release.py back to ``x.y-dev`` or ``x.y-maint``, and re-add the
228 228 ``development`` entry in ``docs/source/whatsnew/index.rst`` and push::
229 229
230 230 git commit -am "back to development"
231 231 git push origin $BRANCH
232 232
233 233 Now checkout the tag we just made::
234 234
235 235 git checkout $VERSION
236 236
237 237 7. Run the release script
238 238 -------------------------
239 239
240 240 Run the ``release`` script, this step requires having a current wheel, Python
241 241 >=3.4 and Python 2.7.::
242 242
243 243 ./tools/release
244 244
245 245 This makes the tarballs and wheels, and puts them under the ``dist/``
246 246 folder. Be sure to test the ``wheels`` and the ``sdist`` locally before
247 247 uploading them to PyPI. We do not use an universal wheel as each wheel
248 248 installs an ``ipython2`` or ``ipython3`` script, depending on the version of
249 249 Python it is built for. Using an universal wheel would prevent this.
250 250
251 251 Use the following to actually upload the result of the build::
252 252
253 253 ./tools/release upload
254 254
255 255 It should posts them to ``archive.ipython.org`` and to PyPI.
256 256
257 257 PyPI/Warehouse will automatically hide previous releases. If you are uploading
258 258 a non-stable version, make sure to log-in to PyPI and un-hide previous version.
259 259
260 260
261 261 8. Draft a short release announcement
262 262 -------------------------------------
263 263
264 264 The announcement should include:
265 265
266 266 - release highlights
267 267 - a link to the html version of the *What's new* section of the documentation
268 268 - a link to upgrade or installation tips (if necessary)
269 269
270 270 Post the announcement to the mailing list and or blog, and link from Twitter.
271 271
272 272 .. note::
273 273
274 274 If you are doing a RC or Beta, you can likely skip the next steps.
275 275
276 276 9. Update milestones on GitHub
277 277 -------------------------------
278 278
279 279 These steps will bring milestones up to date:
280 280
281 281 - close the just released milestone
282 282 - open a new milestone for the next release (x, y+1), if the milestone doesn't
283 283 exist already
284 284
285 285 10. Update the IPython website
286 286 ------------------------------
287 287
288 288 The IPython website should document the new release:
289 289
290 290 - add release announcement (news, announcements)
291 291 - update current version and download links
292 292 - update links on the documentation page (especially if a major release)
293 293
294 294 11. Update readthedocs
295 295 ----------------------
296 296
297 297 Make sure to update readthedocs and set the latest tag as stable, as well as
298 298 checking that previous release is still building under its own tag.
299 299
300 300 12. Update the Conda-Forge feedstock
301 301 ------------------------------------
302 302
303 303 Follow the instructions on `the repository <https://github.com/conda-forge/ipython-feedstock>`_
304 304
305 305 13. Celebrate!
306 306 --------------
307 307
308 308 Celebrate the release and please thank the contributors for their work. Great
309 309 job!
310 310
311 311
312 312
313 313 Old Documentation
314 314 =================
315 315
316 316 Out of date documentation is still available and have been kept for archival purposes.
317 317
318 318 .. note::
319 319
320 320 Developers documentation used to be on the IPython wiki, but are now out of
321 321 date. The wiki is though still available for historical reasons: `Old IPython
322 322 GitHub Wiki. <https://github.com/ipython/ipython/wiki/Dev:-Index>`_
@@ -1,35 +1,33 b''
1 1 #!/usr/bin/env python3
2 2 """IPython release build script.
3 3 """
4 4 import os
5 5 from shutil import rmtree
6 6
7 7 from toollib import sh, pjoin, get_ipdir, cd, execfile, sdists, buildwheels
8 8
9 9 def build_release():
10 10
11 11 # Get main ipython dir, this will raise if it doesn't pass some checks
12 12 ipdir = get_ipdir()
13 13 cd(ipdir)
14 14
15 15 # Load release info
16 16 execfile(pjoin('IPython', 'core', 'release.py'), globals())
17 17
18 18 with open('docs/source/whatsnew/index.rst') as f:
19 19 if ' development' in f.read():
20 pass
21 # raise ValueError("Please remove `development` from what's new toctree for release")
22
20 raise ValueError("Please remove `development` from what's new toctree for release")
23 21
24 22 # Cleanup
25 23 for d in ['build', 'dist', pjoin('docs', 'build'), pjoin('docs', 'dist'),
26 24 pjoin('docs', 'source', 'api', 'generated')]:
27 25 if os.path.isdir(d):
28 26 rmtree(d)
29 27
30 28 # Build source and binary distros
31 29 sh(sdists)
32 30 buildwheels()
33 31
34 32 if __name__ == '__main__':
35 33 build_release()
General Comments 0
You need to be logged in to leave comments. Login now