@@ -40,3 +40,166 @@ From there use the "Launch Extension" launch option.
40
40
### Debugging the Python Extension Debugger
41
41
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.
42
42
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