An open API service indexing awesome lists of open source software.

https://github.com/21stdigital/savr-action

๐Ÿš€ A focused GitHub Action for automated release notes and draft releases, built for teams using conventional commits.
https://github.com/21stdigital/savr-action

continuous-integration conventional-commits github-action github-releases semantic-versioning

Last synced: 5 months ago
JSON representation

๐Ÿš€ A focused GitHub Action for automated release notes and draft releases, built for teams using conventional commits.

Awesome Lists containing this project

README

          




SAVR Logo



SAVR - Semantic Automatic Version Releaser

> A focused GitHub Action for automated release notes and draft releases, built for teams using conventional commits.

SAVR is a lightweight GitHub Action that does two things really well:

1. Automatically generates and updates draft releases with comprehensive release notes on every push
2. Makes it easy to publish releases manually through GitHub's UI when you're ready

## Why SAVR?

While there are many semantic versioning tools available, SAVR was created to solve specific pain points that other tools don't address:

### ๐ŸŽฏ Focused on What Matters

Most semantic release tools try to do everything: automatically publish releases, manage changelogs, update package versions, and more. SAVR focuses on two core needs:

- Keeping your team informed about upcoming changes through live draft releases
- Making manual releases convenient through GitHub's UI

### ๐Ÿ”„ Live Release Notes

Unlike tools that only generate release notes when publishing, SAVR maintains an up-to-date draft release on every push. This means:

- Your team can see what's coming in the next release at any time
- No more surprises when releases are published
- Better visibility into project progress

### ๐ŸŽฎ Manual Release Control

Many tools force automated releases, which can be risky. SAVR:

- Lets you control exactly when to publish releases
- Works seamlessly with GitHub's release UI
- Maintains the flexibility to review and adjust before publishing

### ๐Ÿ’ก Built for Conventional Commits

If you're already using conventional commits, SAVR:

- Leverages your existing commit messages
- Requires no additional configuration
- Keeps your workflow simple and familiar

## Features

- ๐Ÿ“ **Live Draft Releases**: Automatically updates draft releases with the latest changes on every push
- ๐Ÿ” **Transparent Changes**: Team members can easily see what features and fixes will be in the next release
- ๐ŸŽฏ **Manual Release Control**: Publish releases when you're ready through GitHub's UI
- ๐Ÿ”„ **Conventional Commits**: Leverages your existing commit messages to generate meaningful release notes
- ๐Ÿท๏ธ **Semantic Versioning**: Automatically suggests the next version based on commit types
- ๐Ÿงช **Dry-run Mode**: Test changes without affecting your repository

## Usage

```yaml
name: Draft Release
on:
push:
branches:
- main

jobs:
release:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v5
with:
fetch-depth: 0

- name: Create Release Draft
uses: 21stdigital/savr-action@v1.0.1
with:
github-token: ${{ secrets.PAT_TOKEN }} # Personal Access Token with repo scope
# Optional configuration:
# tag-prefix: 'v'
# dry-run: false
# release-notes-template: |
# ## Release {{version}}
# {{#each commits}}
# - {{this.message}} ({{this.type}})
# {{/each}}
```

## Inputs

| Input | Description | Required | Default |
| ------------------------ | ----------------------------------------------------------------------------------------------------------------------------------------------------------- | -------- | ---------------- |
| `github-token` | Personal Access Token (PAT) with `repo` scope for GitHub API authentication. The default `GITHUB_TOKEN` has insufficient permissions for creating releases. | Yes | - |
| `tag-prefix` | The prefix for version tags | No | `v` |
| `release-branch` | The branch to use for the release | No | `main` |
| `dry-run` | Simulate the process without creating releases | No | `false` |
| `release-notes-template` | Template for release notes formatting | No | Default template |
| `initial-version` | The initial version to start from | No | `1.0.0` |

## Outputs

| Output | Description |
| ------------- | -------------------------------------------- |
| `version` | The calculated version for the release |
| `release-url` | The URL of the created/updated draft release |
| `release-id` | The ID of the created/updated draft release |

## Version Bump Rules

The action follows these rules to determine version bumps:

- **Major** (`1.0.0`): Breaking changes (`feat!` or `BREAKING CHANGE` in footer)
- **Minor** (`0.1.0`): New features (`feat`)
- **Patch** (`0.0.1`): Bug fixes (`fix`)
- **None**: Other changes (no version bump)

## Release Notes

Release notes are automatically generated and include:

- โœจ Features
- ๐Ÿ› Bug fixes
- ๐Ÿ’ฅ Breaking changes
- Contributors list

The default template format is:

```handlebars
{{#if features}}
### โœจ Features
{{#each features}}
-
{{this.message}}
{{/each}}
{{/if}}

{{#if fixes}}
### ๐Ÿ› Fixes
{{#each fixes}}
-
{{this.message}}
{{/each}}
{{/if}}

{{#if breaking}}
### ๐Ÿ’ฅ Breaking Changes
{{#each breaking}}
-
{{this.message}}
{{/each}}
{{/if}}
```

## Contributing

Contributions are welcome! Please feel free to submit a Pull Request.

## License

MIT