22const { execSync } = require ( 'child_process' ) ;
33
44const variablePrefix = 'npm_package_config_deployToGit_' ;
5- const fields = [ 'repository' , 'branch' , 'folder' , 'commit' , 'script' , 'user_name' , 'user_email' ] ;
5+ const fields = {
6+ repository : true ,
7+ branch : true ,
8+ folder : true ,
9+ commit : true ,
10+ script : true ,
11+ user_name : true ,
12+ user_email : true ,
13+ beforePushScript : false
14+ }
615const cwd = process . cwd ( ) ;
716const config = { } ;
817
9- for ( const field of fields ) {
18+ for ( const [ field , isRequired ] of Object . entries ( fields ) ) {
1019 const configVar = process . env [ `${ variablePrefix } ${ field } ` ] ;
1120
12- if ( ! configVar ) {
21+ if ( ! configVar && isRequired ) {
1322 throw Error ( `deployOnGit requires "${ field } " field in package config` ) ;
1423 }
1524
16- config [ field ] = configVar . replace ( / \$ ( [ a - z A - Z 0 - 9 _ ] + ) / g, ( match , envVarName ) => {
17- const envVar = process . env [ envVarName ] ;
25+ if ( configVar ) {
26+ config [ field ] = configVar . replace ( / \$ ( [ a - z A - Z 0 - 9 _ ] + ) / g, ( match , envVarName ) => {
27+ const envVar = process . env [ envVarName ] ;
1828
19- if ( ! envVar ) {
20- throw Error ( `Environment variable "${ envVarName } " presented at string "${ configVar } " is missing` ) ;
21- }
29+ if ( ! envVar ) {
30+ throw Error ( `Environment variable "${ envVarName } " presented at string "${ configVar } " is missing` ) ;
31+ }
2232
23- return envVar ;
24- } ) ;
33+ return envVar ;
34+ } ) ;
35+ }
2536}
2637
2738console . log ( 'Starting deploy to Git...' ) ;
@@ -45,11 +56,24 @@ execSync(`
4556 git commit --allow-empty -m "${ config . commit } " 2>&1
4657` , { cwd } ) ;
4758
59+ if ( config . beforePushScript ) {
60+ console . log ( 'Running beforePushScript...' ) ;
61+
62+ try {
63+ execSync ( `
64+ cd ${ config . folder } &&
65+ ${ config . beforePushScript }
66+ ` , { cwd } ) ;
67+ } catch ( e ) {
68+ throw Error ( 'Failed to run beforePushScript.' ) ;
69+ }
70+ }
71+
4872console . log ( 'Pushing...' ) ;
4973try {
5074 execSync ( `
5175 cd ${ config . folder } &&
52- git push ${ config . repository } ${ config . branch } 2>&1
76+ git push --tags ${ config . repository } ${ config . branch } 2>&1
5377 ` , { cwd } ) ;
5478} catch ( e ) {
5579 throw Error ( 'Failed to push.' ) ;
0 commit comments