| # Contributing |
| |
| ## Issues |
| |
| * Request features and report bugs using the [GitHub Issue Tracker](https://github.com/fsnotify/fsnotify/issues). |
| * Please indicate the platform you are using fsnotify on. |
| * A code example to reproduce the problem is appreciated. |
| |
| ## Pull Requests |
| |
| ### Contributor License Agreement |
| |
| fsnotify is derived from code in the [golang.org/x/exp](https://godoc.org/golang.org/x/exp) package and it may be included [in the standard library](https://github.com/fsnotify/fsnotify/issues/1) in the future. Therefore fsnotify carries the same [LICENSE](https://github.com/fsnotify/fsnotify/blob/master/LICENSE) as Go. Contributors retain their copyright, so you need to fill out a short form before we can accept your contribution: [Google Individual Contributor License Agreement](https://developers.google.com/open-source/cla/individual). |
| |
| Please indicate that you have signed the CLA in your pull request. |
| |
| ### How fsnotify is Developed |
| |
| * Development is done on feature branches. |
| * Tests are run on BSD, Linux, macOS and Windows. |
| * Pull requests are reviewed and [applied to master][am] using [hub][]. |
| * Maintainers may modify or squash commits rather than asking contributors to. |
| * To issue a new release, the maintainers will: |
| * Update the CHANGELOG |
| * Tag a version, which will become available through gopkg.in. |
| |
| ### How to Fork |
| |
| For smooth sailing, always use the original import path. Installing with `go get` makes this easy. |
| |
| 1. Install from GitHub (`go get -u github.com/fsnotify/fsnotify`) |
| 2. Create your feature branch (`git checkout -b my-new-feature`) |
| 3. Ensure everything works and the tests pass (see below) |
| 4. Commit your changes (`git commit -am 'Add some feature'`) |
| |
| Contribute upstream: |
| |
| 1. Fork fsnotify on GitHub |
| 2. Add your remote (`git remote add fork git@github.com:mycompany/repo.git`) |
| 3. Push to the branch (`git push fork my-new-feature`) |
| 4. Create a new Pull Request on GitHub |
| |
| This workflow is [thoroughly explained by Katrina Owen](https://splice.com/blog/contributing-open-source-git-repositories-go/). |
| |
| ### Testing |
| |
| fsnotify uses build tags to compile different code on Linux, BSD, macOS, and Windows. |
| |
| Before doing a pull request, please do your best to test your changes on multiple platforms, and list which platforms you were able/unable to test on. |
| |
| To aid in cross-platform testing there is a Vagrantfile for Linux and BSD. |
| |
| * Install [Vagrant](http://www.vagrantup.com/) and [VirtualBox](https://www.virtualbox.org/) |
| * Setup [Vagrant Gopher](https://github.com/nathany/vagrant-gopher) in your `src` folder. |
| * Run `vagrant up` from the project folder. You can also setup just one box with `vagrant up linux` or `vagrant up bsd` (note: the BSD box doesn't support Windows hosts at this time, and NFS may prompt for your host OS password) |
| * Once setup, you can run the test suite on a given OS with a single command `vagrant ssh linux -c 'cd fsnotify/fsnotify; go test'`. |
| * When you're done, you will want to halt or destroy the Vagrant boxes. |
| |
| Notice: fsnotify file system events won't trigger in shared folders. The tests get around this limitation by using the /tmp directory. |
| |
| Right now there is no equivalent solution for Windows and macOS, but there are Windows VMs [freely available from Microsoft](http://www.modern.ie/en-us/virtualization-tools#downloads). |
| |
| ### Maintainers |
| |
| Help maintaining fsnotify is welcome. To be a maintainer: |
| |
| * Submit a pull request and sign the CLA as above. |
| * You must be able to run the test suite on Mac, Windows, Linux and BSD. |
| |
| To keep master clean, the fsnotify project uses the "apply mail" workflow outlined in Nathaniel Talbott's post ["Merge pull request" Considered Harmful][am]. This requires installing [hub][]. |
| |
| All code changes should be internal pull requests. |
| |
| Releases are tagged using [Semantic Versioning](http://semver.org/). |
| |
| [hub]: https://github.com/github/hub |
| [am]: http://blog.spreedly.com/2014/06/24/merge-pull-request-considered-harmful/#.VGa5yZPF_Zs |