{"id":13432980,"url":"https://github.com/googleapis/release-please","last_synced_at":"2025-05-13T15:09:01.208Z","repository":{"id":37693110,"uuid":"183499464","full_name":"googleapis/release-please","owner":"googleapis","description":"generate release PRs based on the conventionalcommits.org spec","archived":false,"fork":false,"pushed_at":"2025-03-11T18:18:32.000Z","size":8416,"stargazers_count":5440,"open_issues_count":241,"forks_count":405,"subscribers_count":67,"default_branch":"main","last_synced_at":"2025-05-06T15:03:50.329Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"https://www.conventionalcommits.org","language":"TypeScript","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/googleapis.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":".github/CODEOWNERS","security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2019-04-25T19:44:03.000Z","updated_at":"2025-05-06T13:05:12.000Z","dependencies_parsed_at":"2022-07-11T05:46:01.253Z","dependency_job_id":"85942c1c-6a0e-4d53-9114-3d5a735b86ce","html_url":"https://github.com/googleapis/release-please","commit_stats":{"total_commits":1144,"total_committers":112,"mean_commits":"10.214285714285714","dds":0.7631118881118881,"last_synced_commit":"2b56b2213c10c6a0d3265746b10b19fbfce47292"},"previous_names":[],"tags_count":342,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/googleapis%2Frelease-please","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/googleapis%2Frelease-please/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/googleapis%2Frelease-please/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/googleapis%2Frelease-please/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/googleapis","download_url":"https://codeload.github.com/googleapis/release-please/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":253102623,"owners_count":21854500,"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-07-31T02:01:19.333Z","updated_at":"2025-05-13T15:08:56.176Z","avatar_url":"https://github.com/googleapis.png","language":"TypeScript","readme":"\u003cimg src=\"https://avatars2.githubusercontent.com/u/2810941?v=3\u0026s=96\" alt=\"Google Cloud Platform logo\" title=\"Google Cloud Platform\" align=\"right\" height=\"96\" width=\"96\"/\u003e\n\n# [Release Please](https://github.com/googleapis/release-please)\n\n[![npm version](https://img.shields.io/npm/v/release-please.svg)](https://www.npmjs.org/package/release-please)\n[![codecov](https://img.shields.io/codecov/c/github/googleapis/release-please/main.svg?style=flat)](https://codecov.io/gh/googleapis/release-please)\n\nRelease Please automates CHANGELOG generation, the creation of GitHub releases,\nand version bumps for your projects.\n\nIt does so by parsing your\ngit history, looking for [Conventional Commit messages](https://www.conventionalcommits.org/),\nand creating release PRs.\n\nIt does not handle publication to package managers or handle complex branch\nmanagement.\n\n## What's a Release PR?\n\nRather than continuously releasing what's landed to your default branch,\nrelease-please maintains Release PRs:\n\n\u003cimg width=\"400\" src=\"/screen.png\"\u003e\n\nThese Release PRs are kept up-to-date as additional work is merged. When you're\nready to tag a release, simply merge the release PR. Both squash-merge and\nmerge commits work with Release PRs.\n\nWhen the Release PR is merged, release-please takes the following steps:\n\n1. Updates your changelog file (for example `CHANGELOG.md`), along with other language specific files (for example `package.json`).\n2. Tags the commit with the version number\n3. Creates a GitHub Release based on the tag\n\nYou can tell where the Release PR is in its lifecycle by the status label on the\nPR itself:\n\n- `autorelease: pending` is the initial state of the Release PR before it is merged\n- `autorelease: tagged` means that the Release PR has been merged and the release has been tagged in GitHub\n- `autorelease: snapshot` is a special state for snapshot version bumps\n- `autorelease: published` means that a GitHub release has been published based on the Release PR (_release-please does not automatically add this tag, but we recommend it as a convention for publication tooling_).\n\n## How should I write my commits?\n\nRelease Please assumes you are using [Conventional Commit messages](https://www.conventionalcommits.org/).\n\nThe most important prefixes you should have in mind are:\n\n* `fix:` which represents bug fixes, and correlates to a [SemVer](https://semver.org/)\n  patch.\n* `feat:` which represents a new feature, and correlates to a SemVer minor.\n* `feat!:`,  or `fix!:`, `refactor!:`, etc., which represent a breaking change\n  (indicated by the `!`) and will result in a SemVer major.\n\n### Linear git commit history (use squash-merge)\n\nWe **highly** recommend that you use squash-merges when merging pull requests.\nA linear git history makes it much easier to:\n\n* Follow history - commits are sorted by merge date and are not mixed between\n  pull requests\n* Find and revert bugs - `git bisect` is helpful for tracking down which\n  change introduced a bug\n* Control the release-please changelog - when you merge a PR, you may have\n  commit messages that make sense within the scope of the PR, but don't\n  make sense when merged in the main branch. For example, you may have\n  `feat: introduce feature A` and then `fix: some bugfix introduced in\n  the first commit`. The `fix` commit is actually irrelevant to the release\n  notes as there was never a bug experienced in the main branch.\n* Keep a clean main branch - if you use something like red/green development\n  (create a failing test in commit A, then fix in commit B) and merge (or\n  rebase-merge), then there will be points in time in your main branch where\n  tests do not pass.\n\n### What if my PR contains multiple fixes or features?\n\nRelease Please allows you to represent multiple changes in a single commit,\nusing footers:\n\n```txt\nfeat: adds v4 UUID to crypto\n\nThis adds support for v4 UUIDs to the library.\n\nfix(utils): unicode no longer throws exception\n  PiperOrigin-RevId: 345559154\n  BREAKING-CHANGE: encode method no longer throws.\n  Source-Link: googleapis/googleapis@5e0dcb2\n\nfeat(utils): update encode to support unicode\n  PiperOrigin-RevId: 345559182\n  Source-Link: googleapis/googleapis@e5eef86\n```\n\nThe above commit message will contain:\n\n1. an entry for the **\"adds v4 UUID to crypto\"** feature.\n2. an entry for the fix **\"unicode no longer throws exception\"**, along with a note\n  that it's a breaking change.\n3. an entry for the feature **\"update encode to support unicode\"**.\n\n:warning: **Important:** The additional messages must be added to the bottom of the commit.\n\n## How do I change the version number?\n\nWhen a commit to the main branch has `Release-As: x.x.x` (case insensitive) in the **commit body**, Release Please will open a new pull request for the specified version.\n\n**Empty commit example:**\n\n`git commit --allow-empty -m \"chore: release 2.0.0\" -m \"Release-As: 2.0.0\"` results in the following commit message:\n\n```txt\nchore: release 2.0.0\n\nRelease-As: 2.0.0\n```\n\n## How can I fix release notes?\n\nIf you have merged a pull request and would like to amend the commit message\nused to generate the release notes for that commit, you can edit the body of\nthe merged pull requests and add a section like:\n\n```\nBEGIN_COMMIT_OVERRIDE\nfeat: add ability to override merged commit message\n\nfix: another message\nchore: a third message\nEND_COMMIT_OVERRIDE\n```\n\nThe next time Release Please runs, it will use that override section as the\ncommit message instead of the merged commit message.\n\n:warning: **Important:** This feature will not work with plain merges because\nrelease-please does not know which commit(s) to apply the override to. [We\nrecommend using squash-merge instead](#linear-git-commit-history-use-squash-merge).\n\n## Release Please bot does not create a release PR. Why?\n\n### Step 1: Ensure releasable units are merged\n\nRelease Please creates a release pull request after it notices the default branch\ncontains \"releasable units\" since the last release.\nA releasable unit is a commit to the branch with one of the following\nprefixes: \"feat\", \"fix\", and \"deps\".\n(A \"chore\" or \"build\" commit is not a releasable unit.)\n\nSome languages have their specific releasable unit configuration. For example,\n\"docs\" is a prefix for releasable units in Java and Python.\n\n### Step 2: Ensure no `autorelease: pending` or `autorelease: triggered` label in an old PR\n\nCheck existing pull requests labelled with `autorelease: pending` or\n`autorelease: triggered` label.\nDue to GitHub API failures, it's possible that the tag was not removed\ncorrectly upon a previous release and Release Please thinks that the previous release is\nstill pending.\nIf you're certain that there's no pending release, remove the\n`autorelease: pending` or `autorelease: triggered` label.\n\nFor the GitHub application users, Release Please will not create a new pull request\nif there's an existing pull request labeled as `autorelease: pending`.\nTo confirm this case, search for a pull request with the label.\n(It's very likely it's the latest release pull request.)\nIf you find a release pull request with the label and it is not going to be released\n(or already released), then remove the `autorelease: pending` label and re-run Release\nPlease.\n\n### Step 3: Rerun Release Please\n\nIf you think Release Please missed creating a release PR after a pull request\nwith a releasable unit has been merged, please re-run `release-please`. If you are using\nthe GitHub application, add `release-please:force-run` label to the merged pull request. If\nyou are using the action, look for the failed invocation and retry the workflow run.\nRelease Please will process the pull request immediately to find releasable units.\n\n## Strategy (Language) types supported\n\nRelease Please automates releases for the following flavors of repositories:\n\n| release type        | description |\n|---------------------|---------------------------------------------------------|\n| `bazel`             | [A Bazel module, with a MODULE.bazel and a CHANGELOG.md](https://bazel.build/external/module) |\n| `dart`              | A repository with a pubspec.yaml and a CHANGELOG.md |\n| `elixir`            | A repository with a mix.exs and a CHANGELOG.md |\n| `go`                | A repository with a CHANGELOG.md |\n| `helm`              | A repository with a Chart.yaml and a CHANGELOG.md |\n| `java`              | [A strategy that generates SNAPSHOT version after each release](docs/java.md) |\n| `krm-blueprint`     | [A kpt package, with 1 or more KRM files and a CHANGELOG.md](https://github.com/GoogleCloudPlatform/blueprints/tree/main/catalog/project) |\n| `maven`             | [Strategy for Maven projects, generates SNAPSHOT version after each release and updates `pom.xml` automatically](docs/java.md) |\n| `node`              | [A Node.js repository, with a package.json and CHANGELOG.md](https://github.com/yargs/yargs) |\n| `expo`              | [An Expo based React Native repository, with a package.json, app.json and CHANGELOG.md](https://github.com/dmi3y/expo-release-please-example) |\n| `ocaml`             | [An OCaml repository, containing 1 or more opam or esy files and a CHANGELOG.md](https://github.com/grain-lang/binaryen.ml) |\n| `php`               | A repository with a composer.json and a CHANGELOG.md |\n| `python`            | [A Python repository with a pyproject.toml, \u0026lt;project\u0026gt;/\\_\\_init\\_\\_.py, CHANGELOG.md or optionally a setup.py, setup.cfg](https://github.com/googleapis/python-storage) |\n| `R`               | A repository with a DESCRIPTION and a NEWS.md |\n| `ruby`              | A repository with a version.rb and a CHANGELOG.md |\n| `rust`              | A Rust repository, with a Cargo.toml (either as a crate or workspace, although note that workspaces require a [manifest driven release](https://github.com/googleapis/release-please/blob/main/docs/manifest-releaser.md) and the \"cargo-workspace\" plugin) and a CHANGELOG.md |\n| `sfdx`              | A repository with a [sfdx-project.json](https://developer.salesforce.com/docs/atlas.en-us.sfdx_dev.meta/sfdx_dev/sfdx_dev_ws_config.htm) and a CHANGELOG.md |\n| `simple`            | [A repository with a version.txt and a CHANGELOG.md](https://github.com/googleapis/gapic-generator) |\n| `terraform-module`  | [A terraform module, with a version in the README.md, and a CHANGELOG.md](https://github.com/terraform-google-modules/terraform-google-project-factory) |\n\n## Setting up Release Please\n\nThere are a variety of ways you can deploy release-please: \n\n### GitHub Action (recommended)\n\nThe easiest way to run Release Please is as a GitHub action. Please see [googleapis/release-please-action](https://github.com/googleapis/release-please-action) for installation and configuration instructions.\n\n### Running as CLI\n\nPlease see [Running release-please CLI](docs/cli.md) for all the configuration options.\n\n### Install the GitHub App\n\nThere is a probot application available, which allows you to deploy Release\nPlease as a GitHub App. Please see \n[github.com/googleapis/repo-automation-bots](https://github.com/googleapis/repo-automation-bots/tree/main/packages/release-please)\nfor installation and configuration instructions.\n\n## Bootstrapping your Repository\n\nRelease Please looks at commits since your last release tag. It may or may not be able to find\nyour previous releases. The easiest way to onboard your repository is to\n[bootstrap a manifest config](/docs/cli.md#bootstrapping).\n\n## Customizing Release Please\n\nRelease Please provides several configuration options to allow customizing\nyour release process. Please see [customizing.md](docs/customizing.md) for more details.\n\n## Supporting Monorepos via Manifest Configuration\n\nRelease Please also supports releasing multiple artifacts from the same repository.\nSee more at [manifest-releaser.md](docs/manifest-releaser.md).\n\n## Supported Node.js Versions\n\nOur client libraries follow the [Node.js release schedule](https://nodejs.org/en/about/releases/).\nLibraries are compatible with all current _active_ and _maintenance_ versions of\nNode.js.\n\nClient libraries targeting some end-of-life versions of Node.js are available, and\ncan be installed via npm [dist-tags](https://docs.npmjs.com/cli/dist-tag).\nThe dist-tags follow the naming convention `legacy-(version)`.\n\n_Legacy Node.js versions are supported as a best effort:_\n\n* Legacy versions will not be tested in continuous integration.\n* Some security patches may not be able to be backported.\n* Dependencies will not be kept up-to-date, and features will not be backported.\n\n#### Legacy tags available\n\n* `legacy-8`: install client libraries from this dist-tag for versions\n  compatible with Node.js 8.\n\n## Versioning\n\nThis library follows [Semantic Versioning](http://semver.org/).\n\n## Contributing\n\nContributions welcome! See the [Contributing Guide](https://github.com/googleapis/release-please/blob/main/CONTRIBUTING.md).\n\nFor more information on the design of the library, see [design](https://github.com/googleapis/release-please/blob/main/docs/design.md).\n\n## Troubleshooting\n\nFor common issues and help troubleshooting your configuration, see [Troubleshooting](https://github.com/googleapis/release-please/blob/main/docs/troubleshooting.md).\n\n## License\n\nApache Version 2.0\n\nSee [LICENSE](https://github.com/googleapis/release-please/blob/main/LICENSE)\n\n## Disclaimer\n\nThis is not an official Google product.\n","funding_links":[],"categories":["TypeScript","ISO","others","Continuous integration","Changelog Tools","Release Management Tools","🧰 Tools","Release Automation"],"sub_categories":["[yafti](https://github.com/ublue-os/yafti/)","Shell into containers","Generators","Automated Release Tools","Version control and releasing","Infrastructure as Code"],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgoogleapis%2Frelease-please","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fgoogleapis%2Frelease-please","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgoogleapis%2Frelease-please/lists"}