add description about how to do hotfixes

This commit is contained in:
Christian Schabesberger 2019-02-21 15:21:38 +01:00
parent 04b60af15b
commit 73eb78d863
5 changed files with 508 additions and 7 deletions

BIN
assets/hotfix_branch.dia Normal file

Binary file not shown.

Binary file not shown.

View File

@ -67,7 +67,7 @@ All maintainers (people who have write access to the release branch) have to be
you have time for coding. Do not introduce new features while being in release phase. you have time for coding. Do not introduce new features while being in release phase.
When you have pushed a quickfix you will want to updated the __release candidate__ you put into the __issue__ corresponding to the __release pull request__. When you have pushed a quickfix you will want to updated the __release candidate__ you put into the __issue__ corresponding to the __release pull request__.
Increase the version number in the filename of the Release candidate. e.g. `NewPipe_<versionNumber>_RC2.apk` etc. _Don't update the actuall version number however :P_. Increment the version number in the filename of the Release candidate. e.g. `NewPipe_<versionNumber>_RC2.apk` etc. _Don't update the actuall version number however :P_.
![release_branch](img/release_branch.svg) ![release_branch](img/release_branch.svg)
@ -92,18 +92,49 @@ you will want to do these steps:
![this_is_fine](img/could_not_decrypt.png) ![this_is_fine](img/could_not_decrypt.png)
### Fix branch As described aboth NewPipe is a web crawler, and therefore might brake randomly. In order to keep the downtime of NewPipe as low as possible when such a shutdown happens
we allow so called __hotfixes__.
- A hotfix allows work on the master branch instead of the dev branch.
- A hotfix MUST __NOT__ contain any features or other bugfixes.
- A hotfix may only focus on fixing what has caused the shutdown.
### Hotfix branch
Hotfixes work on the master branch. The reason for this is because dev branch might have experimental changes that have not yet been tested properly enough to be released. Master however should always be at the latest stable version of NewPipe. If this one brakes due to a shutdown you may therefore want to fix that version.
Of course you are not allowed to push to master directly so you will have to open up a __hotfix__ branch. _If someone else is pushing a hotfix into master, and it works this can be considered as hotfix branch as well._
![hotfix_branch](img/hotfix_branch.svg)
### Releasing ### Releasing
If you fixed the issue and found it to be tested and reviewed well enough you man release. Here you don't need to undergo the full release procedure of a regular release, which might take up to a few days.
Keep in mind that if the hotfix might turn out to be broken after release you want to release another hotfix.
Here it is important to release fast, and after all a less broken version of NewPipe is better then a full broken version ¯\\\_(ツ)\_/¯.
This is what you will want to do when releasing a hotfix version.
1. Hit merge Pullreqest
2. Create a GPG signed tag with the name `v0.x.y`
3. Merge __dev__ into master on the extractor
4. Create a GPG signed tag with the name `v0.x.y` on the extractor
5. Create a new release draft and write the down the fix into the release note
6. Copy the [release note](#release_notes) into the fastlane directory of releases
7. Increment the __small minor__ version number and the `versionCode`
8. Hit `Publish Release`
9. Rebase the hotfix back into __dev__ branch
![rebase_back_hotfix](img/rebase_back_hotfix.svg)
## Versioning ## Versioning
Versioning NewPipe is simple. Versioning NewPipe is simple.
- __Major__: The __major__ version number (the number before the first dot) was 0 for years. The reason for this changed over time. First I wanted this number to - __Major__: The __major__ version number (the number before the first dot) was 0 for years. The reason for this changed over time. First I wanted this number to
switch to 1 once NewPipe was feature complete. Now I rather think of increasing this number to 1 once we can ensure that NewPipe runs stable (part of which this documentation should help). After this (2 and beyond) well god knows what happens if we ever reach 1 ¯\\\_(ツ)\_/¯ . switch to 1 once NewPipe was feature complete. Now I rather think of incrementing this number to 1 once we can ensure that NewPipe runs stable (part of which this documentation should help). After this (2 and beyond) well god knows what happens if we ever reach 1 ¯\\\_(ツ)\_/¯ .
- __Minor__: The __minor__ version number (the number after the first dot) will be increased if there is a major feature added to the app. - __Minor__: The __minor__ version number (the number after the first dot) will be incremented if there is a major feature added to the app.
- __Small Minor__: The small minor (the number after the second dot) will be increased if there are just smaller bug fixes or features added to the app. - __Small Minor__: The small minor (the number after the second dot) will be incremented if there are just smaller bug fixes or features added to the app.
#### Versioning the extractor #### Versioning the extractor
@ -111,8 +142,8 @@ Versioning NewPipe is simple.
The extractor is always released together with the app, therefore the version number of the extractor is the same as the one of the app. The extractor is always released together with the app, therefore the version number of the extractor is the same as the one of the app.
#### Version code #### Version code
In android an app can also have a [versionCode](https://developer.android.com/studio/publish/versioning). This code is a `long integer` and can be increased by any value to show a device that a new version is there. In android an app can also have a [versionCode](https://developer.android.com/studio/publish/versioning). This code is a `long integer` and can be incremented by any value to show a device that a new version is there.
For NewPipe the version code will be increased by 10 regardless of the change of the major or minor version number. The version codes between the 10 steps For NewPipe the version code will be incremented by 10 regardless of the change of the major or minor version number. The version codes between the 10 steps
are reserved for our internal fdroid build server. are reserved for our internal fdroid build server.
## Release notes ## Release notes

160
docs/img/hotfix_branch.svg Normal file
View File

@ -0,0 +1,160 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="150"
height="270"
viewBox="469 90 72.429685 138.47884"
version="1.1"
id="svg43"
sodipodi:docname="hotfix_branch.svg"
inkscape:version="0.92.3 (2405546, 2018-03-11)">
<metadata
id="metadata49">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<defs
id="defs47" />
<sodipodi:namedview
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1"
objecttolerance="10"
gridtolerance="10"
guidetolerance="10"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:window-width="1366"
inkscape:window-height="740"
id="namedview45"
showgrid="false"
units="px"
inkscape:zoom="1.921282"
inkscape:cx="124.67896"
inkscape:cy="181.09135"
inkscape:window-x="0"
inkscape:window-y="0"
inkscape:window-maximized="1"
inkscape:current-layer="svg43" />
<g
id="Hintergrund"
transform="matrix(0.53799084,0,0,0.53799084,213.8928,44.943413)">
<text
font-size="12.8"
style="font-style:normal;font-weight:normal;font-size:12.80000019px;font-family:sans-serif;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none"
x="558"
y="102.15"
id="text4">
<tspan
x="558"
y="102.15"
id="tspan2">master</tspan>
</text>
<circle
style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:2;stroke-opacity:1"
cx="588"
cy="241.14999"
id="ellipse6"
r="24" />
<g
id="g12">
<line
style="fill:none;stroke:#000000;stroke-width:2;stroke-opacity:1"
x1="588"
y1="265.14999"
x2="587.05902"
y2="336.67801"
id="line8" />
<polyline
style="fill:none;stroke:#000000;stroke-width:2;stroke-opacity:1"
points="582.161,328.849 587.029,338.914 592.161,328.981 "
id="polyline10" />
</g>
<text
font-size="12.8"
style="font-style:normal;font-weight:normal;font-size:12.80000019px;font-family:sans-serif;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none"
x="115.1"
y="-31.450001"
id="text16">
<tspan
x="115.1"
y="-31.450001"
id="tspan14" />
</text>
<text
font-size="12.8"
style="font-style:normal;font-weight:normal;font-size:12.80000019px;font-family:sans-serif;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none"
x="476.65799"
y="104.209"
id="text20">
<tspan
x="476.65799"
y="104.209"
id="tspan18">hotfix</tspan>
</text>
<circle
style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:2;stroke-opacity:1"
cx="494.25"
cy="150.39999"
id="ellipse22"
r="23.25" />
<g
id="g28">
<path
style="fill:none;stroke:#000000;stroke-width:2;stroke-opacity:1"
d="m 494.25,173.65 c -3.25,32.5 94.75,-6.5 93.839,39.029"
id="path24"
inkscape:connector-curvature="0" />
<polyline
style="fill:none;stroke:#000000;stroke-width:2;stroke-opacity:1"
points="583.246,204.816 588.045,214.914 593.244,205.016 "
id="polyline26" />
</g>
<text
font-size="12.8"
style="font-style:normal;font-weight:normal;font-size:12.80000019px;font-family:sans-serif;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none"
x="481"
y="102"
id="text32">
<tspan
x="481"
y="102"
id="tspan30" />
</text>
<text
font-size="12.8"
style="font-style:normal;font-weight:normal;font-size:12.80000019px;font-family:sans-serif;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none"
x="505"
y="103"
id="text36">
<tspan
x="505"
y="103"
id="tspan34" />
</text>
<text
font-size="12.7998"
style="font-style:normal;font-weight:normal;font-size:12.79979992px;font-family:sans-serif;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none"
x="588"
y="101"
id="text40">
<tspan
x="588"
y="101"
id="tspan38" />
</text>
</g>
</svg>

After

Width:  |  Height:  |  Size: 4.7 KiB

View File

@ -0,0 +1,310 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="250"
height="300"
viewBox="90 94 131.85069 151.23026"
version="1.1"
id="svg103"
sodipodi:docname="rebase_back_hotfix.svg"
inkscape:version="0.92.3 (2405546, 2018-03-11)">
<metadata
id="metadata109">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<defs
id="defs107" />
<sodipodi:namedview
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1"
objecttolerance="10"
gridtolerance="10"
guidetolerance="10"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:window-width="1366"
inkscape:window-height="740"
id="namedview105"
showgrid="false"
units="px"
inkscape:zoom="0.92953528"
inkscape:cx="159.4593"
inkscape:cy="256.73847"
inkscape:window-x="0"
inkscape:window-y="0"
inkscape:window-maximized="1"
inkscape:current-layer="svg103" />
<g
id="Hintergrund"
transform="matrix(0.44213893,0,0,0.44213893,49.719377,47.656585)">
<text
font-size="12.8"
style="font-style:normal;font-weight:normal;font-size:12.80000019px;font-family:sans-serif;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none"
x="356"
y="106.636"
id="text4">
<tspan
x="356"
y="106.636"
id="tspan2">dev</tspan>
</text>
<circle
style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:2;stroke-opacity:1"
cx="362.68799"
cy="360.51599"
id="ellipse6"
r="24" />
<g
id="g12">
<line
style="fill:none;stroke:#000000;stroke-width:2;stroke-opacity:1"
x1="362.68799"
y1="384.51599"
x2="362.04901"
y2="442.52802"
id="line8" />
<polyline
style="fill:none;stroke:#000000;stroke-width:2;stroke-opacity:1"
points="357.135,434.71 362.025,444.764 367.134,434.82 "
id="polyline10" />
</g>
<text
font-size="12.8"
style="font-style:normal;font-weight:normal;font-size:12.80000019px;font-family:sans-serif;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none"
x="115.1"
y="-31.450001"
id="text16">
<tspan
x="115.1"
y="-31.450001"
id="tspan14" />
</text>
<circle
style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:2;stroke-opacity:1"
cx="115.354"
cy="262.09799"
id="ellipse18"
r="23.25" />
<g
id="g24">
<path
style="fill:none;stroke:#000000;stroke-width:2;stroke-opacity:1"
d="m 115.354,285.348 c 1.648,35.872 91.902,14.902 92.122,41.962"
id="path20"
inkscape:connector-curvature="0" />
<polyline
style="fill:none;stroke:#000000;stroke-width:2;stroke-opacity:1"
points="202.413,319.587 207.494,329.546 212.413,319.506 "
id="polyline22" />
</g>
<text
font-size="12.8"
style="font-style:normal;font-weight:normal;font-size:12.80000019px;font-family:sans-serif;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none"
x="426.254"
y="106.059"
id="text28">
<tspan
x="426.254"
y="106.059"
id="tspan26" />
</text>
<text
font-size="12.8"
style="font-style:normal;font-weight:normal;font-size:12.80000019px;font-family:sans-serif;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none"
x="432"
y="104"
id="text32">
<tspan
x="432"
y="104"
id="tspan30" />
</text>
<circle
style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:2;stroke-opacity:1"
cx="207.51199"
cy="354.78201"
id="ellipse34"
r="23" />
<text
font-size="12.8"
style="font-style:normal;font-weight:normal;font-size:12.80000019px;font-family:sans-serif;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none"
x="111"
y="107"
id="text38">
<tspan
x="111"
y="107"
id="tspan36">hotfix</tspan>
</text>
<text
font-size="12.8"
style="font-style:normal;font-weight:normal;font-size:12.80000019px;font-family:sans-serif;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none"
x="190"
y="107"
id="text42">
<tspan
x="190"
y="107"
id="tspan40">master</tspan>
</text>
<g
id="g48">
<line
style="fill:none;stroke:#000000;stroke-width:2;stroke-opacity:1"
x1="207.51199"
y1="377.78201"
x2="207.052"
y2="450.29199"
id="line44" />
<polyline
style="fill:none;stroke:#000000;stroke-width:2;stroke-opacity:1"
points="202.102,442.496 207.038,452.528 212.101,442.56 "
id="polyline46" />
</g>
<circle
style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:2;stroke-opacity:1"
cx="208.517"
cy="163.239"
id="ellipse50"
r="20" />
<g
id="g56">
<path
style="fill:none;stroke:#000000;stroke-width:2;stroke-opacity:1"
d="m 208.544,184.227 c 0.048,39.375 -94.626,3.592 -93.316,50.151"
id="path52"
inkscape:connector-curvature="0" />
<polyline
style="fill:none;stroke:#000000;stroke-width:2;stroke-opacity:1"
points="110.012,226.757 115.291,236.613 120.008,226.476 "
id="polyline54" />
</g>
<g
id="g62">
<line
style="fill:none;stroke:#000000;stroke-width:2;stroke-opacity:1"
x1="208.51801"
y1="183.239"
x2="207.54201"
y2="327.31"
id="line58" />
<polyline
style="fill:none;stroke:#000000;stroke-width:2;stroke-opacity:1"
points="202.595,319.512 207.527,329.546 212.595,319.58 "
id="polyline60" />
</g>
<circle
style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:2;stroke-opacity:1"
cx="363.49799"
cy="265.04001"
id="ellipse64"
r="20" />
<g
id="g70">
<line
style="fill:none;stroke:#000000;stroke-width:2;stroke-opacity:1"
x1="363.49799"
y1="285.04001"
x2="362.758"
y2="332.04401"
id="line66" />
<polyline
style="fill:none;stroke:#000000;stroke-width:2;stroke-opacity:1"
points="357.881,324.203 362.723,334.28 367.88,324.36 "
id="polyline68" />
</g>
<text
font-size="12.8"
style="font-style:normal;font-weight:normal;font-size:12.80000019px;font-family:sans-serif;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none"
x="461.09601"
y="151.021"
id="text74">
<tspan
x="461.09601"
y="151.021"
id="tspan72" />
</text>
<circle
style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:2;stroke-opacity:1"
cx="364.63599"
cy="169.187"
id="ellipse76"
r="20" />
<g
id="g82">
<line
style="fill:none;stroke:#000000;stroke-width:2;stroke-opacity:1"
x1="364.63599"
y1="189.187"
x2="363.58899"
y2="240.569"
id="line78" />
<polyline
style="fill:none;stroke:#000000;stroke-width:2;stroke-opacity:1"
points="358.748,232.705 363.544,242.804 368.746,232.908 "
id="polyline80" />
</g>
<g
id="g88">
<line
style="fill:none;stroke:#000000;stroke-width:2;stroke-dasharray:20;stroke-opacity:1"
x1="232.914"
y1="203.79601"
x2="306.76501"
y2="204.82899"
id="line84" />
<polygon
style="fill:none;stroke:#000000;stroke-width:2;stroke-opacity:1"
points="306.835,199.829 306.695,209.828 316.764,204.969 "
id="polygon86" />
</g>
<text
font-size="12.8"
style="font-style:normal;font-weight:normal;font-size:12.80000019px;font-family:sans-serif;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none"
x="281.03601"
y="187.479"
id="text92">
<tspan
x="281.03601"
y="187.479"
id="tspan90">REBASE</tspan>
</text>
<text
font-size="12.8"
style="font-style:normal;font-weight:normal;font-size:12.80000019px;font-family:sans-serif;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none"
x="318.04401"
y="141.392"
id="text96">
<tspan
x="318.04401"
y="141.392"
id="tspan94" />
</text>
<text
font-size="12.7998"
style="font-style:normal;font-weight:normal;font-size:12.79979992px;font-family:sans-serif;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none"
x="129"
y="108"
id="text100">
<tspan
x="129"
y="108"
id="tspan98" />
</text>
</g>
</svg>

After

Width:  |  Height:  |  Size: 9.3 KiB