1*8a52c783SCole Faust# Contributing to the AWS SDK for Java 2*8a52c783SCole FaustThank you for your interest in contributing the AWS SDK for Java! We work hard 3*8a52c783SCole Faustto provide a high quality and useful SDK for our customers, and we appreciate 4*8a52c783SCole Faustyour interest in helping us and the rest of our community of users. We welcome 5*8a52c783SCole Faustbug reports, feature requests, and code contributions. 6*8a52c783SCole Faust 7*8a52c783SCole Faust__Jump To:__ 8*8a52c783SCole Faust* [Bug Reports](#bug-reports) 9*8a52c783SCole Faust* [Feature Requests](#feature-requests) 10*8a52c783SCole Faust* [Code Contributions](#code-contributions) 11*8a52c783SCole Faust* [Additional Resources](#additional-resources) 12*8a52c783SCole Faust 13*8a52c783SCole Faust## Bug Reports 14*8a52c783SCole FaustBug reports are accepted through the [this][bug-report] page. 15*8a52c783SCole Faust 16*8a52c783SCole FaustThe following labels are used to track bug related issues: [Bug][label-bug], 17*8a52c783SCole Faust[Documentation Issue][label-doc-issue]. 18*8a52c783SCole Faust 19*8a52c783SCole Faust### Before Submitting a Bug Report 20*8a52c783SCole FaustBefore submitting a bug report, please do the following: 21*8a52c783SCole Faust 22*8a52c783SCole Faust1. Do a search through the existing issues to make sure it has not already been 23*8a52c783SCole Faust reported. If there's an existing one, be sure give a reaction which will 24*8a52c783SCole Faust help us prioritize which issues to address first. 25*8a52c783SCole Faust 26*8a52c783SCole Faust2. If possible, upgrade to the latest release of the SDK. The SDK has a near 27*8a52c783SCole Faust daily release cadence so it's possible the bug has already been fixed in the 28*8a52c783SCole Faust latest version. We maintain a strong backwards compatibility guarantee 29*8a52c783SCole Faust between patch version releases so you can be confident that your application 30*8a52c783SCole Faust will continue to work as expected with the newer version. 31*8a52c783SCole Faust 32*8a52c783SCole FaustIf, after doing the above steps, you determine that you need to submit a bug 33*8a52c783SCole Faustreport, refer to the next section. 34*8a52c783SCole Faust 35*8a52c783SCole Faust### Submitting a Bug Report 36*8a52c783SCole FaustSo that we are able to assist you as effectively as possible with the issue, 37*8a52c783SCole Faustplease ensure that your bug report has the following: 38*8a52c783SCole Faust 39*8a52c783SCole Faust* A short, descriptive title. Ideally, other community members should be able 40*8a52c783SCole Faust to get a good idea of the issue just from reading the title. 41*8a52c783SCole Faust* A succint, detailed description of the problem you're experiencing. This 42*8a52c783SCole Faust should include: 43*8a52c783SCole Faust * Expected behavior of the SDK and the actual behavior exhibited. 44*8a52c783SCole Faust * Any details of your application environment that may be relevant. At 45*8a52c783SCole Faust minimum, this should include the __SDK version__ and __JRE version__. 46*8a52c783SCole Faust * If applicable, the exception stacktrace. 47*8a52c783SCole Faust * If you are able to create one, include a [Minimal Working Example][mwe] 48*8a52c783SCole Faust that reproduces the issue. 49*8a52c783SCole Faust* [Markdown][markdown] formatting as appropriate to make the report easier to 50*8a52c783SCole Faust read; for example use code blocks when pasting a code snippet and exception 51*8a52c783SCole Faust stacktraces. 52*8a52c783SCole Faust 53*8a52c783SCole Faust## Feature Requests 54*8a52c783SCole FaustFeature requests are submitted through the [this][feature-request] page. 55*8a52c783SCole Faust 56*8a52c783SCole FaustAs with Bug Reports, please do a search of the open requests first before 57*8a52c783SCole Faustsubmitting a new one to avoid duplicates. If you find an existing one, give it 58*8a52c783SCole Fausta +1. 59*8a52c783SCole Faust 60*8a52c783SCole Faust__NOTE:__ If this is a feature you intend to implement, please be sure to 61*8a52c783SCole Faustsubmit the feature request *before* working on any code changes. This will 62*8a52c783SCole Faustallow members on the SDK team to have a discussion with you to ensure that it's 63*8a52c783SCole Faustthe right design and that it makes sense to include in the SDK. Keep in mind 64*8a52c783SCole Faustthat other concerns like source and binary compatibility will also play a 65*8a52c783SCole Faustdeciding factor. 66*8a52c783SCole Faust 67*8a52c783SCole FaustFeature requests are labeled with [feature-request][label-feature-request]. 68*8a52c783SCole Faust 69*8a52c783SCole Faust### Submitting a Feature Request 70*8a52c783SCole FaustOpen an [issue][issues] with the following: 71*8a52c783SCole Faust 72*8a52c783SCole Faust* A short, descriptive title. Ideally, other community members should be able 73*8a52c783SCole Faust to get a good idea of the feature just from reading the title. 74*8a52c783SCole Faust* A detailed description of the the proposed feature. Include justification for 75*8a52c783SCole Faust why it should be added to the SDK, and possibly example code to illustrate 76*8a52c783SCole Faust how it should work. 77*8a52c783SCole Faust* [Markdown][markdown] formatting as appropriate to make the request easier to 78*8a52c783SCole Faust read. 79*8a52c783SCole Faust* If you intend to implement this feature, indicate that you'd like to the 80*8a52c783SCole Faust issue to be assigned to you 81*8a52c783SCole Faust 82*8a52c783SCole Faust## Code Contributions 83*8a52c783SCole FaustCode contributions to the SDK are done through [Pull Requests][pull-requests]. 84*8a52c783SCole FaustPlease keep the following in mind when considering a code contribution: 85*8a52c783SCole Faust 86*8a52c783SCole Faust* The SDK is released under the [Apache 2.0 License][license]. 87*8a52c783SCole Faust 88*8a52c783SCole Faust Any code you submit will be released under this license. If you are 89*8a52c783SCole Faust contributing a large/substantial feature, you may be asked to sign a 90*8a52c783SCole Faust Contributor License Agreement (CLA). 91*8a52c783SCole Faust* For anything but very small or quick changes, you should always start by 92*8a52c783SCole Faust checking the [Issues][issues] page to see if the work is already being done 93*8a52c783SCole Faust by another person. 94*8a52c783SCole Faust 95*8a52c783SCole Faust If you're working on a bug fix, check to see if the bug has already been 96*8a52c783SCole Faust reported. If it has but no one is assigned to it, ask one of the maintainers 97*8a52c783SCole Faust to assign it to you before beginning work. If you're confident the bug 98*8a52c783SCole Faust hasn't been reported yet, create a new [Bug Report](#bug-reports) then ask to 99*8a52c783SCole Faust be assigned to it. 100*8a52c783SCole Faust 101*8a52c783SCole Faust If you are thinking about adding entirely new functionality, open a [Feature 102*8a52c783SCole Faust Request](#feature-requests) or [ping][gitter] the maintainers to ask for 103*8a52c783SCole Faust feedback first before beginning work; again this is to make sure that no one 104*8a52c783SCole Faust else is already working on it, and also that it makes sense to be included in 105*8a52c783SCole Faust the SDK. 106*8a52c783SCole Faust* All code contributions must be accompanied with new or modified tests that 107*8a52c783SCole Faust verify that the code works as expected; i.e. that the issue has been fixed or 108*8a52c783SCole Faust that the functionality works as intended. 109*8a52c783SCole Faust 110*8a52c783SCole Faust### Your First Code Change 111*8a52c783SCole FaustFor detailed information on getting started building and making code changes to 112*8a52c783SCole Faustthe SDK, refer to our [Working on the SDK](./docs/GettingStarted.md) doc 113*8a52c783SCole Faust 114*8a52c783SCole Faust### Pull Request Readiness 115*8a52c783SCole FaustBefore submitting your pull request, refer to the pull request readiness 116*8a52c783SCole Faustchecklist below: 117*8a52c783SCole Faust 118*8a52c783SCole Faust* [ ] Includes tests to exercise the new behavior 119*8a52c783SCole Faust* [ ] Code is documented, especially public and user-facing constructs 120*8a52c783SCole Faust* [ ] Local run of `./mvnw package`(Linux) or `./mvnw.cmd package`(Windows) succeeds 121*8a52c783SCole Faust* [ ] Git commit message is detailed and includes context behind the change 122*8a52c783SCole Faust* [ ] If the change is related to an existing Bug Report or Feature Request, 123*8a52c783SCole Faust the issue number is referenced 124*8a52c783SCole Faust* [ ] A short description of the change added to 125*8a52c783SCole Faust [CHANGELOG.md](./CHANGELOG.md). Adding a new entry must be accomplished by 126*8a52c783SCole Faust running the `scripts/new-change` script and following the instructions. 127*8a52c783SCole Faust Commit the new file created by the script in `.changes/next-release` with 128*8a52c783SCole Faust your changes. 129*8a52c783SCole Faust 130*8a52c783SCole Faust__Note__: Some changes have additional requirements. Refer to the section below 131*8a52c783SCole Faustto see if your change will require additional work to be accepted. 132*8a52c783SCole Faust 133*8a52c783SCole Faust#### Additional Pull Request Requirements 134*8a52c783SCole Faust##### Reactive Streams 135*8a52c783SCole FaustIf the change includes implementations of the [Reactive Streams 136*8a52c783SCole Faustinterfaces](https://github.com/reactive-streams/reactive-streams-jvm), the 137*8a52c783SCole Faustchange must also contain verification tests using the [Reactive Streams 138*8a52c783SCole FaustTechnology Compatibility 139*8a52c783SCole FaustKit](https://github.com/reactive-streams/reactive-streams-jvm/tree/master/tck) 140*8a52c783SCole Faustto ensure specificiation compliance. 141*8a52c783SCole Faust 142*8a52c783SCole Faust### Getting Your Pull Request Merged 143*8a52c783SCole FaustAll Pull Requests must be approved by at least one member of the SDK team 144*8a52c783SCole Faustbefore it can be merged in. The members only have limited bandwitdth to review 145*8a52c783SCole FaustPull Requests so it's not unusual for a Pull Request to go unreviewed for a few 146*8a52c783SCole Faustdays, especially if it's a large or complex one. If, after a week, your Pull 147*8a52c783SCole FaustRequest has not had any engagement from the SDK team, feel free to ping a 148*8a52c783SCole Faustmember to ask for a review. 149*8a52c783SCole Faust 150*8a52c783SCole Faust## Additional Resources 151*8a52c783SCole FaustWe maintain [docs](docs/README.md) where information like design decisions, internal 152*8a52c783SCole Faustarchitecture, and style conventions are documented that you may find helpful 153*8a52c783SCole Faustwhen contributing to the SDK. 154*8a52c783SCole Faust 155*8a52c783SCole Faust 156*8a52c783SCole Faust[license]: ./LICENSE.txt 157*8a52c783SCole Faust[mwe]: https://en.wikipedia.org/wiki/Minimal_Working_Example 158*8a52c783SCole Faust[markdown]: https://guides.github.com/features/mastering-markdown/ 159*8a52c783SCole Faust[issues]: https://github.com/aws/aws-sdk-java-v2/issues 160*8a52c783SCole Faust[pull-requests]: https://github.com/aws/aws-sdk-java-v2/pulls 161*8a52c783SCole Faust[label-bug]: https://github.com/aws/aws-sdk-java-v2/labels/bug 162*8a52c783SCole Faust[label-doc-issue]: https://github.com/aws/aws-sdk-java-v2/labels/documentation 163*8a52c783SCole Faust[label-feature-request]: https://github.com/aws/aws-sdk-java-v2/labels/feature-request 164*8a52c783SCole Faust[git-rewriting-history]: https://git-scm.com/book/en/v2/Git-Tools-Rewriting-History 165*8a52c783SCole Faust[gitter]: https://gitter.im/aws/aws-sdk-java-v2 166*8a52c783SCole Faust[bug-report]: https://github.com/aws/aws-sdk-java-v2/issues/new?assignees=&labels=bug%2Cneeds-triage&template=bug-report.yml&title=%28short+issue+description%29 167*8a52c783SCole Faust[feature-request]: https://github.com/aws/aws-sdk-java-v2/issues/new?assignees=&labels=feature-request%2Cneeds-triage&template=feature-request.yml&title=%28short+issue+description%29 168