diff --git a/.all-contributorsrc b/.all-contributorsrc
index 4b4e4a60..57029ebd 100644
--- a/.all-contributorsrc
+++ b/.all-contributorsrc
@@ -187,6 +187,15 @@
"contributions": [
"code"
]
+ },
+ {
+ "login": "viatrix",
+ "name": "Tanya Bushenyova",
+ "avatar_url": "https://avatars.githubusercontent.com/u/16937734?v=4",
+ "profile": "https://github.com/viatrix",
+ "contributions": [
+ "code"
+ ]
}
],
"contributorsPerLine": 7,
diff --git a/.travis.yml b/.travis.yml
index d8a55715..ab328b7b 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -2,8 +2,9 @@ language:
- node_js
node_js:
- - "8"
- "10"
+ - "12"
+ - "14"
before_install:
- npm install -g gulp-cli
diff --git a/README.md b/README.md
index 80d73972..5965d7bb 100644
--- a/README.md
+++ b/README.md
@@ -9,7 +9,7 @@
[](https://www.npmjs.com/package/github-release-notes)
[](https://github-tools.github.io/github-release-notes/)
-[](#contributors-)
+[](#contributors-)
## OK, what can `gren` do for me?
@@ -226,35 +226,37 @@ Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/d
-
+
+
This project follows the [all-contributors](https://github.com/all-contributors/all-contributors) specification. Contributions of any kind welcome!
diff --git a/lib/gren-changelog.js b/lib/gren-changelog.js
index 04717e67..30606d2c 100644
--- a/lib/gren-changelog.js
+++ b/lib/gren-changelog.js
@@ -32,4 +32,5 @@ changelogCommand.init()
})
.catch(error => {
console.error(error);
+ process.exit(1);
});
diff --git a/lib/src/Gren.js b/lib/src/Gren.js
index 67d3cafe..7833b677 100644
--- a/lib/src/Gren.js
+++ b/lib/src/Gren.js
@@ -536,7 +536,7 @@ class Gren {
const labels = Array.from(issue.labels);
if (!labels.length && this.options.template.noLabel) {
- labels.push({name: this.options.template.noLabel});
+ labels.push({ name: this.options.template.noLabel });
}
return labels
@@ -606,13 +606,16 @@ class Gren {
* @return {string}
*/
_templateGroups(groups) {
+ const { groupPostProcessor } = this.options;
+
return Object.entries(groups).map(([key, value]) => {
const heading = generate({
heading: key
}, this.options.template.group);
const body = value.join('\n');
+ const content = heading + '\n' + body;
- return heading + '\n' + body;
+ return groupPostProcessor ? groupPostProcessor(content) : content;
});
}
@@ -804,7 +807,7 @@ class Gren {
return;
}
- issue.labels.push({name: this.options.template.noLabel});
+ issue.labels.push({ name: this.options.template.noLabel });
}
const labelName = issue.labels[0].name;
@@ -849,7 +852,7 @@ class Gren {
const groups = Object.keys(groupBy).reduce((carry, group, i, arr) => {
const groupIssues = issues.filter(issue => {
if (!issue.labels.length && this.options.template.noLabel) {
- issue.labels.push({name: this.options.template.noLabel});
+ issue.labels.push({ name: this.options.template.noLabel });
}
return issue.labels.some(label => {
@@ -1093,7 +1096,7 @@ class Gren {
});
}
- for (let i = 0; i < sortedReleaseDates.length - 1; i++) {
+ for (let i = 0; i < sortedReleaseDates.length - RANGE + 1; i++) {
const until = sortedReleaseDates[i + 1].date;
ranges.push([
sortedReleaseDates[i],
diff --git a/package-lock.json b/package-lock.json
index a9fbf784..4b826714 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -1,6 +1,6 @@
{
"name": "github-release-notes",
- "version": "0.17.1",
+ "version": "0.17.3",
"lockfileVersion": 1,
"requires": true,
"dependencies": {
@@ -2140,14 +2140,6 @@
"integrity": "sha512-LQdY3j4PxuUl6xfxiFruTSlCniTrTrzAd8/HfsLEMi0PUpaQ0Iy+Pr4N4VllDYjs0Hyu2lkTbvzqlG+PX9NsNw==",
"dev": true
},
- "encoding": {
- "version": "0.1.12",
- "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.12.tgz",
- "integrity": "sha1-U4tm8+5izRq1HsMjgp0flIDHS+s=",
- "requires": {
- "iconv-lite": "~0.4.13"
- }
- },
"end-of-stream": {
"version": "1.4.1",
"resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.1.tgz",
@@ -5173,7 +5165,8 @@
"is-stream": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz",
- "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ="
+ "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=",
+ "dev": true
},
"is-unc-path": {
"version": "1.0.0",
@@ -5494,9 +5487,9 @@
}
},
"lodash": {
- "version": "4.17.15",
- "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz",
- "integrity": "sha1-tEf2ZwoEVbv+7dETku/zMOoJdUg="
+ "version": "4.17.19",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.19.tgz",
+ "integrity": "sha512-JNvd8XER9GQX0v2qJgsaN/mzFCNA5BRe/j8JN9d+tWyGLSodKQHKFicdwNYzWwI3wjRnaKPsGj1XkBjx/F96DQ=="
},
"lodash._basecopy": {
"version": "3.0.1",
@@ -6251,13 +6244,9 @@
"dev": true
},
"node-fetch": {
- "version": "1.7.3",
- "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-1.7.3.tgz",
- "integrity": "sha1-mA9vcthSEaU0fGsrwYxbhMPrR+8=",
- "requires": {
- "encoding": "^0.1.11",
- "is-stream": "^1.0.1"
- }
+ "version": "2.6.1",
+ "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.1.tgz",
+ "integrity": "sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw=="
},
"nopt": {
"version": "4.0.1",
diff --git a/package.json b/package.json
index e5bcce34..8b2956c2 100644
--- a/package.json
+++ b/package.json
@@ -57,7 +57,7 @@
"js-beautify": "^1.7.4",
"json2yaml": "^1.1.0",
"minimist": "^1.2.0",
- "node-fetch": "^1.7.3",
+ "node-fetch": "^2.6.1",
"npm": "^6.13.4",
"object-assign-deep": "^0.3.1",
"ora": "^1.3.0",
diff --git a/test/Gren.spec.js b/test/Gren.spec.js
index b268b412..18da7585 100644
--- a/test/Gren.spec.js
+++ b/test/Gren.spec.js
@@ -211,6 +211,22 @@ describe('Gren', () => {
};
assert.deepEqual(gren._groupBy(normal), [`All\n${normal[0].title}`], 'The issue does not match any labels, and goes in the ... group');
});
+
+ it('Should format group using post formatter', () => {
+ const { normal, noLabel } = issues;
+
+ gren.options.groupBy = {
+ 'Test:': ['enhancement'],
+ 'Others:': ['closed']
+ };
+
+ gren.options.groupPostProcessor = (groupContent) => {
+ return groupContent.replace(0, groupContent.indexOf(':\n') + 3);
+ }
+
+ assert.deepEqual(gren._groupBy(normal), [`Test:`], 'Passing one heading for one issue');
+ assert.deepEqual(gren._groupBy(noLabel), [`Others:`], 'Group option is "label" with no labels');
+ });
});
describe('_filterIssue', () => {
@@ -544,9 +560,10 @@ describe('Gren', () => {
const receivedObject = gren._transformTagsIntoReleaseObjects([tag]);
- assert.equals(tag.date, receivedObject.date);
- assert.equals(tag.releaseId, receivedObject.id);
- assert.equals(tag.name, receivedObject.name);
+ assert.equal(1, receivedObject.length)
+ assert.equal(tag.date, receivedObject[0].date);
+ assert.equal(tag.releaseId, receivedObject[0].id);
+ assert.equal(tag.tag.name, receivedObject[0].name);
});
});
@@ -609,11 +626,11 @@ describe('Gren', () => {
describe('with tags=all', () => {
describe('with ignoreTagsWith', () => {
it('should ignore the specific tag', done => {
- gren.options.ignoreTagsWith = ['11'];
+ gren.options.ignoreTagsWith = ['16'];
gren.options.tags = ['all'];
gren._getLastTags()
.then(tags => {
- assert.notInclude(tags.map(({ name }) => name), '0.11.0', 'The ignored tag is not present');
+ assert.notInclude(tags.map(({ name }) => name), '0.16.0', 'The ignored tag is not present');
done();
})
.catch(err => done(err));
@@ -624,7 +641,8 @@ describe('Gren', () => {
describe('_getReleaseBlocks', () => {
it('more than one tag', done => {
- gren.options.tags = ['0.12.0', '0.11.0'];
+ gren.options.tags = ['0.17.2', '0.17.1'];
+ gren.options.dataSource = "commits";
gren._getReleaseBlocks()
.then(releaseBlocks => {
assert.isArray(releaseBlocks, 'The releaseBlocks is an Array');
@@ -637,7 +655,8 @@ describe('Gren', () => {
}).timeout(10000);
it('just one tag', done => {
- gren.options.tags = ['0.11.0'];
+ gren.options.tags = ['0.17.2'];
+ gren.options.dataSource = "commits";
gren._getReleaseBlocks()
.then(releaseBlocks => {
assert.isArray(releaseBlocks, 'The releaseBlocks is an Array');