Skip to content

Commit 040f097

Browse files
authored
Merge branch 'master' into checkbox
2 parents ef0fa72 + 95d5d92 commit 040f097

File tree

2 files changed

+182
-11
lines changed

2 files changed

+182
-11
lines changed

RELEASE_SCHEDULE.md

Lines changed: 171 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,171 @@
1+
# Pycord Release Schedule
2+
3+
Status: Draft
4+
5+
Authors: <Paillat-dev paillat@pycord.dev>
6+
7+
## Purpose & Prior Precedent
8+
9+
This document aims at describing the release schedule of Pycord, and its versioning.
10+
11+
Prior to this proposal, the Pycord release schedule was non-standard, and therefore
12+
highly dependent on maintainer feedback and emotion towards a release.
13+
14+
While this approach has been deemed flexible, it has also made it complicated for users
15+
to plan their projects around Pycord's updates, and has ultimately led to significantly
16+
undesirable gaps between minor releases (e.g. 1y+ between v2.6.1 and v2.7.0, and between
17+
v2.4.1 and v2.5.0).
18+
19+
## Release Guarantees
20+
21+
> [!NOTE] For an up to date list of Pycord's release guarantees, please visit
22+
> https://docs.pycord.dev/en/stable/version_guarantees.html.
23+
24+
The library follows the [semantic versioning principle](https://semver.org/) which means
25+
that the major version is updated every time there is an incompatible API change.
26+
However, due to the lack of guarantees on the Discord side when it comes to breaking
27+
changes along with the fairly dynamic nature of Python it can be hard to discern what
28+
can be considered a breaking change and what isn't.
29+
30+
The first thing to keep in mind is that breaking changes only apply to **publicly
31+
documented functions and classes**. If it's not listed in the documentation here then it
32+
is not part of the public API and is thus bound to change. This includes attributes that
33+
start with an underscore or functions without an underscore that are not documented.
34+
35+
## Release Schedule
36+
37+
This document dictates that Pycord will have the following releases every year:
38+
39+
- Up to three minor releases per year.
40+
- At least three patch releases per year.
41+
- At least one release candidate preceding each minor release by at least one month,
42+
with an optional second release candidate no later than two weeks before the minor
43+
release.
44+
- At least one patch release one month after each minor release.
45+
46+
The content of releases follows semantic versioning. The release schedule follows a
47+
quadrimestrial cycle.
48+
49+
At the beginning of each quadrimester, if new features are ready for release, the
50+
**Minor Quadrimester Plan** is followed. Otherwise, the **Patch Quadrimester Plan** is
51+
followed.
52+
53+
### Minor Quadrimester Plan:
54+
55+
- Month 0: n/a
56+
- Month 1: Release Candidate
57+
- Month 2: Minor release
58+
- Month 3: Patch release
59+
60+
A second release candidate may be released no longer than two weeks before the minor
61+
release if needed.
62+
63+
### Patch Quadrimester Plan:
64+
65+
- Month 0: n/a
66+
- Month 1: Patch release
67+
- Month 2: n/a
68+
- Month 3: Patch release
69+
70+
The release schedule is followed as planned. Releases include, at minimum, dependency
71+
updates or minor fixes.
72+
73+
In the rare case that there are no substantial changes (no dependency updates, no fixes,
74+
no changes), the release is **skipped**.
75+
76+
In case of an emergency, such as a security issue, a **patch release** is made as soon
77+
as possible. It counts as the planned patch release if it occurs during a month where a
78+
patch is already scheduled; otherwise it is ignored.
79+
80+
### Feature Freeze
81+
82+
- **Minor releases**: Features must be merged at least one week before the release
83+
candidate. Fixes can be merged up to three days before the respective Minor release. A
84+
second release candidate may be released no later than two weeks before the minor
85+
release.
86+
- **Patch releases**: Fixes must be merged at least three days before release.
87+
88+
## Release Tracking
89+
90+
### GitHub Milestones
91+
92+
GitHub milestones must be maintained for all upcoming releases in the current
93+
quadrimestrial cycle.
94+
95+
- All milestones are created at the start of each quadrimester with target dates based
96+
on the chosen plan
97+
- Pull requests and issues intended for a release must be assigned to the corresponding
98+
milestone
99+
- Milestones are closed when the release is published
100+
- If a release is skipped, its milestone is closed without a release
101+
- All milestones include a target release date
102+
103+
## Release Cycle Start Date
104+
105+
This release cycle officially begins in **Q1 2026 (February - May)**, with quadrimesters
106+
aligned as follows:
107+
108+
- Q1: February - May
109+
- Q2: June - September
110+
- Q3: October - January
111+
112+
The current cycle (Q3 2025: November 2025 - February 2026) is already following the
113+
Minor Quadrimester Plan:
114+
115+
- November 2025 (Month 1): v2.7.0-rc2
116+
- December 2025 (Month 2): v2.7.0
117+
- January 2026 (Month 3): v2.7.1
118+
- February 2026 (Month 0): n/a
119+
120+
Starting **February 2026 (Q1 2026)**, all quadrimesters follow the standard 4-month
121+
cycle as described in this document.
122+
123+
## Roles and Responsibilities
124+
125+
### Pycord Maintainers
126+
127+
At the start of each quadrimester, Maintainers assess together available features and
128+
decide on the quadrimestrial plan within the first week. Once the plan is decided, it is
129+
announced and pinned in the `#discussion` channel of the `Pycord` Discord server.
130+
131+
Pycord Maintainers are responsible for deciding unanimously on the release schedule and
132+
for the release process. In case of conflicts, the decision may be escalated to the
133+
release managers.
134+
135+
Once a release is ready, Maintainers inform the current Release Managers.
136+
137+
### Release Managers
138+
139+
The Release Managers consist of Pycord Project Managers and Project Leads. They are
140+
responsible for the release process. This consists of:
141+
142+
- Managing the release workflow
143+
- Ensuring workflow completeness
144+
- Ensuring Announcements are made
145+
146+
## Release Schedule Flowchart
147+
148+
```mermaid
149+
flowchart TD
150+
Start(["Start of Quadrimester"]) --> Month0Start["Month 0"]
151+
Month0Start --> Assess{"Maintainers assess:<br>Features ready?"}
152+
Assess -- Yes --> MinorDecision["Minor Quadrimester"]
153+
Assess -- No --> PatchDecision["Patch Quadrimester"]
154+
MinorDecision --> Announce["Maintainers:<br>Announce in #discussion<br>Pin message"]
155+
PatchDecision --> Announce
156+
Announce --> CreateMilestones{"Maintainers:<br>Create milestones"}
157+
CreateMilestones -- Minor --> M_Milestones["Milestones:<br>RC, Minor, Patch"]
158+
CreateMilestones -- Patch --> P_Milestones["Milestones:<br>2 Patches"]
159+
M_Milestones --> M_Month1["Month 1:<br>Feature Freeze<br>Release RC<br>Close milestone"]
160+
P_Milestones --> P_Month1["Month 1:<br>Release Patch<br>Close milestone"]
161+
M_Month1 --> M_Month2["Month 2:<br>Release Minor<br>Close milestone"]
162+
P_Month1 --> P_Month2["Month 2:<br>n/a"]
163+
M_Month2 --> Month3["Month 3:<br>Release Patch<br>Close milestone"]
164+
P_Month2 --> Month3
165+
Month3 --> End(["End of Quadrimester"])
166+
style Start fill:#e1f5e1,color:#000
167+
style Assess fill:#fff4e1,color:#000
168+
style CreateMilestones fill:#fff4e1,color:#000
169+
style M_Month1 fill:#ffe1e1,color:#000
170+
style End fill:#ffe1e1,color:#000
171+
```

requirements/docs.txt

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
1-
sphinx==9.1.0
2-
sphinxcontrib_trio==1.2.0
3-
sphinxcontrib-websupport==2.0.0
4-
myst-parser[linkify]==5.0.0
5-
sphinxext-opengraph==0.13.0
6-
sphinx-copybutton==0.5.2
7-
furo==2025.12.19
8-
sphinx-autodoc-typehints==3.6.2
9-
sphinx-intl==2.3.2
10-
typing_extensions==4.15.0
11-
levenshtein==0.27.3
1+
sphinx==9.1.0 ; python_version >= "3.13"
2+
sphinxcontrib_trio==1.2.0 ; python_version >= "3.13"
3+
sphinxcontrib-websupport==2.0.0 ; python_version >= "3.13"
4+
myst-parser[linkify]==5.0.0 ; python_version >= "3.13"
5+
sphinxext-opengraph==0.13.0 ; python_version >= "3.13"
6+
sphinx-copybutton==0.5.2 ; python_version >= "3.13"
7+
furo==2025.12.19 ; python_version >= "3.13"
8+
sphinx-autodoc-typehints==3.6.2 ; python_version >= "3.13"
9+
sphinx-intl==2.3.2 ; python_version >= "3.13"
10+
typing_extensions==4.15.0 ; python_version >= "3.13"
11+
levenshtein==0.27.3 ; python_version >= "3.13"

0 commit comments

Comments
 (0)