1
1
# WORKING DRAFT: Language Release Guide
2
2
3
- This document contains the process for releasing the major version of the language. It uses
4
- ` 6.d ` version as example. Adjust that reference for the version you're actually releasing.
5
-
6
3
Many of the tasks in this document are concurrent. Please read through the entire document.
7
4
8
5
## Known Implementations of the Language
@@ -12,20 +9,61 @@ please list the main repository for those in this section:
12
9
13
10
* Rakudo https://github.com/rakudo/rakudo
14
11
15
- ## Preparation
12
+ ## Terminology
13
+
14
+ The following terms are used in this document and in other related papers:
15
+
16
+ - _ language revision_ or _ revision_
17
+
18
+ A set of specifications defining a Perl 6 language variant. Revisions are represented by symbolic names consisting of
19
+ a single letter of Latin alphabet.
20
+
21
+ _ Note_ in this document we use ` <rev> ` to represent a generic revision letter.
22
+
23
+ - _ language version_ or _ version_
16
24
17
- Release preparation should commence well in advance of planned release date, as there's often
18
- a large amount of work to perform.
25
+ Version is a string which represents full revision identification at implementation level. It consist of ` 6. ` prefix
26
+ followed by revision letter. For example, ` 6.e ` . In the language code and sometimes at other locations the version
27
+ string might be prefixed with ` v ` to be unambiguously identified: ` v6.e `
19
28
20
- ### Prep Repo
29
+ - _ review _
21
30
22
- To keep various communications for the particular release in one place, and separate from general
23
- spec communications, a [ separate repository] ( https://github.com/perl6/6.d-prep ) is created:
31
+ The process of preparing a new language release.
24
32
25
- https://github.com/perl6/6.d-prep
33
+ - ` PREVIEW `
34
+
35
+ A modifier to mark language revision which is currently is in _ review_ status: ` e.PREVIEW ` , ` 6.e.PREVIEW ` ,
36
+ ` v6.e.PREVIEW ` .
37
+
38
+ ## Release Status
39
+
40
+ _ This section contains excerpts from [ this discussion] ( https://github.com/perl6/problem-solving/issues/31 ) ._
41
+
42
+ Language release process is based on the fact that changes are only allowed to a revision in _ review_ status. Once a
43
+ revision is released it becomes _ immutable_ . From this moment on the only changes allowed are fixes. From the point of
44
+ view of a versioning system like git would look like the following diagram:
45
+
46
+ ```
47
+ 6.<rev> tag
48
+ V
49
+ ---[master]---O-----------------> master now defines 6.<next-rev>.PREVIEW
50
+ \
51
+ +---[6.<rev>-errata]
52
+ ```
53
+
54
+ ## Preparation
26
55
27
- Prior to release, ensure all the planned TODO items and Issues in that repository have
28
- been addressed.
56
+ Release preparation should commence well in advance of planned release date, as there's often a large amount of work to
57
+ perform.
58
+
59
+ ### Communication Channels
60
+
61
+ All communications about language development and release process must be done via
62
+ [ the problem solving repo] ( https://github.com/perl6/problem-solving ) . Prior to release, ensure
63
+ all the planned TODO items and Issues in that repository have been addressed.
64
+
65
+ _ Note:_ 6.d release was using [ Prep Repo] ( https://github.com/perl6/6.d-prep ) to manage related
66
+ information. It may still have useful bits worth considering.
29
67
30
68
### Spec Review
31
69
@@ -39,14 +77,14 @@ The commits that aren't part of any release version of the spec can be removed o
39
77
please coordinate with implementation authors, to avoid surprise breakage of code that uses these
40
78
experimental behaviours.
41
79
42
- During review, if you file any Issues regarding something that needs to be discussed/decided on
43
- before release, be sure to tag it with ` 6.d- review ` tag, so that we know what still needs to be
44
- done before the release.
80
+ During review, if you file any Issues regarding something that needs to be discussed/decided on before release, be sure
81
+ to tag it with ` 6.<rev> review ` tag ( ` 6.e review ` , for example), so that we know what still needs to be done before the
82
+ release.
45
83
46
84
### TODO Issues
47
85
48
- Ensure all open ` 6.d- review ` -tagged Issues in the roast repo have been taken care of before release.
49
- Check with implementations authors for ` 6.d- review ` -tagged issues in their repositories as well.
86
+ Ensure all open ` 6.<rev> review ` -tagged Issues in the roast repo have been taken care of before release.
87
+ Check with implementations authors for ` 6.<rev> review ` -tagged issues in their repositories as well.
50
88
It's not required that all implementations implement all of the new functionality before the
51
89
language release, but it can be very useful to be aware of the content of those Issues.
52
90
@@ -91,3 +129,33 @@ ensure it works on new language version. Often, only a small part of the
91
129
new language version is placed behind a version pragma, with the rest of the
92
130
changes being simply clarifications to the past spec. The upgrade guide should
93
131
focus on the version-pragma-protected changes.
132
+
133
+ ## Release Steps
134
+
135
+ Those steps are to be done when a new language revision is stabilized and time comes for a release:
136
+
137
+ 1 . Edit ` VERSION ` file and remove ` .PREVIEW ` modifier: ` 6.<rev>.PREVIEW ` -> ` 6.<rev> `
138
+ 1 . Finalize revision announce in ` docs/announce/6.<rev>.md `
139
+ 1 . Make sure no ` use v6.<rev>.PREVIEW; ` pragma has been left behind in a test file.
140
+
141
+ Most of the time all is needed is removal of ` .PREVIEW ` modifier from the version string. Be careful as to make sure
142
+ the pragma is not an essential part of the test.
143
+
144
+ 1 . Place version tag on the tip of ` master ` branch.
145
+
146
+ ```
147
+ $ git tag 6.<rev>
148
+ ```
149
+ 1 . Create revision ` -errata ` branch.
150
+
151
+ ```
152
+ $ git branch 6.<rev>-errata
153
+ ```
154
+
155
+ 1 . Commit changes
156
+
157
+ ### Starting A New Release.
158
+
159
+ 1 . Edit ` VERSION ` file and change the version to ` 6.<rev>.PREVIEW `
160
+ 1 . Create revision announce in ` docs/announce/6.<rev>.md `
161
+ 1 . Commit changes
0 commit comments