File tree 3 files changed +60
-16
lines changed
3 files changed +60
-16
lines changed Original file line number Diff line number Diff line change @@ -155,9 +155,9 @@ def lint(session):
155
155
# -----------------------------------------------------------------------------
156
156
@nox .session (name = "prepare-release" )
157
157
def prepare_release (session ):
158
- version = release .get_version_from_arguments (session . posargs )
158
+ version = release .get_version_from_arguments (session )
159
159
if not version :
160
- session .error ("Usage: nox -s prepare-release -- YY.N[.P] " )
160
+ session .error ("Usage: nox -s prepare-release -- <version> " )
161
161
162
162
session .log ("# Ensure nothing is staged" )
163
163
if release .modified_files_in_git ("--staged" ):
@@ -190,7 +190,7 @@ def prepare_release(session):
190
190
191
191
@nox .session (name = "build-release" )
192
192
def build_release (session ):
193
- version = release .get_version_from_arguments (session . posargs )
193
+ version = release .get_version_from_arguments (session )
194
194
if not version :
195
195
session .error ("Usage: nox -s build-release -- YY.N[.P]" )
196
196
@@ -249,7 +249,7 @@ def build_dists(session):
249
249
250
250
@nox .session (name = "upload-release" )
251
251
def upload_release (session ):
252
- version = release .get_version_from_arguments (session . posargs )
252
+ version = release .get_version_from_arguments (session )
253
253
if not version :
254
254
session .error ("Usage: nox -s upload-release -- YY.N[.P]" )
255
255
Original file line number Diff line number Diff line change 14
14
from nox .sessions import Session
15
15
16
16
17
- def get_version_from_arguments (arguments : List [ str ] ) -> Optional [str ]:
17
+ def get_version_from_arguments (session : Session ) -> Optional [str ]:
18
18
"""Checks the arguments passed to `nox -s release`.
19
19
20
20
If there is only 1 argument that looks like a pip version, returns that.
21
21
Otherwise, returns None.
22
22
"""
23
- if len (arguments ) != 1 :
23
+ if len (session . posargs ) != 1 :
24
24
return None
25
-
26
- version = arguments [0 ]
27
-
28
- parts = version .split ('.' )
29
- if not 2 <= len (parts ) <= 3 :
30
- # Not of the form: YY.N or YY.N.P
31
- return None
32
-
33
- if not all (part .isdigit () for part in parts ):
34
- # Not all segments are integers.
25
+ version = session .posargs [0 ]
26
+
27
+ # We delegate to a script here, so that it can depend on packaging.
28
+ session .install ("packaging" )
29
+ cmd = [
30
+ os .path .join (session .bin , "python" ),
31
+ "tools/automation/release/check_version.py" ,
32
+ version
33
+ ]
34
+ not_ok = subprocess .run (cmd ).returncode
35
+ if not_ok :
35
36
return None
36
37
37
38
# All is good.
Original file line number Diff line number Diff line change
1
+ """Checks if the version is acceptable, as per this project's release process.
2
+ """
3
+
4
+ import sys
5
+ from datetime import datetime
6
+ from typing import Optional
7
+
8
+ from packaging .version import InvalidVersion , Version
9
+
10
+
11
+ def is_this_a_good_version_number (string : str ) -> Optional [str ]:
12
+ try :
13
+ v = Version (string )
14
+ except InvalidVersion as e :
15
+ return str (e )
16
+
17
+ if v .local :
18
+ return "Nope. PyPI refuses local release versions."
19
+
20
+ if v .dev :
21
+ return "No development releases on PyPI. What are you even thinking?"
22
+
23
+ if v .is_prerelease and v .pre [0 ] != "b" :
24
+ return "Only beta releases are allowed. No alphas."
25
+
26
+ release = v .release
27
+ expected_major = datetime .now ().year % 100
28
+
29
+ if len (release ) not in [2 , 3 ]:
30
+ return "Not of the form: {0}.N or {0}.N.P" .format (expected_major )
31
+
32
+ return None
33
+
34
+
35
+ def main () -> None :
36
+ problem = is_this_a_good_version_number (sys .argv [1 ])
37
+ if problem is not None :
38
+ print ("ERROR:" , problem )
39
+ sys .exit (1 )
40
+
41
+
42
+ if __name__ == "__main__" :
43
+ main ()
You can’t perform that action at this time.
0 commit comments