{"id":27873911,"url":"https://github.com/absaoss/release-notes-presence-check","last_synced_at":"2026-06-16T12:32:03.244Z","repository":{"id":262981605,"uuid":"888544218","full_name":"AbsaOSS/release-notes-presence-check","owner":"AbsaOSS","description":"A GH action for validating presence of release notes.","archived":false,"fork":false,"pushed_at":"2026-05-17T13:46:25.000Z","size":164,"stargazers_count":0,"open_issues_count":1,"forks_count":0,"subscribers_count":6,"default_branch":"master","last_synced_at":"2026-05-17T15:53:30.291Z","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":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/AbsaOSS.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":".github/CODEOWNERS","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":"2024-11-14T15:25:04.000Z","updated_at":"2026-05-17T13:46:27.000Z","dependencies_parsed_at":"2025-05-05T01:27:39.754Z","dependency_job_id":null,"html_url":"https://github.com/AbsaOSS/release-notes-presence-check","commit_stats":null,"previous_names":["absaoss/release-notes-presence-check"],"tags_count":5,"template":false,"template_full_name":null,"purl":"pkg:github/AbsaOSS/release-notes-presence-check","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AbsaOSS%2Frelease-notes-presence-check","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AbsaOSS%2Frelease-notes-presence-check/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AbsaOSS%2Frelease-notes-presence-check/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AbsaOSS%2Frelease-notes-presence-check/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/AbsaOSS","download_url":"https://codeload.github.com/AbsaOSS/release-notes-presence-check/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AbsaOSS%2Frelease-notes-presence-check/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34406820,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-16T02:00:06.860Z","response_time":126,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"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-05-05T01:17:08.298Z","updated_at":"2026-06-16T12:32:03.238Z","avatar_url":"https://github.com/AbsaOSS.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Release Notes Presence Checker\n\n- [Motivation](#motivation)\n- [Impact to Users](#impact-to-users)\n- [Requirements](#requirements)\n- [Inputs](#inputs)\n- [Usage](#usage)\n- [Running Static Code Analysis](#running-static-code-analysis)\n- [Run Black Tool Locally](#run-black-tool-locally)\n- [Run mypy Tool Locally](#run-mypy-tool-locally)\n- [Running Unit Test](#running-unit-test)\n- [Code Coverage](#code-coverage)\n- [Run Action Locally](#run-action-locally)\n- [Contribution Guidelines](#contribution-guidelines)\n- [License Information](#license-information)\n- [Contact or Support Information](#contact-or-support-information)\n\nA GH action for validating the presence of release notes in pull requests.\n\n## Motivation\n\nThis action is designed to help maintainers and contributors ensure that release notes are present in pull requests. It can be used to prevent common issues such as:\n- Missing release notes\n- Incomplete release notes\n- Incorrect release note formats\n- Release notes in the wrong location\n\n## Impact to Users\nThe users are expected to provide the release notes in the pull request body. See example:\n```markdown\nRelease Notes:                          .... also valid: ## Release Notes:\n- 1st line of PR's release notes\n- 2nd line of PR's release notes\n```\n\nThis section can be placed anywhere in the pull request body. The action will search for the release notes based on the provided title text. _Hint:_ The title can be chapter name, the Markdown format tags are ignored.\n\n## Requirements\n- **GitHub Token**: A GitHub token with permission to fetch repository data such as Issues and Pull Requests.\n- **Python 3.11+**: Ensure you have Python 3.11 installed on your system.\n\n## Inputs\n\n### `GITHUB_TOKEN`\n- **Description**: Your GitHub token for authentication. Store it as a secret and reference it in the workflow file as secrets.GITHUB_TOKEN.\n- **Required**: Yes\n\n### `pr-number`\n- **Description**: The pull request number to check for release notes. Example: `1`.\n- **Required**: Yes\n\n### `github-repository`\n- **Description**: The GitHub repository to check for version tags. Example: `AbsaOSS/release-notes-presence-check`.\n- **Required**: Yes\n\n### `location`\n- **Description**: The location of the release notes in the pull request.\n- **Required**: No\n- **Default**: `body`\n\n### `title`\n- **Description**: The title of the release notes in the pull request. Example without regex: `Release Notes:`, with regex: `[Rr]elease [Nn]otes:`.\n- **Required**: No\n- **Default**: `[Rr]elease [Nn]otes:`\n\n### `skip-labels`\n- **Description**: The labels to skip the release notes check. Example: `skip-release-notes`.\n- **Required**: No\n- **Default**: ``\n\n### `skip-placeholders`\n- **Description**: Comma-separated placeholder tokens (e.g., `TBD`, `ToDo`). This option allows using a PR template with a predefined “Release Notes” heading without causing automatic passes. If any placeholder appears at the start of the first release-notes bullet, the check fails, ensuring authors replace template text with real notes.\n- **Required**: No\n- **Default**: ``\n\n## Usage\n\n### Adding the Action to Your Workflow\n\nSee the default action step definition:\n\n```yaml\n- uses: actions/setup-python@v5.1.1\n  with:\n    python-version: '3.11'\n\n- name: Release Notes Presence Check\n  id: release_notes_presence_check\n  uses: AbsaOSS/release-notes-presence-check@v0.4.0\n  env:\n    GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}  \n  with:\n    github-repository: ${{ github.repository }}\n    pr-number: ${{ github.event.number }} \n    location: \"body\"\n    title: \"[Rr]elease [Nn]otes:\"\n    skip-labels: \"skip-release-notes,no-release-notes\"\n    skip-placeholders: \"TBD,ToDo\"\n```\n\n## Running Static Code Analysis\n\nThis project uses Pylint tool for static code analysis. Pylint analyses your code without actually running it. It checks for errors, enforces, coding standards, looks for code smells etc.\n\nPylint displays a global evaluation score for the code, rated out of a maximum score of 10.0. We are aiming to keep our code quality high above the score 9.5.\n\n### Set Up Python Environment\n```shell\npython3 -m venv venv\nsource venv/bin/activate\npip install -r requirements.txt\n```\n\nThis command will also install a Pylint tool, since it is listed in the project requirements.\n\n### Run Pylint\nRun Pylint on all files that are currently tracked by Git in the project.\n```shell\npylint $(git ls-files '*.py')\n```\n\nTo run Pylint on a specific file, follow the pattern `pylint \u003cpath_to_file\u003e/\u003cname_of_file\u003e.py`.\n\nExample:\n```shell\npylint ./release_notes_presence_check/release_notes_presence_check_action.py\n``` \n\n## Run Black Tool Locally\nThis project uses the [Black](https://github.com/psf/black) tool for code formatting.\nBlack aims for consistency, generality, readability and reducing git diffs.\nThe coding style used can be viewed as a strict subset of PEP 8.\n\nThe project root file `pyproject.toml` defines the Black tool configuration.\nIn this project we are accepting the line length of 120 characters.\n\nFollow these steps to format your code with Black locally:\n\n### Set Up Python Environment\nFrom terminal in the root of the project, run the following command:\n\n```shell\npython3 -m venv venv\nsource venv/bin/activate\npip install -r requirements.txt\n```\n\nThis command will also install a Black tool, since it is listed in the project requirements.\n\n### Run Black\nRun Black on all files that are currently tracked by Git in the project.\n```shell\nblack $(git ls-files '*.py')\n```\n\nTo run Black on a specific file, follow the pattern `black \u003cpath_to_file\u003e/\u003cname_of_file\u003e.py`.\n\nExample:\n```shell\nblack ./release_notes_presence_check/release_notes_presence_check_action.py\n``` \n\n### Expected Output\nThis is the console expected output example after running the tool:\n```shell\nAll done! ✨ 🍰 ✨\n1 file reformatted.\n```\n\n## Run my[py] Tool Locally\n\nThis project uses the [my[py]](https://mypy.readthedocs.io/en/stable/)\ntool which is a static type checker for Python.\n\n\u003e Type checkers help ensure that you’re using variables and functions in your code correctly.\n\u003e With my[py], add type hints (PEP 484) to your Python programs,\n\u003e and my[py] will warn you when you use those types incorrectly.\nmy[py] configuration is in `pyproject.toml` file.\n\nFollow these steps to format your code with my[py] locally:\n\n### Run my[py]\n\nRun my[py] on all files in the project.\n```shell\n  mypy .\n```\n\nTo run my[py] check on a specific file, follow the pattern `mypy \u003cpath_to_file\u003e/\u003cname_of_file\u003e.py --check-untyped-defs`.\n\nExample:\n```shell\n   mypy release_notes_presence_check/release_notes_presence_check.py\n``` \n\n### Expected Output\n\nThis is the console expected output example after running the tool:\n```\nSuccess: no issues found in 1 source file\n```\n\n## Running Unit Test\n\nUnit tests are written using pytest. To run the tests, use the following command:\n\n```shell\npytest tests/\n```\n\nThis will execute all tests located in the tests directory.\n\n## Code Coverage\n\nCode coverage is collected using pytest-cov coverage tool. To run the tests and collect coverage information, use the following command:\n\n```shell\npytest --cov=. -v tests/ --cov-fail-under=80\n```\n\nThis will execute all tests located in the tests directory and generate a code coverage report.\n\nSee the coverage report on the path:\n\n```shell\nopen htmlcov/index.html\n```\n\n## Run Action Locally\nCreate *.sh file and place it in the project root.\n\n```bash\n#!/bin/bash\n\n# Ensure that Python virtual environment is activated\nif [ ! -d \".venv\" ]; then\n  echo \"Python virtual environment not found. Creating one...\"\n  python3 -m venv .venv\nfi\n\nsource .venv/bin/activate\n\n# Install dependencies\npip install -r requirements.txt\n\n# Check if GITHUB_TOKEN is set\nif [ -z \"$GITHUB_TOKEN\" ]; then\n  echo \"Error: GITHUB_TOKEN environment variable is not set.\"\n  exit 1\nfi\n\n# Set necessary environment variables\nexport INPUT_GITHUB_TOKEN=\"$GITHUB_TOKEN\"\nexport INPUT_PR_NUMBER=109\nexport INPUT_GITHUB_REPOSITORY=\"AbsaOSS/generate-release-notes\"\nexport INPUT_LOCATION=\"body\"\nexport INPUT_TITLE=\"[Rr]elease notes:\"\nexport INPUT_SKIP_LABELS=\"skip-release-notes,another-skip-label\"\nexport INPUT_SKIP_PLACEHOLDERS=\"TBD,ToDo\"\n\n# Run the main script\npython main.py\n```\n\n## Contribution Guidelines\n\nWe welcome contributions to the Version Tag Check Action! Whether you're fixing bugs, improving documentation, or proposing new features, your help is appreciated.\n\n### How to Contribute\n- **Submit Pull Requests**: Feel free to fork the repository, make changes, and submit a pull request. Please ensure your code adheres to the existing style and all tests pass.\n- **Report Issues**: If you encounter any bugs or issues, please report them via the repository's [Issues page](https://github.com/AbsaOSS/version-tag-check/issues).\n- **Suggest Enhancements**: Have ideas on how to make this action better? Open an issue to suggest enhancements.\n\nBefore contributing, please review our [contribution guidelines](https://github.com/AbsaOSS/version-tag-check/blob/master/CONTRIBUTING.md) for more detailed information.\n\n## License Information\n\nThis project is licensed under the Apache License 2.0. It is a liberal license that allows you great freedom in using, modifying, and distributing this software, while also providing an express grant of patent rights from contributors to users.\n\nFor more details, see the [LICENSE](https://github.com/AbsaOSS/version-tag-check/blob/master/LICENSE) file in the repository.\n\n## Contact or Support Information\n\nIf you need help with using or contributing to Generate Release Notes Action, or if you have any questions or feedback, don't hesitate to reach out:\n\n- **Issue Tracker**: For technical issues or feature requests, use the [GitHub Issues page](https://github.com/AbsaOSS/version-tag-check/issues).\n- **Discussion Forum**: For general questions and discussions, join our [GitHub Discussions forum](https://github.com/AbsaOSS/version-tag-check/discussions).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fabsaoss%2Frelease-notes-presence-check","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fabsaoss%2Frelease-notes-presence-check","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fabsaoss%2Frelease-notes-presence-check/lists"}