##// END OF EJS Templates
jsversion is no longer part of IPython
Thomas Kluyver -
Show More
@@ -1,185 +1,185 b''
1 1 .. _release_process:
2 2
3 3 =======================
4 4 IPython release process
5 5 =======================
6 6
7 7 This document contains the process that is used to create an IPython release.
8 8
9 9 Conveniently, the `release` script in the `tools` directory of the `IPython`
10 10 repository automates most of the release process. This document serves as a
11 11 handy reminder and checklist for the release manager.
12 12
13 13 1. Set Environment variables
14 14 ----------------------------
15 15
16 16 Set environment variables to document previous release tag, current
17 17 release milestone, current release version, and git tag::
18 18
19 19 PREV_RELEASE=rel-1.0.0
20 20 MILESTONE=1.1
21 21 VERSION=1.1.0
22 22 TAG="rel-$VERSION"
23 23 BRANCH=master
24 24
25 25 These variables may be used later to copy/paste as answers to the script
26 26 questions instead of typing the appropriate command when the time comes. These
27 27 variables are not used by the scripts directly; therefore, there is no need to
28 28 `export` the variables.
29 29
30 30 2. Create GitHub stats and finish release note
31 31 ----------------------------------------------
32 32
33 33 .. note::
34 34
35 35 Before generating the GitHub stats, verify that all closed issues and
36 36 pull requests have `appropriate milestones <https://github.com/ipython/ipython/wiki/Dev%3A-GitHub-workflow#milestones>`_.
37 37 `This search <https://github.com/ipython/ipython/issues?q=is%3Aclosed+no%3Amilestone+is%3Aissue>`_
38 38 should return no results before creating the GitHub stats.
39 39
40 40 If a major release:
41 41
42 42 - merge any pull request notes into what's new::
43 43
44 44 python tools/update_whatsnew.py
45 45
46 46 - update `docs/source/whatsnew/development.rst`, to ensure it covers
47 47 the major release features
48 48 - move the contents of `development.rst` to `versionX.rst` where `X` is
49 49 the numerical release version
50 50 - generate summary of GitHub contributions, which can be done with::
51 51
52 52 python tools/github_stats.py --milestone $MILESTONE > stats.rst
53 53
54 54 which may need some manual cleanup of `stats.rst`. Add the cleaned
55 55 `stats.rst` results to `docs/source/whatsnew/github-stats-X.rst` where
56 56 `X` is the numerical release version. If creating a major release, make
57 57 a new `github-stats-X.rst` file; if creating a minor release, the
58 58 content from `stats.rst` may simply be added to the top of an existing
59 59 `github-stats-X.rst` file.
60 60
61 61 To find duplicates and update `.mailmap`, use::
62 62
63 63 git log --format="%aN <%aE>" $PREV_RELEASE... | sort -u -f
64 64
65 65 3. Make sure the repository is clean
66 66 ------------------------------------
67 67
68 68 of any file that could be problematic.
69 69 Remove all non-tracked files with:
70 70
71 71 .. code::
72 72
73 73 git clean -xfdi
74 74
75 75 This will ask for confirmation before removing all untracked files. Make
76 76 sure the ``dist/`` folder is clean to avoid any stale builds from
77 77 previous build attempts.
78 78
79 79
80 80
81 81 4. Run the `tools/build_release` script
82 82 ---------------------------------------
83 83
84 84 Running `tools/build_release` does all the file checking and building that
85 85 the real release script will do. This makes test installations, checks that
86 86 the build procedure runs OK, and tests other steps in the release process.
87 87
88 88 We encourage creating a test build of the docs as well.
89 89
90 90 5. Create and push the new tag
91 91 ------------------------------
92 92
93 93 Edit `IPython/core/release.py` to have the current version.
94 94
95 95 in particular, update version number and ``_version_extra`` content in
96 96 ``IPython/core/release.py``.
97 97
98 98 Make sure the version number matches pep440, in particular, `rc` and `beta` are
99 99 not separated by `.` or the `sdist` and `bdist` will appear as different
100 100 releases. For example, a valid version number for a release candidate (rc)
101 101 release is: ``1.3rc1``. Notice that there is no separator between the '3' and
102 102 the 'r'.
103 103
104 104
105 Commit the changes to release.py and jsversion::
105 Commit the changes to release.py::
106 106
107 107 git commit -am "release $VERSION"
108 108 git push origin $BRANCH
109 109
110 110 Create and push the tag::
111 111
112 112 git tag -am "release $VERSION" "$TAG"
113 113 git push origin --tags
114 114
115 115 Update release.py back to `x.y-dev` or `x.y-maint`, and push::
116 116
117 117 git commit -am "back to development"
118 118 git push origin $BRANCH
119 119
120 120 6. Get a fresh clone
121 121 --------------------
122 122
123 123 Get a fresh clone of the tag for building the release::
124 124
125 125 cd /tmp
126 126 git clone --depth 1 https://github.com/ipython/ipython.git -b "$TAG"
127 127
128 128 7. Run the release script
129 129 -------------------------
130 130
131 131 Run the `release` script, this step requires having a current wheel, Python >=3.4 and Python 2.7.::
132 132
133 133 cd tools && ./release
134 134
135 135 This makes the tarballs, zipfiles, and wheels, and put them under the `dist/`
136 136 folder. Be sure to test the ``wheel`` and the ``sdist`` locally before uploading
137 137 them to PyPI.
138 138
139 139 Use the following to actually upload the result of the build:
140 140
141 141 ./release upload
142 142
143 143 It should posts them to ``archive.ipython.org`` and registers the release
144 144 with PyPI if you have the various authorisations.
145 145
146 146 You might need to use `twine <https://github.com/pypa/twine>`_ (`twine upload
147 147 dist/*`) manually to actually upload on PyPI. Unlike setuptools, twine is able
148 148 to upload packages over SSL.
149 149
150 150
151 151 8. Draft a short release announcement
152 152 -------------------------------------
153 153
154 154 The announcement should include:
155 155
156 156 - release highlights
157 157 - a link to the html version of the *What's new* section of the documentation
158 158 - a link to upgrade or installation tips (if necessary)
159 159
160 160 Post the announcement to the mailing list and or blog, and link from Twitter.
161 161
162 162 9. Update milestones on GitHub
163 163 ------------------------------
164 164
165 165 These steps will bring milestones up to date:
166 166
167 167 - close the just released milestone
168 168 - open a new milestone for the next release (x, y+1), if the milestone doesn't
169 169 exist already
170 170
171 171 10. Update the IPython website
172 172 ------------------------------
173 173
174 174 The IPython website should document the new release:
175 175
176 176 - add release announcement (news, announcements)
177 177 - update current version and download links
178 178 - update links on the documentation page (especially if a major release)
179 179
180 180 11. Celebrate!
181 181 --------------
182 182
183 183 Celebrate the release and please thank the contributors for their work. Great
184 184 job!
185 185
General Comments 0
You need to be logged in to leave comments. Login now