{"id":17491851,"url":"https://github.com/adamtabrams/change","last_synced_at":"2025-03-16T04:13:14.377Z","repository":{"id":43255643,"uuid":"267441818","full_name":"adamtabrams/change","owner":"adamtabrams","description":"A simple tool that automates generating and updating a changelog","archived":false,"fork":false,"pushed_at":"2024-09-04T02:41:18.000Z","size":22415,"stargazers_count":78,"open_issues_count":0,"forks_count":8,"subscribers_count":5,"default_branch":"master","last_synced_at":"2024-10-19T11:14:37.028Z","etag":null,"topics":["automation","bash","changelog","conventional-commits","git","release","semver","shell","tag","workflow"],"latest_commit_sha":null,"homepage":"","language":"Shell","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/adamtabrams.png","metadata":{"files":{"readme":"docs/README.md","changelog":"CHANGELOG.md","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}},"created_at":"2020-05-27T22:48:28.000Z","updated_at":"2024-10-15T09:59:37.000Z","dependencies_parsed_at":"2024-11-16T04:07:29.817Z","dependency_job_id":"5a005cd2-79a5-4257-8cf4-b746a45ff3a1","html_url":"https://github.com/adamtabrams/change","commit_stats":{"total_commits":81,"total_committers":2,"mean_commits":40.5,"dds":"0.32098765432098764","last_synced_commit":"0f180c2fe45d37642a080567d6ad64f186f82c7e"},"previous_names":[],"tags_count":32,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/adamtabrams%2Fchange","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/adamtabrams%2Fchange/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/adamtabrams%2Fchange/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/adamtabrams%2Fchange/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/adamtabrams","download_url":"https://codeload.github.com/adamtabrams/change/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":243822296,"owners_count":20353500,"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":["automation","bash","changelog","conventional-commits","git","release","semver","shell","tag","workflow"],"created_at":"2024-10-19T08:05:31.012Z","updated_at":"2025-03-16T04:13:14.350Z","avatar_url":"https://github.com/adamtabrams.png","language":"Shell","funding_links":[],"categories":[],"sub_categories":[],"readme":"```\n  ______________________________\n / __// // / _ | / |/ / ___/ __/\n/ /__/ _  / __ |/    / (_ / _/\n\\___/_//_/_/ |_/_/|_/\\___/___/\n```\n\n\n![lint](https://github.com/adamtabrams/change/workflows/lint/badge.svg)\n![Linux](https://github.com/adamtabrams/change/workflows/linux/badge.svg)\n![macOS](https://github.com/adamtabrams/change/workflows/macOS/badge.svg)\n\n\n# About\n\nThe goal of `change` is to take the grunt work out of creating and updating changelogs.\nIt combines the ideas from [Keep a Changelog](https://keepachangelog.com/en/1.0.0/)\nand [Conventional Commits](https://www.conventionalcommits.org/en/v1.0.0/)\nto help you generate and update a changelog template.\nThis tool can't do **all** the work of writing a\n[great changelog](https://keepachangelog.com/en/1.0.0/#bad-practices) for you.\nBut `change` can do a lot of it!\n\n\n# Generate a changelog\n![generate-changelog](./change-init-demo.gif)\n\n\n# Update, tag, and release a new version\n![change-all](./change-all-demo.gif)\n\n\n# Usage\n\n#### First generate a changelog with `change init`\n* You need to have a least one commit tagged with valid SemVer (like 0.1.0 or even v0.0.1).\n\n* `change` probably won't work well with a changelog that's formatted differently.\nSo it's better to let `change` generate one. You can transfer existing messages afterward.\n\n#### Now populate the rest of it with `change`\n* `change` can add multiple versions to your changelog, but those version tags should already exist.\nOtherwise, it will assume everything since the previous version tag is part of the newest version.\n* `change` figures out what your next version should be based on your commits and will add it to the changelog.\n* Optionally, adding `--bump PATH` can pass the newest version as an argument to a script.\nYou can customize that script to update version info anywhere in your repo.\n\n#### Fill in the details\n* You should validate what was generated and add details where ever more are needed.\n\n#### Tag the latest commit with `change tag`\n* This looks at the latest version recorded in the changelog and tags the latest commit with that version.\n* Optionally, you can add `-p` to automatically push the new version.\n\n#### Save a token with `change auth`\n* This is only needed if you want to use `change post`.\n* A personal access token is saved for use when posting a release.\n* Here are [instructions](https://help.github.com/en/github/authenticating-to-github/creating-a-personal-access-token-for-the-command-line#creating-a-token) for creating a Github token.\n* Optionally, you can use `--token TOKEN` to provide the token non-interactively.\n\n#### Post a release to GitHub with `change post`\n* This will post the section from the latest version in the changelog as a GitHub release.\n* Optionally, you can provide `--dry-run` to see the URL, version, and message body without\nactually creating the release: `change post --dry-run`\n\n#### Combine multiple commands with `change all`\n* First it runs the `change` command.\n* Then it opens your changelog with $EDITOR (or vi if that isn't set).\n* As long as you modify the changelog in some way, it commits and pushes.\n* Lastly, it runs `change tag -p` and `change post`.\n* I use this command most often.\n* Optionally, you can use the `--bump` flag.\n\n\n## Workflow\n\nThis is the general workflow I use with this tool:\n* make changes to the project\n* record those changes in commits\n    * smaller, more focused commits will help when generating the changelog\n* run `change all`\n* improve the new section of the changelog\n* save and close the file\n\n\n# Tips\n\nWith the help of curl, you can even run this tool without installing it:\n* `curl -s \"https://raw.githubusercontent.com/adamtabrams/change/master/change\" | sh -s -- [args]`\n* If you're using `change` like this for CICD, you may want to pick a specific version (instead of master).\n\nIf you use `change` often, add it to your path. Here are some options for how:\n* Create a symlink somewhere already in your path that point to `change` (my favorite):\n    * `ln -s /path/to/change/script ~/.local/bin/change`\n* Add the script's directory to your path:\n    * `export PATH=\"/path/to/change/repo:${PATH};\"`\n    * You would probably put this in a file like: .bashrc, .profile, .zprofile, etc\n* Copy the script to your current path:\n    * `cp /path/to/change/script ~/.local/bin/`\n    * Drawback: the `change` executable will remain at its version when this command was used.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fadamtabrams%2Fchange","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fadamtabrams%2Fchange","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fadamtabrams%2Fchange/lists"}