@@ -143,7 +143,53 @@ def _version_control(
143143 if not has_release_version and has_release_type :
144144 return _type_release (release_type = args .type , old_version = old_version )
145145
146- session .error ("error in _version_control" )
146+ session .error ("version not allowed with type" )
147+
148+
149+ class ReleaseError (Exception ):
150+ """Error during trigger release"""
151+
152+
153+ def _trigger_release () -> Version :
154+ def run (* args : str ):
155+ try :
156+ return subprocess .run (
157+ args , capture_output = True , text = True , check = True
158+ ).stdout
159+ except subprocess .CalledProcessError as ex :
160+ raise ReleaseError (f"failed to execute command { args } " ) from ex
161+
162+ branches = run ("git" , "remote" , "show" , "origin" )
163+ if not (default_branch := re .search (r"HEAD branch: (\S+)" , branches )):
164+ raise ReleaseError ("default branch could not be found" )
165+ default_branch = default_branch .group (1 )
166+
167+ run ("git" , "checkout" , default_branch )
168+ run ("git" , "pull" )
169+
170+ release_version = Version .from_poetry ()
171+ print (f"release version: { release_version } " )
172+
173+ if re .search (rf"{ release_version } " , run ("git" , "tag" , "--list" )):
174+ raise ReleaseError (f"tag { release_version } already exists" )
175+ if re .search (rf"{ release_version } " , run ("gh" , "release" , "list" )):
176+ raise ReleaseError (f"release { release_version } already exists" )
177+
178+ run ("git" , "tag" , str (release_version ))
179+ run ("git" , "push" , "origin" , str (release_version ))
180+ return release_version
181+
182+
183+ def _trigger_release_test ():
184+ def run (* args : str ):
185+ return subprocess .run (args , capture_output = True , text = True , check = True ).stdout
186+
187+ v = Version .from_poetry ()
188+ run ("echo" , "test 1" )
189+ run ("echo" , "test 2" )
190+ run ("echo" , "test 3" )
191+ run ("echo" , "test 4" )
192+ run ("echo" , "test 5" )
147193
148194
149195@nox .session (name = "release:prepare" , python = False )
@@ -155,6 +201,7 @@ def prepare_release(session: Session, python=False) -> None:
155201 args = parser .parse_args (session .posargs )
156202
157203 new_version = _version_control (session , args )
204+ print (f"release version: { new_version } " )
158205
159206 if not args .no_branch and not args .no_add :
160207 session .run ("git" , "switch" , "-c" , f"release/prepare-{ new_version } " )
@@ -199,42 +246,5 @@ def prepare_release(session: Session, python=False) -> None:
199246
200247
201248@nox .session (name = "release:trigger" , python = False )
202- def release (session : Session ) -> None :
203-
204- parser = argparse .ArgumentParser (
205- prog = "nox -s release:experimental" ,
206- usage = "nox -s release:experimental -- [-h] [-v | --version VERSION] [-t | --type {major,minor,patch}]" ,
207- formatter_class = argparse .ArgumentDefaultsHelpFormatter ,
208- )
209- group = parser .add_mutually_exclusive_group (required = True )
210- group .add_argument (
211- "-v" ,
212- "--version" ,
213- type = cli .version ,
214- help = "A version string of the following format:" '"NUMBER.NUMBER.NUMBER"' ,
215- default = argparse .SUPPRESS ,
216- )
217- group .add_argument (
218- "-t" ,
219- "--type" ,
220- type = ReleaseTypes ,
221- help = "specifies which type of upgrade is to be performed" ,
222- choices = list (ReleaseTypes ),
223- default = argparse .SUPPRESS ,
224- )
225-
226- args = parser .parse_args (session .posargs )
227-
228- new_version = _version_control (session , args )
229- print (str (new_version ))
230-
231- result = subprocess .run (["git" , "remote" , "show" , "origin" ], capture_output = True )
232- match = re .search (r"HEAD branch: (\S+)" , result .stdout .decode ("utf-8" ))
233- if not match :
234- session .error ("Default branch could not be found" )
235- default_branch = match .group (1 ) if match else None
236- subprocess .run (["git" , "checkout" , default_branch ])
237- subprocess .run (["git" , "pull" ])
238- subprocess .run (["git" , "tag" , str (new_version )])
239- subprocess .run (["git" , "push" , "origin" , str (new_version )])
240- pass
249+ def trigger_release (session : Session ) -> None :
250+ print (_trigger_release ())
0 commit comments