{"id":42194613,"url":"https://github.com/scientific-python/action-check-changelogfile","last_synced_at":"2026-01-27T00:01:51.967Z","repository":{"id":147776231,"uuid":"314327403","full_name":"scientific-python/action-check-changelogfile","owner":"scientific-python","description":"GitHub Action to check if change log entry conforms to Astropy format","archived":false,"fork":false,"pushed_at":"2026-01-05T17:03:17.000Z","size":76,"stargazers_count":1,"open_issues_count":4,"forks_count":4,"subscribers_count":3,"default_branch":"main","last_synced_at":"2026-01-07T08:52:05.077Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"bsd-3-clause","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/scientific-python.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"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":"2020-11-19T17:52:40.000Z","updated_at":"2026-01-05T17:03:14.000Z","dependencies_parsed_at":"2024-04-23T11:22:18.032Z","dependency_job_id":"2d14fa2a-cb32-489d-b53b-df18f892b648","html_url":"https://github.com/scientific-python/action-check-changelogfile","commit_stats":{"total_commits":26,"total_committers":4,"mean_commits":6.5,"dds":"0.15384615384615385","last_synced_commit":"94a28d37baa7a27775b2934454dba0cb7786738a"},"previous_names":[],"tags_count":3,"template":false,"template_full_name":null,"purl":"pkg:github/scientific-python/action-check-changelogfile","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/scientific-python%2Faction-check-changelogfile","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/scientific-python%2Faction-check-changelogfile/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/scientific-python%2Faction-check-changelogfile/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/scientific-python%2Faction-check-changelogfile/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/scientific-python","download_url":"https://codeload.github.com/scientific-python/action-check-changelogfile/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/scientific-python%2Faction-check-changelogfile/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28792638,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-26T21:49:50.245Z","status":"ssl_error","status_checked_at":"2026-01-26T21:48:29.455Z","response_time":59,"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":[],"created_at":"2026-01-27T00:01:51.198Z","updated_at":"2026-01-27T00:01:51.949Z","avatar_url":"https://github.com/scientific-python.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# GitHub Action to check if change log entry conforms to given rules in plain text file\n\n[![CI Status](https://github.com/scientific-python/action-check-changelogfile/workflows/CI/badge.svg)](https://github.com/scientific-python/action-check-changelogfile/actions) [![Coverage](https://codecov.io/gh/scientific-python/action-check-changelogfile/branch/main/graph/badge.svg)](https://codecov.io/gh/scientific-python/action-check-changelogfile)\n\nCheck if a change log entry is present. If present, whether it is in the\nexpected section given the milestone. If not, whether it is allowed to\nbe missing or not. Create a `.github/workflows/check_changelog_entry.yml`\nwith this:\n\n```\nname: Check PR change log\n\non:\n  pull_request:\n    types: [opened, synchronize, labeled, unlabeled]\n\njobs:\n  changelog_checker:\n    name: Check if change log entry is correct\n    runs-on: ubuntu-latest\n    steps:\n    - name: Check change log entry\n      uses: scientific-python/action-check-changelogfile@0.3\n      env:\n        CHANGELOG_FILENAME: CHANGES.rst\n        GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}\n```\n\nNote that adding the environment variable `CHECK_MILESTONE: false` (or anything other than `true`)\nwill cause the milestone check to be skipped.\n\nLabels can be applied to the pull request to control its outcome:\n\n* `skip-changelog-checks`: This results in success regardless; same as\n  skipping the check altogether.\n* `no-changelog-entry-needed`: This results in failure if a change log entry\n  is present and success if it is missing. Use this label when the change log\n  is decidedly not needed no matter what.\n* `Affects-dev`: This results in failure if a change log entry is present and\n  success if it is missing. This is because a change to an unreleased change\n  does not require a change log.\n\nOther ways this action can fail:\n\n* Change log file is missing. This file is assumed to be `CHANGES.rst` but\n  can be overwritten by `CHANGELOG_FILENAME` environment variable.\n* Change log entry is present in multiple version sections.\n* Change log entry is present but no milestone is set.\n* Change log entry is under a version section that is inconsistent with the\n  milestone set.\n* Change log entry is missing and no special label (see above) is applied to\n  indicate that it is expected to be missing.\n\n#### How to run parser locally\n\nWhile this is not an installable package, you are still able to run the parser\nfunction if you have this repository checked out locally and you are in the\nsame directory as the parser module. Example usage:\n\n```\n\u003e\u003e\u003e from core import load\n\u003e\u003e\u003e changes = load('path/to/CHANGES.rst')\n\u003e\u003e\u003e changes.versions\n['0.1',\n '0.2',\n '0.2.1',\n '0.2.2',\n '0.2.3',\n ...]\n\u003e\u003e\u003e changes.issues\n[256,\n 272,\n 291,\n 293,\n 296,\n ...]\n\u003e\u003e\u003e changes.versions_for_issue(4242)\n['1.2']\n\u003e\u003e\u003e changes.issues_for_version('2.0.7')\n[7411, 7248, 7402, 7422, 7469, 7486, 7453, 7493, 7510, 7493]\n```\n\n#### Format specification\n\nThe current format uses reStructuredText. Changelog entries should be given as\nbullet point items inside sections for each version. These sections should have\na title with the following syntax:\n\n```\n    version (release date)\n```\n\nThe release date can be `unreleased` if the version is not released yet.\n\nThe version sections can optionally include sub-sections in which the bullet\nitems are organized, and the file can also optionally include an overall title.\n\n#### Why is this not written in TypeScript?\n\nWriting this in TypeScript would make it run much faster. Unfortunately,\nthis Action depends on custom change log check logic, which was implemented in\nPython. Therefore, this Action is best done in Python as well and needs\nDocker to run.\n\nIn its current state, it probably takes about 20-30 seconds.\nFortunately, this Action can be run in parallel to the regular CI\nworkflow. A typical CI takes much longer than 30 seconds anyway,\nso the overhead of running this Action should not be a blocker.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fscientific-python%2Faction-check-changelogfile","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fscientific-python%2Faction-check-changelogfile","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fscientific-python%2Faction-check-changelogfile/lists"}