{"id":15643215,"url":"https://github.com/kikobeats/automate-release","last_synced_at":"2026-04-03T23:02:26.462Z","repository":{"id":39752382,"uuid":"152453569","full_name":"Kikobeats/automate-release","owner":"Kikobeats","description":"No more manual work in your software releases.","archived":false,"fork":false,"pushed_at":"2026-03-05T10:34:17.000Z","size":1681,"stargazers_count":62,"open_issues_count":0,"forks_count":4,"subscribers_count":0,"default_branch":"master","last_synced_at":"2026-03-14T19:30:56.845Z","etag":null,"topics":["commit","push","release"],"latest_commit_sha":null,"homepage":"","language":"JavaScript","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/Kikobeats.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","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":"2018-10-10T16:17:54.000Z","updated_at":"2026-03-05T10:34:21.000Z","dependencies_parsed_at":"2025-12-17T13:05:29.349Z","dependency_job_id":null,"html_url":"https://github.com/Kikobeats/automate-release","commit_stats":{"total_commits":253,"total_committers":7,"mean_commits":"36.142857142857146","dds":0.1462450592885376,"last_synced_commit":"c0513e008e8cb5fa5e36e4b292b199ff2016f008"},"previous_names":[],"tags_count":141,"template":false,"template_full_name":null,"purl":"pkg:github/Kikobeats/automate-release","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Kikobeats%2Fautomate-release","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Kikobeats%2Fautomate-release/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Kikobeats%2Fautomate-release/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Kikobeats%2Fautomate-release/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Kikobeats","download_url":"https://codeload.github.com/Kikobeats/automate-release/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Kikobeats%2Fautomate-release/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31381009,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-03T21:40:47.592Z","status":"ssl_error","status_checked_at":"2026-04-03T21:40:05.436Z","response_time":107,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5: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":["commit","push","release"],"created_at":"2024-10-03T11:59:30.301Z","updated_at":"2026-04-03T23:02:26.452Z","avatar_url":"https://github.com/Kikobeats.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cdiv align=\"center\"\u003e\n  \u003cimg width=\"150\" src=\"https://github.com/Kikobeats/automate-release/raw/master/media/logo.png\" alt=\"automate-release\"\u003e\n  \u003cbr\u003e\n  \u003cbr\u003e\n\u003c/div\u003e\n\n**automate-release** configures your project so that every commit pushed to the main branch triggers a new release automatically. No human factor is involved.\n\nWhen you create a new project, the first thing you should do is:\n\n```bash\nnpx automate-release\n```\n\nIf you use [direnv](https://direnv.net/) with a `.envrc` file, you can also sync your local tokens to GitHub Secrets automatically:\n\n```bash\nGH_TOKEN=xxx npx automate-release --tokens\n```\n\nThis single command bootstraps your repository with the best practices for software releasing:\n\nhttps://github.com/user-attachments/assets/be26eb77-2ffd-46d1-9414-3ed063ece8fc\n\nReleasing software is a fundamental part of our developer life, but we often do it manually, which is a source of errors and takes time away from what we love: coding.\n\n`automate-release` brings you:\n\n- [Follow a git commit convention](#follow-a-git-commit-convention)\n- [History-driven releases](#history-driven-releases)\n- [Seamless GitHub integration](#seamless-github-integration)\n\n## Follow a git commit convention\n\nUsing a convention for git messages ensures that all contributors produce a homogeneous history. But it's not just about aesthetics; it's about **programmable history**.\n\n![](https://i.imgur.com/IxPIf84.png)\n\nBy following a pattern, we can automatically classify commits in a `CHANGELOG.md` and determine the next version to release (patch, feature, or breaking change).\n\n![](https://i.imgur.com/oNbbWV9.png)\n\n`automate-release` sets up [commitlint](https://github.com/marionebl/commitlint) for that purpose:\n\n![](https://i.imgur.com/nZOE5Vu.png)\n\nYou won't be able to commit unless the format is valid. It follows the [conventional commits specification](https://conventional-commits.vercel.app/), which quickly becomes the backbone of your automation.\n\n## History-driven releases\n\nAs every commit pushed to the main branch will trigger a release, the next version is automatically determined based on your git history following [semver](https://semver.org/) rules:\n\n- **patch** (`1.0.0` → `1.0.1`): When you commit a `fix`.\n- **minor** (`1.0.0` → `1.1.0`): When you commit a `feat`.\n- **major** (`1.0.0` → `2.0.0`): When you commit a `BREAKING CHANGE`.\n\n![](https://i.imgur.com/nmfLfkC.png)\n\nThis automated process handles the tedious work of incrementing the version in `package.json`, generating the `CHANGELOG.md` entry, and creating the release commit and tag.\n\n## Seamless GitHub integration\n\nThe human factor in a release should be limited to being the trigger: just push your code. Everything else should be automated.\n\n`automate-release` deploys **GitHub Actions** that handle the entire workflow automatically:\n\n- **Reliability**: Tests are executed on every push to ensure stability before any release.\n- **Automation**: Contributors list is automatically updated and pushed back to the repository.\n- **Transparency**: Your `CHANGELOG.md` is synchronized with your **GitHub Releases**.\n- **Distribution**: The package is automatically published to the **NPM registry** once the release is tagged.\n\n![](https://i.imgur.com/vEXF1PF.png)\n\nA release is a commitment to your audience. `automate-release` ensures your users stay informed by reflecting your changes directly into the GitHub Release section, making your project look professional and transparent.\n\n![](https://i.imgur.com/4Oen6QX.png)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkikobeats%2Fautomate-release","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fkikobeats%2Fautomate-release","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkikobeats%2Fautomate-release/lists"}