Hi (future) collaborator! **tl;dr;** - submit pull requests to develop branch - use [conventional changelog](https://github.com/ajoslin/conventional-changelog/blob/master/conventions/angular.md) commit style messages - squash your commits - have fun **Table of Contents** - [Where to start?](#where-to-start) - [Development workflow](#development-workflow) - [Local example](#local-example) - [Documentation website](#documentation-website) - [Adding/Updating a package](#addingupdating-a-package) - [Removing a package](#removing-a-package) - [In case of shrinkwrap madness](#in-case-of-shrinkwrap-madness) - [Commit message guidelines](#commit-message-guidelines) - [Revert](#revert) - [Type](#type) - [Scope](#scope) - [Subject](#subject) - [Body](#body) - [Footer](#footer) - [Stash your commits](#stash-your-commits) - [When are issues closed?](#when-are-issues-closed) - [Releasing](#releasing) - [Beta releases](#beta-releases) - [Hotfixes](#hotfixes) - [Releasing hotfixes](#releasing-hotfixes) - [Documentation updates](#documentation-updates) # Where to start? Have a fix or a new feature? [Search for corresponding issues](https://github.com/algolia/docsearch/issues) first then create a new one. Always check the status of the [develop branch](https://github.com/algolia/docsearch/tree/develop) for the freshest code. Always submit pull requests to the develop branch. # Development workflow ## Local example We use a simple documentation example website as a way to develop the docsearch.js library. Requirements: - [Node.js](https://nodejs.org/en/) - npm@2 ```sh npm run dev # open http://localhost:8080 ``` ## Documentation website This is the [Jekyll](https://jekyllrb.com/) instance running at https://community.algolia.com/docsearch. Requirements: - [Ruby](https://www.ruby-lang.org/en/) - [Bundler](http://bundler.io/) ```sh npm install npm run dev:docs open http://localhost:4000/docsearch/ ``` # Adding/Updating a package We use a [specific shrinkwrapping tool](https://github.com/uber/npm-shrinkwrap) and npm@2. ```sh npm install npm install package --save[-dev] npm run shrinkwrap ``` # Removing a package ```sh npm install npm remove package --save[-dev] npm run shrinkwrap ``` Removing packages can be really tricky to handle if the package was used by both the host project and sub dependencies. # In case of shrinkwrap madness ```sh rm -rf node_modules rm npm-shrinkwrap.json npm cache clean npm install # check everything is working npm run shrinkwrap ``` Don't do this too often because it breaks the whole shrinkwrap idea. Since you are completely rebuilding the dependency tree and possibly updating things. # Commit message guidelines We use [conventional changelog](https://github.com/ajoslin/conventional-changelog) to generate our changelog from our git commit messages. Here are the rules to write commit messages, they are the same than [angular/angular.js](https://github.com/angular/angular.js/blob/7c792f4cc99515ac27ed317e0e35e40940b3a400/CONTRIBUTING.md#commit-message-format). Each commit message consists of a **header**, a **body** and a **footer**. The header has a special format that includes a **type**, a **scope** and a **subject**: ```text ():