Skip to content

Commit 7aadc43

Browse files
committed
Merge remote-tracking branch 'upstream/master'
* upstream/master: Document our dev process (#330)
2 parents 51cf9d2 + 7ab96ed commit 7aadc43

File tree

1 file changed

+163
-0
lines changed

1 file changed

+163
-0
lines changed

CONTRIBUTING.md

+163
Original file line numberDiff line numberDiff line change
@@ -40,3 +40,166 @@ From there use the "Launch Extension" launch option.
4040
### Debugging the Python Extension Debugger
4141
The easiest way to debug the Python Debugger (in our opinion) is to clone this git repo directory into [your](https://code.visualstudio.com/docs/extensions/install-extension#_your-extensions-folder) extensions directory.
4242
From there use the ```Launch Extension as debugserver``` launch option.
43+
44+
## Development process
45+
46+
To effectively contribute to this extension, it helps to know how its
47+
development process works. That way you know not only why the
48+
project maintainers do what they do to keep this project running
49+
smoothly, but it allows you to help out by noticing when a step is
50+
missed or to learn in case someday you become a project maintainer as
51+
well!
52+
53+
### Iteration/milestone cycle
54+
55+
The extension aims for a two-week cycle with an appropriate
56+
[milestone](https://github.com/Microsoft/vscode-python/milestones)
57+
which tracks what is actively being worked on/towards the next
58+
release.
59+
60+
#### Tick-tock development process
61+
62+
Modeled after
63+
[Intel's tick-tock model](https://en.wikipedia.org/wiki/Tick-tock_model),
64+
our development cycle oscillates between two different focuses. In a
65+
"tick" cycle, we discuss potential changes to our development cycle.
66+
This allows to constantly improve how we develop the extension rather
67+
than simply let the process stagnate and develop outmodded approaches.
68+
69+
In a "tock" cycle we apply any changes that were agree to by the team
70+
during the previous "tick" cycle. By taking an entire cycle to discuss
71+
and agree to any changes we provide enough time to reflect upon any
72+
proposed changes so we don't make needless changes.
73+
74+
A "tock" cycle also aims to spend a week purely focused on cleaning up
75+
technical debt. This can be in the form of code refactorings, updating
76+
the code to support new checks introduced by TypeScript, etc. The goal
77+
is to keep the code base manageable long-term and to not end up
78+
calcifying any bad practices. This also provides a good opportunity to
79+
apply any development process changes to work that isn't flagged as
80+
time-critical as a new feature may be.
81+
82+
#### Iteration schedule
83+
84+
* Day 1 (Tuesday)
85+
* Leave code freeze from previous cycle
86+
* Incomplete items from the previous cycle are discussed
87+
* Why didn't an item get completed?
88+
* Should it transition to this new cycle or be dropped from the
89+
schedule for now?
90+
* [tick] Discuss if there's any issues with the current
91+
development process
92+
* [tock] Begin applying any changes to the development process as
93+
agreed upon during the previous "tick" cycle
94+
* Day 7 (Monday)
95+
* 3rd-party dependencies frozen to give CELA time to update TPN file
96+
* Day 14 (2nd Monday)
97+
* Code freeze
98+
* Go through
99+
[issues awaiting validation](https://github.com/Microsoft/vscode-python/issues?q=label%3A%22awaiting+4-validation%22+is%3Aclosed)
100+
& validate they have been fixed (and not subsequently broken by
101+
later changes)
102+
* Make sure the
103+
[documentation](https://code.visualstudio.com/docs/python/python-tutorial)
104+
-- including the
105+
[WOW](https://code.visualstudio.com/docs/languages/python) page)
106+
-- is updated appropriately
107+
* Update the
108+
[changelog](https://github.com/Microsoft/vscode-python/blob/master/CHANGELOG.md)
109+
* Write a post for the [team blog](https://aka.ms/pythonblog)
110+
* Upload the new version of
111+
[the extension](https://marketplace.visualstudio.com/items?itemName=ms-python.python)
112+
* Tag the release in git
113+
114+
### Issue triaging
115+
116+
To help actively track what stage issues are at, various labels are
117+
used. Which labels are expected to be set vary from when an issue is
118+
open to when an issue is closed.
119+
120+
#### Open issues
121+
122+
When an
123+
[issue is first opened](https://github.com/Microsoft/vscode-python/issues),
124+
it is triaged to contain at least three types of labels:
125+
126+
1. `awaiting`
127+
1. `feature`
128+
1. `type`
129+
130+
These labels cover what is blocking the issue from closing, what
131+
feature(s) of the extension are related to the issue, and what type of
132+
issue it is, respectively.
133+
134+
While most of the labels are self-explanatory, the `awaiting` labels
135+
deserve some more explanation. Each label has a number that roughly
136+
corresponds to what step in the process it is at (so that the labels
137+
lexicographically sort from earliest stage to latest stage). The
138+
suffix term for each label then specifies what is currently blocking
139+
the issue from being closed.
140+
141+
* `1-`
142+
* [`decision`](https://github.com/Microsoft/vscode-python/labels/awaiting%201-decision):
143+
The issue is a feature enhancement request and a decision has not
144+
been made as to whether we would accept a pull request
145+
implementing the enhancement
146+
* [`more info`](https://github.com/Microsoft/vscode-python/labels/awaiting%201-more%20info):
147+
We need more information from the OP (original poster)
148+
* [`verification`](https://github.com/Microsoft/vscode-python/labels/awaiting%201-verification):
149+
We need to verify that the issue can be replicated
150+
* [`2-PR`](https://github.com/Microsoft/vscode-python/labels/awaiting%202-PR):
151+
The issue is valid and is now awaiting a pull request to address the
152+
issue
153+
* [`3-merge`](https://github.com/Microsoft/vscode-python/labels/awaiting%203-merge):
154+
A pull request has been created and is currently being reviewed
155+
* [`4-validation`](https://github.com/Microsoft/vscode-python/labels/awaiting%204-validation):
156+
A pull request has been merged and resolution of the issue should be
157+
independently validated
158+
159+
#### Closed issues
160+
161+
When an
162+
[issue is closed](https://github.com/Microsoft/vscode-python/issues?q=is%3Aissue+is%3Aclosed),
163+
it should have an appropriate `closed-` label.
164+
165+
### Pull request workflow
166+
167+
1. Check that there is an issue corresponding to what the pull request
168+
is attempting to address
169+
* If an issue exists, make sure it has reached the stage of being
170+
labeled `awaiting 2-PR`
171+
* If no issue exists, open one and wait for it to reach the
172+
`awaiting 2-PR` stage before submitting the pull request
173+
1. Open the pull request, mentioning the appropriate issue(s)
174+
* The pull request is expected to have appropriate unit tests
175+
* The pull request must pass its CI run before merging will be
176+
considered
177+
1. [Maintainers only] Update referenced issues to the
178+
`awaiting 3-merge` stage
179+
1. Make sure all status checks are green (e.g. CLA check, CI, etc.)
180+
1. Address any review comments
181+
1. [Maintainers only] Merge the pull request
182+
1. [Maintainers only] Update affected issues to be:
183+
1. Closed (with an appropriate `closed-` label)
184+
1. The stage is set to `awaiting 4-validation`
185+
1. The issue and pull request are attached to the current milestone
186+
1. Register OSS usage
187+
1. Email CELA about any 3rd-party usage changes
188+
189+
### Versioning
190+
191+
Starting in 2018, the extension switched to
192+
[calendar versioning](http://calver.org/) from
193+
[semantic versioning](https://semver.org/) since the extension
194+
auto-updates and thus there is no need to care about its version
195+
number in terms of backwards-compatibility. As such, the major version
196+
is the current year, the minor version is the week of the year, and
197+
the micro version is how many releases there have been that week
198+
(starting at 0). For example, a release made on July 2, 2018 would
199+
have a version number of `2018.27.0`. To easily calculate the first
200+
release of a week, you can run the following Python code:
201+
```python
202+
import datetime
203+
year, week, _ = datetime.date.today().isocalendar()
204+
print(f"{year}.{week}.0")
205+
```

0 commit comments

Comments
 (0)