{"id":19368449,"url":"https://github.com/anchore/chronicle","last_synced_at":"2026-05-13T20:02:09.529Z","repository":{"id":42451440,"uuid":"412206966","full_name":"anchore/chronicle","owner":"anchore","description":"a fast changelog generator sourced from PRs and Issues","archived":false,"fork":false,"pushed_at":"2026-05-11T19:40:34.000Z","size":727,"stargazers_count":63,"open_issues_count":17,"forks_count":6,"subscribers_count":10,"default_branch":"main","last_synced_at":"2026-05-11T21:35:07.293Z","etag":null,"topics":["changelog","changelog-generator","github","golang","hacktoberfest"],"latest_commit_sha":null,"homepage":"","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/anchore.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2021-09-30T19:52:14.000Z","updated_at":"2026-05-11T19:40:36.000Z","dependencies_parsed_at":"2023-12-14T13:40:29.028Z","dependency_job_id":"578b5e0c-7841-4044-9844-d1a04b7ff057","html_url":"https://github.com/anchore/chronicle","commit_stats":null,"previous_names":[],"tags_count":17,"template":false,"template_full_name":null,"purl":"pkg:github/anchore/chronicle","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/anchore%2Fchronicle","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/anchore%2Fchronicle/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/anchore%2Fchronicle/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/anchore%2Fchronicle/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/anchore","download_url":"https://codeload.github.com/anchore/chronicle/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/anchore%2Fchronicle/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32997729,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-13T13:14:54.681Z","status":"ssl_error","status_checked_at":"2026-05-13T13:14:51.610Z","response_time":115,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["changelog","changelog-generator","github","golang","hacktoberfest"],"created_at":"2024-11-10T08:06:28.074Z","updated_at":"2026-05-13T20:02:09.524Z","avatar_url":"https://github.com/anchore.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# chronicle\n\n[![Validations](https://github.com/anchore/chronicle/actions/workflows/validations.yaml/badge.svg)](https://github.com/anchore/chronicle/actions/workflows/validations.yaml)\n[![Go Report Card](https://goreportcard.com/badge/github.com/anchore/chronicle)](https://goreportcard.com/report/github.com/anchore/chronicle)\n[![GitHub release](https://img.shields.io/github/release/anchore/chronicle.svg)](https://github.com/anchore/chronicle/releases/latest)\n[![GitHub go.mod Go version](https://img.shields.io/github/go-mod/go-version/anchore/chronicle.svg)](https://github.com/anchore/chronicle)\n[![License: Apache-2.0](https://img.shields.io/badge/License-Apache%202.0-blue.svg)](https://github.com/anchore/chronicle/blob/main/LICENSE)\n[![Slack Invite](https://img.shields.io/badge/Slack-Join-blue?logo=slack)](https://anchore.com/slack)\n\n\n**A fast changelog generator that sources changes from GitHub PRs and issues, organized by labels.**\n\n\nCreate a changelog from the last GitHib release until the current git HEAD tag/commit for the git repo in the current directory:\n```bash\nchronicle \n```\n\nCreate a changelog with all changes from v0.16.0 until current git HEAD tag/commit for the git repo in the current directory:\n```bash\nchronicle --since-tag v0.16.0\n```\n\nCreate a changelog between two specific tags for a repo at the given path\n```bash\nchronicle --since-tag v0.16.0 --until-tag v0.18.0 ./path/to/git/repo\n```\n\nCreate a changelog and guess the release version from the set of changes in the changelog\n```bash\nchronicle -n\n```\n\nJust print the next release version based on the set of changes (don't create a changelog)\n```bash\nchronicle -o version\n```\n\nWrite a changelog to a file and the resolved version to another file in one run (nothing on stdout)\n```bash\nchronicle -o md=CHANGELOG.md -o version=VERSION\n```\n\nRender the changelog with ANSI styling for the terminal (falls back to plain markdown if stdout isn't a TTY)\n```bash\nchronicle -o md-pretty\n```\n\n## Installation\n\n```bash\ncurl -sSfL https://get.anchore.io/chronicle | sudo sh -s -- -b /usr/local/bin\n```\n\n...or, you can specify a release version and destination directory for the installation:\n\n```\ncurl -sSfL https://get.anchore.io/chronicle | sudo sh -s -- -b \u003cDESTINATION_DIR\u003e \u003cRELEASE_VERSION\u003e\n```\n\n## Configuration\n\nConfiguration search paths:\n  - `.chronicle.yaml`\n  - `.chronicle/config.yaml`\n  - `~/.chronicle.yaml`\n  - `\u003cXDG_CONFIG_HOME\u003e/chronicle/config.yaml`\n\n### Default values\n\nConfiguration options (example values are the default):\n\n```yaml\n# output format(s); each entry is NAME or NAME=PATH. Repeat to write more\n# than one format/destination in a single run. Available NAMEs:\n#   md         — plain markdown\n#   md-pretty  — ANSI-styled markdown (stdout only; falls back to md if not a TTY)\n#   json       — release description as JSON\n#   version    — just the resolved version string with a trailing newline\n# An entry with no path writes to stdout (at most one entry may write to\n# stdout).\n# same as -o, --output, and CHRONICLE_OUTPUT env var\noutput:\n  - md\n  # - md=CHANGELOG.md\n  # - version=VERSION\n  # - json\n  # - md-pretty\n\n# suppress all logging output\n# same as -q ; CHRONICLE_QUIET env var\nquiet: false\n\n# all logging options\nlog:\n  # use structured logging\n  # same as CHRONICLE_LOG_STRUCTURED env var\n  structured: false\n\n  # the log level\n  # same as CHRONICLE_LOG_LEVEL env var\n  level: \"warn\"\n\n  # location to write the log file (default is not to have a log file)\n  # same as CHRONICLE_LOG_FILE env var\n  file: \"\"\n\n# guess what the next release version is based on the current version and set of changes (cannot be used with --until-tag)\n# same as --speculate-next-version / -n ; CHRONICLE_SPECULATE_NEXT_VERSION env var\nspeculate-next-version: false\n\n# override the starting git tag for the changelog (default is to detect the last release automatically)\n# same as --since-tag / -s ; CHRONICLE_SINCE_TAG env var\nsince-tag: \"\"\n\n# override the ending git tag for the changelog (default is to use the tag or commit at git HEAD)\n# same as --until-tag / -u ; CHRONICLE_SINCE_TAG env var\nuntil-tag: \"\"\n\n# if the current release version is \u003c v1.0 then breaking changes will bump the minor version field\n# same as CHRONICLE_ENFORCE_V0 env var\nenforce-v0: false\n\n# the title used for the changelog\n# same as CHRONICLE_TITLE\ntitle: Changelog\n\n# all github-related settings\ngithub:\n  \n  # the github host to use (override for github enterprise deployments)\n  # same as CHRONICLE_GITHUB_HOST env var\n  host: github.com\n  \n  # do not consider any issues or PRs with any of the given labels\n  # same as CHRONICLE_GITHUB_EXCLUDE_LABELS env var\n  exclude-labels:\n    - duplicate\n    - question\n    - invalid\n    - wontfix\n    - wont-fix\n    - release-ignore\n    - changelog-ignore\n    - ignore\n  \n  # consider merged PRs as candidate changelog entries (must have a matching label from a 'github.changes' entry)\n  # same as CHRONICLE_GITHUB_INCLUDE_PRS env var\n  include-prs: true\n\n  # consider closed issues as candidate changelog entries (must have a matching label from a 'github.changes' entry)\n  # same as CHRONICLE_GITHUB_INCLUDE_ISSUES env var\n  include-issues: true\n\n  # issues can only be considered for changelog candidates if they have linked PRs that are merged (note: does NOT require github.include-issues to be set)\n  # same as CHRONICLE_GITHUB_ISSUES_REQUIRE_LINKED_PRS env var\n  issues-require-linked-prs: false\n  \n  # list of definitions of what labels applied to issues or PRs constitute a changelog entry. These entries also dictate \n  # the changelog section, the changelog title, and the semver field that best represents the class of change.\n  # note: cannot be set via environment variables\n  changes: [...\u003clist of entries\u003e...] # See \"Default GitHub change definitions\" section for more details\n\n```\n\n### Default GitHub change definitions\n\nThe `github.changes` configurable is a list of mappings, each that take the following fields:\n\n- `name`: _[string]_ singular, lowercase, hyphen-separated (no spaces) name that best represents the change (e.g. \"breaking-change\", \"security\", \"added-feature\", \"enhancement\", \"new-feature\", etc).\n- `title`: _[string]_ title of the section in the changelog listing all entries.\n- `semver-field`: _[string]_ change entries will bump the respective semver field when guessing the next release version. Allowable values: `major`, `minor`, or `patch`.\n- `labels`: _[list of strings]_ all issue or PR labels that should match this change section.\n\nThe default value for `github.changes` is:\n\n```yaml\n- name: security-fixes\n  title: Security Fixes\n  semver-field: patch\n  labels:\n    - security\n    - vulnerability\n  \n- name: added-feature\n  title: Added Features\n  semver-field: minor\n  labels:\n    - enhancement\n    - feature\n    - minor\n  \n- name: bug-fix\n  title: Bug Fixes\n  semver-field: patch\n  labels:\n    - bug\n    - fix\n    - bug-fix\n    - patch\n  \n- name: breaking-feature\n  title: Breaking Changes\n  semver-field: major\n  labels:\n    - breaking\n    - backwards-incompatible\n    - breaking-change\n    - breaking-feature\n    - major\n    \n- name: removed-feature\n  title: Removed Features\n  semver-field: major\n  labels:\n    - removed\n  \n- name: deprecated-feature\n  title: Deprecated Features\n  semver-field: minor\n  labels:\n    - deprecated\n\n- name: unknown\n  title: Additional Changes\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fanchore%2Fchronicle","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fanchore%2Fchronicle","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fanchore%2Fchronicle/lists"}