Generate releases based on semantic version labels on pull requests.
---
Automated releases powered by pull request labels. Streamline your release workflow and publish constantly! `auto` is meant to be run in a continuous integration (CI) environment, but all the commands work locally as well.
Release Features:
- Calculate semantic version bumps from PRs
- Skip a release with the `skip-release` label
- Publish canary releases from PRs or locally
- Generate changelogs with fancy headers, authors, and monorepo package association
- Use labels to create new changelog sections
- Generate a GitHub release
Pull Request Interaction Features:
- Get the labels for a PR
- Set the status of a PR
- Check that a pull request has a SemVer label
- Comment on a PR with markdown
- Update the PR body with contextual build metadata
Visit [the docs](https://intuit.github.io/auto/) for more information.
## :pushpin: Plugins :pushpin:
Auto has an extensive plugin system and wide variety of official plugins. Make a PR to add yours!
**Package Managers:**
- [brew](./plugins/brew) - Automate the creation of Homebrew formulae
- [chrome](./plugins/chrome) - Publish code to Chrome Web Store
- [cocoapods](./plugins/cocoapods) - Version your [CocoaPod](https://cocoapods.org/), and push to your specs repository!
- [crates](./plugins/crates) - Publish Rust crates
- [docker](./plugins/docker) - Publish images with Docker
- [gem](./plugins/gem) - Publish ruby gems
- [git-tag](./plugins/git-tag) - Manage your projects version through just a git tag (`default` when used with binary)
- [gradle](./plugins/gradle) - Publish code with gradle
- [maven](./plugins/maven) - Publish code with maven
- [npm](./plugins/npm) - Publish code to npm (`default` when installed through `npm`)
- [sbt](./plugins/sbt) - Publish Scala projects with [sbt](https://www.scala-sbt.org)
- [vscode](./plugins/vscode) - Publish code to the VSCode extension marketplace
**Extra Functionality:**
- [all-contributors](./plugins/all-contributors) - Automatically add contributors as changelogs are produced using [all-contributors-cli](https://www.npmjs.com/package/all-contributors-cli)
- [conventional-commits](./plugins/conventional-commits) - Parse conventional commit messages for version bumps
- [exec](./plugins/exec) - Tap into hooks and run scripts on the terminal
- [first-time-contributor](./plugins/first-time-contributor) - Thank first time contributors for their work right in your release notes.
- [gh-pages](./plugins/gh-pages) - Automate publishing to your gh-pages documentation website
- [jira](./plugins/jira) - Include Jira story links in the changelog
- [magic-zero](./plugins/magic-zero) - A plugin that closely adheres to semver versioning for 0.0.x and 0.x.y releases
- [microsoft-teams](./plugins/microsoft-teams) - Post your release notes to a Microsoft teams channel
- [omit-commits](./plugins/omit-commits) - Ignore commits base on name, email, subject, labels, and username
- [omit-release-notes](./plugins/omit-release-notes) - Ignore release notes in PRs made by certain accounts
- [pr-body-labels](./plugins/pr-body-labels) - Allow outside contributors to indicate what semver label should be applied to the Pull Request
- [released](./plugins/released) - Add a `released` label to published PRs, comment with the version it's included in and comment on the issues the PR closes
- [s3](./plugins/s3) - Post your built artifacts to amazon s3
- [slack](./plugins/slack) - Post release notes to slack
- [twitter](./plugins/twitter) - Post release notes to twitter
- [upload-assets](./plugins/upload-assets) - Add extra assets to the release
- [protected-branch](./plugins/protected-branch) - Handle Github branch protections and avoid run auto with an admin token
## :hammer: Start Developing :hammer:
To get set up, fork and clone the project then run the following command:
```bash
yarn
```
### Build/Typecheck
You must build at least once before running the tests or lint.
```bash
yarn build
```
In watch mode:
```bash
yarn start
```
### Installing the binary
Install the bundled binary onto your system. This requires the project to be built or in watch mode.
```bash
yarn install-mac
```
If running this for the first time you may also have to run the following command.
```bash
chmod +x /usr/local/bin/auto
```
### Cleaning
```bash
yarn clean
```
### Linting
```bash
yarn lint
```
### Testing
```bash
yarn test
```
### Run the docs
```bash
yarn docs
```
### Create a new plugin
Get started developing a new plugin in the monorepo in seconds.
The two arguments are:
1. A spaced name
2. A description
```bash
yarn create:plugin my-plugin "Do something really cool"
```
### Create a new package
Get started developing a new package in the monorepo in seconds.
The two arguments are:
1. A spaced name
2. A description
```bash
yarn create:package my-package "Do something really cool"
```
## :beers: Contributing :beers:
Feel free to make an [issue](https://github.com/intuit/auto/issues) or open a [pull request](https://github.com/intuit/auto/pulls)!
Make sure to read our [code of conduct](./CODE_OF_CONDUCT.md).
## :rocket: Projects Using `auto` :rocket:
:star: [Storybookjs design-system](https://github.com/storybookjs/design-system) - Storybook's official design system
:star: [space-kit](https://github.com/apollographql/space-kit) - Home base for Apollo's design system
:star: [react-glider](https://github.com/hipstersmoothie/react-glider) - A react wrapper for glider.js
:star: [reaction](https://github.com/artsy/reaction) - Artsy’s React Components
:star: [emission](https://github.com/artsy/emission) - Artsy’s React Native Components
:star: [webpack-inject-plugin](https://github.com/adierkens/webpack-inject-plugin) - A webpack plugin to dynamically inject code into the bundle.
:star: [html-webpack-insert-text-plugin](https://github.com/hipstersmoothie/html-webpack-insert-text-plugin) - Insert text into the head or body of your HTML
:star: [react-easy-crop](https://github.com/ValentinH/react-easy-crop) - A React component to crop images/videos with easy interactions
## :nail_care: `auto` Badge :nail_care:
Does your project use `auto`? Then use our custom badge!
## :art: Prior Art :art:
`auto` is inspired by some excellent tech that came before it.
- [github-semantic-version](https://github.com/ericclemmons/github-semantic-version) - Automated semantic version releases powered by Github Issues.
- [lerna-changelog](https://github.com/lerna/lerna-changelog) - PR-based changelog generator with monorepo support
## Contributors
Thanks goes to these wonderful people ([emoji key](https://github.com/kentcdodds/all-contributors#emoji-key)):