|
@@
-1,149
+1,149
b''
|
|
1
|
.. _release_process:
|
|
1
|
.. _release_process:
|
|
2
|
|
|
2
|
|
|
3
|
======================
|
|
3
|
=======================
|
|
4
|
Releasing core IPython
|
|
4
|
IPython release process
|
|
5
|
======================
|
|
5
|
=======================
|
|
6
|
|
|
6
|
|
|
7
|
This document contains the process that is used to create an IPython release.
|
|
7
|
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
|
|
|
12
|
|
|
13
|
1. Set Environment variables
|
|
13
|
1. Set Environment variables
|
|
14
|
----------------------------
|
|
14
|
----------------------------
|
|
15
|
|
|
15
|
|
|
16
|
Set environment variables to document previous release tag, current
|
|
16
|
Set environment variables to document previous release tag, current
|
|
17
|
release milestone, current release version, and git tag::
|
|
17
|
release milestone, current release version, and git tag::
|
|
18
|
|
|
18
|
|
|
19
|
PREV_RELEASE=rel-1.0.0
|
|
19
|
PREV_RELEASE=rel-1.0.0
|
|
20
|
MILESTONE=1.1
|
|
20
|
MILESTONE=1.1
|
|
21
|
VERSION=1.1.0
|
|
21
|
VERSION=1.1.0
|
|
22
|
TAG="rel-$VERSION"
|
|
22
|
TAG="rel-$VERSION"
|
|
23
|
BRANCH=master
|
|
23
|
BRANCH=master
|
|
24
|
|
|
24
|
|
|
25
|
These variables may be used later to copy/paste as answers to the script
|
|
25
|
These variables may be used later to copy/paste as answers to the script
|
|
26
|
questions instead of typing the appropriate command when the time comes. These
|
|
26
|
questions instead of typing the appropriate command when the time comes. These
|
|
27
|
variables are not used by the scripts directly; therefore, there is no need to
|
|
27
|
variables are not used by the scripts directly; therefore, there is no need to
|
|
28
|
`export` the variables.
|
|
28
|
`export` the variables.
|
|
29
|
|
|
29
|
|
|
30
|
2. Create GitHub stats and finish release note
|
|
30
|
2. Create GitHub stats and finish release note
|
|
31
|
----------------------------------------------
|
|
31
|
----------------------------------------------
|
|
32
|
|
|
32
|
|
|
33
|
.. note::
|
|
33
|
.. note::
|
|
34
|
|
|
34
|
|
|
35
|
Before generating the GitHub stats, verify that all closed issues and
|
|
35
|
Before generating the GitHub stats, verify that all closed issues and
|
|
36
|
pull requests have `appropriate milestones <https://github.com/ipython/ipython/wiki/Dev%3A-GitHub-workflow#milestones>`_.
|
|
36
|
pull requests have `appropriate milestones <https://github.com/ipython/ipython/wiki/Dev%3A-GitHub-workflow#milestones>`_.
|
|
37
|
`This search <https://github.com/ipython/ipython/issues?q=is%3Aclosed+no%3Amilestone+is%3Aissue>`_
|
|
37
|
`This search <https://github.com/ipython/ipython/issues?q=is%3Aclosed+no%3Amilestone+is%3Aissue>`_
|
|
38
|
should return no results before creating the GitHub stats.
|
|
38
|
should return no results before creating the GitHub stats.
|
|
39
|
|
|
39
|
|
|
40
|
If a major release:
|
|
40
|
If a major release:
|
|
41
|
|
|
41
|
|
|
42
|
- merge any pull request notes into what's new::
|
|
42
|
- merge any pull request notes into what's new::
|
|
43
|
|
|
43
|
|
|
44
|
python tools/update_whatsnew.py
|
|
44
|
python tools/update_whatsnew.py
|
|
45
|
|
|
45
|
|
|
46
|
- update `docs/source/whatsnew/development.rst`, to ensure it covers
|
|
46
|
- update `docs/source/whatsnew/development.rst`, to ensure it covers
|
|
47
|
the major release features
|
|
47
|
the major release features
|
|
48
|
- move the contents of `development.rst` to `versionX.rst` where `X` is
|
|
48
|
- move the contents of `development.rst` to `versionX.rst` where `X` is
|
|
49
|
the numerical release version
|
|
49
|
the numerical release version
|
|
50
|
- generate summary of GitHub contributions, which can be done with::
|
|
50
|
- generate summary of GitHub contributions, which can be done with::
|
|
51
|
|
|
51
|
|
|
52
|
python tools/github_stats.py --milestone $MILESTONE > stats.rst
|
|
52
|
python tools/github_stats.py --milestone $MILESTONE > stats.rst
|
|
53
|
|
|
53
|
|
|
54
|
which may need some manual cleanup of `stats.rst`. Add the cleaned
|
|
54
|
which may need some manual cleanup of `stats.rst`. Add the cleaned
|
|
55
|
`stats.rst` results to `docs/source/whatsnew/github-stats-X.rst` where
|
|
55
|
`stats.rst` results to `docs/source/whatsnew/github-stats-X.rst` where
|
|
56
|
`X` is the numerical release version. If creating a major release, make
|
|
56
|
`X` is the numerical release version. If creating a major release, make
|
|
57
|
a new `github-stats-X.rst` file; if creating a minor release, the
|
|
57
|
a new `github-stats-X.rst` file; if creating a minor release, the
|
|
58
|
content from `stats.rst` may simply be added to the top of an existing
|
|
58
|
content from `stats.rst` may simply be added to the top of an existing
|
|
59
|
`github-stats-X.rst` file.
|
|
59
|
`github-stats-X.rst` file.
|
|
60
|
|
|
60
|
|
|
61
|
To find duplicates and update `.mailmap`, use::
|
|
61
|
To find duplicates and update `.mailmap`, use::
|
|
62
|
|
|
62
|
|
|
63
|
git log --format="%aN <%aE>" $PREV_RELEASE... | sort -u -f
|
|
63
|
git log --format="%aN <%aE>" $PREV_RELEASE... | sort -u -f
|
|
64
|
|
|
64
|
|
|
65
|
|
|
65
|
|
|
66
|
3. Run the `tools/build_release` script
|
|
66
|
3. Run the `tools/build_release` script
|
|
67
|
---------------------------------------
|
|
67
|
---------------------------------------
|
|
68
|
|
|
68
|
|
|
69
|
Running `tools/build_release` does all the file checking and building that
|
|
69
|
Running `tools/build_release` does all the file checking and building that
|
|
70
|
the real release script will do. This makes test installations, checks that
|
|
70
|
the real release script will do. This makes test installations, checks that
|
|
71
|
the build procedure runs OK, and tests other steps in the release process.
|
|
71
|
the build procedure runs OK, and tests other steps in the release process.
|
|
72
|
|
|
72
|
|
|
73
|
We encourage creating a test build of the docs as well.
|
|
73
|
We encourage creating a test build of the docs as well.
|
|
74
|
|
|
74
|
|
|
75
|
4. Create and push the new tag
|
|
75
|
4. Create and push the new tag
|
|
76
|
------------------------------
|
|
76
|
------------------------------
|
|
77
|
|
|
77
|
|
|
78
|
Edit `IPython/core/release.py` to have the current version.
|
|
78
|
Edit `IPython/core/release.py` to have the current version.
|
|
79
|
|
|
79
|
|
|
80
|
Commit the changes to release.py and jsversion::
|
|
80
|
Commit the changes to release.py and jsversion::
|
|
81
|
|
|
81
|
|
|
82
|
git commit -am "release $VERSION"
|
|
82
|
git commit -am "release $VERSION"
|
|
83
|
git push origin $BRANCH
|
|
83
|
git push origin $BRANCH
|
|
84
|
|
|
84
|
|
|
85
|
Create and push the tag::
|
|
85
|
Create and push the tag::
|
|
86
|
|
|
86
|
|
|
87
|
git tag -am "release $VERSION" "$TAG"
|
|
87
|
git tag -am "release $VERSION" "$TAG"
|
|
88
|
git push origin --tags
|
|
88
|
git push origin --tags
|
|
89
|
|
|
89
|
|
|
90
|
Update release.py back to `x.y-dev` or `x.y-maint`, and push::
|
|
90
|
Update release.py back to `x.y-dev` or `x.y-maint`, and push::
|
|
91
|
|
|
91
|
|
|
92
|
git commit -am "back to development"
|
|
92
|
git commit -am "back to development"
|
|
93
|
git push origin $BRANCH
|
|
93
|
git push origin $BRANCH
|
|
94
|
|
|
94
|
|
|
95
|
5. Get a fresh clone
|
|
95
|
5. Get a fresh clone
|
|
96
|
--------------------
|
|
96
|
--------------------
|
|
97
|
|
|
97
|
|
|
98
|
Get a fresh clone of the tag for building the release::
|
|
98
|
Get a fresh clone of the tag for building the release::
|
|
99
|
|
|
99
|
|
|
100
|
cd /tmp
|
|
100
|
cd /tmp
|
|
101
|
git clone --depth 1 https://github.com/ipython/ipython.git -b "$TAG"
|
|
101
|
git clone --depth 1 https://github.com/ipython/ipython.git -b "$TAG"
|
|
102
|
|
|
102
|
|
|
103
|
6. Run the release script
|
|
103
|
6. Run the release script
|
|
104
|
-------------------------
|
|
104
|
-------------------------
|
|
105
|
|
|
105
|
|
|
106
|
Run the `release` script::
|
|
106
|
Run the `release` script::
|
|
107
|
|
|
107
|
|
|
108
|
cd tools && ./release
|
|
108
|
cd tools && ./release
|
|
109
|
|
|
109
|
|
|
110
|
This makes the tarballs, zipfiles, and wheels. It posts
|
|
110
|
This makes the tarballs, zipfiles, and wheels. It posts
|
|
111
|
them to archive.ipython.org and registers the release with PyPI.
|
|
111
|
them to archive.ipython.org and registers the release with PyPI.
|
|
112
|
|
|
112
|
|
|
113
|
This step requires having a current wheel, Python 3.4 and Python 2.7.
|
|
113
|
This step requires having a current wheel, Python 3.4 and Python 2.7.
|
|
114
|
|
|
114
|
|
|
115
|
7. Draft a short release announcement
|
|
115
|
7. Draft a short release announcement
|
|
116
|
-------------------------------------
|
|
116
|
-------------------------------------
|
|
117
|
|
|
117
|
|
|
118
|
The announcement should include:
|
|
118
|
The announcement should include:
|
|
119
|
|
|
119
|
|
|
120
|
- release highlights
|
|
120
|
- release highlights
|
|
121
|
- a link to the html version of the *What's new* section of the documentation
|
|
121
|
- a link to the html version of the *What's new* section of the documentation
|
|
122
|
- a link to upgrade or installation tips (if necessary)
|
|
122
|
- a link to upgrade or installation tips (if necessary)
|
|
123
|
|
|
123
|
|
|
124
|
Post the announcement to the mailing list, and link from Twitter.
|
|
124
|
Post the announcement to the mailing list, and link from Twitter.
|
|
125
|
|
|
125
|
|
|
126
|
8. Update milestones on GitHub
|
|
126
|
8. Update milestones on GitHub
|
|
127
|
------------------------------
|
|
127
|
------------------------------
|
|
128
|
|
|
128
|
|
|
129
|
These steps will bring milestones up to date:
|
|
129
|
These steps will bring milestones up to date:
|
|
130
|
|
|
130
|
|
|
131
|
- close the just released milestone
|
|
131
|
- close the just released milestone
|
|
132
|
- open a new milestone for the next release (x, y+1), if the milestone doesn't
|
|
132
|
- open a new milestone for the next release (x, y+1), if the milestone doesn't
|
|
133
|
exist already
|
|
133
|
exist already
|
|
134
|
|
|
134
|
|
|
135
|
9. Update the IPython website
|
|
135
|
9. Update the IPython website
|
|
136
|
-----------------------------
|
|
136
|
-----------------------------
|
|
137
|
|
|
137
|
|
|
138
|
The IPython website should document the new release:
|
|
138
|
The IPython website should document the new release:
|
|
139
|
|
|
139
|
|
|
140
|
- add release announcement (news, announcements)
|
|
140
|
- add release announcement (news, announcements)
|
|
141
|
- update current version and download links
|
|
141
|
- update current version and download links
|
|
142
|
- update links on the documentation page (especially if a major release)
|
|
142
|
- update links on the documentation page (especially if a major release)
|
|
143
|
|
|
143
|
|
|
144
|
10. Celebrate!
|
|
144
|
10. Celebrate!
|
|
145
|
--------------
|
|
145
|
--------------
|
|
146
|
|
|
146
|
|
|
147
|
Celebrate the release and please thank the contributors for their work. Great
|
|
147
|
Celebrate the release and please thank the contributors for their work. Great
|
|
148
|
job!
|
|
148
|
job!
|
|
149
|
|
|
149
|
|