{"id":29554202,"url":"https://github.com/offchainlabs/unclog","last_synced_at":"2026-02-20T21:05:36.924Z","repository":{"id":271467533,"uuid":"913045490","full_name":"OffchainLabs/unclog","owner":"OffchainLabs","description":"unclog - micro ncremental change log output gizmo","archived":false,"fork":false,"pushed_at":"2026-01-23T18:01:22.000Z","size":205,"stargazers_count":2,"open_issues_count":2,"forks_count":4,"subscribers_count":7,"default_branch":"main","last_synced_at":"2026-02-11T16:17:50.223Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/OffchainLabs.png","metadata":{"files":{"readme":"README.md","changelog":"changelog/changelog.go","contributing":null,"funding":null,"license":null,"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":"2025-01-06T23:23:21.000Z","updated_at":"2026-01-23T17:59:37.000Z","dependencies_parsed_at":"2025-01-08T00:18:01.920Z","dependency_job_id":"cdb26559-2823-4678-92ca-6fe0bd9d7c10","html_url":"https://github.com/OffchainLabs/unclog","commit_stats":null,"previous_names":["offchainlabs/unclog"],"tags_count":11,"template":false,"template_full_name":null,"purl":"pkg:github/OffchainLabs/unclog","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/OffchainLabs%2Funclog","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/OffchainLabs%2Funclog/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/OffchainLabs%2Funclog/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/OffchainLabs%2Funclog/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/OffchainLabs","download_url":"https://codeload.github.com/OffchainLabs/unclog/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/OffchainLabs%2Funclog/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29664532,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-20T19:49:36.704Z","status":"ssl_error","status_checked_at":"2026-02-20T19:44:05.372Z","response_time":59,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: 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":[],"created_at":"2025-07-18T07:08:31.618Z","updated_at":"2026-02-20T21:05:36.918Z","avatar_url":"https://github.com/OffchainLabs.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"## unclog the changelog\n\nThe purpose of this tool is to enable a more automated changelog management workflow built around\na directory of changelog \"fragments\", which can be independently added in PRs and merged together\ninto the previous changelog at release time.\n\nThe repo also demonstrates using a github action together with the `unclog check` subcommand \nto automate ensuring that all PRs include a changelog fragment. \n\n#### What is a changelog fragment?\n\nA changelog fragment is a tiny markdown file consisting only of section headers, matching the set \nof headers defined by the [Keep a Changelog](https://keepachangelog.com/en/1.1.0/) format, followed by\nbullet points of changelog entries that should be merged into their respect sections into\na combined release changelog. The following sections are supported by default:\n```\n### Added\n- for new features.\n### Changed\n- for changes in existing functionality.\n### Deprecated\n- for soon-to-be removed features.\n### Removed\n- for now removed features.\n### Fixed\n- for any bug fixes.\n### Security\n- in case of vulnerabilities.\n\n### Ignored\n- see below\n```\n\nNote that in addition to the sections supported by \"keep a changelog\" we have added a new section called\n\"Ignored\". This section was added because sometimes we have a valid reason for not adding to the changelog,\nlike a bug fix for an unreleased/incomplete feature, or a PR that reverts a previously merged but unreleased PR.\nWhen the `Ignored` section is used, the bullet point should be a reason that this PR should be excluded\nfrom the changelog.\n\n### Customizing Sections\n\nYou can customize the allowed sections (e.g. to add a `Configuration` section) by adding a configuration file \nto your repository at `changelog/.unclog.yaml`.\n\nExample `changelog/.unclog.yaml`:\n```yaml\nsections:\n  - Added\n  - Changed\n  - Deprecated\n  - Removed\n  - Fixed\n  - Security\n  - Configuration\n\n```\n\nIf this file is present, `unclog` will use the sections defined in the YAML file instead of the default list.\n\n### Usage\n\nThe fragment files can contain one section or multiple sections, and each section can have 1 or more bullet points.\nFor example, [here](/cmd/release/testdata/example-single.md) is a fragment file for a typical change,\nwith just one bullet added to the `Fixed` section:\n\n```\n### Fixed\n\n- Example of a single changelog entry.\n```\n\n[Here](cmd/release/testdata/example-multi.md) is an example fragment file for a change, where one or more bullets\nhave been added to multiple sections:\n\n```\n### Fixed\n\n- A bug was fixed.\n- Another bug was fixed.\n\n### Security\n\n- The bug fixes resolved a security issue.\n```\n\n### Why manage the changelog this way\n\nThere are a few benefits to using separate files over other options (simple file; deriving from pr titles):\n- Standardize changelog entry style; punctuation and automatically include backrefs to pull requests.\n- Reduce the possibility for human error. The release subcommand uses the range of commits between the\n  previous release tag (as parsed from the previously released changelog in the repo) and the newly tagged\n  release.\n- Enables github automated checks for the existence of a changelog edit.\n- Avoids frustrating conflicts on the changelog itself.\n- Enables more control and flexibility compared to trying to parse everything out of PR metadata. We prototyped\n  that approach, but it had a few issues like single-commit PRs, PRs that needed to add multiple sections of changelog.\n\n### Best Practices\n\n- Put files in the `changelog` directory.\n- Pick a unique name for the changelog file - an obvious choice would be `\u003cgithub user name\u003e_\u003cbranch name\u003e.md`.\n- Avoid editing changelogs; only add new files.\n- The tool supports adding as many bullet points as you want to any section you want. But don't make up sections,\n  unknown sections will be treated as invalid in the github workflow check.\n\n### Installation\n\nThis repo is designed so that `unclog` can be simply installed with `go install`:\n```\n$ go install github.com/OffchainLabs/unclog@latest\n```\n\nThis will install the `unclog` binary on your gopath.\n\n### Using the tool to make a released changelog\n\nNote: before running the tool, make sure you have tagged the release commit. The tool looks at individual PR commits\nto find all the information used in building the changelog.\n\n```\n$ cd $PRYSM_REPO_DIR\n$ git fetch \u0026\u0026 git checkout origin/develop\n$ git checkout -b update-changelog\n$ unclog release -repo=$PRYSM_REPO_DIR -tag=$NEW_RELEASE_TAG -cleanup \u003e $PRYSM_REPO_DIR/CHANGELOG.md\n$ git commit -m \"updating the changelog for $NEW_RELEASE_TAG release\"\n```\n\nNote the `-cleanup` tag will `git rm` only for the changelog fragments that were found in commits between the\nrelease tag discovered by parsing the previously released changelog file and the tag specified in the `-tag` argument.\nSo any changelog fragments that are unreleased will be left alone. At this point you can edit the resulting changelog\nfile to add any desired high level context about the release.\n\nWhen the release subcommand parses the previously committed changelog, it discards everything in the file that comes before\nthe release header where the release version is specified. So if you want your notes to persist into the next release, make\nsure to place them between the release header and the changelog sections. The release header is the markdown heading that\nlooks like this: ```## [v5.2.0](https://github.com/prysmaticlabs/prysm/compare/v5.1.2...v5.2.0)```\n\n### Github workflow\n\nThe workflow is currently quite heavy because it has to build the tool before using it to check commits. One advatange of\nkeeping this tool as a separate repo (under the OffchainLabs org) would be setting up a process to pre-build the binary\nand copy it to the action. But building the binary each time also works.\n\nLook at the PRs against this repo for examples of the tool allowing and blocking PRs based on the observed changelog fragments.\n\n### Example in prysm\n\nThe [changelog-tool](https://github.com/prysmaticlabs/prysm/tree/changelog-tool) branch in prysm has an example commit \nconverting many of the unreleased changelog entries to a single fragment file. The commit to transition to this format\nshould consist of adding the github workflow files, an update to the contributing doc, and a fragment file to account for\nall merged PRs.\n\nI did not want to push a semver tag that could throw off anyone's release automation, and attempting to push my test tag\nwas rejected by our repo's policies. So you need to recreate the tag locally. Here are complete steps for for trying out the\nexample branch:\n\n```\n$ cd $PRYSM_REPO_DIR\n$ git fetch \u0026\u0026 git checkout changelog-tool\n$ git tag changelog-test changelog-tool\n$ unclog release -repo=$PRYSM_REPO_DIR -tag=$NEW_RELEASE_TAG -cleanup \u003e CHANGELOG.md\n$ git status # or git diff, to check out the results\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Foffchainlabs%2Funclog","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Foffchainlabs%2Funclog","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Foffchainlabs%2Funclog/lists"}