[TASK] Clarify changelog file placement
[Packages/TYPO3.CMS.git] / typo3 / sysext / core / Documentation / Changelog / Howto.rst
1
2 .. include:: ../Includes.txt
3
4 ===================
5 Documenting Changes
6 ===================
7
8 Motivation and goals
9 ====================
10
11 .. sidebar:: Forger
12
13    If you want to save yourself some time you can use the ReST-File-Generator at https://forger.typo3.org/utility/rst
14
15    Select the type of ReST snippet you want to create, enter your issue number and click the search button.
16
17 Spreading information about important core changes has been a problematic issue ever since. With the switch to the
18 new release cycle with version 7 of the TYPO3 CMS core this situation should be improved.
19
20 A dedicated changelog of important changes is established to inform users, developers and other core related
21 teams or projects:
22
23 - Overview for documentation team which changes trigger documentation changes.
24
25 - Overview for Release Managers and other "Spread the word" related works on important changes.
26
27 - Hints for extension developers, integrators and project developers whose own code areas may need adjustments on core updates.
28
29 - Standardized format for easy usage in scripts like a core migration or release notes system.
30
31 This structure replaces the old `NEWS.md` file.
32
33
34 Different changelog types
35 =========================
36
37 A changelog handles one of these change types:
38
39 - **Breaking change**: A patch moved or removed a specific part of core functionality that may break extensions if they use
40   this part. Removal of deprecated code or an interface change are good examples of this type.
41
42 - **Deprecation**: A patch deprecates a certain core functionality for a planned removal.
43
44 - **Feature**: A patch adds new functionality.
45
46 - **Important**: Any other important message which may require manual action.
47
48 Casual bug fixes do not need changelog files, but every change that may be of special interest for extension developers
49 or documentation writers should receive an entry. The changelog file must be provided as part of the patch that
50 introduces the change.
51
52
53 Location
54 ========
55
56 New changelog files should usually be added to the :file:`typo3/sysext/core/Documentation/Changelog/master` directory. If a
57 version is to be released, all files in this directory will be moved to a directory that is named after the release number.
58 This way it can be easily seen which change has been introduced in which released TYPO3 version.
59
60 In rare cases, patches worth a changelog file need to be backported to stable LTS and / or old stable LTS versions. Those
61 should be put into a different directory, depending on target LTS versions. We'll explain this by example:
62
63 Suppose core is currently developing v9, a first 9.0 has been released, so the Git branch `master` will become version 9.1.0 with the
64 next sprint release.
65 The stable LTS version is currently 8.7.9, so the Git branch `TYPO3_8-7` will become version 8.7.10 with the next stable LTS patch level release.
66 The old stable LTS version is currently 7.6.23, so the Git branch `TYPO3_7-6` will become version 7.6.24 with next old stable LTS
67 patch level release.
68
69 Example scenarios:
70
71 * **A patch is only added to master:** Put the :file:`.rst` file into the :file:`typo3/sysext/core/Documentation/Changelog/master`
72   directory in the `master` branch. The core team will re-review files in this directory 
73   shortly before the 9.1.0 release and will move all files from the :file:`master` into the :file:`9.1` directory.
74
75 * **A patch is not only added to master, but also backported to v8:** Put the :file:`.rst` file into the
76   :file:`typo3/sysext/core/Documentation/Changelog/8.7.x` directory in the `master` branch. 
77   The backport to `TYPO3_8-7` branch includes the changelog file into :file:`8.7.x` directory, too.
78   Users upgrading to latest patch level release of 8.7 will then see the new file in the :file:`8.7.x` directory.
79
80 * **A patch is not only added to master, but backported to v8 and v7:** Put the .rst
81   into :file:`typo3/sysext/core/Documentation/Changelog/8.7.x` and a duplicate into
82   :file:`typo3/sysext/core/Documentation/Changelog/7.6.x` directories in the `master` branch.
83   The backport to the `TYPO3_8-7` branch have the two identical files in both directories, too.
84   The `TYPO3_7-6` branch backport contains only the :file:`typo3/sysext/core/Documentation/Changelog/7.6.x`, the
85   `8.7.x` directory does not exist in the version 7 branch.
86   Users upgrading to latest 7.6 patch level or the latest 8.7 patch level will then see
87   the new file in :file:`7.6.x` directory or in :file:`8.7.x` directory, respectively.
88
89 The main goal of this approach is to have a consistent state of changelog file across branches. 
90 Changelog files are added to the oldest release branch where a change has been backported to, thus basically 
91 the first TYPO3 version where a change is visible. Changelog files from older releases are never deleted in younger branches. 
92 They are still rendered in the install tool
93 "View Upgrade Documentation" and are connected to the "Extension scanner". In our example above, the `master`branch contains
94 all changelog files for TYPO3 v9, v8 and v7, the branch `TYPO3_8-7` contains all files for TYPO3 v8 and v7, and the branch
95 `TYPO3_7-6` contains all v7 files.
96
97 Furthermore, documentation files from older releases should be identical in all branches. If a patch improves some
98 documentation file from a v7 directory, this change should be put into all branches: `master`, `TYPO3_8-7`
99 and `TYPO3_7-6` for consistency. The core team will check for differences of files between branches occasionally
100 and will align them in case they diverged.
101
102
103 Filename convention
104 ===================
105
106 <type>-<forgeIssueNumber>-<UpperCamelCaseDescription>.rst
107
108
109 File content
110 ============
111
112 Like other documentation, changelog files are done in ReST, see `TYPO3 wiki ReST syntax`_ for more details.
113
114 - All types contain a "Description" section that should give a short summary on which core part was affected by the change.
115
116 - All types contain an "Impact" section that describes the possible impact of a change. An example is "Frontend output
117   may change", "Configuration of xy is easier" or "Backend will throw a fatal error".
118
119 - Types "Deprecation" and "Breaking" contain an "Affected installations" section that describes when and if a TYPO3 instance
120   is affected by a change. Example: "Extension xy is in use" or "TypoScript functionality xy is used" or "System is based on PHP 5.3".
121
122 - Types "Deprecation" and "Breaking" contain a "Migration" section to describe best practices on how to cope with a specific change.
123
124 - All types contain a list of tags, see below.
125
126 .. _TYPO3 wiki ReST syntax: http://wiki.typo3.org/ReST_Syntax
127
128
129 Tagging
130 =======
131
132 To provide the possibility to filter ReST files by topics, it is mandatory to equip every RST file with at least two tags.
133 As a rule of thumb a file should have no more than five tags. Please limit yourself to the list provided below. If you
134 are in dearly need to introduce a new tag, you must also add it to the list (and explain it) in this file as a reference
135 for everyone.
136
137 The tag list should be located at the end of a ReST file prefixed with the index keyword,
138 example:: ``.. index:: Backend, JavaScript, NotScanned``.
139
140 List of all possible tags:
141
142 - TypoScript - Changes that imply or introduce alterations to some TypoScript settings or modify the behavior of TypoScript
143   itself. Frontend TypoScript only.
144
145 - TSConfig - Changes or modifications on the PageTS or UserTS or the behavior of this field.
146
147 - TCA - Every change related to TCA.
148
149 - FlexForm - Changes affecting FlexForm functionality.
150
151 - LocalConfiguration - Changes that affect the LocalConfiguration.php or the subordinated AdditionalConfiguration.php
152
153 - Fluid - Changes that alter behavior of Fluid like introducing new tags or modifying already established ones.
154
155 - FAL - Changes to File Abstraction Layer.
156
157 - Database - Changes that modify behavior of the database abstraction or introduces or removes new fields.
158
159 - JavaScript - Modifying or introducing JavaScript.
160
161 - PHP-API - Implementations of mandatory changes of the PHP-API.
162
163 - Frontend - Changes that will affect the behavior or rendering of the TYPO3 Frontend.
164
165 - Backend - Changes that will affect the behavior or rendering of the TYPO3 Backend.
166
167 - CLI - Changes affecting CLI functionality.
168
169 - RTE - Changes to RTE functionality.
170
171 - ext:xyz - Changes on extension xyz. Please refer to this tag only when changing system extensions.
172
173 Furthermore, exactly one of the following tags *must* be added for all "Deprecation" and "Breaking" ReST files since core v9 and above:
174
175 - NotScanned - If this ReST file is not covered by the extension scanner at all.
176
177 - PartiallyScanned - If some parts of the deprecated / removed functionality can be found by the extension scanner.
178
179 - FullyScanned - If usages of all deprecated / removed functionality this ReST file is about can be found by the
180   extension scanner. This tag is used by the extension scanner to mark a ReST file as "You are not affected by this in your codebase"
181   if it does not find a match in extensions.