@@ -18,14 +18,25 @@ if (isDryRun) {
1818 console . log ( 'Publish dry run' ) ;
1919}
2020
21+ const allAddons = process . argv . includes ( '--all-addons' ) ;
22+ if ( allAddons ) {
23+ console . log ( 'Publish all addons' ) ;
24+ }
25+
26+ const repoCommit = getRepoCommit ( ) ;
2127const changedFiles = getChangedFilesInCommit ( 'HEAD' ) ;
2228
23- // Publish xterm if any files were changed outside of the addons directory
24- let isStableRelease = false ;
25- if ( changedFiles . some ( e => e . search ( / ^ a d d o n s \/ / ) === - 1 ) ) {
26- isStableRelease = checkAndPublishPackage ( path . resolve ( __dirname , '..' ) ) ;
27- checkAndPublishPackage ( path . resolve ( __dirname , '../headless' ) ) ;
28- }
29+ // Always publish xterm, technically this isn't needed if
30+ // `changedFiles.some(e => e.search(/^addons\//)`, but it's here for convenience to get the right
31+ // peer dependencies for addons.
32+ const result = checkAndPublishPackage ( path . resolve ( __dirname , '..' ) , repoCommit ) ;
33+ const isStableRelease = result . isStableRelease ;
34+ const peerDependencies = {
35+ '@xterm/xterm' : `^${ result . nextVersion } ` ,
36+ } ;
37+ checkAndPublishPackage ( path . resolve ( __dirname , '../headless' ) , repoCommit ) ;
38+
39+ // Addon peer dependencies
2940
3041// Publish addons if any files were changed inside of the addon
3142const addonPackageDirs = [
@@ -44,9 +55,9 @@ const addonPackageDirs = [
4455console . log ( `Checking if addons need to be published` ) ;
4556for ( const p of addonPackageDirs ) {
4657 const addon = path . basename ( p ) ;
47- if ( changedFiles . some ( e => e . includes ( addon ) ) ) {
58+ if ( allAddons || changedFiles . some ( e => e . includes ( addon ) ) ) {
4859 console . log ( `Try publish ${ addon } ` ) ;
49- checkAndPublishPackage ( p ) ;
60+ checkAndPublishPackage ( p , repoCommit , peerDependencies ) ;
5061 }
5162}
5263
@@ -55,7 +66,7 @@ if (isStableRelease) {
5566 updateWebsite ( ) ;
5667}
5768
58- function checkAndPublishPackage ( packageDir ) {
69+ function checkAndPublishPackage ( packageDir , repoCommit , peerDependencies ) {
5970 const packageJson = require ( path . join ( packageDir , 'package.json' ) ) ;
6071
6172 // Determine if this is a stable or beta release
@@ -69,7 +80,24 @@ function checkAndPublishPackage(packageDir) {
6980 // Set the version in package.json
7081 const packageJsonFile = path . join ( packageDir , 'package.json' ) ;
7182 packageJson . version = nextVersion ;
72- console . log ( `Set version of ${ packageJsonFile } to ${ nextVersion } ` ) ;
83+
84+ // Set the commit in package.json
85+ if ( repoCommit ) {
86+ packageJson . commit = repoCommit ;
87+ console . log ( `Set commit of ${ packageJsonFile } to ${ repoCommit } ` ) ;
88+ } else {
89+ throw new Error ( `No commit set` ) ;
90+ }
91+
92+ // Set peer dependencies
93+ if ( peerDependencies ) {
94+ packageJson . peerDependencies = peerDependencies ;
95+ console . log ( `Set peerDependencies of ${ packageJsonFile } to ${ JSON . stringify ( peerDependencies ) } ` ) ;
96+ } else {
97+ console . log ( `Skipping peerDependencies` ) ;
98+ }
99+
100+ // Write new package.json
73101 fs . writeFileSync ( packageJsonFile , JSON . stringify ( packageJson , null , 2 ) ) ;
74102
75103 // Publish
@@ -92,7 +120,17 @@ function checkAndPublishPackage(packageDir) {
92120
93121 console . groupEnd ( ) ;
94122
95- return isStableRelease ;
123+ return { isStableRelease, nextVersion } ;
124+ }
125+
126+ function getRepoCommit ( ) {
127+ const commitProcess = cp . spawnSync ( 'git' , [ 'log' , '-1' , '--format="%H"' ] ) ;
128+ if ( commitProcess . stdout . length === 0 && commitProcess . stderr ) {
129+ const err = versionsProcess . stderr . toString ( ) ;
130+ throw new Error ( 'Could not get repo commit\n' + err ) ;
131+ }
132+ const output = commitProcess . stdout . toString ( ) . trim ( ) ;
133+ return output . replace ( / ^ " / , '' ) . replace ( / " $ / , '' ) ;
96134}
97135
98136function getNextBetaVersion ( packageJson ) {
0 commit comments