Skip to content

Commit 99fc717

Browse files
authored
Merge pull request #301 from BranchMetrics/added-changelog
feat: added changelog script
2 parents c34173d + 48efe35 commit 99fc717

File tree

12 files changed

+1629
-24
lines changed

12 files changed

+1629
-24
lines changed

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,3 +13,4 @@ out/
1313
src/cordova-ionic-phonegap-branch-deep-linking.iml
1414
npm-debug.log*
1515
*.map
16+
yarn.lock

CHANGELOG.md

Lines changed: 1368 additions & 0 deletions
Large diffs are not rendered by default.

CONTRIBUTING.md

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,13 @@
2929
- Gulp
3030

3131
```sh
32-
npm install -g gulp-cli;
32+
npm install -g gulp-cli; # linter
33+
```
34+
35+
- Yarn
36+
37+
```sh
38+
npm install -g yarn # faster npm
3339
```
3440

3541
## Setup
@@ -40,7 +46,7 @@
4046
git clone [email protected]:BranchMetrics/cordova-ionic-phonegap-branch-deep-linking.git;
4147
cd cordova-ionic-phonegap-branch-deep-linking;
4248
rm -rf node_modules;
43-
npm install --save-dev;
49+
yarn install --save-dev;
4450
```
4551

4652
## Develop

README.md

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -457,15 +457,15 @@
457457
Branch.setIdentity(userId).then(function (res) {
458458
alert('Response: ' + JSON.stringify(res))
459459
}).catch(function (err) {
460-
alert('Error: ' + JSON.stringify(err))
460+
alert('Error: ' + JSON.stringify(err.message))
461461
})
462462
```
463463

464464
```js
465465
Branch.logout().then(function (res) {
466466
alert('Response: ' + JSON.stringify(res))
467467
}).catch(function (err) {
468-
alert('Error: ' + JSON.stringify(err))
468+
alert('Error: ' + JSON.stringify(err.message))
469469
})
470470
```
471471

@@ -483,7 +483,7 @@
483483
Branch.userCompletedAction(eventName, metaData).then(function (res) {
484484
alert('Response: ' + JSON.stringify(res))
485485
}).catch(function (err) {
486-
alert('Error: ' + JSON.stringify(err))
486+
alert('Error: ' + JSON.stringify(err.message))
487487
})
488488
```
489489

@@ -492,7 +492,7 @@
492492
Branch.userCompletedAction(eventName).then(function (res) {
493493
alert('Response: ' + JSON.stringify(res))
494494
}).catch(function (err) {
495-
alert('Error: ' + JSON.stringify(err))
495+
alert('Error: ' + JSON.stringify(err.message))
496496
})
497497
```
498498

package.json

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
"name": "branch-cordova-sdk",
33
"description": "Branch Metrics Cordova SDK",
44
"main": "www/branch.js",
5-
"version": "2.5.9",
5+
"version": "2.5.10",
66
"homepage": "https://github.com/BranchMetrics/cordova-ionic-phonegap-branch-deep-linking",
77
"repository": {
88
"type": "git",
@@ -36,27 +36,28 @@
3636
}
3737
},
3838
"scripts": {
39+
"changelog": "node ./src/scripts/npm/updateChangeLog -reset=true",
3940
"commitmsg": "validate-commit-msg",
4041
"precommit": "gulp prod",
41-
"prepush": "semantic-release pre --verifyRelease='./src/scripts/npm/updateNpmVersion'",
42+
"prepush": "semantic-release pre --verifyRelease='./src/scripts/npm/updateNpmVersion' || true",
4243
"prerelease": "gulp prod",
4344
"semantic-release": "semantic-release pre && npm publish && semantic-release post"
4445
},
4546
"dependencies": {
4647
"mkpath": "^1.0.0",
4748
"node-version-compare": "^1.0.1",
48-
"plist": "^1.2.0",
49-
"xml2js": "^0.4.16"
49+
"plist": "^2.0.1",
50+
"xml2js": "^0.4.17"
5051
},
5152
"devDependencies": {
5253
"gulp": "^3.9.1",
53-
"gulp-standard": "^8.0.3",
54-
"husky": "^0.12.0",
54+
"gulp-standard": "^9.0.0",
55+
"husky": "^0.13.2",
5556
"mkpath": "^1.0.0",
5657
"node-version-compare": "^1.0.1",
57-
"plist": "^1.2.0",
58+
"plist": "^2.0.1",
5859
"semantic-release": "^6.3.6",
59-
"validate-commit-msg": "^2.8.2",
60+
"validate-commit-msg": "^2.11.2",
6061
"xml2js": "^0.4.17"
6162
}
62-
}
63+
}

plugin.template.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ SOFTWARE.
2424
<plugin xmlns="http://apache.org/cordova/ns/plugins/1.0"
2525
xmlns:android="http://schemas.android.com/apk/res/android"
2626
id="branch-cordova-sdk"
27-
version="2.5.9">
27+
version="2.5.10">
2828

