@@ -37,15 +37,14 @@ var argv = require('yargs')
37
37
. wrap ( 97 )
38
38
. argv
39
39
40
- var addStream = require ( 'add-stream' )
41
40
var chalk = require ( 'chalk' )
41
+ var figures = require ( 'figures' )
42
42
var exec = require ( 'child_process' ) . exec
43
43
var fs = require ( 'fs' )
44
+ var accessSync = require ( 'fs-access' ) . sync
44
45
var pkgPath = path . resolve ( process . cwd ( ) , './package.json' )
45
46
var pkg = require ( pkgPath )
46
47
var semver = require ( 'semver' )
47
- var tempfile = require ( 'tempfile' )
48
- var rimraf = require ( 'rimraf' )
49
48
var util = require ( 'util' )
50
49
51
50
conventionalRecommendedBump ( {
@@ -59,12 +58,11 @@ conventionalRecommendedBump({
59
58
var newVersion = pkg . version
60
59
if ( ! argv . firstRelease ) {
61
60
newVersion = semver . inc ( pkg . version , release . releaseAs )
62
-
63
- console . log ( chalk . bold ( '1.' ) + ' bump version ' + chalk . bold ( release . releaseAs ) + ' in package.json (' + pkg . version + ' → ' + chalk . green ( newVersion ) + ')' )
61
+ checkpoint ( 'bumping version in package.json from %s to %s' , [ pkg . version , newVersion ] )
64
62
pkg . version = newVersion
65
63
fs . writeFileSync ( pkgPath , JSON . stringify ( pkg , null , 2 ) , 'utf-8' )
66
64
} else {
67
- console . log ( chalk . yellow ( ' skip package.json update on first release') )
65
+ console . log ( chalk . red ( figures . cross ) + ' skip version bump on first release')
68
66
}
69
67
70
68
outputChangelog ( argv , function ( ) {
@@ -75,43 +73,45 @@ conventionalRecommendedBump({
75
73
} )
76
74
77
75
function outputChangelog ( argv , cb ) {
78
- console . log ( chalk . bold ( '2.' ) + ' update changelog (' + chalk . bold ( argv . infile ) + ')' )
79
-
80
76
createIfMissing ( argv )
81
-
82
- var readStream = fs . createReadStream ( argv . infile )
83
- . on ( 'error' , function ( err ) {
84
- console . warn ( chalk . yellow ( err . message ) )
85
- } )
86
-
77
+ var header = '# Change Log\n\nAll notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines.\n'
78
+ var oldContent = fs . readFileSync ( argv . infile , 'utf-8' )
79
+ // find the position of the last release and remove header:
80
+ if ( oldContent . indexOf ( '<a name=' ) !== - 1 ) {
81
+ oldContent = oldContent . substring ( oldContent . indexOf ( '<a name=' ) )
82
+ }
83
+ var content = ''
87
84
var changelogStream = conventionalChangelog ( {
88
85
preset : argv . preset ,
89
86
outputUnreleased : true ,
90
87
pkg : {
91
88
path : path . resolve ( process . cwd ( ) , './package.json' )
92
89
}
93
90
} )
94
- . on ( 'error' , function ( err ) {
95
- console . error ( chalk . red ( err . message ) )
96
- process . exit ( 1 )
97
- } )
98
- var tmp = tempfile ( )
91
+ . on ( 'error' , function ( err ) {
92
+ console . error ( chalk . red ( err . message ) )
93
+ process . exit ( 1 )
94
+ } )
99
95
100
- changelogStream
101
- . pipe ( addStream ( readStream ) )
102
- . pipe ( fs . createWriteStream ( tmp ) )
103
- . on ( 'finish' , function ( ) {
104
- fs . createReadStream ( tmp )
105
- . pipe ( fs . createWriteStream ( argv . infile ) )
106
- . on ( 'finish' , function ( ) {
107
- rimraf . sync ( tmp )
108
- return cb ( )
109
- } )
110
- } )
96
+ changelogStream . on ( 'data' , function ( buffer ) {
97
+ content += buffer . toString ( )
98
+ } )
99
+
100
+ changelogStream . on ( 'end' , function ( ) {
101
+ checkpoint ( 'outputting changes to %s' , [ argv . infile ] )
102
+ fs . writeFileSync ( argv . infile , header + '\n' + content + oldContent , 'utf-8' )
103
+ return cb ( )
104
+ } )
111
105
}
112
106
113
107
function commit ( argv , newVersion , cb ) {
114
- console . log ( chalk . bold ( '3.' ) + ' commit ' + chalk . bold ( 'package.json' ) + ' and ' + chalk . bold ( argv . infile ) )
108
+ var msg = 'committing %s'
109
+ var args = [ argv . infile ]
110
+ if ( ! argv . firstRelease ) {
111
+ msg += ' and %s'
112
+ args . unshift ( 'package.json' )
113
+ }
114
+ checkpoint ( msg , args )
115
115
exec ( 'git add package.json ' + argv . infile + ';git commit package.json ' + argv . infile + ' -m "' + formatCommitMessage ( argv . message , newVersion ) + '"' , function ( err , stdout , stderr ) {
116
116
var errMessage = null
117
117
if ( err ) errMessage = err . message
@@ -129,7 +129,7 @@ function formatCommitMessage (msg, newVersion) {
129
129
}
130
130
131
131
function tag ( newVersion , argv ) {
132
- console . log ( chalk . bold ( '4.' ) + ' tag release (' + chalk . green ( newVersion ) + ')' )
132
+ checkpoint ( 'tagging release %s' , [ newVersion ] )
133
133
exec ( 'git tag -a v' + newVersion + ' -m "' + argv . message + '"' , function ( err , stdout , stderr ) {
134
134
var errMessage = null
135
135
if ( err ) errMessage = err . message
@@ -143,12 +143,18 @@ function tag (newVersion, argv) {
143
143
144
144
function createIfMissing ( argv ) {
145
145
try {
146
- fs . accessSync ( argv . infile , fs . F_OK )
146
+ accessSync ( argv . infile , fs . F_OK )
147
147
} catch ( err ) {
148
148
if ( err . code === 'ENOENT' ) {
149
- console . log ( chalk . green ( 'creating ' ) + argv . infile )
149
+ checkpoint ( 'created %s' , [ argv . infile ] )
150
150
argv . outputUnreleased = true
151
- fs . writeFileSync ( argv . infile , '' , 'utf-8' )
151
+ fs . writeFileSync ( argv . infile , '\n ' , 'utf-8' )
152
152
}
153
153
}
154
154
}
155
+
156
+ function checkpoint ( msg , args ) {
157
+ console . info ( chalk . green ( figures . tick ) + ' ' + util . format . apply ( util , [ msg ] . concat ( args . map ( function ( arg ) {
158
+ return chalk . bold ( arg )
159
+ } ) ) ) )
160
+ } ;
0 commit comments