21
21
from typing import Literal , Protocol , TypeAlias
22
22
23
23
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 ]:
25
27
...
26
28
27
29
@@ -309,7 +311,7 @@ def publish(
309
311
if tag_pkg not in packages :
310
312
session .error (f"Tag { tag } references package { tag_pkg } that does not exist" )
311
313
312
- pkg_path , pkg_lang , pkg_ver = packages [tag_pkg ]
314
+ pkg_name , pkg_path , pkg_lang , pkg_ver = pkg_info = packages [tag_pkg ]
313
315
if pkg_ver != tag_ver :
314
316
session .error (
315
317
f"Tag { tag } references version { tag_ver } of package { tag_pkg } , "
@@ -318,7 +320,7 @@ def publish(
318
320
319
321
session .chdir (pkg_path )
320
322
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 )))
322
324
323
325
for pkg_path , publish in publishers :
324
326
session .log (f"Publishing { pkg_path } ..." )
@@ -353,21 +355,30 @@ def get_reactpy_script_env() -> dict[str, str]:
353
355
}
354
356
355
357
356
- def prepare_javascript_release (session : Session ) -> Callable [[bool ], None ]:
358
+ def prepare_javascript_release (
359
+ session : Session , package : PackageInfo
360
+ ) -> Callable [[bool ], None ]:
357
361
node_auth_token = session .env .get ("NODE_AUTH_TOKEN" )
358
362
if node_auth_token is None :
359
363
session .error ("NODE_AUTH_TOKEN environment variable must be set" )
360
364
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 )
364
366
365
367
def publish (dry_run : bool ) -> None :
366
368
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
+ )
368
377
return
369
378
session .run (
370
379
"npm" ,
380
+ "--workspace" ,
381
+ package .name ,
371
382
"publish" ,
372
383
"--access" ,
373
384
"public" ,
@@ -378,7 +389,9 @@ def publish(dry_run: bool) -> None:
378
389
return publish
379
390
380
391
381
- def prepare_python_release (session : Session ) -> Callable [[bool ], None ]:
392
+ def prepare_python_release (
393
+ session : Session , package : PackageInfo
394
+ ) -> Callable [[bool ], None ]:
382
395
twine_username = session .env .get ("PYPI_USERNAME" )
383
396
twine_password = session .env .get ("PYPI_PASSWORD" )
384
397
@@ -412,7 +425,9 @@ def publish(dry_run: bool):
412
425
413
426
def get_packages (session : Session ) -> dict [str , PackageInfo ]:
414
427
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
+ )
416
431
}
417
432
418
433
# collect javascript packages
@@ -441,12 +456,13 @@ def get_packages(session: Session) -> dict[str, PackageInfo]:
441
456
if pkg_name in packages :
442
457
session .error (f"Duplicate package name { pkg_name } " )
443
458
444
- packages [pkg_name ] = PackageInfo (pkg , "js" , pkg_version )
459
+ packages [pkg_name ] = PackageInfo (pkg_name , CLIENT_DIR , "js" , pkg_version )
445
460
446
461
return packages
447
462
448
463
449
464
class PackageInfo (NamedTuple ):
465
+ name : str
450
466
path : Path
451
467
language : LanguageName
452
468
version : str
0 commit comments