{"id":17319915,"url":"https://github.com/saransh-cpp/releaseup","last_synced_at":"2025-07-17T03:08:54.643Z","repository":{"id":59484336,"uuid":"536976468","full_name":"Saransh-cpp/releaseup","owner":"Saransh-cpp","description":"An extractive approach for generating release notes from comments and docstrings.","archived":false,"fork":false,"pushed_at":"2024-10-07T11:59:37.000Z","size":169,"stargazers_count":11,"open_issues_count":2,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-06-20T10:58:33.013Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"https://releaseup.readthedocs.io/","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Saransh-cpp.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","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}},"created_at":"2022-09-15T10:33:27.000Z","updated_at":"2024-10-07T11:59:40.000Z","dependencies_parsed_at":"2023-09-26T01:15:19.425Z","dependency_job_id":"47af6aac-f961-4d1b-9bab-9a5027aba328","html_url":"https://github.com/Saransh-cpp/releaseup","commit_stats":{"total_commits":137,"total_committers":3,"mean_commits":"45.666666666666664","dds":"0.44525547445255476","last_synced_commit":"c440a498a55b72da06e3f4f764691a37c2a1081f"},"previous_names":[],"tags_count":2,"template":false,"template_full_name":null,"purl":"pkg:github/Saransh-cpp/releaseup","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Saransh-cpp%2Freleaseup","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Saransh-cpp%2Freleaseup/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Saransh-cpp%2Freleaseup/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Saransh-cpp%2Freleaseup/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Saransh-cpp","download_url":"https://codeload.github.com/Saransh-cpp/releaseup/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Saransh-cpp%2Freleaseup/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":265562350,"owners_count":23788510,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","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":"2024-10-15T13:28:06.878Z","updated_at":"2025-07-17T03:08:54.628Z","avatar_url":"https://github.com/Saransh-cpp.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# releaseup\n\n![releaseup](https://user-images.githubusercontent.com/74055102/190684416-d3f15189-8c4f-4a11-a374-500e8496d9b1.png)\n\n[![CI](https://github.com/Saransh-cpp/releaseup/actions/workflows/ci.yml/badge.svg)](https://github.com/Saransh-cpp/releaseup/actions/workflows/ci.yml)\n[![Documentation Status](https://readthedocs.org/projects/releaseup/badge/?version=latest)](https://releaseup.readthedocs.io/en/latest/?badge=latest)\n[![pre-commit.ci status](https://results.pre-commit.ci/badge/github/Saransh-cpp/releaseup/main.svg)](https://results.pre-commit.ci/latest/github/Saransh-cpp/releaseup/main)\n[![codecov](https://codecov.io/gh/Saransh-cpp/releaseup/branch/main/graph/badge.svg?token=L6ObHKhaZ7)](https://codecov.io/gh/Saransh-cpp/releaseup)\n[![discussion](https://img.shields.io/static/v1?label=Discussions\u0026message=Ask\u0026color=blue\u0026logo=github)](https://github.com/Saransh-cpp/releaseup/discussions)\n\n[![Python Versions](https://img.shields.io/pypi/pyversions/releaseup)](https://pypi.org/project/releaseup/)\n[![Package Version](https://badge.fury.io/py/releaseup.svg)](https://pypi.org/project/releaseup/)\n[![Downloads](https://static.pepy.tech/badge/releaseup)](https://pepy.tech/project/releaseup)\n![License](https://img.shields.io/github/license/Saransh-cpp/releaseup?color=blue)\n[![black](https://img.shields.io/badge/code%20style-black-000000.svg)](https://github.com/psf/black)\n\nAn extractive `NLP` approach for generating release notes from comments and\ndocstrings added between two git tags.\n\n`releaseup` extracts all the comments and docstrings using `git diff`,\npreprocesses the outputs, and finally generates release notes using `sklearn`'s\n`TfidfVectorizer` and `spacy`! The generated release notes are not at all\nabstractive, which is something `releaseup` aims to achieve in the future.\n\nAs of now, `releaseup` is a holiday project (built in mere 2 days), but I do\nintend to maintain it in the future. `releaseup` does work, but only if your\ncomments are well written.\n\nRead more about `releaseup` through its\n[documentation](https://releaseup.readthedocs.io).\n\n## Structure\n\n- All the extraction and preprocessing work is carried out using the `extract`\n  module.\n- All the extractive `NLP` work is done inside the `nlp_backend` module.\n- `releaseup` also prvides a high level API present inn the `high_level` module.\n\nSee [examples](#Examples) for more information.\n\n## Installation\n\nUse `pip` magic\n\n`releaseup` uses modern `Python` packaging and can be installed using `pip` -\n\n```\npython -m pip install releaseup\n```\n\nFor developer install, see our\n[Contributing Guidelines](https://github.com/Saransh-cpp/releaseup/blob/main/releaseup).\n\n## Examples\n\n### High level API\n\n```py\nimport releaseup\n\ntag = [\"v0.8.0\", \"v0.9.0\"]  # can also be commits\npath = \"././mypackage/\"  # to ignore changes made to other folders (./github/, docs/, etc) and files\ncomments_filename = \"COMMENTS.txt\"\n\n# extract added comments and docstrings\ncomments = releaseup.extract_release_comments(tags, path, comments_filename)\n\nrelease_filename = \"RELEASE_NOTES.txt\"\n\n# generate release notes\nnotes = releaseup.generate_release_notes(\n    comments,\n    release_filename,\n    model_name=\"en_core_web_trf\",  # any spacy model\n    threshold=0.3,  # percentage of comments to be selected\n)\n```\n\n### Low level API\n\n```py\nfrom releaseup.extract import (\n    extract_additions,\n    get_comments_and_docstrings,\n    get_diff,\n    preprocess_additions,\n)\nfrom releaseup.nlp_backend import get_release_notes, get_tfid_scores\n\ntag = [\"v0.8.0\", \"v0.9.0\"]  # can also be commits\npath = \"././mypackage/\"  # to ignore changes made to other folders (./github/, docs/, etc) and files\ncomments_filename = \"COMMENTS.txt\"\n\n# extract added comments and docstrings\nget_diff(tags, path, comments_filename)\nextracted_additions = extract_additions(comments_filename)\npreprocessed_additions = preprocess_additions(extracted_additions)\ncomments = get_comments_and_docstrings(preprocessed_additions)\n\nrelease_filename = \"RELEASE_NOTES.txt\"\n\nword_score = get_tfid_scores(comments)\nrelease_notes = get_release_notes(\n    comments,\n    word_score,\n    release_filename,\n    model_name=\"en_core_web_trf\",  # any spacy model\n    threshold=0.3,  # percentage of comments to be selected\n)\n```\n\n## Testing\n\n**TODO: ADD TESTS**\n\n## Activating pre-commit\n\n`releaseup` uses a set of `pre-commit` hooks and the `pre-commit` bot to format,\ntype-check, and prettify the codebase. The hooks can be installed locally\nusing -\n\n```\npre-commit install\n```\n\nThis would run the checks every time a commit is created locally. The checks\nwill only run on the files modified by that commit, but the checks can be\ntriggered for all the files using -\n\n```\npre-commit run --all-files\n```\n\nIf you would like to skip the failing checks and push the code for further\ndiscussion, use the `--no-verify` option with `git commit`.\n\n## Documenting releaseup\n\n`releaseup`'s documentation is mainly written in the form of\n[docstrings](https://peps.python.org/pep-0257/) and\n[Markdown](https://en.wikipedia.org/wiki/Markdown). The docstrings include the\ndescription, arguments, examples, return values, and attributes of a class or a\nfunction, and the `.md` files enable us to render this documentation on\n`releaseup`'s documentation website.\n\n`releaseup` primarily uses [MkDocs](https://www.mkdocs.org/) and\n[mkdocstrings](https://mkdocstrings.github.io/) for rendering documentation on\nits website. The configuration file (`mkdocs.yml`) for `MkDocs` can be found\n[here](https://github.com/Saransh-cpp/releaseup/blob/main/mkdocs.yml). The\ndocumentation is deployed on \u003chttps://readthedocs.io\u003e\n[here](https://releaseup.readthedocs.io/en/latest/).\n\nIdeally, with the addition of every new feature to `releaseup`, documentation\nshould be added using comments, docstrings, and `.md` files.\n\n### Building documentation locally\n\nThe documentation is located in the `docs` folder of the main repository. This\ndocumentation can be generated using the `docs` dependencies of `releaseup` in\nthe following way -\n\n```\nmkdocs serve\n```\n\nThe commands executed above will clean any existing documentation build, create\na new build (in `./site/`), and serve it on your `localhost`. To just build the\ndocumentation, use -\n\n```\nmkdocs build\n```\n\n## Nox\n\nThe fastest way to start with development is to use nox. If you don't have nox,\nyou can use `pipx run nox` to run it without installing, or `pipx install nox`.\nIf you don't have pipx (pip for applications), then you can install with with\n`pip install pipx` (the only case were installing an application with regular\npip is reasonable). If you use macOS, then pipx and nox are both in brew, use\n`brew install pipx nox`.\n\nTo use, run `nox`. This will lint and test using every installed version of\nPython on your system, skipping ones that are not installed. You can also run\nspecific jobs:\n\n```console\n$ nox -s lint  # Lint only\n$ nox -s tests-3.9  # Python 3.9 tests only\n$ nox -s docs -- serve  # Build and serve the docs\n$ nox -s build  # Make an SDist and wheel\n```\n\nThe default sessions (`lint` and `tests`) can be executed using -\n\n```\nnox\n```\n\n## Continuous Integration\n\n`releaseup` uses `GitHub Actions` as a `CI` provider to run tests, build docs,\nrelease on `PyPI`, test package, etc. All the configuration for `GitHub Actions`\nis written in `YAML`, present in `.github/` directory. The CI runs every time a\npull request is made or a push is made to the `main` branch.\n\n## Continuous Deployment\n\n`releaseup` uses `Read The Docs` as a `CD` provider to deploy documentation. All\nthe configuration for `Read The Docs` is written in `YAML`, present in the\n`.readthedocs.yml` file. The CD runs every time a push is made to the `main`\nbranch.\n\n## Credits\n\nLogo image credits: Taufik Ramadhan (taken from canva)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsaransh-cpp%2Freleaseup","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsaransh-cpp%2Freleaseup","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsaransh-cpp%2Freleaseup/lists"}