From bc331458b77eec739493b5dc8a190a36ff9c9ea9 Mon Sep 17 00:00:00 2001 From: Chris Barth Date: Wed, 16 Apr 2025 18:58:29 -0500 Subject: [PATCH 1/2] Sort commits by parent, then date --- CHANGELOG.md | 13 ++++++------ lib/src/Gren.js | 55 +++++++++++++++++++++++++++++++++++++++++++++---- 2 files changed, 58 insertions(+), 10 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 802a6f13..1c6b8a37 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,7 @@ ## v4.2.0 (2023-09-05) +- [Release 4.2.0](https://github.com/cjbarth/github-release-notes/commit/fa9e966b56872cee12980922be4e0ed94ae0eabb) - @cjbarth - [Format using prettier (#9)](https://github.com/cjbarth/github-release-notes/commit/b8fd1b6a01ef30ba0f2458a86ebd56991a911e44) - @cjbarth - [Update README (#8)](https://github.com/cjbarth/github-release-notes/commit/bb476de6b36057ef694b55002e3877b88f93b0ab) - @cjbarth - [Use application version number for head of changelog (#7)](https://github.com/cjbarth/github-release-notes/commit/aaae7e0b07fa2078dec4096074a061aaf40a0439) - @cjbarth @@ -11,11 +12,11 @@ ## v4.1.0 (2023-07-14) +- [Release 4.1.0](https://github.com/cjbarth/github-release-notes/commit/c09f024a189c2a3494c21a85cce9f04e4b986995) - @cjbarth - [Add basic workflow for PR testing before merge (#5)](https://github.com/cjbarth/github-release-notes/commit/346d5ff6d90bbcde5d3a6264e63d250168daeebb) - @cjbarth - [Adjust tests to account for default branch (#4)](https://github.com/cjbarth/github-release-notes/commit/fdc118304f58692165a95b31de8fed299479f3ae) - @cjbarth - [Use current branch as default branch (#3)](https://github.com/cjbarth/github-release-notes/commit/16b30918eec4a2e73e4164880904034f9a457d50) - @cjbarth - [Move eslint `env` config to .eslintrc (#2)](https://github.com/cjbarth/github-release-notes/commit/0693fee0d7219bcf488a1adc5c97656aabdec298) - @cjbarth -- [Release 4.1.0](https://github.com/cjbarth/github-release-notes/commit/c09f024a189c2a3494c21a85cce9f04e4b986995) - @cjbarth --- @@ -24,10 +25,10 @@ - [Release 4.0.0](https://github.com/cjbarth/github-release-notes/commit/934e728b5e87e941a5f5f2bcef457e47e423f41b) - @cjbarth - [Build changelog as part of release process](https://github.com/cjbarth/github-release-notes/commit/3e87029e162fdaa1a7e542e906152e4da5ac0d7b) - @cjbarth - [Update to release-it@15](https://github.com/cjbarth/github-release-notes/commit/cb70224198557df28fb122766131bf84608dcfdc) - @cjbarth -- [Update changelog to follow new standards](https://github.com/cjbarth/github-release-notes/commit/2f27d03e4441ce4243bcc956d95b8cf339a42f5c) - @cjbarth - [Update all semver-minor dependencies](https://github.com/cjbarth/github-release-notes/commit/a372f19c67bfec2993c3740f9e386771852ced73) - @cjbarth -- [Update can-i-use data](https://github.com/cjbarth/github-release-notes/commit/5edb4b770b49135beaeb8e08ae9a7bd75ac434ca) - @cjbarth +- [Update changelog to follow new standards](https://github.com/cjbarth/github-release-notes/commit/2f27d03e4441ce4243bcc956d95b8cf339a42f5c) - @cjbarth - [Make default template more compatible with markdown lint](https://github.com/cjbarth/github-release-notes/commit/f83261ad19b570ec28a2fff4d8d0db1ddfc97e94) - @cjbarth +- [Update can-i-use data](https://github.com/cjbarth/github-release-notes/commit/5edb4b770b49135beaeb8e08ae9a7bd75ac434ca) - @cjbarth - [Make default date format ISO](https://github.com/cjbarth/github-release-notes/commit/2d5cd34fddf102dfe3a32545c9cb6dc49e3e8b75) - @cjbarth --- @@ -94,11 +95,11 @@ - [Update package.json](https://github.com/cjbarth/github-release-notes/commit/f2fea79abb3300381744faed0d11ef539ddf676c) - @cjbarth - [Add release-it](https://github.com/cjbarth/github-release-notes/commit/5f4b37dcf1c3bb7a02f5a69b29f989cae803757c) - @cjbarth - [Fix tests](https://github.com/cjbarth/github-release-notes/commit/ecceb7ca1d1e80a5ba88b4fbf9863dd673b05bde) - @cjbarth -- [Fix tests](https://github.com/cjbarth/github-release-notes/commit/718b9aea68980bcdb49a3436414de58ae9832230) - @cjbarth -- [Correctly compare dates for PR retrieval; fix tests](https://github.com/cjbarth/github-release-notes/commit/0b306da3c19adeef4781a3042488f9b53462fe3a) - @cjbarth - [Track PRs, commits by branch, not date](https://github.com/cjbarth/github-release-notes/commit/acef232efa2f0e66bf5bdd8f28310584fc3b1e7f) - @cjbarth +- [Fix tests](https://github.com/cjbarth/github-release-notes/commit/718b9aea68980bcdb49a3436414de58ae9832230) - @cjbarth - [Use commit date as tag date](https://github.com/cjbarth/github-release-notes/commit/ed9fc746a3e7256c8cadb02571e606d0645cb7d9) - @cjbarth - [Correctly compare dates for PR retrieval](https://github.com/cjbarth/github-release-notes/commit/e53f9e7f6aff4b32dc3f7e6ccdca1f9d767eaf1a) - @cjbarth +- [Correctly compare dates for PR retrieval; fix tests](https://github.com/cjbarth/github-release-notes/commit/0b306da3c19adeef4781a3042488f9b53462fe3a) - @cjbarth - [Update supported NodeJS versions to current (#291)](https://github.com/cjbarth/github-release-notes/commit/ff0ddae3938db3cfcca5ef317d74eee034c32cc5) - @cjbarth - [docs: add viatrix as a contributor (#297)](https://github.com/cjbarth/github-release-notes/commit/8beb6f013cdfe410a0c20cd48291efe4c92a8ace) - @allcontributors[bot] - [Return exit code 1 on error for gren changelog (#294)](https://github.com/cjbarth/github-release-notes/commit/69b77665dddb1135a81ce856a7c8edb1003dbc45) - @viatrix @@ -146,8 +147,8 @@ - [docs: add phun-ky as a contributor (#236)](https://github.com/cjbarth/github-release-notes/commit/f1aa847bf93f648454a5c927e8dcfdf765aa6c87) - @allcontributors[bot] - [docs: add phun-ky as a contributor (#234)](https://github.com/cjbarth/github-release-notes/commit/a53c582fe24e1f86584490994d65a534a27c965c) - @allcontributors[bot] - [docs: add wellDan28 as a contributor (#233)](https://github.com/cjbarth/github-release-notes/commit/a3013a9a4be5b2fe3fd34a8e5ac360b5da10d88a) - @allcontributors[bot] -- [docs: update README.md [skip ci]](https://github.com/cjbarth/github-release-notes/commit/8191996ff9ab25a6afadab92d397c842dd6eb4fe) - @allcontributors[bot] - [docs: create .all-contributorsrc [skip ci]](https://github.com/cjbarth/github-release-notes/commit/754ba2105677a36cbfce40bf4d89fbd0c6daeefb) - @allcontributors[bot] +- [docs: update README.md [skip ci]](https://github.com/cjbarth/github-release-notes/commit/8191996ff9ab25a6afadab92d397c842dd6eb4fe) - @allcontributors[bot] - [Update CHANGELOG.md](https://github.com/cjbarth/github-release-notes/commit/998418715993d042cfb0b2bb4eb72bae105cc583) - @alexcanessa --- diff --git a/lib/src/Gren.js b/lib/src/Gren.js index 9779c286..eb359b3e 100644 --- a/lib/src/Gren.js +++ b/lib/src/Gren.js @@ -1289,10 +1289,7 @@ class Gren { } commits = commits.filter((commit) => branchCommitShas.includes(commit.sha)); - commits.sort( - (commit1, commit2) => - new Date(commit2.commit.committer.date) - new Date(commit1.commit.committer.date), - ); + commits = this._sortCommitsByParent(commits); releaseRange.push(commits); } loadedCommits("Commits acquired"); @@ -1300,6 +1297,56 @@ class Gren { return dataSource[this.options.dataSource](releaseRanges); } + _sortCommitsByParent(commits, dateOrder = "desc") { + // 1) Map SHAs -> commit object for O(1) lookups + const commitMap = new Map(commits.map((c) => [c.sha, c])); + + // 2) Build parent -> [children] adjacency + const childrenMap = new Map(); + for (const commit of commits) { + // find the first parent in our set (if any) + const parentSha = (commit.parents || []).map((p) => p.sha).find((sha) => commitMap.has(sha)); + if (parentSha) { + if (!childrenMap.has(parentSha)) childrenMap.set(parentSha, []); + childrenMap.get(parentSha).push(commit); + } + } + + // 3) Identify "roots": commits whose first parent is not in our list + const roots = commits.filter( + (c) => !(c.parents || []).map((p) => p.sha).some((sha) => commitMap.has(sha)), + ); + + // 4) Date-based comparator + const cmpDate = (a, b) => { + const da = new Date(a.committer.date); + const db = new Date(b.committer.date); + return dateOrder === "asc" ? da - db : db - da; + }; + + // 5) Sort roots by date + roots.sort(cmpDate); + + // 6) DFS-like traversal to produce the final list + const result = []; + const visit = (commit) => { + result.push(commit); + const kids = childrenMap.get(commit.sha) || []; + // within the same parent, sort by date too + kids.sort(cmpDate); + for (const child of kids) { + visit(child); + } + }; + + for (const root of roots) { + visit(root); + } + + // This was done parent first, we want the child at the top + return result.reverse(); + } + _transformTagsIntoReleaseObjects(tags) { return tags.map((tag) => ({ id: tag.releaseId, From 21aaa0188ea9b32e8fac86618f2dfd7355a7310d Mon Sep 17 00:00:00 2001 From: Chris Barth Date: Wed, 16 Apr 2025 19:13:05 -0500 Subject: [PATCH 2/2] add test --- test/Gren.spec.js | 14 ++ test/data/commits_sorted.json | 412 ++++++++++++++++++++++++++++++++ test/data/commits_unsorted.json | 412 ++++++++++++++++++++++++++++++++ 3 files changed, 838 insertions(+) create mode 100644 test/data/commits_sorted.json create mode 100644 test/data/commits_unsorted.json diff --git a/test/Gren.spec.js b/test/Gren.spec.js index 3bede73d..59d11122 100644 --- a/test/Gren.spec.js +++ b/test/Gren.spec.js @@ -619,6 +619,20 @@ describe("Gren", () => { }); }); + describe("_sortCommitsByParent", function () { + it("Should sort the commits by parent", function () { + const unsortedCommits = JSON.parse( + fs.readFileSync(process.cwd() + "/test/data/commits_unsorted.json"), + ); + const sortedCommits = JSON.parse( + fs.readFileSync(process.cwd() + "/test/data/commits_sorted.json"), + ); + const processedCommits = gren._sortCommitsByParent(unsortedCommits); + + assert.deepEqual(processedCommits, sortedCommits, "The commits are sorted"); + }); + }); + describe("_checkChangelogFile", () => { before(() => { gren.options.changelogFilename = "test/.temp/CHANGELOG.md"; diff --git a/test/data/commits_sorted.json b/test/data/commits_sorted.json new file mode 100644 index 00000000..d2ba0cb6 --- /dev/null +++ b/test/data/commits_sorted.json @@ -0,0 +1,412 @@ +[ + { + "sha": "fa9e966b56872cee12980922be4e0ed94ae0eabb", + "node_id": "C_kwDOE4xentoAKGZhOWU5NjZiNTY4NzJjZWUxMjk4MDkyMmJlNGUwZWQ5NGFlMGVhYmI", + "commit": { + "author": { + "name": "Chris Barth", + "email": "chrisjbarth@hotmail.com", + "date": "2023-09-05T15:22:26Z" + }, + "committer": { + "name": "Chris Barth", + "email": "chrisjbarth@hotmail.com", + "date": "2023-09-05T15:22:26Z" + }, + "message": "Release 4.2.0", + "tree": { + "sha": "9355331f854fe8a4c70e7270fa038e22ceaec859", + "url": "https://api.github.com/repos/cjbarth/github-release-notes/git/trees/9355331f854fe8a4c70e7270fa038e22ceaec859" + }, + "url": "https://api.github.com/repos/cjbarth/github-release-notes/git/commits/fa9e966b56872cee12980922be4e0ed94ae0eabb", + "comment_count": 0, + "verification": { + "verified": false, + "reason": "unsigned", + "signature": null, + "payload": null, + "verified_at": null + } + }, + "url": "https://api.github.com/repos/cjbarth/github-release-notes/commits/fa9e966b56872cee12980922be4e0ed94ae0eabb", + "html_url": "https://github.com/cjbarth/github-release-notes/commit/fa9e966b56872cee12980922be4e0ed94ae0eabb", + "comments_url": "https://api.github.com/repos/cjbarth/github-release-notes/commits/fa9e966b56872cee12980922be4e0ed94ae0eabb/comments", + "author": { + "login": "cjbarth", + "id": 3049726, + "node_id": "MDQ6VXNlcjMwNDk3MjY=", + "avatar_url": "https://avatars.githubusercontent.com/u/3049726?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/cjbarth", + "html_url": "https://github.com/cjbarth", + "followers_url": "https://api.github.com/users/cjbarth/followers", + "following_url": "https://api.github.com/users/cjbarth/following{/other_user}", + "gists_url": "https://api.github.com/users/cjbarth/gists{/gist_id}", + "starred_url": "https://api.github.com/users/cjbarth/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/cjbarth/subscriptions", + "organizations_url": "https://api.github.com/users/cjbarth/orgs", + "repos_url": "https://api.github.com/users/cjbarth/repos", + "events_url": "https://api.github.com/users/cjbarth/events{/privacy}", + "received_events_url": "https://api.github.com/users/cjbarth/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "committer": { + "login": "cjbarth", + "id": 3049726, + "node_id": "MDQ6VXNlcjMwNDk3MjY=", + "avatar_url": "https://avatars.githubusercontent.com/u/3049726?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/cjbarth", + "html_url": "https://github.com/cjbarth", + "followers_url": "https://api.github.com/users/cjbarth/followers", + "following_url": "https://api.github.com/users/cjbarth/following{/other_user}", + "gists_url": "https://api.github.com/users/cjbarth/gists{/gist_id}", + "starred_url": "https://api.github.com/users/cjbarth/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/cjbarth/subscriptions", + "organizations_url": "https://api.github.com/users/cjbarth/orgs", + "repos_url": "https://api.github.com/users/cjbarth/repos", + "events_url": "https://api.github.com/users/cjbarth/events{/privacy}", + "received_events_url": "https://api.github.com/users/cjbarth/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "parents": [ + { + "sha": "b8fd1b6a01ef30ba0f2458a86ebd56991a911e44", + "url": "https://api.github.com/repos/cjbarth/github-release-notes/commits/b8fd1b6a01ef30ba0f2458a86ebd56991a911e44", + "html_url": "https://github.com/cjbarth/github-release-notes/commit/b8fd1b6a01ef30ba0f2458a86ebd56991a911e44" + } + ] + }, + { + "sha": "b8fd1b6a01ef30ba0f2458a86ebd56991a911e44", + "node_id": "C_kwDOE4xentoAKGI4ZmQxYjZhMDFlZjMwYmEwZjI0NThhODZlYmQ1Njk5MWE5MTFlNDQ", + "commit": { + "author": { + "name": "Chris Barth", + "email": "chrisjbarth@hotmail.com", + "date": "2023-09-08T16:23:22Z" + }, + "committer": { + "name": "GitHub", + "email": "noreply@github.com", + "date": "2023-09-08T16:23:22Z" + }, + "message": "Format using prettier (#9)", + "tree": { + "sha": "6c60a4afc7b34058cea77b0db9e1a0d454d8d2c3", + "url": "https://api.github.com/repos/cjbarth/github-release-notes/git/trees/6c60a4afc7b34058cea77b0db9e1a0d454d8d2c3" + }, + "url": "https://api.github.com/repos/cjbarth/github-release-notes/git/commits/b8fd1b6a01ef30ba0f2458a86ebd56991a911e44", + "comment_count": 0, + "verification": { + "verified": true, + "reason": "valid", + "signature": "-----BEGIN PGP SIGNATURE-----\n\nwsBcBAABCAAQBQJk+0p6CRBK7hj4Ov3rIwAAungIAE1eUxyEoYU26/cfUehGbsUL\nvqeF95uMOSCPC1xi50Fgw3rulkunW45VU05IFRJjR00ihuWCDGBIkgAzGej0yhmM\nS0gcgCQOQMzGbEkMY1fv9J/C/nHn3YWmFl/PmAg1NQRTNz3w4OzQnSxsVOcN1j50\n/Xn2cyepFIWXaFemI+K1PbxMXyKpukMRxBN0b8/Tkod5tVsGoY791oziqJspvjCF\nKWii8VIx7KALm7Fzd8GNr5FsiBbU0s5cCyMDAbQtHR2O/Hk+ee5b2/z1vM/7xaCe\nRfALgJmz27SyIvSfupOmEJlRKMpSzA3BR5Z0Ow1Ijm1PBJXK3OGaPohmk9HU/9U=\n=niy1\n-----END PGP SIGNATURE-----\n", + "payload": "tree 6c60a4afc7b34058cea77b0db9e1a0d454d8d2c3\nparent bb476de6b36057ef694b55002e3877b88f93b0ab\nauthor Chris Barth 1694190202 -0500\ncommitter GitHub 1694190202 -0400\n\nFormat using prettier (#9)\n\n", + "verified_at": "2024-01-16T19:59:59Z" + } + }, + "url": "https://api.github.com/repos/cjbarth/github-release-notes/commits/b8fd1b6a01ef30ba0f2458a86ebd56991a911e44", + "html_url": "https://github.com/cjbarth/github-release-notes/commit/b8fd1b6a01ef30ba0f2458a86ebd56991a911e44", + "comments_url": "https://api.github.com/repos/cjbarth/github-release-notes/commits/b8fd1b6a01ef30ba0f2458a86ebd56991a911e44/comments", + "author": { + "login": "cjbarth", + "id": 3049726, + "node_id": "MDQ6VXNlcjMwNDk3MjY=", + "avatar_url": "https://avatars.githubusercontent.com/u/3049726?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/cjbarth", + "html_url": "https://github.com/cjbarth", + "followers_url": "https://api.github.com/users/cjbarth/followers", + "following_url": "https://api.github.com/users/cjbarth/following{/other_user}", + "gists_url": "https://api.github.com/users/cjbarth/gists{/gist_id}", + "starred_url": "https://api.github.com/users/cjbarth/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/cjbarth/subscriptions", + "organizations_url": "https://api.github.com/users/cjbarth/orgs", + "repos_url": "https://api.github.com/users/cjbarth/repos", + "events_url": "https://api.github.com/users/cjbarth/events{/privacy}", + "received_events_url": "https://api.github.com/users/cjbarth/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "committer": { + "login": "web-flow", + "id": 19864447, + "node_id": "MDQ6VXNlcjE5ODY0NDQ3", + "avatar_url": "https://avatars.githubusercontent.com/u/19864447?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/web-flow", + "html_url": "https://github.com/web-flow", + "followers_url": "https://api.github.com/users/web-flow/followers", + "following_url": "https://api.github.com/users/web-flow/following{/other_user}", + "gists_url": "https://api.github.com/users/web-flow/gists{/gist_id}", + "starred_url": "https://api.github.com/users/web-flow/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/web-flow/subscriptions", + "organizations_url": "https://api.github.com/users/web-flow/orgs", + "repos_url": "https://api.github.com/users/web-flow/repos", + "events_url": "https://api.github.com/users/web-flow/events{/privacy}", + "received_events_url": "https://api.github.com/users/web-flow/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "parents": [ + { + "sha": "bb476de6b36057ef694b55002e3877b88f93b0ab", + "url": "https://api.github.com/repos/cjbarth/github-release-notes/commits/bb476de6b36057ef694b55002e3877b88f93b0ab", + "html_url": "https://github.com/cjbarth/github-release-notes/commit/bb476de6b36057ef694b55002e3877b88f93b0ab" + } + ] + }, + { + "sha": "bb476de6b36057ef694b55002e3877b88f93b0ab", + "node_id": "C_kwDOE4xentoAKGJiNDc2ZGU2YjM2MDU3ZWY2OTRiNTUwMDJlMzg3N2I4OGY5M2IwYWI", + "commit": { + "author": { + "name": "Chris Barth", + "email": "chrisjbarth@hotmail.com", + "date": "2023-09-05T19:23:15Z" + }, + "committer": { + "name": "GitHub", + "email": "noreply@github.com", + "date": "2023-09-05T19:23:15Z" + }, + "message": "Update README (#8)", + "tree": { + "sha": "1f3a1a8ce9b0f95da539db0741d46cf09124921d", + "url": "https://api.github.com/repos/cjbarth/github-release-notes/git/trees/1f3a1a8ce9b0f95da539db0741d46cf09124921d" + }, + "url": "https://api.github.com/repos/cjbarth/github-release-notes/git/commits/bb476de6b36057ef694b55002e3877b88f93b0ab", + "comment_count": 0, + "verification": { + "verified": true, + "reason": "valid", + "signature": "-----BEGIN PGP SIGNATURE-----\n\nwsBcBAABCAAQBQJk94AjCRBK7hj4Ov3rIwAA8RQIAEXghEJ/ix7cuJF56ytuJcD0\nix5vNNG+FjWwOPSIqdrWBGv5qHQ25GJDopiZ/voIoQwQhnDbEVVR2tZeZw7a7Pvs\nxAvzNjW+vVQWsuMGitb57lCpSBqJVbEaW3JnItOdLnrd6UCRGpqKxOUkGTD4wo0B\n86iLYNjB+1b65y6graXMmUvSrQDEZlNb23bcQk5Q+8kWGBVhz6Tj5CznE1YMbzKC\nT0tGlM6YBnmtWZTaT68IX5cSEumosK5Ax5zLKkOld6WDje9Sn9LGIvEwXrGe/wd3\n/mO1PDTjXmgvLQLLo1sFE+YWWPGlTmrFlItCOddXGrYCcBuN4NXqtVDcY/U7hj0=\n=+eH7\n-----END PGP SIGNATURE-----\n", + "payload": "tree 1f3a1a8ce9b0f95da539db0741d46cf09124921d\nparent aaae7e0b07fa2078dec4096074a061aaf40a0439\nauthor Chris Barth 1693941795 -0400\ncommitter GitHub 1693941795 -0400\n\nUpdate README (#8)\n\n", + "verified_at": "2024-01-16T19:59:59Z" + } + }, + "url": "https://api.github.com/repos/cjbarth/github-release-notes/commits/bb476de6b36057ef694b55002e3877b88f93b0ab", + "html_url": "https://github.com/cjbarth/github-release-notes/commit/bb476de6b36057ef694b55002e3877b88f93b0ab", + "comments_url": "https://api.github.com/repos/cjbarth/github-release-notes/commits/bb476de6b36057ef694b55002e3877b88f93b0ab/comments", + "author": { + "login": "cjbarth", + "id": 3049726, + "node_id": "MDQ6VXNlcjMwNDk3MjY=", + "avatar_url": "https://avatars.githubusercontent.com/u/3049726?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/cjbarth", + "html_url": "https://github.com/cjbarth", + "followers_url": "https://api.github.com/users/cjbarth/followers", + "following_url": "https://api.github.com/users/cjbarth/following{/other_user}", + "gists_url": "https://api.github.com/users/cjbarth/gists{/gist_id}", + "starred_url": "https://api.github.com/users/cjbarth/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/cjbarth/subscriptions", + "organizations_url": "https://api.github.com/users/cjbarth/orgs", + "repos_url": "https://api.github.com/users/cjbarth/repos", + "events_url": "https://api.github.com/users/cjbarth/events{/privacy}", + "received_events_url": "https://api.github.com/users/cjbarth/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "committer": { + "login": "web-flow", + "id": 19864447, + "node_id": "MDQ6VXNlcjE5ODY0NDQ3", + "avatar_url": "https://avatars.githubusercontent.com/u/19864447?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/web-flow", + "html_url": "https://github.com/web-flow", + "followers_url": "https://api.github.com/users/web-flow/followers", + "following_url": "https://api.github.com/users/web-flow/following{/other_user}", + "gists_url": "https://api.github.com/users/web-flow/gists{/gist_id}", + "starred_url": "https://api.github.com/users/web-flow/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/web-flow/subscriptions", + "organizations_url": "https://api.github.com/users/web-flow/orgs", + "repos_url": "https://api.github.com/users/web-flow/repos", + "events_url": "https://api.github.com/users/web-flow/events{/privacy}", + "received_events_url": "https://api.github.com/users/web-flow/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "parents": [ + { + "sha": "aaae7e0b07fa2078dec4096074a061aaf40a0439", + "url": "https://api.github.com/repos/cjbarth/github-release-notes/commits/aaae7e0b07fa2078dec4096074a061aaf40a0439", + "html_url": "https://github.com/cjbarth/github-release-notes/commit/aaae7e0b07fa2078dec4096074a061aaf40a0439" + } + ] + }, + { + "sha": "aaae7e0b07fa2078dec4096074a061aaf40a0439", + "node_id": "C_kwDOE4xentoAKGFhYWU3ZTBiMDdmYTIwNzhkZWM0MDk2MDc0YTA2MWFhZjQwYTA0Mzk", + "commit": { + "author": { + "name": "Chris Barth", + "email": "chrisjbarth@hotmail.com", + "date": "2023-09-05T19:16:56Z" + }, + "committer": { + "name": "GitHub", + "email": "noreply@github.com", + "date": "2023-09-05T19:16:56Z" + }, + "message": "Use application version number for head of changelog (#7)", + "tree": { + "sha": "78d9e155595efc0096126868b1b524c7ec68ed5e", + "url": "https://api.github.com/repos/cjbarth/github-release-notes/git/trees/78d9e155595efc0096126868b1b524c7ec68ed5e" + }, + "url": "https://api.github.com/repos/cjbarth/github-release-notes/git/commits/aaae7e0b07fa2078dec4096074a061aaf40a0439", + "comment_count": 0, + "verification": { + "verified": true, + "reason": "valid", + "signature": "-----BEGIN PGP SIGNATURE-----\n\nwsBcBAABCAAQBQJk936oCRBK7hj4Ov3rIwAAAQUIAFoeYFp0j8tdBOHWbax0UaZ6\n9V+ByAkX7gKu5ft1XZkA8TlXhXwK5scfNTD6YAH/5RXXlRrixK18ThYiQCi2Aolu\nW70mpl28uG8LumEYTzRHsT9U1SyczbfYQxJXPIjBYOb9RTl1bpDKt+HAYpjJMZNq\nPcXRz4rDKBlKnxoiWv9n6QToXYAb9HYohBzjniGw/yBfmt5NtpWBetNswI1hFGOM\nM4Bl9+FG37zdTmiRFu94hrOW3LSsya+spcNSVKfqBWMM1aU6JENy/Lyv36m38IjV\n+x7jYNFj2Wf9jKfGZxBjpfCMghTbZC4/N4tUtowu7rhx3Xx7pgeRBqA7ZtDSOFo=\n=SsTO\n-----END PGP SIGNATURE-----\n", + "payload": "tree 78d9e155595efc0096126868b1b524c7ec68ed5e\nparent f6086f143cba6f76a867023439cf183a8345b682\nauthor Chris Barth 1693941416 -0400\ncommitter GitHub 1693941416 -0400\n\nUse application version number for head of changelog (#7)\n\n", + "verified_at": "2024-01-16T19:59:59Z" + } + }, + "url": "https://api.github.com/repos/cjbarth/github-release-notes/commits/aaae7e0b07fa2078dec4096074a061aaf40a0439", + "html_url": "https://github.com/cjbarth/github-release-notes/commit/aaae7e0b07fa2078dec4096074a061aaf40a0439", + "comments_url": "https://api.github.com/repos/cjbarth/github-release-notes/commits/aaae7e0b07fa2078dec4096074a061aaf40a0439/comments", + "author": { + "login": "cjbarth", + "id": 3049726, + "node_id": "MDQ6VXNlcjMwNDk3MjY=", + "avatar_url": "https://avatars.githubusercontent.com/u/3049726?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/cjbarth", + "html_url": "https://github.com/cjbarth", + "followers_url": "https://api.github.com/users/cjbarth/followers", + "following_url": "https://api.github.com/users/cjbarth/following{/other_user}", + "gists_url": "https://api.github.com/users/cjbarth/gists{/gist_id}", + "starred_url": "https://api.github.com/users/cjbarth/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/cjbarth/subscriptions", + "organizations_url": "https://api.github.com/users/cjbarth/orgs", + "repos_url": "https://api.github.com/users/cjbarth/repos", + "events_url": "https://api.github.com/users/cjbarth/events{/privacy}", + "received_events_url": "https://api.github.com/users/cjbarth/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "committer": { + "login": "web-flow", + "id": 19864447, + "node_id": "MDQ6VXNlcjE5ODY0NDQ3", + "avatar_url": "https://avatars.githubusercontent.com/u/19864447?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/web-flow", + "html_url": "https://github.com/web-flow", + "followers_url": "https://api.github.com/users/web-flow/followers", + "following_url": "https://api.github.com/users/web-flow/following{/other_user}", + "gists_url": "https://api.github.com/users/web-flow/gists{/gist_id}", + "starred_url": "https://api.github.com/users/web-flow/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/web-flow/subscriptions", + "organizations_url": "https://api.github.com/users/web-flow/orgs", + "repos_url": "https://api.github.com/users/web-flow/repos", + "events_url": "https://api.github.com/users/web-flow/events{/privacy}", + "received_events_url": "https://api.github.com/users/web-flow/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "parents": [ + { + "sha": "f6086f143cba6f76a867023439cf183a8345b682", + "url": "https://api.github.com/repos/cjbarth/github-release-notes/commits/f6086f143cba6f76a867023439cf183a8345b682", + "html_url": "https://github.com/cjbarth/github-release-notes/commit/f6086f143cba6f76a867023439cf183a8345b682" + } + ] + }, + { + "sha": "f6086f143cba6f76a867023439cf183a8345b682", + "node_id": "C_kwDOE4xentoAKGY2MDg2ZjE0M2NiYTZmNzZhODY3MDIzNDM5Y2YxODNhODM0NWI2ODI", + "commit": { + "author": { + "name": "Chris Barth", + "email": "chrisjbarth@hotmail.com", + "date": "2023-09-05T15:03:01Z" + }, + "committer": { + "name": "GitHub", + "email": "noreply@github.com", + "date": "2023-09-05T15:03:01Z" + }, + "message": "Add support for overriding discovered PRs", + "tree": { + "sha": "c7dfa39dc1455b5a237dd813897a600de38fdb8f", + "url": "https://api.github.com/repos/cjbarth/github-release-notes/git/trees/c7dfa39dc1455b5a237dd813897a600de38fdb8f" + }, + "url": "https://api.github.com/repos/cjbarth/github-release-notes/git/commits/f6086f143cba6f76a867023439cf183a8345b682", + "comment_count": 0, + "verification": { + "verified": true, + "reason": "valid", + "signature": "-----BEGIN PGP SIGNATURE-----\n\nwsBcBAABCAAQBQJk90MlCRBK7hj4Ov3rIwAAXQcIAI98izjMknX5Z3TaHHP9nCG2\nfI6VWTYAKcS5Amn3EN8JvU4OE1ukFqp/Oe7ojVnnR2PEVfgiKdd8+oOFcoxDcphj\nT2kHFl9UJIa5Bo6nyja7HaENIb3t1kmaVbZDgHdYe+EgpaQ5cjg8yDYvNHeo+dWZ\n3jhawSJLYTSASQrGsNddTtSuSmKK8g4WP+zSEjNf+tR5MmypWrHGnjX6UKF4oHl5\nIj+iCqKQUPMQwG9aPg8xi4sI6DbasrnoKBCxjdvaBt/7PrJ5F1Q/X6vD1+FcipBS\nZpXzbRogUkCDD9x/JKGVyLm3m8qpqpEOE5hg0LuE5HMasJco+YsHso+c84b5IKo=\n=M+aX\n-----END PGP SIGNATURE-----\n", + "payload": "tree c7dfa39dc1455b5a237dd813897a600de38fdb8f\nparent c09f024a189c2a3494c21a85cce9f04e4b986995\nauthor Chris Barth 1693926181 -0400\ncommitter GitHub 1693926181 -0400\n\nAdd support for overriding discovered PRs\n\n", + "verified_at": "2024-11-12T07:07:20Z" + } + }, + "url": "https://api.github.com/repos/cjbarth/github-release-notes/commits/f6086f143cba6f76a867023439cf183a8345b682", + "html_url": "https://github.com/cjbarth/github-release-notes/commit/f6086f143cba6f76a867023439cf183a8345b682", + "comments_url": "https://api.github.com/repos/cjbarth/github-release-notes/commits/f6086f143cba6f76a867023439cf183a8345b682/comments", + "author": { + "login": "cjbarth", + "id": 3049726, + "node_id": "MDQ6VXNlcjMwNDk3MjY=", + "avatar_url": "https://avatars.githubusercontent.com/u/3049726?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/cjbarth", + "html_url": "https://github.com/cjbarth", + "followers_url": "https://api.github.com/users/cjbarth/followers", + "following_url": "https://api.github.com/users/cjbarth/following{/other_user}", + "gists_url": "https://api.github.com/users/cjbarth/gists{/gist_id}", + "starred_url": "https://api.github.com/users/cjbarth/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/cjbarth/subscriptions", + "organizations_url": "https://api.github.com/users/cjbarth/orgs", + "repos_url": "https://api.github.com/users/cjbarth/repos", + "events_url": "https://api.github.com/users/cjbarth/events{/privacy}", + "received_events_url": "https://api.github.com/users/cjbarth/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "committer": { + "login": "web-flow", + "id": 19864447, + "node_id": "MDQ6VXNlcjE5ODY0NDQ3", + "avatar_url": "https://avatars.githubusercontent.com/u/19864447?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/web-flow", + "html_url": "https://github.com/web-flow", + "followers_url": "https://api.github.com/users/web-flow/followers", + "following_url": "https://api.github.com/users/web-flow/following{/other_user}", + "gists_url": "https://api.github.com/users/web-flow/gists{/gist_id}", + "starred_url": "https://api.github.com/users/web-flow/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/web-flow/subscriptions", + "organizations_url": "https://api.github.com/users/web-flow/orgs", + "repos_url": "https://api.github.com/users/web-flow/repos", + "events_url": "https://api.github.com/users/web-flow/events{/privacy}", + "received_events_url": "https://api.github.com/users/web-flow/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "parents": [ + { + "sha": "c09f024a189c2a3494c21a85cce9f04e4b986995", + "url": "https://api.github.com/repos/cjbarth/github-release-notes/commits/c09f024a189c2a3494c21a85cce9f04e4b986995", + "html_url": "https://github.com/cjbarth/github-release-notes/commit/c09f024a189c2a3494c21a85cce9f04e4b986995" + } + ] + } +] diff --git a/test/data/commits_unsorted.json b/test/data/commits_unsorted.json new file mode 100644 index 00000000..fff459a0 --- /dev/null +++ b/test/data/commits_unsorted.json @@ -0,0 +1,412 @@ +[ + { + "sha": "b8fd1b6a01ef30ba0f2458a86ebd56991a911e44", + "node_id": "C_kwDOE4xentoAKGI4ZmQxYjZhMDFlZjMwYmEwZjI0NThhODZlYmQ1Njk5MWE5MTFlNDQ", + "commit": { + "author": { + "name": "Chris Barth", + "email": "chrisjbarth@hotmail.com", + "date": "2023-09-08T16:23:22Z" + }, + "committer": { + "name": "GitHub", + "email": "noreply@github.com", + "date": "2023-09-08T16:23:22Z" + }, + "message": "Format using prettier (#9)", + "tree": { + "sha": "6c60a4afc7b34058cea77b0db9e1a0d454d8d2c3", + "url": "https://api.github.com/repos/cjbarth/github-release-notes/git/trees/6c60a4afc7b34058cea77b0db9e1a0d454d8d2c3" + }, + "url": "https://api.github.com/repos/cjbarth/github-release-notes/git/commits/b8fd1b6a01ef30ba0f2458a86ebd56991a911e44", + "comment_count": 0, + "verification": { + "verified": true, + "reason": "valid", + "signature": "-----BEGIN PGP SIGNATURE-----\n\nwsBcBAABCAAQBQJk+0p6CRBK7hj4Ov3rIwAAungIAE1eUxyEoYU26/cfUehGbsUL\nvqeF95uMOSCPC1xi50Fgw3rulkunW45VU05IFRJjR00ihuWCDGBIkgAzGej0yhmM\nS0gcgCQOQMzGbEkMY1fv9J/C/nHn3YWmFl/PmAg1NQRTNz3w4OzQnSxsVOcN1j50\n/Xn2cyepFIWXaFemI+K1PbxMXyKpukMRxBN0b8/Tkod5tVsGoY791oziqJspvjCF\nKWii8VIx7KALm7Fzd8GNr5FsiBbU0s5cCyMDAbQtHR2O/Hk+ee5b2/z1vM/7xaCe\nRfALgJmz27SyIvSfupOmEJlRKMpSzA3BR5Z0Ow1Ijm1PBJXK3OGaPohmk9HU/9U=\n=niy1\n-----END PGP SIGNATURE-----\n", + "payload": "tree 6c60a4afc7b34058cea77b0db9e1a0d454d8d2c3\nparent bb476de6b36057ef694b55002e3877b88f93b0ab\nauthor Chris Barth 1694190202 -0500\ncommitter GitHub 1694190202 -0400\n\nFormat using prettier (#9)\n\n", + "verified_at": "2024-01-16T19:59:59Z" + } + }, + "url": "https://api.github.com/repos/cjbarth/github-release-notes/commits/b8fd1b6a01ef30ba0f2458a86ebd56991a911e44", + "html_url": "https://github.com/cjbarth/github-release-notes/commit/b8fd1b6a01ef30ba0f2458a86ebd56991a911e44", + "comments_url": "https://api.github.com/repos/cjbarth/github-release-notes/commits/b8fd1b6a01ef30ba0f2458a86ebd56991a911e44/comments", + "author": { + "login": "cjbarth", + "id": 3049726, + "node_id": "MDQ6VXNlcjMwNDk3MjY=", + "avatar_url": "https://avatars.githubusercontent.com/u/3049726?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/cjbarth", + "html_url": "https://github.com/cjbarth", + "followers_url": "https://api.github.com/users/cjbarth/followers", + "following_url": "https://api.github.com/users/cjbarth/following{/other_user}", + "gists_url": "https://api.github.com/users/cjbarth/gists{/gist_id}", + "starred_url": "https://api.github.com/users/cjbarth/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/cjbarth/subscriptions", + "organizations_url": "https://api.github.com/users/cjbarth/orgs", + "repos_url": "https://api.github.com/users/cjbarth/repos", + "events_url": "https://api.github.com/users/cjbarth/events{/privacy}", + "received_events_url": "https://api.github.com/users/cjbarth/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "committer": { + "login": "web-flow", + "id": 19864447, + "node_id": "MDQ6VXNlcjE5ODY0NDQ3", + "avatar_url": "https://avatars.githubusercontent.com/u/19864447?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/web-flow", + "html_url": "https://github.com/web-flow", + "followers_url": "https://api.github.com/users/web-flow/followers", + "following_url": "https://api.github.com/users/web-flow/following{/other_user}", + "gists_url": "https://api.github.com/users/web-flow/gists{/gist_id}", + "starred_url": "https://api.github.com/users/web-flow/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/web-flow/subscriptions", + "organizations_url": "https://api.github.com/users/web-flow/orgs", + "repos_url": "https://api.github.com/users/web-flow/repos", + "events_url": "https://api.github.com/users/web-flow/events{/privacy}", + "received_events_url": "https://api.github.com/users/web-flow/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "parents": [ + { + "sha": "bb476de6b36057ef694b55002e3877b88f93b0ab", + "url": "https://api.github.com/repos/cjbarth/github-release-notes/commits/bb476de6b36057ef694b55002e3877b88f93b0ab", + "html_url": "https://github.com/cjbarth/github-release-notes/commit/bb476de6b36057ef694b55002e3877b88f93b0ab" + } + ] + }, + { + "sha": "bb476de6b36057ef694b55002e3877b88f93b0ab", + "node_id": "C_kwDOE4xentoAKGJiNDc2ZGU2YjM2MDU3ZWY2OTRiNTUwMDJlMzg3N2I4OGY5M2IwYWI", + "commit": { + "author": { + "name": "Chris Barth", + "email": "chrisjbarth@hotmail.com", + "date": "2023-09-05T19:23:15Z" + }, + "committer": { + "name": "GitHub", + "email": "noreply@github.com", + "date": "2023-09-05T19:23:15Z" + }, + "message": "Update README (#8)", + "tree": { + "sha": "1f3a1a8ce9b0f95da539db0741d46cf09124921d", + "url": "https://api.github.com/repos/cjbarth/github-release-notes/git/trees/1f3a1a8ce9b0f95da539db0741d46cf09124921d" + }, + "url": "https://api.github.com/repos/cjbarth/github-release-notes/git/commits/bb476de6b36057ef694b55002e3877b88f93b0ab", + "comment_count": 0, + "verification": { + "verified": true, + "reason": "valid", + "signature": "-----BEGIN PGP SIGNATURE-----\n\nwsBcBAABCAAQBQJk94AjCRBK7hj4Ov3rIwAA8RQIAEXghEJ/ix7cuJF56ytuJcD0\nix5vNNG+FjWwOPSIqdrWBGv5qHQ25GJDopiZ/voIoQwQhnDbEVVR2tZeZw7a7Pvs\nxAvzNjW+vVQWsuMGitb57lCpSBqJVbEaW3JnItOdLnrd6UCRGpqKxOUkGTD4wo0B\n86iLYNjB+1b65y6graXMmUvSrQDEZlNb23bcQk5Q+8kWGBVhz6Tj5CznE1YMbzKC\nT0tGlM6YBnmtWZTaT68IX5cSEumosK5Ax5zLKkOld6WDje9Sn9LGIvEwXrGe/wd3\n/mO1PDTjXmgvLQLLo1sFE+YWWPGlTmrFlItCOddXGrYCcBuN4NXqtVDcY/U7hj0=\n=+eH7\n-----END PGP SIGNATURE-----\n", + "payload": "tree 1f3a1a8ce9b0f95da539db0741d46cf09124921d\nparent aaae7e0b07fa2078dec4096074a061aaf40a0439\nauthor Chris Barth 1693941795 -0400\ncommitter GitHub 1693941795 -0400\n\nUpdate README (#8)\n\n", + "verified_at": "2024-01-16T19:59:59Z" + } + }, + "url": "https://api.github.com/repos/cjbarth/github-release-notes/commits/bb476de6b36057ef694b55002e3877b88f93b0ab", + "html_url": "https://github.com/cjbarth/github-release-notes/commit/bb476de6b36057ef694b55002e3877b88f93b0ab", + "comments_url": "https://api.github.com/repos/cjbarth/github-release-notes/commits/bb476de6b36057ef694b55002e3877b88f93b0ab/comments", + "author": { + "login": "cjbarth", + "id": 3049726, + "node_id": "MDQ6VXNlcjMwNDk3MjY=", + "avatar_url": "https://avatars.githubusercontent.com/u/3049726?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/cjbarth", + "html_url": "https://github.com/cjbarth", + "followers_url": "https://api.github.com/users/cjbarth/followers", + "following_url": "https://api.github.com/users/cjbarth/following{/other_user}", + "gists_url": "https://api.github.com/users/cjbarth/gists{/gist_id}", + "starred_url": "https://api.github.com/users/cjbarth/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/cjbarth/subscriptions", + "organizations_url": "https://api.github.com/users/cjbarth/orgs", + "repos_url": "https://api.github.com/users/cjbarth/repos", + "events_url": "https://api.github.com/users/cjbarth/events{/privacy}", + "received_events_url": "https://api.github.com/users/cjbarth/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "committer": { + "login": "web-flow", + "id": 19864447, + "node_id": "MDQ6VXNlcjE5ODY0NDQ3", + "avatar_url": "https://avatars.githubusercontent.com/u/19864447?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/web-flow", + "html_url": "https://github.com/web-flow", + "followers_url": "https://api.github.com/users/web-flow/followers", + "following_url": "https://api.github.com/users/web-flow/following{/other_user}", + "gists_url": "https://api.github.com/users/web-flow/gists{/gist_id}", + "starred_url": "https://api.github.com/users/web-flow/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/web-flow/subscriptions", + "organizations_url": "https://api.github.com/users/web-flow/orgs", + "repos_url": "https://api.github.com/users/web-flow/repos", + "events_url": "https://api.github.com/users/web-flow/events{/privacy}", + "received_events_url": "https://api.github.com/users/web-flow/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "parents": [ + { + "sha": "aaae7e0b07fa2078dec4096074a061aaf40a0439", + "url": "https://api.github.com/repos/cjbarth/github-release-notes/commits/aaae7e0b07fa2078dec4096074a061aaf40a0439", + "html_url": "https://github.com/cjbarth/github-release-notes/commit/aaae7e0b07fa2078dec4096074a061aaf40a0439" + } + ] + }, + { + "sha": "aaae7e0b07fa2078dec4096074a061aaf40a0439", + "node_id": "C_kwDOE4xentoAKGFhYWU3ZTBiMDdmYTIwNzhkZWM0MDk2MDc0YTA2MWFhZjQwYTA0Mzk", + "commit": { + "author": { + "name": "Chris Barth", + "email": "chrisjbarth@hotmail.com", + "date": "2023-09-05T19:16:56Z" + }, + "committer": { + "name": "GitHub", + "email": "noreply@github.com", + "date": "2023-09-05T19:16:56Z" + }, + "message": "Use application version number for head of changelog (#7)", + "tree": { + "sha": "78d9e155595efc0096126868b1b524c7ec68ed5e", + "url": "https://api.github.com/repos/cjbarth/github-release-notes/git/trees/78d9e155595efc0096126868b1b524c7ec68ed5e" + }, + "url": "https://api.github.com/repos/cjbarth/github-release-notes/git/commits/aaae7e0b07fa2078dec4096074a061aaf40a0439", + "comment_count": 0, + "verification": { + "verified": true, + "reason": "valid", + "signature": "-----BEGIN PGP SIGNATURE-----\n\nwsBcBAABCAAQBQJk936oCRBK7hj4Ov3rIwAAAQUIAFoeYFp0j8tdBOHWbax0UaZ6\n9V+ByAkX7gKu5ft1XZkA8TlXhXwK5scfNTD6YAH/5RXXlRrixK18ThYiQCi2Aolu\nW70mpl28uG8LumEYTzRHsT9U1SyczbfYQxJXPIjBYOb9RTl1bpDKt+HAYpjJMZNq\nPcXRz4rDKBlKnxoiWv9n6QToXYAb9HYohBzjniGw/yBfmt5NtpWBetNswI1hFGOM\nM4Bl9+FG37zdTmiRFu94hrOW3LSsya+spcNSVKfqBWMM1aU6JENy/Lyv36m38IjV\n+x7jYNFj2Wf9jKfGZxBjpfCMghTbZC4/N4tUtowu7rhx3Xx7pgeRBqA7ZtDSOFo=\n=SsTO\n-----END PGP SIGNATURE-----\n", + "payload": "tree 78d9e155595efc0096126868b1b524c7ec68ed5e\nparent f6086f143cba6f76a867023439cf183a8345b682\nauthor Chris Barth 1693941416 -0400\ncommitter GitHub 1693941416 -0400\n\nUse application version number for head of changelog (#7)\n\n", + "verified_at": "2024-01-16T19:59:59Z" + } + }, + "url": "https://api.github.com/repos/cjbarth/github-release-notes/commits/aaae7e0b07fa2078dec4096074a061aaf40a0439", + "html_url": "https://github.com/cjbarth/github-release-notes/commit/aaae7e0b07fa2078dec4096074a061aaf40a0439", + "comments_url": "https://api.github.com/repos/cjbarth/github-release-notes/commits/aaae7e0b07fa2078dec4096074a061aaf40a0439/comments", + "author": { + "login": "cjbarth", + "id": 3049726, + "node_id": "MDQ6VXNlcjMwNDk3MjY=", + "avatar_url": "https://avatars.githubusercontent.com/u/3049726?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/cjbarth", + "html_url": "https://github.com/cjbarth", + "followers_url": "https://api.github.com/users/cjbarth/followers", + "following_url": "https://api.github.com/users/cjbarth/following{/other_user}", + "gists_url": "https://api.github.com/users/cjbarth/gists{/gist_id}", + "starred_url": "https://api.github.com/users/cjbarth/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/cjbarth/subscriptions", + "organizations_url": "https://api.github.com/users/cjbarth/orgs", + "repos_url": "https://api.github.com/users/cjbarth/repos", + "events_url": "https://api.github.com/users/cjbarth/events{/privacy}", + "received_events_url": "https://api.github.com/users/cjbarth/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "committer": { + "login": "web-flow", + "id": 19864447, + "node_id": "MDQ6VXNlcjE5ODY0NDQ3", + "avatar_url": "https://avatars.githubusercontent.com/u/19864447?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/web-flow", + "html_url": "https://github.com/web-flow", + "followers_url": "https://api.github.com/users/web-flow/followers", + "following_url": "https://api.github.com/users/web-flow/following{/other_user}", + "gists_url": "https://api.github.com/users/web-flow/gists{/gist_id}", + "starred_url": "https://api.github.com/users/web-flow/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/web-flow/subscriptions", + "organizations_url": "https://api.github.com/users/web-flow/orgs", + "repos_url": "https://api.github.com/users/web-flow/repos", + "events_url": "https://api.github.com/users/web-flow/events{/privacy}", + "received_events_url": "https://api.github.com/users/web-flow/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "parents": [ + { + "sha": "f6086f143cba6f76a867023439cf183a8345b682", + "url": "https://api.github.com/repos/cjbarth/github-release-notes/commits/f6086f143cba6f76a867023439cf183a8345b682", + "html_url": "https://github.com/cjbarth/github-release-notes/commit/f6086f143cba6f76a867023439cf183a8345b682" + } + ] + }, + { + "sha": "fa9e966b56872cee12980922be4e0ed94ae0eabb", + "node_id": "C_kwDOE4xentoAKGZhOWU5NjZiNTY4NzJjZWUxMjk4MDkyMmJlNGUwZWQ5NGFlMGVhYmI", + "commit": { + "author": { + "name": "Chris Barth", + "email": "chrisjbarth@hotmail.com", + "date": "2023-09-05T15:22:26Z" + }, + "committer": { + "name": "Chris Barth", + "email": "chrisjbarth@hotmail.com", + "date": "2023-09-05T15:22:26Z" + }, + "message": "Release 4.2.0", + "tree": { + "sha": "9355331f854fe8a4c70e7270fa038e22ceaec859", + "url": "https://api.github.com/repos/cjbarth/github-release-notes/git/trees/9355331f854fe8a4c70e7270fa038e22ceaec859" + }, + "url": "https://api.github.com/repos/cjbarth/github-release-notes/git/commits/fa9e966b56872cee12980922be4e0ed94ae0eabb", + "comment_count": 0, + "verification": { + "verified": false, + "reason": "unsigned", + "signature": null, + "payload": null, + "verified_at": null + } + }, + "url": "https://api.github.com/repos/cjbarth/github-release-notes/commits/fa9e966b56872cee12980922be4e0ed94ae0eabb", + "html_url": "https://github.com/cjbarth/github-release-notes/commit/fa9e966b56872cee12980922be4e0ed94ae0eabb", + "comments_url": "https://api.github.com/repos/cjbarth/github-release-notes/commits/fa9e966b56872cee12980922be4e0ed94ae0eabb/comments", + "author": { + "login": "cjbarth", + "id": 3049726, + "node_id": "MDQ6VXNlcjMwNDk3MjY=", + "avatar_url": "https://avatars.githubusercontent.com/u/3049726?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/cjbarth", + "html_url": "https://github.com/cjbarth", + "followers_url": "https://api.github.com/users/cjbarth/followers", + "following_url": "https://api.github.com/users/cjbarth/following{/other_user}", + "gists_url": "https://api.github.com/users/cjbarth/gists{/gist_id}", + "starred_url": "https://api.github.com/users/cjbarth/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/cjbarth/subscriptions", + "organizations_url": "https://api.github.com/users/cjbarth/orgs", + "repos_url": "https://api.github.com/users/cjbarth/repos", + "events_url": "https://api.github.com/users/cjbarth/events{/privacy}", + "received_events_url": "https://api.github.com/users/cjbarth/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "committer": { + "login": "cjbarth", + "id": 3049726, + "node_id": "MDQ6VXNlcjMwNDk3MjY=", + "avatar_url": "https://avatars.githubusercontent.com/u/3049726?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/cjbarth", + "html_url": "https://github.com/cjbarth", + "followers_url": "https://api.github.com/users/cjbarth/followers", + "following_url": "https://api.github.com/users/cjbarth/following{/other_user}", + "gists_url": "https://api.github.com/users/cjbarth/gists{/gist_id}", + "starred_url": "https://api.github.com/users/cjbarth/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/cjbarth/subscriptions", + "organizations_url": "https://api.github.com/users/cjbarth/orgs", + "repos_url": "https://api.github.com/users/cjbarth/repos", + "events_url": "https://api.github.com/users/cjbarth/events{/privacy}", + "received_events_url": "https://api.github.com/users/cjbarth/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "parents": [ + { + "sha": "b8fd1b6a01ef30ba0f2458a86ebd56991a911e44", + "url": "https://api.github.com/repos/cjbarth/github-release-notes/commits/b8fd1b6a01ef30ba0f2458a86ebd56991a911e44", + "html_url": "https://github.com/cjbarth/github-release-notes/commit/b8fd1b6a01ef30ba0f2458a86ebd56991a911e44" + } + ] + }, + { + "sha": "f6086f143cba6f76a867023439cf183a8345b682", + "node_id": "C_kwDOE4xentoAKGY2MDg2ZjE0M2NiYTZmNzZhODY3MDIzNDM5Y2YxODNhODM0NWI2ODI", + "commit": { + "author": { + "name": "Chris Barth", + "email": "chrisjbarth@hotmail.com", + "date": "2023-09-05T15:03:01Z" + }, + "committer": { + "name": "GitHub", + "email": "noreply@github.com", + "date": "2023-09-05T15:03:01Z" + }, + "message": "Add support for overriding discovered PRs", + "tree": { + "sha": "c7dfa39dc1455b5a237dd813897a600de38fdb8f", + "url": "https://api.github.com/repos/cjbarth/github-release-notes/git/trees/c7dfa39dc1455b5a237dd813897a600de38fdb8f" + }, + "url": "https://api.github.com/repos/cjbarth/github-release-notes/git/commits/f6086f143cba6f76a867023439cf183a8345b682", + "comment_count": 0, + "verification": { + "verified": true, + "reason": "valid", + "signature": "-----BEGIN PGP SIGNATURE-----\n\nwsBcBAABCAAQBQJk90MlCRBK7hj4Ov3rIwAAXQcIAI98izjMknX5Z3TaHHP9nCG2\nfI6VWTYAKcS5Amn3EN8JvU4OE1ukFqp/Oe7ojVnnR2PEVfgiKdd8+oOFcoxDcphj\nT2kHFl9UJIa5Bo6nyja7HaENIb3t1kmaVbZDgHdYe+EgpaQ5cjg8yDYvNHeo+dWZ\n3jhawSJLYTSASQrGsNddTtSuSmKK8g4WP+zSEjNf+tR5MmypWrHGnjX6UKF4oHl5\nIj+iCqKQUPMQwG9aPg8xi4sI6DbasrnoKBCxjdvaBt/7PrJ5F1Q/X6vD1+FcipBS\nZpXzbRogUkCDD9x/JKGVyLm3m8qpqpEOE5hg0LuE5HMasJco+YsHso+c84b5IKo=\n=M+aX\n-----END PGP SIGNATURE-----\n", + "payload": "tree c7dfa39dc1455b5a237dd813897a600de38fdb8f\nparent c09f024a189c2a3494c21a85cce9f04e4b986995\nauthor Chris Barth 1693926181 -0400\ncommitter GitHub 1693926181 -0400\n\nAdd support for overriding discovered PRs\n\n", + "verified_at": "2024-11-12T07:07:20Z" + } + }, + "url": "https://api.github.com/repos/cjbarth/github-release-notes/commits/f6086f143cba6f76a867023439cf183a8345b682", + "html_url": "https://github.com/cjbarth/github-release-notes/commit/f6086f143cba6f76a867023439cf183a8345b682", + "comments_url": "https://api.github.com/repos/cjbarth/github-release-notes/commits/f6086f143cba6f76a867023439cf183a8345b682/comments", + "author": { + "login": "cjbarth", + "id": 3049726, + "node_id": "MDQ6VXNlcjMwNDk3MjY=", + "avatar_url": "https://avatars.githubusercontent.com/u/3049726?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/cjbarth", + "html_url": "https://github.com/cjbarth", + "followers_url": "https://api.github.com/users/cjbarth/followers", + "following_url": "https://api.github.com/users/cjbarth/following{/other_user}", + "gists_url": "https://api.github.com/users/cjbarth/gists{/gist_id}", + "starred_url": "https://api.github.com/users/cjbarth/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/cjbarth/subscriptions", + "organizations_url": "https://api.github.com/users/cjbarth/orgs", + "repos_url": "https://api.github.com/users/cjbarth/repos", + "events_url": "https://api.github.com/users/cjbarth/events{/privacy}", + "received_events_url": "https://api.github.com/users/cjbarth/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "committer": { + "login": "web-flow", + "id": 19864447, + "node_id": "MDQ6VXNlcjE5ODY0NDQ3", + "avatar_url": "https://avatars.githubusercontent.com/u/19864447?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/web-flow", + "html_url": "https://github.com/web-flow", + "followers_url": "https://api.github.com/users/web-flow/followers", + "following_url": "https://api.github.com/users/web-flow/following{/other_user}", + "gists_url": "https://api.github.com/users/web-flow/gists{/gist_id}", + "starred_url": "https://api.github.com/users/web-flow/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/web-flow/subscriptions", + "organizations_url": "https://api.github.com/users/web-flow/orgs", + "repos_url": "https://api.github.com/users/web-flow/repos", + "events_url": "https://api.github.com/users/web-flow/events{/privacy}", + "received_events_url": "https://api.github.com/users/web-flow/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "parents": [ + { + "sha": "c09f024a189c2a3494c21a85cce9f04e4b986995", + "url": "https://api.github.com/repos/cjbarth/github-release-notes/commits/c09f024a189c2a3494c21a85cce9f04e4b986995", + "html_url": "https://github.com/cjbarth/github-release-notes/commit/c09f024a189c2a3494c21a85cce9f04e4b986995" + } + ] + } +]