Follow these steps when we're ready to start the process for a minor release (let's call it X.Y where X
is the major version and Y
is the forthcoming minor version) and we want publish the first release candidate.
- Checkout the latest
master
branchgit checkout master && git pull origin master
- Create a branch called X.Y
git checkout -b X.Y
- Do a fresh install of the dependencies
npm run clean
- Update the version in
package.json
using a release candidate version schema"version": "X.Y.0-rc.0"
- Create an
npm-shrinkwrap.json
filenpm shrinkwrap
- Commit and push the
package.json
and shrinkwrap filegit commit -a -m 'vX.Y.0-rc.0' && git push origin X.Y
- Follow the "Publishing a release candidate" steps to publish the first release candidate,
vX.Y.0-rc.1
- Follow the "Changelog" steps get started on updating the
CHANGELOG.md
to reflect the changes between the upcoming minor releasevX.Y.0
and whatever the latest published release was
Follow these steps to update CHANGELOG.md
- Checkout the latest master
git checkout master && git pull origin
- Let
X.Y.Z
be the latest release andX'.Y'.Z'
be the forthcoming release - Checkout a branch for updating the changelog
git checkout -b changelog-X'.Y'.Z'
- Compare the
npm-shrinkwrap.json
inX'.Y'.Z'
to thenpm-shrinkwrap.json
inX.Y.Z
(e.g.: https://github.com/appium/appium/compare/v1.10.0...v1.11.1 underFiles Changed
look atnpm-shrinkwrap.json
) - Update the CHANGELOG.md to reflect the changes (this will require looking at the commit history of Appium first party sub-dependencies and enumerating the changes since the last release)
- Commit and push the changes to the changelog branch and make a pull request. Let other Appium maintainers review it
Follow these steps when there's a new version of an Appium dependency (let's call it <PACKAGE_NAME>@<PACKAGE_VERSION
) that needs to be added to a patch release, and the change is very urgent. (So urgent that it can't wait for the next minor release)
- Checkout the release branch and make sure it's on the latest commit
git checkout X.Y && git pull origin X.Y
- Install the dependencies using
npm ci
Do not usenpm install
, it does not respect shrinkwrap - Update the dependency
npm install PACKAGE_NAME@PACKAGE_VERSION
- This should update the
package.json
by increasing the minimum version toPACKAGE_VERSION
and will updatenpm-shrinkwrap.json
by setting the pinned dependency toPACKAGE_VERSION
(and will also update any sub-dependencies that were affected by the update) - Commit and push the
package.json
and shrinkwrap filegit commit -a -m 'Update PACKAGE_NAME to PACKAGE_VERSION' && git push origin X.Y
- Make a new release candidate
Follow these steps when we're ready to publish the latest contents of a release branch, X.Y, as a release candidate
- Checkout the release branch and make sure it's on the latest commit (
git checkout X.Y && git pull origin X.Y
) - Install the dependencies using
npm ci
(important: Do not usenpm install
, it does not respect shrinkwrap) - Update the version in
package.json
andnpm-shrinkwrap.json
by bumping up the release candidate number by one (e.g.:"version": "v1.11.2-rc.1
would become"version": "v1.11.2-rc.2"
) - Commit and push the
package.json
andnpm-shrinkwrap.json
(git commit -a m vX.Y.Z-rc.A && git push origin X.Y
) - Create a git tag for this release candidate using the version (
git tag vX.Y.Z-rc.A && git push --tags origin
) - Wait for continuous integration to pass before publishing and do any necessary last minute local testing
- Publish this to the rc channel (IMPORTANT!!!) (
npm publish --tag=rc
) - To test the release candidate, install it with
npm install -g appium@rc
Follow these steps when we've adequately tested the latest release candidate on release branch X.Y and we're ready to "graduate" it to being a production-ready minor or patch release
- Checkout the release branch and make sure it's on the latest commit (
git checkout X.Y && git pull origin X.Y
) - Make sure the latest commit is tagged as a release candidate. If it isn't follow the "Publishing a release candidate" steps
- Do clean install of dependencies using
npm ci
(important: Do not usenpm install
, it does not respect shrinkwrap) - Update the version in
package.json
andnpm-shrinkwrap.json
by cutting out the rc portion (e.g.:"version": "v1.11.2-rc.2"
would become"version": "v1.11.2"
) - Commit and push the
package.json
andnpm-shrinkwrap.json
(git commit -a m vX.Y.Z && git push origin X.Y
) - Create a git tag using the version (
git tag vX.Y.Z && git push --tags origin
) - Update the "Changelog"
- Wait for continuous integration to pass and do any necessary last minute local testing before publishing
- Publish to NPM:
npm publish
- To test the release, install it with
npm install -g appium
- Update the version in
package.json
andnpm-shrinkwrap.json
back to being a release candidate for the next patch (e.g.:"version": "v1.11.3"
becomes"version": "v1.11.4-rc.0"
) - Commit and push the
package.json
andnpm-shrinkwrap.json
changes