## How to release the next version of DevTools

**Note:** If you need to publish a new version of devtools_server, you will need
to do that prior to performing these steps, and update the devtools pubspec.yaml
to reference the new published version of devtools_server. To publish devtools_server, run
`pub publish` from `packages/devtools_server`. Be sure to test the server locally
before publishing. For instructions on how to do that, see
[CONTRIBUTING.md](https://github.com/flutter/devtools/blob/master/CONTRIBUTING.md#devtools-server).

Create a branch for your release. Below we're creating release 0.0.15, with all the PRs.

## Update master branch and create a local release branch
```shell
cd ~/devtools-git/devtools

checkout master

git pull upstream master

git checkout -b release_0_0_15

```

## Update the release number in three files:
- **packages/devtools/pubspec.yaml**

Change ```version: 0.0.14``` to ```version: 0.0.15```

- **packages/devtools_app/pubspec.yaml**

Change ```version: 0.0.14``` to ```version: 0.0.15```

- **packages/devtools_app/lib/devtools.dart**

Change ```const String version = '0.0.14';``` to ```const String version = '0.0.15';```

## Update the CHANGELOG.md
- **packages/devtools/CHANGELOG.md**

Add the release number and date followed by the features or changes e.g.,

```
## 0.0.15 - 2019-04-01
* Added a great feature ...
```

## Push the local branch

```shell
git add packages/devtools_app/lib/devtools.dart

git add packages/devtools_app/pubspec.yaml

git add packages/devtools/pubspec.yaml

git add pavackages/devtools/CHANGELOG.md

git commit -a -m “Prepare for v0.0.15 release.”

git push origin release_0_0_15
```

## Create the PR and Commit the above changes
From the git UI tool create the PR, squash and commit.

## Publishing DevTools
### Update your master branch from the remote repository
> Ensure that the tip of master is the above commit, just made with the exact set of PRs wanted.  Otherwise, checkout using the SHA1 of the above commit e.g.,
``` git checkout -b release_15 <SHA1>``` then proceed to the step 'Prep to publish'.

```shell
cd ~/devtools-git/devtools

git checkout master

git pull upstream master
```

### Prep to publish
```shell
./tool/publish.sh
``` 

### Publish
#### Verify the package works (DevTools)

- cd packages/devtools
- dart bin/devtools.dart
- open the page in a browser
- flutter run an application
- connect to the running app from devtools, and verify that the pages
  generally work, and there are no exceptions in the chrome devtools log

#### Publish the packages
```shell
cd packages/devtools_app

pub publish

...
Looks great! Are you ready to upload your package (y/n)? y

cd packages/devtools

pub publish
...
Looks great! Are you ready to upload your package (y/n)? y
```

#### Revert the change to .gitignore
```shell
git checkout .gitignore
```

#### Create the tag for this release and push to the remote repository.
```shell
git tag -a v0.0.15 -m "DevTools 0.0.15"

git push upstream v0.0.15
```
