add initial part for documenting release cycle

This commit is contained in:
Christian Schabesberger 2019-02-20 19:02:37 +01:00
parent 0ab13c65f1
commit 398c072b47
8 changed files with 388 additions and 0 deletions

BIN
assets/merge_into_dev.dia Normal file

Binary file not shown.

BIN
assets/release_branch.dia Normal file

Binary file not shown.

51
docs/05_releasing.md Normal file
View File

@ -0,0 +1,51 @@
# Releasing a new NewPipe version
This site is ment for those who want to maintain NewPipe, or just want to know how releasing work.
![one does not simply push to master](img/onedoes.jpg)
## Difference between regular and hotfix release
NewPipe is a web crawler. That means it does not use a web API, but instead tries to scrape the data from the website,
this however has the disadvantage of the app to brake instantly when Youtube changes something.
We can not know when this happen therefore we need to be prepared when it happens, and at lease reduce our downtime as
god as possible. Our whole release cycle is therefore designed around this issue.
So there is a difference between a release that is meant to introduce new features or fix minor bugs,
and a version that fixes an issue that occurred because Youtube (or some other service) suddenly changed their website (mostly call this a shutdown).
Lets first have a look how a regular release work, and then how the hotfix release work.
## Regular releases
Regular releases are normal releases like they are done like in any other app. Releases are always stored on __master__ branch. By means the latest commit on
__master__ is always equal to the current releases. No development is done on master. This ensures that we always have one
branch with a stable/releasable version.
### Feature branching
For development the __dev__ branch is used. Pushing to __dev__ directly however is also not allowed since QA and testing should be done before pushing to __dev__.
This ensures that also the dev version works as good a possible.
So in order to change something on the app one may want to __fork__ the dev branch and develop the changes in his own branch (this is called feature branching).
![feature_branching](img/release_branch.svg)
### Merching features/bugfixes
After being done with the feature one should open up a __Pull Reuqest__ to the dev branch here a maintainer can do __Code review__ and __Quality Assurance (QA)__.
If you are a maintainer please take care about the code architecture so corrosion or code shifting can be prevented. Please also preface core quality over functionality.
So in short: cool function but bad code -> no merge. We should focus on leaving the code as clean as possible.
![merge_feature_into_dev](img/merge_into_dev.svg)
At best you as a maintainer should build the app and put the signed apk into the description of that new Pullrequest. This way other people can test the feature/bugfix and therefore help with QA.
### Creating a new release
### Releasing
## Hotfix releases
![this_is_fine](img/could_not_decrypt.png)
### Fix branch
### Releasing

Binary file not shown.

After

Width:  |  Height:  |  Size: 156 KiB

210
docs/img/merge_into_dev.svg Normal file
View File

