summaryrefslogtreecommitdiff
path: root/RELEASE.md
blob: 57172a002c76acf857f582d2f0be06189cd9631a (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
## NOTICE

this is not accurate anymore and needs to be reworked.


## Release instructions

When releasing a new version, the following steps should be taken:

1. Make sure all automated tests pass.

2. Make sure the package metadata in `setup.py` is up-to-date. You can
   verify the information by re-generating the egg info:

   ```
   python setup.py egg_info
   ```

   and inspecting `src/pysaml2.egg-info/PKG-INFO`. You should also make sure
   that the long description renders as valid reStructuredText. You can
   do this by using the `rst2html.py` utility from [docutils]:

   ```
   python setup.py --long-description | rst2html > test.html
   ```

   If this will produce warning or errors, PyPI will be unable to render
   the long description nicely. It will treat it as plain text instead.

3. Update the version in the [VERSION] file and report the changes in
   [CHANGELOG.md] and commit the changes.:

   ```
   git add CHANGELOG.md
   git add VERSION
   git commit -v -s -m "Release version X.Y.Z"
   ```

4. Create a release [branch]:

   ```
   git branch vX.Y.Z
   ```

5. Create a release [tag]:

   ```
   git tag -a -s vX.Y.Z -m "Version X.Y.Z"
   ```

6. Push these changes to Github:

   ```
   git push --follow-tags origin vX.Y.Z
   git push --follow-tags origin vX.Y.Z:vX.Y.Z
   ```

7. Create a source and wheel distribution and upload it to PyPI:

   generate a source and wheel distribution at once
   ```
   python setup.py sdist bdist_wheel
   ```

   generated files are under dist/
   ```
   ls dist/
   ```

   upload release on test.pypi.org
   ```
   twine upload --repository-url https://test.pypi.org/legacy/ dist/pysaml2-X.Y.Z*
   ```

   then, upload release on official pypi.org
   ```
   twine upload dist/pysaml2-X.Y.Z*
   ```

8. Upload the documentation to PyPI. First you need to generate the html
   version of the documentation:

   ```
   cd docs/
   make clean
   make html
   cd _build/html
   zip -r pysaml2-docs.zip *
   ```

   Submit the generated pysaml2-docs.zip file.

9. Send an email to the pysaml2 list announcing this release


**Important:** Once released to PyPI or any other public download location,
a released egg may *never* be removed, even if it has proven to be a faulty
release ("brown bag release"). In such a case it should simply be superseded
immediately by a new, improved release.


  [VERSION]: https://github.com/IdentityPython/pysaml2/blob/master/VERSION
  [CHANGELOG.md]: https://github.com/IdentityPython/pysaml2/blob/master/CHANGELOG.md
  [docutils]: http://docutils.sourceforge.net/
  [branch]: https://git-scm.com/book/en/v2/Git-Branching-Branches-in-a-Nutshell
  [tag]: https://git-scm.com/book/en/v2/Git-Basics-Tagging#_annotated_tags