2929
<!-- DO NOT EDIT THIS FILE. MAKE ALL CHANGES TO plugin.template.xml INSTEAD -->
3030

plugin.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ SOFTWARE.
2424
<plugin xmlns="http://apache.org/cordova/ns/plugins/1.0"
2525
xmlns:android="http://schemas.android.com/apk/res/android"
2626
id="branch-cordova-sdk"
27-
version="2.5.9">
27+
version="2.5.10">
2828

2929
<!-- DO NOT EDIT THIS FILE. MAKE ALL CHANGES TO plugin.template.xml INSTEAD -->
3030

src/branch.js

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -86,7 +86,7 @@ Branch.prototype.setIdentity = function (identity) {
8686
return execute('setIdentity', [String(identity)])
8787
} else {
8888
return new Promise(function (resolve, reject) {
89-
reject('Please set an identity')
89+
reject(new Error('Please set an identity'))
9090
})
9191
}
9292
}
@@ -98,7 +98,7 @@ Branch.prototype.logout = function () {
9898
Branch.prototype.userCompletedAction = function (action, metaData) {
9999
if (!action) {
100100
return new Promise(function (resolve, reject) {
101-
reject('Please set an event name')
101+
reject(new Error('Please set an event name'))
102102
})
103103
}
104104

@@ -159,7 +159,7 @@ Branch.prototype.createBranchUniversalObject = function (options) {
159159
return execute('listOnSpotlight', [obj.instanceId])
160160
} else {
161161
return new Promise(function (resolve, reject) {
162-
reject('iOS Spotlight only')
162+
reject(new Error('iOS Spotlight only'))
163163
})
164164
}
165165
}

src/scripts/ios/updatePlist.js

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
var obj = convertXmlToObject(xml)
1818

1919
obj = appendPlist(obj, preferences)
20+
obj = correctPlistBlanks(obj)
2021
xml = convertObjectToXml(obj)
2122
writePList(filePath, xml)
2223
}
@@ -87,4 +88,15 @@
8788

8889
return obj
8990
}
91+
92+
// npm list 1.2.0 -> 2.0.1 causes app crash due to malformed plist (from <string/> to <string></string>)
93+
// specifically NSMainNibFile and NSMainNibFile~ipad
94+
function correctPlistBlanks (obj) {
95+
for (var key in obj) {
96+
var val = obj[key]
97+
if (!val) obj[key] = ''
98+
}
99+
100+
return obj
101+
}
90102
})()

src/scripts/npm/updateChangeLog.js

