2121 from typing import Literal , Protocol , TypeAlias
2222
2323 class ReleasePrepFunc (Protocol ):
24- def __call__ (self , session : Session ) -> Callable [[bool ], None ]:
24+ def __call__ (
25+ self , session : Session , package : PackageInfo
26+ ) -> Callable [[bool ], None ]:
2527 ...
2628
2729
@@ -309,7 +311,7 @@ def publish(
309311 if tag_pkg not in packages :
310312 session .error (f"Tag { tag } references package { tag_pkg } that does not exist" )
311313
312- pkg_path , pkg_lang , pkg_ver = packages [tag_pkg ]
314+ pkg_name , pkg_path , pkg_lang , pkg_ver = pkg_info = packages [tag_pkg ]
313315 if pkg_ver != tag_ver :
314316 session .error (
315317 f"Tag { tag } references version { tag_ver } of package { tag_pkg } , "
@@ -318,7 +320,7 @@ def publish(
318320
319321 session .chdir (pkg_path )
320322 session .log (f"Preparing { tag_pkg } for release..." )
321- publishers .append ((pkg_path , release_prep [pkg_lang ](session )))
323+ publishers .append ((pkg_path , release_prep [pkg_lang ](session , pkg_info )))
322324
323325 for pkg_path , publish in publishers :
324326 session .log (f"Publishing { pkg_path } ..." )
@@ -353,21 +355,30 @@ def get_reactpy_script_env() -> dict[str, str]:
353355 }
354356
355357
356- def prepare_javascript_release (session : Session ) -> Callable [[bool ], None ]:
358+ def prepare_javascript_release (
359+ session : Session , package : PackageInfo
360+ ) -> Callable [[bool ], None ]:
357361 node_auth_token = session .env .get ("NODE_AUTH_TOKEN" )
358362 if node_auth_token is None :
359363 session .error ("NODE_AUTH_TOKEN environment variable must be set" )
360364
361- # TODO: Make this `ci` instead of `install` somehow. By default `npm install` at
362- # workspace root does not generate a lockfile which is required by `npm ci`.
363- session .run ("npm" , "install" , external = True )
365+ session .run ("npm" , "ci" , external = True )
364366
365367 def publish (dry_run : bool ) -> None :
366368 if dry_run :
367- session .run ("npm" , "pack" , "--dry-run" , external = True )
369+ session .run (
370+ "npm" ,
371+ "--workspace" ,
372+ package .name ,
373+ "pack" ,
374+ "--dry-run" ,
375+ external = True ,
376+ )
368377 return
369378 session .run (
370379 "npm" ,
380+ "--workspace" ,
381+ package .name ,
371382 "publish" ,
372383 "--access" ,
373384 "public" ,
@@ -378,7 +389,9 @@ def publish(dry_run: bool) -> None:
378389 return publish
379390
380391
381- def prepare_python_release (session : Session ) -> Callable [[bool ], None ]:
392+ def prepare_python_release (
393+ session : Session , package : PackageInfo
394+ ) -> Callable [[bool ], None ]:
382395 twine_username = session .env .get ("PYPI_USERNAME" )
383396 twine_password = session .env .get ("PYPI_PASSWORD" )
384397
@@ -412,7 +425,9 @@ def publish(dry_run: bool):
412425
413426def get_packages (session : Session ) -> dict [str , PackageInfo ]:
414427 packages : dict [str , PackageInfo ] = {
415- "reactpy" : PackageInfo (ROOT_DIR , "py" , get_reactpy_package_version (session ))
428+ "reactpy" : PackageInfo (
429+ "reactpy" , ROOT_DIR , "py" , get_reactpy_package_version (session )
430+ )
416431 }
417432
418433 # collect javascript packages
@@ -441,12 +456,13 @@ def get_packages(session: Session) -> dict[str, PackageInfo]:
441456 if pkg_name in packages :
442457 session .error (f"Duplicate package name { pkg_name } " )
443458
444- packages [pkg_name ] = PackageInfo (pkg , "js" , pkg_version )
459+ packages [pkg_name ] = PackageInfo (pkg_name , CLIENT_DIR , "js" , pkg_version )
445460
446461 return packages
447462
448463
449464class PackageInfo (NamedTuple ):
465+ name : str
450466 path : Path
451467 language : LanguageName
452468 version : str
0 commit comments