22const { execSync } = require ( "child_process" ) ;
33const { writeFileSync, readFileSync } = require ( "fs" ) ;
44const { join } = require ( "path" ) ;
5- const { filteredLernaList, versionFromRef, shortSHA, prerelease } = require ( "./github.js" ) ;
5+ const {
6+ scopedLernaList,
7+ lernaList,
8+ versionFromRef,
9+ shortSHA,
10+ taggedRelease,
11+ } = require ( "./github.js" ) ;
612
713const wombatDressingRoomTokens = new Map ( [
814 // ['firebase-frameworks', process.env.FIREBASE_FRAMEWORKS_NPM_TOKEN],
@@ -17,21 +23,44 @@ wombatDressingRoomTokens.forEach((token, pkg) => {
1723 } ) ;
1824} ) ;
1925
20- for ( const lerna of filteredLernaList ) {
21- if ( versionFromRef && versionFromRef . split ( "-" ) [ 0 ] !== lerna . version ) {
26+ const packagesToPublish = scopedLernaList . map ( ( lerna ) => {
27+ const isTaggedRelease = lerna . name === taggedRelease ?. name ;
28+ if ( isTaggedRelease && taggedRelease . version . split ( "-" ) [ 0 ] !== lerna . version ) {
2229 throw new Error (
2330 `Cowardly refusing to publish ${ lerna . name } @${ versionFromRef } from ${ lerna . version } , version needs to be bumped in source.` ,
2431 ) ;
2532 }
26- const version = versionFromRef || `${ lerna . version } -canary.${ shortSHA } ` ;
27- const cwd = lerna . location ;
28- const tag = versionFromRef ? ( prerelease ? "next" : "latest" ) : "canary" ;
29- const packageJsonPath = join ( lerna . location , "package.json" ) ;
30- const packageJson = JSON . parse ( readFileSync ( packageJsonPath ) . toString ( ) ) ;
31- packageJson . version = version ;
32- writeFileSync ( packageJsonPath , JSON . stringify ( packageJson , undefined , 2 ) ) ;
33+ const newVersion = isTaggedRelease
34+ ? taggedRelease . version
35+ : `${ lerna . version } -canary.${ shortSHA } ` ;
3336 const registry = wombatDressingRoomTokens . get ( lerna . name )
3437 ? `https://wombat-dressing-room.appspot.com/${ lerna . name } /_ns`
3538 : "https://registry.npmjs.org" ;
36- execSync ( `npm publish --registry ${ registry } --access public --tag ${ tag } --provenance` , { cwd } ) ;
39+ const tag = isTaggedRelease ? taggedRelease . tag : "canary" ;
40+ const packageJsonPath = join ( lerna . location , "package.json" ) ;
41+ const packageJson = JSON . parse ( readFileSync ( packageJsonPath ) . toString ( ) ) ;
42+ packageJson . version = newVersion ;
43+ packageJson . publishConfig = { tag, registry, provenance : true , access : "public" } ;
44+ return packageJson ;
45+ } ) ;
46+
47+ for ( const package of packagesToPublish ) {
48+ for ( const dependencyName in package . dependencies ) {
49+ // for/in needs an if to make lint happy
50+ if ( dependencyName ) {
51+ const lernaDependency = lernaList . find ( ( it ) => it . name === dependencyName ) ;
52+ if ( lernaDependency ) {
53+ const dependencyBeingPublished = packagesToPublish . find ( ( it ) => it . name === dependencyName ) ;
54+ const dependencyVersion = dependencyBeingPublished ?. version || lernaDependency . version ;
55+ const dependencyPrerelease = dependencyVersion . includes ( "-" ) ;
56+ package . dependencies [ dependencyName ] = dependencyPrerelease
57+ ? dependencyVersion
58+ : `^${ dependencyVersion } ` ;
59+ }
60+ }
61+ }
62+ const { location } = lernaList . find ( ( it ) => it . name === package . name ) ;
63+ const packageJsonPath = join ( location , "package.json" ) ;
64+ writeFileSync ( packageJsonPath , JSON . stringify ( package , undefined , 2 ) ) ;
65+ execSync ( `npm publish` , { cwd : location } ) ;
3766}
0 commit comments