Lines changed: 217 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,217 @@
1+
// TODO: test git push
2+
// TODO: early exit based on last changelog version
3+
// TODO: 'Authorization': 'token xxxx', for testing
4+
// TODO: add npm run changelog to pre push
5+
// TODO: uncomment functions
6+
7+
(function () {
8+
// libs
9+
'use strict'
10+
var path = require('path')
11+
// var exec = require('child_process').exec
12+
var fileHelper = require('../lib/fileHelper.js')
13+
var request = require('request')
14+
var FILE = path.join(__dirname, '../../../', 'CHANGELOG.md')
15+
16+
// properties
17+
var apiURL = 'https://api.github.com/repos/'
18+
var gitURL = 'https://github.com/'
19+
var baseURL = 'BranchMetrics/cordova-ionic-phonegap-branch-deep-linking/'
20+
var tagsURL = apiURL + baseURL + 'tags'
21+
var issuesURL = apiURL + baseURL + 'issues'
22+
var commitsURL = apiURL + baseURL + 'commits'
23+
24+
// entry
25+
module.exports = updateChangeLog()
26+
27+
function updateChangeLog () {
28+
var pageLimit = isReset() ? 50 : 2
29+
var tags = new Promise(function (resolve, reject) {
30+
readData(tagsURL, [], 1, pageLimit, function (values) {
31+
resolve(values)
32+
})
33+
})
34+
var issues = new Promise(function (resolve, reject) {
35+
readData(issuesURL, [], 1, pageLimit, function (values) {
36+
resolve(values)
37+
})
38+
})
39+
var commits = new Promise(function (resolve, reject) {
40+
readData(commitsURL, [], 1, pageLimit, function (values) {
41+
resolve(values)
42+
})
43+
})
44+
45+
Promise.all([tags, issues, commits]).then(function (values) {
46+
var markdown = generateMarkdown(values)
47+
fileHelper.writeFile(FILE, markdown)
48+
// commitChanges()
49+
})
50+
}
51+
52+
function isReset () {
53+
var args = process.argv.slice(2)
54+
for (var i = 0; i < args.length; i++) {
55+
var arg = args[i]
56+
if (arg === '-reset=true') {
57+
return true
58+
}
59+
}
60+
return false
61+
}
62+
63+
function readData (url, data, page, pageLimit, callback) {
64+
var link = url + '?page=' + page
65+
link += (url.indexOf('issues') > 0) ? '&state=closed' : ''
66+
67+
readGit(link, function (values) {
68+
data.push.apply(data, values)
69+
if (values.length === 0 || page >= pageLimit) {
70+
callback(data)
71+
} else {
72+
page += 1
73+
readData(url, data, page, pageLimit, callback)
74+
}
75+
})
76+
}
77+
78+
function readGit (url, callback) {
79+
var options = {
80+
method: 'GET',
81+
url: url,
82+
headers: {
83+
'User-Agent': 'branch-cordova-sdk',
84+
'cache-control': 'no-cache'
85+
}
86+
}
87+
request(options, function (error, response, body) {
88+
if (response.statusCode === 200) {
89+
callback(JSON.parse(body))
90+
} else {
91+
throw new Error(JSON.parse(error || body))
92+
}
93+
})
94+
}
95+
96+
function generateMarkdown (values) {
97+
// 3/2(O)n (swap)
98+
var tags = values[0].reverse()
99+
var issues = values[1].reverse()
100+
var commits = values[2].reverse()
101+
102+
var output = getHeader()
103+
104+
// (O)n (tags)
105+
var tagParagraph = ''
106+
while (tags.length > 0) {
107+
var currentTag = tags.pop()
108+
109+
tagParagraph += getTagHeader(currentTag)
110+
tagParagraph += getCommitParagraph(currentTag, commits)
111+
tagParagraph += getIssueParagraph(currentTag, issues)
112+
113+
output += tagParagraph
114+
tagParagraph = ''
115+
}
116+
117+
return output
118+
}
119+
120+
function getHeader () {
121+
return '# CHANGELOG\nQuestions? [Contact us](https://support.branch.io/support/tickets/new)\n\n'
122+
}
123+
124+
function getTagHeader (currentTag) {
125+
return '## [' + currentTag.name + '](' + gitURL + baseURL + 'releases/tag/' + currentTag.name + ') '
126+
}
127+
128+
function getCommitParagraph (currentTag, commits) {
129+
var body = '\n\n'
130+
if (commits.length === 0) {
131+
return body
132+
}
133+
134+
// (O)n (commits)
135+
var paragraph = ''
136+
var hasHeader = false
137+
while (commits.length > 0) {
138+
var current = commits.pop()
139+
140+
// (O)n (commit messages)
141+
var message = current.commit.message.replace(/(\r\n|\n|\r)/gm, '')
142+
143+
if (!hasHeader) {
144+
paragraph += '- **Completed Changes**\n'
145+
hasHeader = true
146+
}
147+
148+
paragraph += ' - ' + message + ' ([' + current.sha.substr(0, 5) + '](' + current.html_url + '))\n'
149+
150+
if (currentTag.commit.sha === current.sha) {
151+
// assign date to be used for header and issues conditional
152+
var date = current.commit.author.date
153+
currentTag.date = date
154+
155+
// complete body
156+
body = ''
157+
body += '(' + date.substr(0, 10) + ')\n\n'
158+
body += paragraph + '\n'
159+
break
160+
}
161+
}
162+
return body
163+
}
164+
165+
function getIssueParagraph (currentTag, issues) {
166+
var body = ''
167+
if (issues.length === 0) {
168+
return body
169+
}
170+
171+
// (O)n (issues)
172+
var paragraph = ''
173+
var hasHeader = false
174+
while (issues.length > 0) {
175+
var current = issues.pop()
176+
177+
if (!current.hasOwnProperty('pull_request')) {
178+
if (!hasHeader) {
179+
paragraph += '- **Closed Issues**\n'
180+
hasHeader = true
181+
}
182+
183+
paragraph += ' - ' + current.title.replace(/(\r\n|\n|\r)/gm, '') + ' ([#' + current.number + '](' + current.html_url + '))\n'
184+
}
185+
186+
if (new Date(current.closed_at).getTime() < new Date(currentTag.date).getTime() && hasHeader) {
187+
body += paragraph + '\n'
188+
break
189+
}
190+
}
191+
192+
return body
193+
}
194+
195+
// only show conventional-commit-types
196+
// function isValidCommitMessage (message) {
197+
// var commitMessages = ['feat:', 'fix:', 'docs:', 'style:', 'refactor:', 'perf:', 'test:', 'chore:', 'revert:']
198+
// for (var i = 0; i < commitMessages.length; i++) {
199+
// var commitMessage = commitMessages[i]
200+
// if (message.indexOf(commitMessage) === 0) {
201+
// return true
202+
// }
203+
// }
204+
// return false
205+
// }
206+
207+
// push file code changes to github
208+
// function commitChanges () {
209+
// var git = 'git add ' + FILE + ' && git add git commit -m "chore: updated changelog" && git push'
210+
// git = 'echo'
211+
// exec(git, function (err, stdout, stderr) {
212+
// if (err) {
213+
// throw new Error('BRANCH SDK: Failed cto ommit git changes for changelog. Docs https://goo.gl/GijGKP')
214+
// }
215+
// })
216+
// }
217+
})()

0 commit comments

Comments
 (0)