blob: 1f53a5db272fe85b5750e7a37aa0c6b1715b692c [file] [log] [blame] [view]
# Contributing to the AWS SDK for Java
Thank you for your interest in contributing the AWS SDK for Java! We work hard
to provide a high quality and useful SDK for our customers, and we appreciate
your interest in helping us and the rest of our community of users. We welcome
bug reports, feature requests, and code contributions.
__Jump To:__
* [Bug Reports](#bug-reports)
* [Feature Requests](#feature-requests)
* [Code Contributions](#code-contributions)
* [Additional Resources](#additional-resources)
## Bug Reports
Bug reports are accepted through the [this][bug-report] page.
The following labels are used to track bug related issues: [Bug][label-bug],
[Documentation Issue][label-doc-issue].
### Before Submitting a Bug Report
Before submitting a bug report, please do the following:
1. Do a search through the existing issues to make sure it has not already been
reported. If there's an existing one, be sure give a 👍 reaction which will
help us prioritize which issues to address first.
2. If possible, upgrade to the latest release of the SDK. The SDK has a near
daily release cadence so it's possible the bug has already been fixed in the
latest version. We maintain a strong backwards compatibility guarantee
between patch version releases so you can be confident that your application
will continue to work as expected with the newer version.
If, after doing the above steps, you determine that you need to submit a bug
report, refer to the next section.
### Submitting a Bug Report
So that we are able to assist you as effectively as possible with the issue,
please ensure that your bug report has the following:
* A short, descriptive title. Ideally, other community members should be able
to get a good idea of the issue just from reading the title.
* A succint, detailed description of the problem you're experiencing. This
should include:
* Expected behavior of the SDK and the actual behavior exhibited.
* Any details of your application environment that may be relevant. At
minimum, this should include the __SDK version__ and __JRE version__.
* If applicable, the exception stacktrace.
* If you are able to create one, include a [Minimal Working Example][mwe]
that reproduces the issue.
* [Markdown][markdown] formatting as appropriate to make the report easier to
read; for example use code blocks when pasting a code snippet and exception
stacktraces.
## Feature Requests
Feature requests are submitted through the [this][feature-request] page.
As with Bug Reports, please do a search of the open requests first before
submitting a new one to avoid duplicates. If you find an existing one, give it
a +1.
__NOTE:__ If this is a feature you intend to implement, please be sure to
submit the feature request *before* working on any code changes. This will
allow members on the SDK team to have a discussion with you to ensure that it's
the right design and that it makes sense to include in the SDK. Keep in mind
that other concerns like source and binary compatibility will also play a
deciding factor.
Feature requests are labeled with [feature-request][label-feature-request].
### Submitting a Feature Request
Open an [issue][issues] with the following:
* A short, descriptive title. Ideally, other community members should be able
to get a good idea of the feature just from reading the title.
* A detailed description of the the proposed feature. Include justification for
why it should be added to the SDK, and possibly example code to illustrate
how it should work.
* [Markdown][markdown] formatting as appropriate to make the request easier to
read.
* If you intend to implement this feature, indicate that you'd like to the
issue to be assigned to you
## Code Contributions
Code contributions to the SDK are done through [Pull Requests][pull-requests].
Please keep the following in mind when considering a code contribution:
* The SDK is released under the [Apache 2.0 License][license].
Any code you submit will be released under this license. If you are
contributing a large/substantial feature, you may be asked to sign a
Contributor License Agreement (CLA).
* For anything but very small or quick changes, you should always start by
checking the [Issues][issues] page to see if the work is already being done
by another person.
If you're working on a bug fix, check to see if the bug has already been
reported. If it has but no one is assigned to it, ask one of the maintainers
to assign it to you before beginning work. If you're confident the bug
hasn't been reported yet, create a new [Bug Report](#bug-reports) then ask to
be assigned to it.
If you are thinking about adding entirely new functionality, open a [Feature
Request](#feature-requests) or [ping][gitter] the maintainers to ask for
feedback first before beginning work; again this is to make sure that no one
else is already working on it, and also that it makes sense to be included in
the SDK.
* All code contributions must be accompanied with new or modified tests that
verify that the code works as expected; i.e. that the issue has been fixed or
that the functionality works as intended.
### Your First Code Change
For detailed information on getting started building and making code changes to
the SDK, refer to our [Working on the SDK](./docs/GettingStarted.md) doc
### Pull Request Readiness
Before submitting your pull request, refer to the pull request readiness
checklist below:
* [ ] Includes tests to exercise the new behavior
* [ ] Code is documented, especially public and user-facing constructs
* [ ] Local run of `./mvnw package`(Linux) or `./mvnw.cmd package`(Windows) succeeds
* [ ] Git commit message is detailed and includes context behind the change
* [ ] If the change is related to an existing Bug Report or Feature Request,
the issue number is referenced
* [ ] A short description of the change added to
[CHANGELOG.md](./CHANGELOG.md). Adding a new entry must be accomplished by
running the `scripts/new-change` script and following the instructions.
Commit the new file created by the script in `.changes/next-release` with
your changes.
__Note__: Some changes have additional requirements. Refer to the section below
to see if your change will require additional work to be accepted.
#### Additional Pull Request Requirements
##### Reactive Streams
If the change includes implementations of the [Reactive Streams
interfaces](https://github.com/reactive-streams/reactive-streams-jvm), the
change must also contain verification tests using the [Reactive Streams
Technology Compatibility
Kit](https://github.com/reactive-streams/reactive-streams-jvm/tree/master/tck)
to ensure specificiation compliance.
### Getting Your Pull Request Merged
All Pull Requests must be approved by at least one member of the SDK team
before it can be merged in. The members only have limited bandwitdth to review
Pull Requests so it's not unusual for a Pull Request to go unreviewed for a few
days, especially if it's a large or complex one. If, after a week, your Pull
Request has not had any engagement from the SDK team, feel free to ping a
member to ask for a review.
## Additional Resources
We maintain [docs](docs/README.md) where information like design decisions, internal
architecture, and style conventions are documented that you may find helpful
when contributing to the SDK.
[license]: ./LICENSE.txt
[mwe]: https://en.wikipedia.org/wiki/Minimal_Working_Example
[markdown]: https://guides.github.com/features/mastering-markdown/
[issues]: https://github.com/aws/aws-sdk-java-v2/issues
[pull-requests]: https://github.com/aws/aws-sdk-java-v2/pulls
[label-bug]: https://github.com/aws/aws-sdk-java-v2/labels/bug
[label-doc-issue]: https://github.com/aws/aws-sdk-java-v2/labels/documentation
[label-feature-request]: https://github.com/aws/aws-sdk-java-v2/labels/feature-request
[git-rewriting-history]: https://git-scm.com/book/en/v2/Git-Tools-Rewriting-History
[gitter]: https://gitter.im/aws/aws-sdk-java-v2
[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
[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