Skip to content
The items JSON

The items JSON

gh release-changes items <tag> prints one JSON object, indented with two spaces, to stdout. It is an object rather than an array so fields can be added without breaking consumers. Field names and group identifiers are public API: they may be added to, never renamed.

{
  "repo": "owner/repo",
  "tag": "v3.7.0",
  "previous_tag": "v3.6.2",
  "items": [
    {
      "pr": 123,
      "title": "feat(6768,6747)!: …",
      "type": "feat",
      "scopes": ["6768", "6747"],
      "breaking": true,
      "issues": [6768, 6747],
      "author": "octocat",
      "bot": false,
      "url": "https://github.com/owner/repo/pull/123",
      "group": "features"
    }
  ]
}

Groups

In display order:

IdentifierNameWhat lands there
featuresFeaturesfeat
fixesBug fixesfix
otherOtherdocs test ci refactor perf style build revert
maintenanceMaintenancechore
dependenciesDependenciesa deps or deps-dev scope, or a dependabot author — whatever the type
unclassifiedUnclassifiedtitles outside the <type>[(<scopes>)][!]: <subject> format, never dropped

Items are listed in display order: by group as above, then by first issue number and PR number, with items without an issue last; dependencies by PR number. scopes and issues are always arrays, never null. An unclassified item has an empty type, empty scopes and issues, and breaking: false — unless --link closing gave it issues, see below.

FieldMeaning
repoThe source repository as OWNER/REPO: -R, or the repository of the current directory
tagThe tag the notes were generated for
previous_tagThe base of the comparison: --previous-tag, the previous final release with --since-final, or GitHub’s choice; "" for a first release
itemsThe pull requests, in display order; [] when there are none

Unclassified items are listed and reported with a warning on stderr naming their PRs; the run still exits 0.

issue_sources

issues holds the digit scopes of the title. With --link closing it also holds the issues the pull request closes on GitHub, and every item gets an issue_sources object that says where each number came from:

{
  "pr": 1467,
  "title": "fix(1514): improved accessibility on table headers",
  "issues": [1514, 1600],
  "issue_sources": {
    "title": [1514],
    "closing": [1514, 1600]
  }
}
FieldMeaning
titleThe digit scopes of the title, in title order
closingThe issues the pull request closes on GitHub, ascending

Both are always arrays, also when empty, and a number can be in both. issues is their union: the title’s numbers first, then the closing ones that are not among them, ascending. Without --link the field is left out, so the document is exactly as before. More sources may be added as fields of issue_sources.

How a line becomes an item is described in Parser.