{"id":18733929,"url":"https://github.com/mgoltzsche/conventional-release","last_synced_at":"2025-11-06T09:02:20.566Z","repository":{"id":181328152,"uuid":"666593162","full_name":"mgoltzsche/conventional-release","owner":"mgoltzsche","description":"A GitHub Action to automate releases based on Conventional Commits","archived":false,"fork":false,"pushed_at":"2024-05-14T20:57:36.000Z","size":50,"stargazers_count":3,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-02-15T17:39:40.641Z","etag":null,"topics":["conventional-changelog","conventional-commits","release","release-automation","release-notes","semantic","semantic-version","semantic-versioning","version"],"latest_commit_sha":null,"homepage":"","language":"Shell","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/mgoltzsche.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":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2023-07-14T23:57:53.000Z","updated_at":"2025-01-29T14:05:14.000Z","dependencies_parsed_at":"2023-07-15T01:33:50.154Z","dependency_job_id":"fabb9d12-7981-4f80-b917-8b77487a5c9b","html_url":"https://github.com/mgoltzsche/conventional-release","commit_stats":null,"previous_names":["mgoltzsche/conventional-release"],"tags_count":13,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mgoltzsche%2Fconventional-release","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mgoltzsche%2Fconventional-release/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mgoltzsche%2Fconventional-release/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mgoltzsche%2Fconventional-release/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/mgoltzsche","download_url":"https://codeload.github.com/mgoltzsche/conventional-release/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":241968636,"owners_count":20050430,"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":["conventional-changelog","conventional-commits","release","release-automation","release-notes","semantic","semantic-version","semantic-versioning","version"],"created_at":"2024-11-07T15:11:49.067Z","updated_at":"2025-11-06T09:02:15.543Z","avatar_url":"https://github.com/mgoltzsche.png","language":"Shell","readme":"# conventional-release ![main branch workflow](https://github.com/mgoltzsche/conventional-release/actions/workflows/workflow.yaml/badge.svg?branch=main)\n\nA GitHub Action to automate releases based on [Conventional Commits](https://www.conventionalcommits.org/en/v1.0.0/) using [sv4git](https://github.com/bvieira/sv4git).\n\n## Features\n\n* Supports fully automated releases driven by Conventional Commits.\n* Allows to disable automated versioning in favour of manually pushing tags (`auto-release: false`).\n* Enforces [Conventional Commits](https://www.conventionalcommits.org/en/v1.0.0/) format within commit messages.\n* Recovers from a failed release build automatically (when the next commit is pushed).\n* Allows to use the same workflow/job definition for both pull request and release builds.\n* Fails builds that leave uncommitted changes.\n\n## Usage\n\nTo enable automated releases within your workflow, add a step to runs this Action after `actions/checkout` and before your actual build step(s):\n\n```\n    - id: release\n      name: Prepare release\n      uses: mgoltzsche/conventional-release@v0\n```\n\nFor all supported Action inputs and outputs, see [`./action.yml`](./action.yml).\n\nPlease note that the releasing job needs to have write permissions for `contents` in order to push a git tag and create a GitHub release.\nIn case of pull request builds, the token still provides read-only access this way.\nCorrespondingly the `actions/checkout` Action should be configured with `persist-credentials: false`.\n\nPlease also note that the `actions/checkout` Action must be configured with `fetch-depth: 0` to work with the release Action.\n\nTo run subsequent steps conditionally depending on whether it is a release build, use the Action output `publish` as condition.\n(In case of a release build, a git tag is pushed and a GitHub release created by the Action's post-entrypoint only after all steps within the job succeeded.)\n\nCorresponding to its outputs, the Action exports the following environment variables to subsequent steps:\n\n* `RELEASE_VERSION`: The semantic version (or manually pushed tag) of the release without leading `v`. During non-release builds this holds the next version with a `-dev-\u003cSHA\u003e` suffix.\n* `RELEASE_PUBLISH`: Is `true` when release build, otherwise empty.\n\n### Example workflow\n\nA workflow that creates releases based on commits on the main branch automatically and that validates pull requests can look as follows:\n\n```yaml\nname: Build and release\n\non:\n  push:\n    branches:\n    - main\n  pull_request:\n    branches:\n    - main\n\nconcurrency: # Run release builds sequentially, cancel outdated PR builds\n  group: ci-${{ github.ref }}\n  cancel-in-progress: ${{ github.ref != 'refs/heads/main' }}\n\npermissions: # Grant write access to github.token within non-pull_request builds\n  contents: write\n\njobs:\n  build:\n    name: Build\n    runs-on: ubuntu-latest\n\n    steps:\n    - name: Check out code\n      uses: actions/checkout@v3\n      with:\n        fetch-depth: 0\n        persist-credentials: false\n\n    - id: release\n      name: Prepare release\n      uses: mgoltzsche/conventional-release@v0\n\n    # ... Build artifact ...\n\n    - name: Publish artifact\n      if: steps.release.outputs.publish # To run only when release build\n      run: |\n        set -u\n        echo Publishing $RELEASE_VERSION\n        ...\n```\n\nThe [workflow used to publish this Action](./.github/workflows/workflow.yaml) is another example that shows how to release a container image, add a release commit and force-push a major version tag.\n\n## Design considerations\n\nSee [design considerations](./DESIGN.md).\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmgoltzsche%2Fconventional-release","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmgoltzsche%2Fconventional-release","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmgoltzsche%2Fconventional-release/lists"}