Ecosyste.ms: Awesome

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

Awesome Lists | Featured Topics | Projects

https://github.com/vtex/releasy

CLI tool to release node applications with tag and auto semver bump
https://github.com/vtex/releasy

xp-developer

Last synced: 14 days ago
JSON representation

CLI tool to release node applications with tag and auto semver bump

Awesome Lists containing this project

README

        

# Releasy

[![Gitter](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/vtex/releasy?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)

Releasy helps you release versions of your projects easily! It currently works with [NodeJS package.json files](#json-files) and [C# AssemblyInfo.cs files](#c-files).

Releasy will automatically do the following:

- Increment the version in the `manifest.json` or `package.json` file;
- Commit the changed version file;
- Create a Git tag with the version;
- Push the tag and changes to the Git remote;
- If exists, increment version and date in the `CHANGELOG.md`;
- For this, you need to follow the format of CHANGELOG of [Keep a Changelog](http://keepachangelog.com/en/1.0.0/)
- See [CHANGELOG example area](#changelog-example)
- Post the release notes from CHANGELOG on GitHub release.

## Settings

A [GitHub Personal access token](https://help.github.com/articles/creating-an-access-token-for-command-line-use/) will be needed to create the release on GitHub and with all `repo` permissions. When you created, add the token to an environment variable named `GITHUB_API_TOKEN` in your `~/.bash_profile` (for bash users) or `~/.config/fish/config.fish` (for fish users) by adding the following line at the end of the file.

```
export GITHUB_API_TOKEN=
```

## Usage

If you want to see what happens, grab it (`npm i -g releasy`) and run anything with the **`--dry-run`** flag. This mode will only show you what would happen, without actually applying any changes. At any time, calling `releasy -h` or `releasy --help` will show you the list of options available. Try it.

The **default behavior** increments the `patch` and creates a `beta` prerelease using the `package.json` file.

```sh
$ releasy

Old version: 1.0.0
New version: 1.0.1-beta
prompt: Are you sure?: (yes)
Starting release...
Version bumped to 1.0.1-beta
File package.json added # git add package.json
File package.json committed # git commit package.json -m "Release v1.0.1-beta"
Tag created: v1.0.1-beta #git tag v1.0.1-beta -m "Release v1.0.1-beta"
Pushed commit and tags # git push && git push --tags
All steps finished successfully.
```

You can **increment other parts** of the version by providing a first argument:

```sh
$ releasy patch # 1.2.3 => 1.2.4-beta
$ releasy minor # 1.2.3 => 1.3.0-beta
$ releasy major # 1.2.3 => 2.0.0-beta
$ releasy prerelease # 1.2.3-beta.4 => 1.2.3-beta.5
$ releasy pre # is an alias to 'prerelease'
```

When you are ready to **promote a beta version to stable**, use the `promote` argument:

```sh
$ releasy promote # 1.2.3-beta.4 => 1.2.3
```

Or, if you want to **increment directly as stable** version, use the `--stable` option:

```sh
$ releasy --stable # 1.2.3 => 1.2.4
```

To apply a **custom prerelease identifier**:

```sh
$ releasy --tag-name alpha # 1.2.3 => 1.2.4-alpha
```

If you want to **post the release notes on GitHub**, use the `--notes` option:

```sh
$ releasy --stable --notes # Release Notes submitted
```

If you want to prevent releasy from automatically **committing, tagging or pushing**, use the `--no-commit`/`--no-tag`/`--no-push` options:

```sh
$ releasy --stable --no-tag --no-push
```

## Options file

You **may** create a file called `_releasy.yaml` to any values set in this file will be used as default. If you prefer, `.yml` and `.json` extensions will also work. Below is a sample `_releasy.yaml` file.

```yaml
# https://github.com/vtex/releasy
type: prerelease # prerelease as default increment
filename: otherpackage.json # different version file as default

# you may also use any other options available on the command line
stable: true # release stable version
tag: alpha # use alpha as prerelease name
dry-run: true # always use dry-run mode

no-tag: true # don't tag the release commit
no-push: true # don't push to the remote repository
no-commit: true # don't create the release commit
display-name: true # add the project name to the tag and release commit
# etc
```

## Different version files

Releasy currently supports both NodeJS' package.json and .NET C#'s AssemblyInfo.cs. The default file used is `package.json`, but you may specify a different value through the options file or in the command line.

### JSON files

If the specified file has a `.json` extension, it will be treated as Node's `package.json`. This means that the version will be read from and written to your package's `version` field.

### C# files

If the specified file has a `.cs` extension, it will be treated as an `AssemblyInfo.cs` file. As such, the version will be read from and written to assembly version attributes, which are: [`AssemblyVersion`](), [`AssemblyFileVersion`]() and [`AssemblyInformationalVersion`]().

To conform to the .NET Framework's specification, only the `AssemblyInformationalVersion` attribute will retain any prerelease version information, while the other two will be stripped of it, keeping just the version numbers.

### CHANGELOG example

The format of your changelog is according to [Keep a Changelog](http://keepachangelog.com/en/1.0.0/) that requires an `## [Unreleased]` section for the next release, and the types of changes below this section.

An example of a first CHANGELOG.md to create before using a `releasy` command:

```markdown
# Changelog

All notable changes to this project will be documented in this file.

The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/)
and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.html).

## [Unreleased]

### Added

- My new feature

### Fixed

- An bug
```