@ -0,0 +1,210 @@
<?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="310"
height="300"
viewBox="390 95 157.2066 158.28308"
version="1.1"
id="svg65"
sodipodi:docname="merge_into_dev.svg"
inkscape:version="0.92.3 (2405546, 2018-03-11)">
<metadata
id="metadata71">
<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="defs69" />
<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="namedview67"
showgrid="false"
units="px"
inkscape:zoom="2.9384314"
inkscape:cx="319.09352"
inkscape:cy="270.89374"
inkscape:window-x="0"
inkscape:window-y="0"
inkscape:window-maximized="1"
inkscape:current-layer="svg65" />
<g
id="Hintergrund"
transform="matrix(0.4714669,0,0,0.4714669,202.11115,49.067333)">
<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="399"
y="107.15"
id="text4">
<tspan
x="399"
y="107.15"
id="tspan2">dev</tspan>
</text>
<circle
style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:2;stroke-opacity:1"
cx="417"
cy="333.14999"
id="ellipse6"
r="24" />
<g
id="g12">
<line
style="fill:none;stroke:#000000;stroke-width:2;stroke-opacity:1"
x1="417"
y1="357.14999"
x2="416.05899"
y2="428.67801"
id="line8" />
<polyline
style="fill:none;stroke:#000000;stroke-width:2;stroke-opacity:1"
points="411.161,420.849 416.029,430.914 421.161,420.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="470"
y="108.15"
id="text20">
<tspan
x="470"
y="108.15"
id="tspan18">feature_xyz</tspan>
</text>
<circle
style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:2;stroke-opacity:1"
cx="500.25"
cy="240.39999"
id="ellipse22"
r="23.25" />
<g
id="g28">
<path
style="fill:none;stroke:#000000;stroke-width:2;stroke-opacity:1"
d="M 500.25,263.65 C 497,296.15 418,259.15 417.089,304.679"
id="path24"
inkscape:connector-curvature="0" />
<polyline
style="fill:none;stroke:#000000;stroke-width:2;stroke-opacity:1"
points="412.246,296.816 417.045,306.914 422.244,297.016 "
id="polyline26" />
</g>
<circle
style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:2;stroke-opacity:1"
cx="416.75"
cy="156.89999"
id="ellipse30"
r="22.75" />
<g
id="g36">
<path
style="fill:none;stroke:#000000;stroke-width:2;stroke-opacity:1"
d="m 416.75,179.65 c 0.25,32.5 82.25,12.5 83.277,33.033"
id="path32"
inkscape:connector-curvature="0" />
<polyline
style="fill:none;stroke:#000000;stroke-width:2;stroke-opacity:1"
points="494.645,205.179 500.138,214.917 504.633,204.68 "
id="polyline34" />
</g>
<g
id="g42">
<line
style="fill:none;stroke:#000000;stroke-width:2;stroke-opacity:1"
x1="416.75"
y1="179.64999"
x2="416.991"
y2="304.67801"
id="line38" />
<polyline
style="fill:none;stroke:#000000;stroke-width:2;stroke-opacity:1"
points="411.976,296.924 416.996,306.914 421.976,296.904 "
id="polyline40" />
</g>
<g
id="g48">
<line
style="fill:none;stroke:#000000;stroke-width:2;stroke-opacity:1"
x1="568"
y1="160.14999"
x2="495.423"
y2="184.634"
id="line44" />
<polygon
style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:2;stroke-opacity:1"
points="497.021,189.372 493.825,179.896 485.948,187.83 "
id="polygon46" />
</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="583"
y="160.14999"
id="text54">
<tspan
x="583"
y="160.14999"
id="tspan50">PULL REQUEST</tspan>
<tspan
x="583"
y="176.14999"
id="tspan52">Do QA/Codereview here</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="488.254"
y="106.059"
id="text58">
<tspan
x="488.254"
y="106.059"
id="tspan56" />
</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="494"
y="104"
id="text62">
<tspan
x="494"
y="104"
id="tspan60" />
</text>
</g>
</svg>

After

Width:  |  Height:  |  Size: 6.3 KiB

BIN
docs/img/onedoes.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 35 KiB

127
docs/img/release_branch.svg Normal file
View File

@ -0,0 +1,127 @@
<?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="210"
height="310.22198"
viewBox="385 95 111.125 157.21394"
version="1.1"
id="svg31"
sodipodi:docname="release_branch.svg"
inkscape:version="0.92.3 (2405546, 2018-03-11)">
<metadata
id="metadata37">
<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="defs35" />
<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="namedview33"
showgrid="false"
units="px"
inkscape:zoom="2.7171031"
inkscape:cx="83.271021"
inkscape:cy="318.35955"
inkscape:window-x="0"
inkscape:window-y="0"
inkscape:window-maximized="1"
inkscape:current-layer="svg31" />
<g
id="Hintergrund"
transform="matrix(0.66806063,0,0,0.66806063,127.1286,26.441733)">
<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="399"
y="107.15"
id="text4">
<tspan
x="399"
y="107.15"
id="tspan2">dev</tspan>
</text>
<circle
style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:2;stroke-opacity:1"
cx="411"
cy="243.14999"
id="ellipse6"
r="24" />
<g
id="g12">
<line
style="fill:none;stroke:#000000;stroke-width:2;stroke-opacity:1"
x1="411"
y1="267.14999"
x2="410.05899"
y2="338.67801"
id="line8" />
<polyline
style="fill:none;stroke:#000000;stroke-width:2;stroke-opacity:1"
points="405.161,330.849 410.029,340.914 415.161,330.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="470"
y="108.15"
id="text20">
<tspan
x="470"
y="108.15"
id="tspan18">release_xyz</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 491,206.15 412,169.15 411.089,214.679"
id="path24"
inkscape:connector-curvature="0" />
<polyline
style="fill:none;stroke:#000000;stroke-width:2;stroke-opacity:1"
points="406.246,206.816 411.045,216.914 416.244,207.016 "
id="polyline26" />
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 3.8 KiB