1+ const path = require ( 'path' ) ;
2+ const fs = require ( 'fs' ) ;
3+
4+ function main ( ) {
5+ const packagesToRelease = process . argv [ 2 ] . split ( " " ) ;
6+
7+ const packageJsonsToRelease = getPackageJsons ( packagesToRelease ) ;
8+
9+ const packageChangesMade = updatePackageVersionsAndDescribeChanges ( packageJsonsToRelease ) ;
10+
11+ if ( packageChangesMade . length > 0 ) {
12+ displayList ( 'THE FOLLOWING VERSION CHANGES WERE MADE:' , packageChangesMade ) ;
13+ persistPackageJsons ( packagesToRelease , packageJsonsToRelease ) ;
14+ } else {
15+ console . log ( 'NO PACKAGE.JSON CHANGES WERE MADE' ) ;
16+ }
17+ }
18+
19+ function displayList ( header , list ) {
20+ console . log ( header ) ;
21+ for ( const listItem of list ) {
22+ console . log ( `* ${ listItem } ` ) ;
23+ }
24+ console . log ( '' ) ;
25+ }
26+
27+ function getPackageJsons ( packageNames ) {
28+ return packageNames . map ( getPackageJson ) ;
29+ }
30+
31+ function getPackageJson ( packageName ) {
32+ const packageJsonPath = path . join ( 'packages' , packageName , 'package.json' ) ;
33+ return JSON . parse ( fs . readFileSync ( packageJsonPath , 'utf-8' ) ) ;
34+ }
35+
36+ function updatePackageVersionsAndDescribeChanges ( packageJsons ) {
37+ const changeDescriptionList = [ ] ;
38+ for ( const packageJson of packageJsons ) {
39+ const packageName = packageJson . name ;
40+
41+ // The version has already been validated as ending in `-SNAPSHOT`, so just rip that many characters off the end.
42+ const oldVersion = packageJson . version ;
43+ const newVersion = oldVersion . slice ( 0 , oldVersion . length - `-SNAPSHOT` . length ) ;
44+ packageJson . version = newVersion ;
45+
46+ changeDescriptionList . push ( `${ packageName } from ${ oldVersion } to ${ newVersion } ` ) ;
47+ }
48+ return changeDescriptionList ;
49+ }
50+
51+ function persistPackageJsons ( packageNames , packageJsons ) {
52+ packageNames . forEach ( ( packageName , idx ) => {
53+ const packageJson = packageJsons [ idx ] ;
54+ persistPackageJson ( packageName , packageJson ) ;
55+ } ) ;
56+ }
57+
58+ function persistPackageJson ( packageName , packageJson ) {
59+ const packageJsonPath = path . join ( 'packages' , packageName , 'package.json' ) ;
60+ fs . writeFileSync ( packageJsonPath , JSON . stringify ( packageJson , null , 2 ) ) ;
61+ }
62+
63+ main ( ) ;
0 commit comments