xref: /aosp_15_r20/external/aws-sdk-java-v2/CONTRIBUTING.md (revision 8a52c7834d808308836a99fc2a6e0ed8db339086)
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