remove minor version pinning from ci (#5722)
[express.git] / Contributing.md
blob1654cee02f2fd50333edf9412a72260613ffaff3
1 # Express.js Community Contributing Guide 1.0
3 The goal of this document is to create a contribution process that:
5 * Encourages new contributions.
6 * Encourages contributors to remain involved.
7 * Avoids unnecessary processes and bureaucracy whenever possible.
8 * Creates a transparent decision making process that makes it clear how
9 contributors can be involved in decision making.
11 ## Vocabulary
13 * A **Contributor** is any individual creating or commenting on an issue or pull request.
14 * A **Committer** is a subset of contributors who have been given write access to the repository.
15 * A **Project Captain** is the lead maintainer of a repository.
16 * A **TC (Technical Committee)** is a group of committers representing the required technical
17 expertise to resolve rare disputes.
18 * A **Triager** is a subset of contributors who have been given triage access to the repository.
20 ## Logging Issues
22 Log an issue for any question or problem you might have. When in doubt, log an issue, and
23 any additional policies about what to include will be provided in the responses. The only
24 exception is security disclosures which should be sent privately.
26 Committers may direct you to another repository, ask for additional clarifications, and
27 add appropriate metadata before the issue is addressed.
29 Please be courteous and respectful. Every participant is expected to follow the
30 project's Code of Conduct.
32 ## Contributions
34 Any change to resources in this repository must be through pull requests. This applies to all changes
35 to documentation, code, binary files, etc. Even long term committers and TC members must use
36 pull requests.
38 No pull request can be merged without being reviewed.
40 For non-trivial contributions, pull requests should sit for at least 36 hours to ensure that
41 contributors in other timezones have time to review. Consideration should also be given to
42 weekends and other holiday periods to ensure active committers all have reasonable time to
43 become involved in the discussion and review process if they wish.
45 The default for each contribution is that it is accepted once no committer has an objection.
46 During a review, committers may also request that a specific contributor who is most versed in a
47 particular area gives a "LGTM" before the PR can be merged. There is no additional "sign off"
48 process for contributions to land. Once all issues brought by committers are addressed it can
49 be landed by any committer.
51 In the case of an objection being raised in a pull request by another committer, all involved
52 committers should seek to arrive at a consensus by way of addressing concerns being expressed
53 by discussion, compromise on the proposed change, or withdrawal of the proposed change.
55 If a contribution is controversial and committers cannot agree about how to get it to land
56 or if it should land then it should be escalated to the TC. TC members should regularly
57 discuss pending contributions in order to find a resolution. It is expected that only a
58 small minority of issues be brought to the TC for resolution and that discussion and
59 compromise among committers be the default resolution mechanism.
61 ## Becoming a Triager
63 Anyone can become a triager! Read more about the process of being a triager in
64 [the triage process document](Triager-Guide.md).
66 Currently, any existing [organization member](https://github.com/orgs/expressjs/people) can nominate
67 a new triager. If you are interested in becoming a triager, our best advice is to actively participate
68 in the community by helping triaging issues and pull requests. As well we recommend
69 to engage in other community activities like attending the TC meetings, and participating in the Slack
70 discussions.
72 You can also reach out to any of the [organization members](https://github.com/orgs/expressjs/people)
73 if you have questions or need guidance.
75 ## Becoming a Committer
77 All contributors who land a non-trivial contribution should be on-boarded in a timely manner,
78 and added as a committer, and be given write access to the repository.
80 Committers are expected to follow this policy and continue to send pull requests, go through
81 proper review, and have other committers merge their pull requests.
83 ## TC Process
85 The TC uses a "consensus seeking" process for issues that are escalated to the TC.
86 The group tries to find a resolution that has no open objections among TC members.
87 If a consensus cannot be reached that has no objections then a majority wins vote
88 is called. It is also expected that the majority of decisions made by the TC are via
89 a consensus seeking process and that voting is only used as a last-resort.
91 Resolution may involve returning the issue to project captains with suggestions on
92 how to move forward towards a consensus. It is not expected that a meeting of the TC
93 will resolve all issues on its agenda during that meeting and may prefer to continue
94 the discussion happening among the project captains.
96 Members can be added to the TC at any time. Any TC member can nominate another committer
97 to the TC and the TC uses its standard consensus seeking process to evaluate whether or
98 not to add this new member. The TC will consist of a minimum of 3 active members and a
99 maximum of 10. If the TC should drop below 5 members the active TC members should nominate
100 someone new. If a TC member is stepping down, they are encouraged (but not required) to
101 nominate someone to take their place.
103 TC members will be added as admin's on the Github orgs, npm orgs, and other resources as
104 necessary to be effective in the role.
106 To remain "active" a TC member should have participation within the last 12 months and miss
107 no more than six consecutive TC meetings. Our goal is to increase participation, not punish
108 people for any lack of participation, this guideline should be only be used as such
109 (replace an inactive member with a new active one, for example). Members who do not meet this
110 are expected to step down. If A TC member does not step down, an issue can be opened in the
111 discussions repo to move them to inactive status. TC members who step down or are removed due
112 to inactivity will be moved into inactive status.
114 Inactive status members can become active members by self nomination if the TC is not already
115 larger than the maximum of 10. They will also be given preference if, while at max size, an
116 active member steps down.
118 ## Project Captains
120 The Express TC can designate captains for individual projects/repos in the
121 organizations. These captains are responsible for being the primary
122 day-to-day maintainers of the repo on a technical and community front.
123 Repo captains are empowered with repo ownership and package publication rights.
124 When there are conflicts, especially on topics that effect the Express project
125 at large, captains are responsible to raise it up to the TC and drive
126 those conflicts to resolution. Captains are also responsible for making sure
127 community members follow the community guidelines, maintaining the repo
128 and the published package, as well as in providing user support.
130 Like TC members, Repo captains are a subset of committers.
132 To become a captain for a project the candidate is expected to participate in that
133 project for at least 6 months as a committer prior to the request. They should have
134 helped with code contributions as well as triaging issues. They are also required to
135 have 2FA enabled on both their GitHub and npm accounts. Any TC member or existing
136 captain on the repo can nominate another committer to the captain role, submit a PR to
137 this doc, under `Current Project Captains` section (maintaining the sort order) with
138 the project, their GitHub handle and npm username (if different). The PR will require
139 at least 2 approvals from TC members and 2 weeks hold time to allow for comment and/or
140 dissent.  When the PR is merged, a TC member will add them to the proper GitHub/npm groups.
142 ### Active Projects and Captains
144 - `expressjs/badgeboard`: @wesleytodd
145 - `expressjs/basic-auth-connect`: N/A
146 - `expressjs/body-parser`: @wesleytodd, @jonchurch
147 - `expressjs/compression`: N/A
148 - `expressjs/connect-multiparty`: N/A
149 - `expressjs/cookie-parser`: @wesleytodd, @UlisesGascon
150 - `expressjs/cookie-session`: N/A
151 - `expressjs/cors`: @jonchurch
152 - `expressjs/discussions`: @wesleytodd
153 - `expressjs/errorhandler`: N/A
154 - `expressjs/express-paginate`: N/A
155 - `expressjs/express`: @wesleytodd
156 - `expressjs/expressjs.com`: @crandmck, @jonchurch
157 - `expressjs/flash`: N/A
158 - `expressjs/generator`: @wesleytodd
159 - `expressjs/method-override`: N/A
160 - `expressjs/morgan`: @jonchurch
161 - `expressjs/multer`: @LinusU
162 - `expressjs/response-time`: @blakeembrey
163 - `expressjs/serve-favicon`: N/A
164 - `expressjs/serve-index`: N/A
165 - `expressjs/serve-static`: N/A
166 - `expressjs/session`: N/A
167 - `expressjs/statusboard`: @wesleytodd
168 - `expressjs/timeout`: N/A
169 - `expressjs/vhost`: N/A
170 - `jshttp/accepts`: @blakeembrey
171 - `jshttp/basic-auth`: @blakeembrey
172 - `jshttp/compressible`: @blakeembrey
173 - `jshttp/content-disposition`: @blakeembrey
174 - `jshttp/content-type`: @blakeembrey
175 - `jshttp/cookie`: @wesleytodd
176 - `jshttp/etag`: @blakeembrey
177 - `jshttp/forwarded`: @blakeembrey
178 - `jshttp/fresh`: @blakeembrey
179 - `jshttp/http-assert`: @wesleytodd, @jonchurch
180 - `jshttp/http-errors`: @wesleytodd, @jonchurch
181 - `jshttp/media-typer`: @blakeembrey
182 - `jshttp/methods`: @blakeembrey
183 - `jshttp/mime-db`: @blakeembrey, @UlisesGascon 
184 - `jshttp/mime-types`: @blakeembrey, @UlisesGascon 
185 - `jshttp/negotiator`: @blakeembrey
186 - `jshttp/on-finished`: @wesleytodd
187 - `jshttp/on-headers`: @blakeembrey
188 - `jshttp/proxy-addr`: @wesleytodd
189 - `jshttp/range-parser`: @blakeembrey
190 - `jshttp/statuses`: @blakeembrey
191 - `jshttp/type-is`: @blakeembrey
192 - `jshttp/vary`: @blakeembrey
193 - `pillarjs/cookies`: @blakeembrey
194 - `pillarjs/csrf`: N/A
195 - `pillarjs/encodeurl`: @blakeembrey
196 - `pillarjs/finalhandler`: @wesleytodd
197 - `pillarjs/hbs`: N/A
198 - `pillarjs/multiparty`: @blakeembrey
199 - `pillarjs/parseurl`: @blakeembrey
200 - `pillarjs/path-to-regexp`: @blakeembrey
201 - `pillarjs/request`: @wesleytodd
202 - `pillarjs/resolve-path`: @blakeembrey
203 - `pillarjs/router`: @blakeembrey
204 - `pillarjs/send`: @blakeembrey
205 - `pillarjs/understanding-csrf`: N/A
207 ### Current Initiative Captains
209 - Triage team [ref](https://github.com/expressjs/discussions/issues/227): @UlisesGascon