From 57ee40b94ff7ee990e582ed56ec9bace5ef07703 Mon Sep 17 00:00:00 2001 From: Kai Lawrence Date: Wed, 27 Apr 2022 23:59:44 +0200 Subject: [PATCH 1/2] Add workflow --- _static/workflow.drawio | 1 + _static/workflow.html | 11 +++ guidelines/workflow.rst | 144 ++++++++++++++++++++++++++++++++++++++++ index.rst | 4 +- 4 files changed, 159 insertions(+), 1 deletion(-) create mode 100644 _static/workflow.drawio create mode 100644 _static/workflow.html create mode 100644 guidelines/workflow.rst diff --git a/_static/workflow.drawio b/_static/workflow.drawio new file mode 100644 index 0000000..1e14410 --- /dev/null +++ b/_static/workflow.drawio @@ -0,0 +1 @@ +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 \ No newline at end of file diff --git a/_static/workflow.html b/_static/workflow.html new file mode 100644 index 0000000..0357f71 --- /dev/null +++ b/_static/workflow.html @@ -0,0 +1,11 @@ + + + + +Untitled Diagram + + +
+ + + \ No newline at end of file diff --git a/guidelines/workflow.rst b/guidelines/workflow.rst new file mode 100644 index 0000000..4dea49e --- /dev/null +++ b/guidelines/workflow.rst @@ -0,0 +1,144 @@ + +========== + Workflow +========== + +The general workflow is shown in the following flowchart. It is meant as a general guideline. +If you want to differ in your project, please document the differences at the respective locations in your project documentation. + +.. raw:: html + :file: ../_static/workflow.html + + +---------------- + Create project +---------------- + +To create projects different *copier* templates are provided. +For the installation of *copier*, refer to the `official documentation <./https://copier.readthedocs.io/en/latest/>`. + +.. warning:: `pip install copier` will install *copier==5.1.0* as of now. Use `pip install copier==v6.0.0b0` instead. + +Existing templates are: + +* `C++ library <../copier-cpp-template>`_ +* `Documentation <../copier-documentation>`_ + +Whether you want to create a new project using a template or want to issue a new template, refer to the coding guidelines for your respective language. + +.. note:: Sometimes it does not make sense to use one of our *copier* templates. Document your decision in the respective guidelines for the language and the documentation of the project itself. + +Every project has to use the *copier-documentation* template for consistent understanding throughout all projects. +The *copier-documentation* template is provided with all other *copier* templates. +If you do not use one of the provided *copier* templates you have to install it in the root of your project. + + +-------------------- + Problem definition +-------------------- + +The *copier-documentation* templates also provides the project with issue templates. +At the moment there are two issue templates: +- Bug Report +- Feature Request + +The templates provide the necessary guidelines to state the issue. +You can also create issues as a collection of other issues. + +An issue state a clearly defined problem which can be solved with a series of commits. +It should also contain some idea how to solve the issue or kick of a discussion about that. + + +----------------- + Version control +----------------- + +`git `_ has to be used for all projects. +The `master` (or `main`) branch has to pass all tests at all times. + +To make changes first create an issue in the respective github repository. +Create a branch using the respective: +`Create a branch for this issue or link a pull request.` button. + +.. .. image:: /_static/images/github_create_branch_from_issue.png + .. :align: center + +Prepend `dev/` for your branch name. +So for example a valid branch name is `dev/1_first_issue`. +For branches consisting of many issues create an epic issue. +Refer to GitHub templates for more information. + +.. note:: GitHub templates are automatically generated using *copier* for your project. + +Refer to the guidelines for tests for your respective language. + +.. warning:: Every commit has to come with test coverage. + +For *work in progress* commits first check out appending `-wip/` to your branch name and do not forget to delete that *wip* branch as soon as it is no longer up to date. + +Always follow `the seven rules of a great Git commit message `_: + +* Separate subject from body with a blank line +* Limit the subject line to 50 characters +* Capitalize the subject line +* Do not end the subject line with a period +* Use the imperative mood in the subject line +* Wrap the body at 72 characters +* Use the body to explain what and why vs. how + + +--------- + Testing +--------- + +It is recommended to define tests on the expected behavior. +Therefore if you implement the feature, or fixed a bug the test should be passed in the end. +Testing as a process differs from project to project. +Therefore it is likely that you have to define the respective process yourself. +Please provide respective documentation, so that others and future you can adhere to the same scheme. + +.. note:: The coding guidelines for different languages define standards on how to test. If your project can not follow these, please document that and create an issue if your style should be implemented as well. + + +--------------- + Documentation +--------------- + +Documentation is mandatory and missing documentation embarassing. + +******* + Tools +******* + +The layout for documentation is provided by our *copier-documentation* template. +It is automatically included by all other templates. +The respective content is created in `docs`. + +.. warning:: If the documentation is created using the *copier* script, the `domain `_ is not set. + +Documentation is generated using `sphinx `_. +The `requirements.txt` to install the required packages is provided with the *copier* template for documentation and therefore in the `docs` folder of your project. + +Then run (in your project root) +:: + + sphinx-build ./docs /docs/build + +To create the documentation. +Your documentation is generated as `./docs/build/index.html` respectively. + +When using more than one programming language in your project, please update the `conf.py` to include the respective `domain `_. + +******** + How-To +******** + +When it comes to how to document, please keep it short and simple. +When explaining how something works, or why something is done a specific way sticks to this pattern: + + - One sentence should contain exactly one thought. + - One paragraph should contain exactly one idea. + - One chapter should contain exactly one concept. + +For flow charts or similar visual elements the usage of `diagrams.net `_ is recommended. + diff --git a/index.rst b/index.rst index fc11ef9..c0715d9 100644 --- a/index.rst +++ b/index.rst @@ -5,7 +5,9 @@ .. toctree:: :maxdepth: 2 - :caption: Contents: + :caption: Guidelines: + + guidelines/workflow.rst ---------- From b632e55492dd470d5b3308567178e8fa95017ade Mon Sep 17 00:00:00 2001 From: klawr Date: Thu, 28 Apr 2022 18:01:23 +0200 Subject: [PATCH 2/2] Add information to worflow --- .../github_create_branch_from_issue.png | Bin 0 -> 25193 bytes guidelines/workflow.rst | 39 +++++++++++++----- 2 files changed, 29 insertions(+), 10 deletions(-) create mode 100644 _static/images/github_create_branch_from_issue.png diff --git a/_static/images/github_create_branch_from_issue.png b/_static/images/github_create_branch_from_issue.png new file mode 100644 index 0000000000000000000000000000000000000000..08b44f4bb37b76bea1811553b82eb41ccefc6473 GIT binary patch literal 25193 zcmc$GbyS<*n`ih^pp*h_X^TUFBE_XxuojA2f#O!&-60StTHHNQ+}*ttcL}b=2`<42 z+4MU*JHIn$clI}P_RRjl$w~5ZbMJlceeUy-=l%X!K@#@~$rAtofGaKaNf`h@I|Ts# zVtxD<>XSF)`SPe2G$&ZR0Xh*4CB<06x41o*>ZxzgL3gumI8c#z25C=nWJNu!)|62Y5r- z?+gIke8@)!^kZ?713m~xqlR;4&_5QlO_;tR1^|qwXI&z0qSt=6paD?-Hp!S!O}K1ER>G`z5;PBd;&LVx`E<7&h9@Thw!8fQjr}9$~jYfjsPf2lP3;?+EkW^|~a#zJ~Gv zKbZY6ip=DbHv2p`-@e8Vc`zwq{|hzOA4*gUr-uARi;JCgce2fvbynf2qc{PenCN?N zOAP-{>y++qVE#Wx@T{d96(?qqMqKY0SpmE<^BU3o1w))^ADEc=9 zn1V-PEOIB0&pRu<{xo}nCKxK=X`))k*A;d&Htve(kxgPMDGqlQ3O87UrBK=RnC;J) zS(;jKje2h{mV4U?M62poTp_o~U|h6<@K;7{>SzFST6}$xTenf>OnQ1@y2y#_B3*a2 z#zY5S8-(y{n_xL*>sr3v%5aCsS~0>fTcKvReS?X$=4SWf`U}|?Pb{x<)wpWv4`#B& z8hj9xn>4nvd5-GV*V!JKx#ye!U$o7w8a!u~1q%Gtvw_eb(aB{FsChS!iQJ6C=z#DI z1c!GKr9AwOr!_!^KfN=X+KvK|4-b@8XFi;(&}PnPy&ko*LpTr3_+q~Xb=ws2)e7YN z$i2m6`wOs?V!$<@r`9>HAC1@@^Jl*lvOzJ3e*&W-d1xJd$tM|3p>5RSb?bW@I^9s3ZIlEX~Y zQ<^U_o2I*m4Q$=bcdPkj)iA-g`08nR4dwUM=c^_lpYPe-ijy(|xQNAGH-Exm&FVK_ zH)MFV9ZOCMC><@9khjx>^9j5yaIlMNH+?6Xv!%Ivw;>_tK_I`ZAemQn&z+))tcSvZ z{27?7NjfA)J-RZ3mh#gmxV)hf1K^u@W6pHUKv?mfQrP-&#QCr6b)h@FkPVoxjJF?N zha-K-y#%@7AWTD)&Wuk;`Pr_POOCMMF7BAzmvvw$r`doIV`$ zdOT3CQ}wgvc-W65eIgko8{z`sC6KdoP!Y_uTSbl3$CJcn_qlxF?~~_0(LMkk$Y+c32~U;)07erD-L}u=kCW#9X0x zpnHp@`@9mEe5@{h zaXijew$-f3Sf0`%iYCDR#8)Lf!tOnUStZ z&O^qNwA`EWgZgy#*yof>Z{VBju&9}G5aN4qvku$cR@m=~Zi0FMfQ4JYHKoe=-R$ZX)boN;s9Dc0 zWPL5T`Gw=5#=7fraB}$;`0h}N=ZB{1B=SoHcaz=p$-6!14dL9^q!pUX%O{=}20#tH zK~Dz&KuZ+5q#(Tteghh!9}0{j{GLg#JU1`Qf6C!W(4w;|b@ld55qqy2 zx<)fr*}2k*k}~Z114mPxLi>atE9fbexPDpqwVO09$6+~9X=SsL=Rx@10*lIG(Q!b# z>DasOrL6+OG6 z&zs;Qr^upY1EmV&vpH$RYxXk+YjYeNeM`YHf^M2M&?E9H}5X>U@XZ=Rb7^0wwv>B z&DpsJ>)cNJRdICuS`*Uf5*I8Y@hYycLCT$qWPSyov$eg|v(fl;R#v8WEy{OaJNnFq z^$$#4l2&T~Kij%~ErH&ete}}O9{l?XU2Jpd)N8$Q*Y4uFe!fqkPCcmv7ny`x5!#FVg4Z1aJ zm&!l7%6EmWBZ3Dw)HYGQK!_3$6K|L8HSA~Wyj`uy50&dfAS!wLSx52ToRbBOz_S}oP$!!Y6>)26j-1}l z-q|y10D#C(X#qB0r33?==p|6B9Y2p5zyScR9@7{%=lBy0gnfMT7oe8ks21Ai*{m76 zwCo^*N^pGZ4V1O5ehMFDk{>JG`ePn0 zh-42AYBM-g)tG9ThS&+7MqD!M)ljRlgjYG^YwdK+(tf7HdQ^}Q)}I@l27<+#Pw$~g zCT1!3Ie&u z#ThIjDZgK^)jN1hEXzQu#TIMyYp+6@XB|!AoH9S)nrk~;avQicf&(n$p-3xzBdTXJpcqsMRP7=w+dL`=z z+2Uw zpMf_t>CwXxNubYMTyOafTXU|SEGIGu+ zOwj3EKNwJ0<7tld^QI+7!N98!o_^=kTLR(!clnY}X4x$7s%4iGWy=-qf_^da4a`yr zs4c#tP!nwT+lO)oT&orBrzfbomsuIoKB?%aY#_A07eWeQ0ql|N2WF8A?@WHBzLJ#S zzHWL80PtJHx!&p~rX(|_lW&Ow0Q0fnd?o@{GXhuF_#_l$lO6SDD;)~-)_vNJ%2$pE zuf)MXz)$aWpIt@NMCt$EVBP;iF!m2%@!z-Fm0Mq*h`&;G|IG>X7ywA+nrauJu>NzG%2`@j-Mm5dBBiuzeqi;0k(n{S3;oc#paZ^iU8S&| zTmPpW_VB^tJztX&CZ-aPlxI#(H7um7b?m$wCL3a_H~?RRaS0%90h=0oN29*8TQt5?FKnG&ZTQKf`S#AIx62`91(YJ~8mO06{OW?dTOI zPQ!MPx(8ybHOD{uGJ7Y`fav5-_ubM!|6ik*xMMIln|9#yKQ~mX40R||yi``r+XoT~ z?Qh@a&pPY9*$fNVL_rq!k6lYk%*=e14GFYtq+j~#tY*(TTQ)o=veLs6y}eQ=*HBRv z`B?fo&$G4!ioX5@;CmSobOGa%VH(o2dyKtO6bJkL@v>$WZtnznJNkx1$dS(`S6xjt zjH`9`;i=86eyej+b@8CoY!^{IB;!vU<Vsht6OX42j_kHm#ilQMMTs}q7DrBak{3kq5?>cEJs|W<)qY}WdpEy z>&?7?mx7A54&esGFfv%#lD8MrP324xK9~>;8C_cEks2@n@T<-YvgQDa4R0YgM zR7hlhRzy0=cG+F&>)QS0jADZ|Zt~Yo$)&1LF%jdJ@n2SdqqZGQ^5vux-0rp=UH|Rd zFr&icvPC@d(JXYe#J1fCym7rMUjSmgh8{RPnwJNo!fPpL14&6ez8j_4hl7 zdEwYS@|=U7=8zw-?6zV!l*~xxXWndVql-yKky)6j7F+I3>FCJxTg_nJLr9c9K4qmVSMf`EJL~*(O`aRz-X9Azido!Jg4 zt;H=~@^3uQIt=S2!SjjofG?D*Y@q9sfj@J+pHtSFqtiMGx~`;pzx*UD^y)z1O=JN& z;{^urjUGbOj9`OJqVcFlDm)(6{p*6G4{uXh4RdIu8j)fqoiq`bIVm8r5S|l!UNKRK zcz5qIWAN)%j)$^cp%3Zd*FI8J>k~b5AC+lX-+id6HuFqnNKdGzXAkIh-AyYBR7~bT z7>wj42k00Y1O>Lnz@3Tm4 z#clF9r$a2ZC9Tlc9~|E8DQg>>mbbxsr)p^^vr|hk0ZRq{Ec`T2QIMnbHoZsRRI^oE zNBXpV@{9zV9vm8fwW%;r$#9HWp#V!gUd^BZsRi{)u;|`@Gpf)|I(L(>8!UAD*g9&0 zP;>c+*7CVM&1al9Zvu7mysaBgSah{e9HZ=CD|ong>0Cp>f9R)~o9ty^7*YBuCnP$H zAhVL17c9_-d{ULc?x4X$kJ-W3}Q zZM-IU9n6+_QD}qjNQK<3GU}Oao{va-1z%AnT=22;%P&R)TotXTC4OXj4SedIj0tb# z$XPi_mk5SkA0yN95zoW_a76lpQuGtVyVlO8KsmyfiX|lI?N)?lmX zB~FnjOs+2}t-cWzTjEB_bdNl4CGyT+pjKix!y)`YgIJu=3Rdx5C*{b_G>0$a7 zWgOGgjEshpM7*SR20OaLSp=T*b1Y4;=U2;PenS=A6tZXOGwPhGr2`%g8ah#YrTUas z4JI*qbe`PCG)a=4^Vt4>Q|DHf>BfSzGdzPe?lxbGWs-X)h0GyQrd;uy2J&BvwRE(= znkY3wjBDBcNdpVyO6%H(N2AjFVc6q*11Ipbl!)DF`iZcF08oJ?Fev68+(nm6NOrT^3)3JGEdFq+ntW9=GZU3s8=%J zH_*_|{C2oc%bm%l$xl;i?9&>nUf+2~onoNK$6~pc!x9SJJD^4N#;Dec_!X3}Ni(s) z)}|7R&RbHeiNo+0#(wL-0h!fs|(lCUHM>Mrm75{gc0BS6@5IJ|#Ye;`)jx30B2 z9Mg{Ha+gZhR>vimv27`T#@S=#7e6522y1zQ99Vzfp48r>3Iu$8CNbnJKb3z_2(Et5 z6}O$r^Fcfmd&4vCpfr;d#|0=d_E{A3vhHp7g2H6l1ofc5CZp_?MU>U7*h|Fi3uP@i ze9ZcKwYLKG7_$uw_!PyJWXIM8+Sps1^`jqqEI|I+RD;9mj!f!`Hj>XE=2r4j9!fQf z7yxrL8dIQ^cMYaBXnANlfi@3RX!9x|0cs>y*%8dv5~A1GV|H%gDomQQ1Dq_f27M4U z$T=pQld;t|C`v7yRNH0zT_8jY0NC$@r^0H{_C;o6^vla-rL&ej3FqcDYM=>9(p3|a zX_qgzHhX>%=?8~S;buhWh7G7W-pvU-Wt#nrc=EPq5AqQM&}btu>ijx><-qY`mrTzz zATp8}F>dTla;y6qvoDgiG&uKE*vl^r9FmqGtts8LOcm%f;*iAStwO}1~L zv~?h^hyx%Bp5TI9{Vbe{WyM+BG`4LGE@w$6ev$5~=XN+6TYj@15UHf&zS z4^Ux`WGtiRF9rp7Ir^{P6eLp+?;n0Lg19mDB{j3y-QPOE{$7Q&=PjV zsNeo+3M#VOyJa0?{Huui-`-vJqO!6re^f8bs`1R|!8Ik7g~@pMwKb53NvDlI;PM>mzHjuhz^g8)LVmQe=UV4Md1HYJA*!w!rqUM3^$i+w)?K^eo$5A zCLf@0!2Y8f8<4$N_v)^s>Ix(!|4I{8YmuLW8t!jbhOp2ES~_S)S1@k=sr=#wO4bwa zW6MCgRpEP&wWCvlNhGm$pE?hp641k*J`q^t6)b>uSih3+MWJo;x+e*q9-pOD6Uz5> z;H7E%X?jo(zi8C)-=QeKfq{#{-<7|Aq7L9z>(At~<+?*y#}Y-d>E1_eFr4@0S4J!!Argr!+S7ckui9_#4E+M|Mr9p1vE@v;)=!sH- zD<}~HW{G2Q1e64Q<`Yw_f=oI?d_U`bD8uT-=-%;Ykr`?9@<}dag^4#%EYFX?dlO=z zDW}h^%qrxB9TF6Sni&&X47&(N?%qO@(0;E(CyfEe>&(3bQ33+fH&Mg--U(9jAL77R z#n<<)>u)JJ@r;ab{Z$eJ5L~g#hR8bp$*~J6F2|g=EN>l;GeMZ+>JH{^5+9{6aP=Pf zy4o$sj!ksH?(k6BGIL~>VZE(@GhZ;ChUR7V9}R{h)0Tja(|J1_(J_wpN0GR!3x|~T z$?G?`S94R%p1IQQY=D>n{hj|Muu6o0B_4g;2fYNv|8ShW8>)xUsVTC}pEb`dd%yGQ zBhs6?tZ8i%=)@bvh6+*`BHmEMZZI&E&u)bP(XmcIAb%mAxhl7if^dcN!H8% z)eV1)OkUEWU&UW-y@3VgE>-V008=iAg*NPPbnc#Tz3gGZku9op*5_`}AM9JKR-KhH zBP~!*8c8$Oz1|1{=aaE@_&{s#KC5Sn>(O{VVajFQ29ZLNGt^x#Bp@RedzULuS}1=Z zj{%U*TB{Dp)|p|CO*A!vj$|DNjO<%4e89rHDs^v^wE(ph<}X%}HnK|`_8*XyF34vE z$`7(?B~ygmwpS=-LWl5@irgYM!&zw&wB2vm{}T%aEhf9b;yx@601BpK}%q#Oz?Vh^@6HCF2C{vQpf|gm)k~5{whZzl2mAJ zA(xs-*m`7k3#3+*`mIrQp9VU1?{Myyl_MEh%T=P3DgFJaUQLaT=cAVDEB`!f3|*`U zBFp6)HIx)=^PH4xcc!)+aa%F6IO;-q6Rk?<*mfW_*_^C6TZSyp?HgZ1umERtMirND zl_c``_Itt$1Jl5KK3kmzaEb_uuMRP`w%+iH*rWK8z8tl_9T(CAxP65Jx4Nv)jo{|~ zc`fJPs__>=zoo7Wmi@1GRKxgyE9$rwP>ckrcjQ#97}g#P5c`hf^ zR+L!vEELlA-f#UI5l|bWfYn{1ziVyywD<9B8<8}r$!)@()qBPkXYPV7N&Fpsn%w(> zlUZ-Xt^gtaDn=Tz{_B3Wy&gm1nPbaYR` z*OKV)vXLc&q215rcB&K=U$m%s;;B4_d_>Rm7-%OTW%urmxj0>F)$Ed)pKpS*7EP)n zB4!USlC51+#xlXPpmv-F-7EFmv&@1KaU3$tyKw))yi**nn6s)Wh=A5LwWPXihy^$wj7#(> z1K1E~p6GmbiAdVu=1+GfxFx&HV>AksJXr%5-nAt`Z5W5!u|K*P`A+lK3cib=L=Y858~ zJn(Pz)wGUtHdww5CIXm`y&pM@ha<3lHGryhuH9p;_bQoyV)-j_8Klou)T%dfbrXDid+c!GLJ;;GtXq3;!E_2R ze5ka!=tM7gDCL81tccMoPzu%Vl(4lw=zG|ykEqvaq$D64D+&)H)vZ zMcT9P$oXtv4J=NM>F$3$?caAY6YTaJ#{sXn6sE)9w?*HIsjUobh#=_s>wat5VC@s$ zn^ogH9q37)LKGAa2MfaXxtJE6)^Y@oF;`@yx^sAOb1 za{+0pVIH2p5%=ek5J1e-4KgLMLKiRaUV8^M4{K01`CNQCZMO3(YEwKp(=@tu-v3-Q zEa1wpvy`AGrg!0K>09q7=sc)`=tt=k(j7{yv5^TGtWG?S8u985Kqale$0v;F8G#pI z=O8zKNr5ozu&$&rK>rf4vHu4>(C`Ji{?iKkr=j)?3#lIzJyemr%>ZL%S@j_G;R zsnQ=GDi&MWm*55!Kc5{dA((+W?*>Jj;f>X2ozKSNjjRlvSGWo_*B{azC|hDT}1RC z?<2dLf?D3gejfk7wWU)d$neO#U357P0+n9-rf90ucq@7u{q0;dFtFuun;}KVs+7HB z0J7U%lDd?eyyv-hCI4?`d!k_@eD!TVK`!$gdd=Fbt-#}{l9bkQ>OT~a2+Hl|8z5?Q zAJWKa5YabjOv{E=AoutT9wB3gps)kqadB<3EXM__My;?J5H0Z2n0Rg#PZtdDNZXbS zIfg%H8Gl2v+iBtLofBu6L(_(tdQxR0#g`pme4-r25Jy<+8gt3Y6+o^M=8pYCo=6y~ z+2yJ?0G7BYxizocHsw!He4l$c@y#|WK81g)yK_E}5ZAA6Ve?g^{p#0|KyHV@yF4X} zUAZyAJ984vTEml5;@6<3(EZiph45ya5%EUZmrxp`9CU4$&q{L0%DS*xw^6?X?^tp+ zv|8*g)7wCcQ}sjLvehmq5#YBi3Q=({X~z!Nyw;B`qr^Sg+`@co%g-IAp(dnk@vx;T z+UzrE)_$@lcwuXRIUuz?clk{cYU%Em%&KLJJo;d${Dp@a?ubSyox-YRz(ygpdmoiI z9pW~yQkVI#h*31CS|ZC+6cJHm?cGp{>Um`*7v=Jf)&xeluonQ3iZ_8x7ja-oq zgUl~PhCf-JV>>Oowsy#7*CTpy3k}5cUO5^KISU_wmS!K_^50_e^NsZKGLDNE+DgQK zCXRvYJt~t@#iqfoa>QNc)1_M4Qf@Gz+#4lBrQ5i&RWVbNb`9^9(Quo;|NNrrU-!!G z%ldVf-oerPN(zJd6(@I_o=_ITv_05!AC7JT3oY!nw4K0|GVVBrk%wHj;OAFOb&J(f z6@I@S7Y#o<6fVeZ(WL}y6eNuIW$TdjTqXMoF>H-tVB9ghZ;?M%GSYqr`E^x%vRP$& z?>9tD_&)7Za9*LaTPW*`FSqsOR>F{U?)IIJy{1tEPW8WglCi} zk6go!N861zlNe zKxG0~my2q1wIz2+Rz8XK{94IqYqdTzr}J~IP3T2Q=Zr+dv^#BJ3)s|zN?(vld8z!f z*g(3At2jBvX^DPXlL_iATsYB;mK$KNJw)XWnmoIS3JU$)H$D-; zM|v-9aaLJ}tHDBxwaV380e2;B0-`47%iY9tkm*H!Wz^5g9DUgkkf~-7Y7GKaYjCtH z2B?mB*$iBAt$%T)bZLn{9HU)der{E`Xyh`^f1_uJ;WO*5L|IX0T4(58t6g;7$UZ44 z@7`VKRky+=^G(R!nW?$$6SiA@(N0i#e=*gOv4JfjI3q@wgP{#UCpZpDdJ+ZM{HV`1 zPhDnUbf@BT)LR#B2~~|vv{>g&!eMTqAE{)29-48^QV?5mY*X=4rj$l+5p)SEY7r{B zDGM=QWbh0fTp6MPdwBa6G*Szsy;X;PtHt>)TEx187E1@J_^Pg=?9(;@Ewelud~&Fb z73MapDQx9;eJx;^`JfZg@nH=<8_bLxMiv18w``#?pWXUl5y2o`H`k!UWkXQ z8U=VPYo0WgR|qe00f^JGZh1BqaS#gRY?oJpaWm4h=^feTDa^+dY3rB>mBno9Z7?tU zyPu~pmKhU$<!wSk zJlexN#m#lYR}Lf<9(YXoScC0CDpB z+s*!L%xe)&J0O&vh3mqUc58Q*M)h6S@~ggVHY3v}EqP!Ww^AO4Z7i8cDh+Ejb++xw zgnaU5Z^PN%&tbV#Ha02f>dZ{>8dWZ>pzIe1U0CqfVwu2OrU{iD2lc-_S5<3l6$e%&i%bXAOen^B0A?F# zV|Po!U|9E(0?+2`Nk9?HANN(Yb0(dp&cs-6z;ce(n!!kd!s%PCp7PL>gE1u z^CPzA48{HG;VuYgeJWpHcA>SQ zt4D;RzfRG%m44_)qPJ~NkI46W2B(d{xk;AnlP3yr7Y0RKqYdqAY;u$-EQ`%0!}phb zg}-Wck3exx+2D*)UQcdu*|KTJ$|k0{SjI|V>BP_rqxl{DZJ7m0x2U|glkpOE4eJ= zvpqv|w7fI?DouO(NjPNY2Qs&mBz=(#iOcw(W;I`lxD^)^4s(?S*?d868kfAE;vsyD zpvOtVADxEN)g|{lwh}h}?CRJT~`i=~>= z6$NJQ?nX1*S_y0x75cReb` z?YaPur~cl-iN;!O!HNC*JeXEh5&URYv*yU(C5{lss2d&JcI9z}?SI)eH(%=fBjTtA z*Uf-8{KDwq;o>hg?(Y}nC!Ls;8LwR~)FUqHdGpSYj_&X6I;l_z4{T- zK46ko2zlZeqjt@eRzO>CZX1@|#0rh&ZLdy8X6M`ih{sdlxr^1xEpL6uIQQ`CDA!hA zEGz#d9t1!1yMD)F^GDIu$Xt=oH36B9ok8>6=R>nu)GlHwRpr4hChzk`H!>Xfv@7Jx z8jJ#?iiv&4T@q^=)@a<&@v-*L*8Q`Ab-?_RR|0PfYdF)q{%X1oZr0?PrlqyQJW{+$ zU$u+bn$|pjq9*O;r8FNR(Lwriz0Is8R`4R^uvsPYyLNZZw{hEP)AaGi#B#Bx4!R4# zD=lNqns*1**{=E7)#^7*YTlw|wU-|pt-YGc8ww1#(;o5=KlcJH43frn-In&N4viHp zADp7?cpbtnpY(4>q#Ljt2rYk9s$n`pg}KD>g=rVVT*-i{n*10Bqt*m3(%T@+Rr1u4^w}se56OOM)}W|-dOStUn+O z(9Ks(fYce{cwwwAZCnTN3Lve&kecUE+-8Nja zomIed$`RgX)e#f16@2c?xLEx>i}tkz=uu0#4$%+Ekc|>q)2c|jU$?4i&R0*`nB|_2 zKSQ<~6D&r%mpxvDhp-fw-a%4Fc6M)JlDPHxUWXb!-k%B=Konjtpd*NNt%pL>ecZ}} zhoKr?3W!@MAvrVC&XwhR+(YZg4xg@dSs%CjcHwIkM@u!?MUi{flNLFC4Ylv+ZUObK zIfvBuh9HDt_w$1?hcH%>iOO@26)IYul`h`)?>O0{O6^Q@Y=QVt-qBduC{opo$rEaN zXSa`z9*w`OmeZAy$r|7&4Xx~RHn%7|C^PGOpTk)6Z(V{aH;-LoI4Mj0F9sIGulrhE z76k?YD0!LcEd#rY|IYJ)txf74xYR1=*c|SjU`*7dut!f5H-h+f4XK5SAf&%RV}DL z_A*mDC@E2uirzPsF55MN7|Rk~5l~nK9X)Cfi^LgIj9ICfns*w+w+82*h0Sb@{K(}0 z%h%N(yj{q$YP^(jo9XjSz@E3<x{kMxr|InkqZIi#r zhuHY~f&qXZ{9=c9=Tu!B#;BsfpUZ*mg#ViY!vCM${Wn!F%8LPNHRU0BHpSiAJyi&f z)UW#L7hI8fHE0(`n%wy&yjBYZ(z*VY%`l_?HaF^KPH$d`KHOHmqZ~5+t2+88U?T3pjklMsD-L}<+#2)U0YNs zT6#s=ZoWbfYn2PhbFovI9LNWY=+Si?jFeM%-@*bZOVbHj;o{eso z1sN`yQrX+Z%WO4#hVoF3j4TcWEJ~jK;B;RgaAEC?O3cN06?VoNdaV?`GdY|s!!5<9 zu#l<`4iIOL52vxnZ|Ydzp%sJ(BBYYc=)6cEqY(S>4yBKZCyol>NSm3mKV1Vk(5i!< zmUYj6>p2zF9^1x#cPoL_9AYvuAm~RxZl_L9yF0``Cux0d_Q|7r8=L0cnn}5487Gx_ zPfSdfk8zx-W<6ul-vtk^L^Vk;CLf&ho_z+j2IaU-8k!kMX$b{4$uB_#Ow%9Wk(U)? zpaV2z#D3EEV3O9ax%qEwr*He=T;L_p*WKM1n!{nsDKlki|JegU#bcLDDw;mr!{xw{ z*)AWHeuOem25x+d?D3t*kzBYk_Q!vk%N0&0R5?m!O@RHelhieXp@^=HGXMN(?c0PT z#`$>k#W-lF?Ioq~H&#A)r#3iUVewgv@=WZZa>R^|X9!hZi|Fd2ij4s1#MgFnA=9iq z^jc>L-$XwctCvz)4|d6}jr@sK@+D6+0dQmn)1nXa zMr@f`-dy0A3z&h)i{reocNW6phQF?RnPvNyc8=|>*krA0URelTSU`~zxwPv+s&Ae_ z&zL0kxtBl@RPB@T8GqhOsL0EPa?NOy2BKZ~iC7MJu={Ga1{E=K%7V*B81oU}E zO3|!Fho{GGW@2w1U*V5Y#9wos=Fi(-Nx02?YX9;@ z3vvp>DUtakU88_@@ou8w^>7N%7Z(o{I?BFNM$a6G4KxuTP?52eQY;8e;{jL3j@B5f zOv$jVodCxVk7Ith!oGE8L1CjE9y|gy-|Vi?cw~`9Xt*}&%I9@T&8cZMsbECdrcdIk zvqp`@^dJTrDeo94o`SYG>Uhj_;~XsF7Dv(A_AQ`{?dFZ+gOhnK`Vy6iv}W0syP14P zeOO2Ssa_PPhh({4m(E&UB*vASz}p=qmSu#yEa>dLx>Yu7!>QgHb^DbYs;oiW5uZ1% zpIC{*nyHl|qusx4LVuV4vrfjaPWx- zjE4`)r+%r;O)tD6Gq^%u3X@X%kD~~mSXOCCvQ)KQ%8MhsIyXN0KtqjVL>~DUNQ}!g zA0_qf56@B@*`MDd4KKgAZEe)D>W?qBVPNFJ`R3(CSdTwLo>`=m#?1-nRi|OZAn$z>j{rUChWHh05( z__XbM$-NaQzHt4Q$z^6r%G{0v$HvJ!gAe*fi__(t_`{XN z72(Gci^mopeLjAq^ttyLe}bHA9mIPb8^B!DaB^^vfGl%Wyd$+XNGqhB8W(b1Wa4Uee2KXe;3nq}|t?p^k2xgsyB z^a_9?_$|XwPFg@M?mzWZjQ?6vOLW?>&#K!ls;Z{n;;;ckrGxfJ*i=zXpk|Woa`VOR zN<h6?9p;_N?J;atK|dX1*+z&cw0hV)rH$;%axtVyVNVq<#3Rm z$Zw4c!ZQ{oE90fDd9gbIi9$V?gd_@OYbyLwkGLhN=(PPUSHJ@Q_NxYAZ9P0ZBE^D` z44-X42iRAzXU&0gn~R%sONV`a18C}Ia6yr9kOziM7W6}bv`<(s|6i!*fS4~oiIFlF zoQ%#@8lWdirQ$+NZZS1jN=H#Fdn}^?K76CyDAOW|ea~p|^{fihq+hPXaZBdPcG*0c zW)uxT@)j;tvoC4>^-Sr{cNL}WrlzJruThV~ATXDjEX?&A7(#vSl-seD>DjO6C)EKi zoFaU<>wpu`D`pCLMZU&*x+`Mc-^JFV$j!@3UIBGx@|fp$bGZ5Q*g!!c%S>>yIim<%~}aE_kj(9r*Y|dl2Smwh`Xy8 zteAf9t-sB-hXWor7$asAIfutts{zbIVmQfHul^d*K3@sSWAax_7wj1d_@b&h(V-~F zBMkC>HgaSjh6yFLNrO_8OVdx#wL1F%%t`;JBTXal_Lo1t;7^=4G>aV%N0WI>ci_?D z;&KZ9Uw)Cq0-jSE1u^Auna|9kv*SWXUnfD>)Ju@b*Vm7PUjyKXo1M(IGG>oX`*DTf z?K15qYhN1?VDzoZZR!jB zA$EI^*{lsoA20Z2G;(nr1GZ+iZJ3)@~4u*AA($$TO4O`ajzew)Zpi>kH#^hVfF&e zsV;fE3Aa%{u6TXgoOmg50B)q5Bi(biLs7dAga?-J+A zIu%Kor%5HiaRS=>PEcE%8iRXLkhyeUU5_fQ1~K=I=2)sN{^ZB>HKl^C@yz4yb{I~8 z8Vcy3Yp5m1rdfA%GGVm-R^~vl;pGE~)WA*#fsgxkQaX($zvQ~vW|+j)L9)ph+EML|G7;g%=}s5Gfj>0Rl)2+|21q=`rq z0zm~tnp8nRdI&`zAdpalQg5lDgcgb@JwOO0Gy`Yzyr0g8XT0NlIRC&N*<)wVJ=bqt z^IF2NA_fX!f5LouC=-XP@C8siL~8 z$~F-E?#qdwy4RgNp*xg3*o#t`n3jg62vAqS@~5PdKlPMZRS=A_#hcoi=k?RA0JeVM z=R9IJ)1~eF{PAA(KH!eQJy^2 zX!FA>u|%BUOB?(sVM^D~DnxbXq&RI?z1jB)kHwSLu=IAsnJ`pCB$L9fglBGC_eZW< zBp4R^BVzUCy5U+uc2Os5iN4KunDud^V&Cq^TYrthpYAkoYvT$cHh(rYw9#yMh1sbq zqgUQ5I;hsF#$SY+b!qAJd4fsU>t7-^^lq>U`;=kr{{7AA1wYpqkc^bqib@IYq;9C|)TcAN&FB^Rk@Al0P#%Ie zv{ehLuMJzQ~2?Nch&?jRxYIud>4>`dOqk4B#p!p8y}jmUPe+pSH%^nGch)&$V- zwzI98K%@+H@bB42`eMRJEUFU%YOZywixbzNbT&cxkOpknkd8$qbv zbT6O@`HESGH_x&(hT%Q?u~gV@pjd0RoF4b;4jJBPLnH&lS{^{PP#;66sJ7lg^NGbK zC4-WZk}ZJSEFs@mn>rPAwKpmA#a#U^&cg{7BSrN_1bhBnXP|Mx>Pbtt*;t;dAFx;0 zKS?|Y{*e#R@v|cR@}HB0Gr)ipifT+%HARDuQ4b<@U)41vnu(JuG~X@C$~J)uh>qT4 zU&HTe7p2hfbGsP5w{h?J$T`pySYNYc8+fW0(2}SmQ-_S>kLI6$!=%r46lO$~r!l@uEC|Hdj?BSvoTy4$(p5;ovb3OB*m%81fS)wt& zaUG#~I6AfE)lTqdtJXVnwPMzskYY`CwhJc2qy-|tpGJJH6jc@s~6TRBw>}`4@CH1+y z&X?Q!pXq}3lGaUt!LQz>8+<`sT|#}N!N3;(j2fr2u#w{zva00P`z@!BdU<`K_ipBr zykmPEvLJ8TEo6|H*F=xG%BGW`{i8}YmY#&wmj z?|mTLzNtGgW$=!g_YsqubwZXuSi#d;J@lc}Nmi@CO_cKNlwa(#;B|BsqG?hq-1iZ9 zuB!0ctDc&mCKjp&r{3SMIxyv-}60Hqb8{A|STh`nZC> zF_b8)T`m+T9qsiQQuk9CvGLQ$-O1)v+vM-8vWknE8c{DcGD=%PDU30b9)3sFsYvOV z;*&;$XR=ZPB!euoZ+8H5#RCnfq2&6U;HkwGoG_@HP9%zUX(b8$Ten1{D8YB_W8tcY z@}3aW4TO%z$Tk=7h$^*kAB#O9Jt2$illM5m!EC;nbxc!PCFQ5H4&toy_lJJhzbzAT zU>oRF-E`WsYWRy?b6)!V8`B``>* zM2i?zJ?d2lrf)qFuB4ka0!HJ$sN{WRYz=3DJP+H;Qx1R_{YSZyh0_f(&+&LLB2b=- z50>=(n-(9K(~hb9q)_o!w!gd}k0VPF947l9WkOdq@iIQonLjKAD^MV#P1L?Or+J)J ztRH}CSb)R_T^R815c*(8nNHcfTz^i%WOLh<-fBLlTqfEN=6^3y2=2)P{95xn)BQL+ zy##C7yUksFh-KWrY3dH(b2<#9BK}2TO;~mBOXTE8QjQuFD2{~nH_1>h*E6KJi zUHSXkrDGqij+t%u)+LPDnOmdUf%!e`v+a|v9uu#X=P16J>lhk`P*$A1ya|%s%XRH) zNF)?qMqO;D=o>WL^A5B&9a=0rq4dtmi>65w!h))TI!l^lz_>~ipS)VpDiU@) zeRy8&n2mWYr_wH*(prFiMTxdIYwVR3UNadVQs7sFGu%-d@yWjXra*~UyQOzbD9w2I zLwZtSE2t9s5T)2**H^lowGP+OjmHwS4d;^sAw-Ln+cy_I^xgV?EsYyn8m6Ln0^y&m z8^uPvJa-(yC33SsJnr0IF~R3^C2(rRQ#`b1*e|w48%7ym59m0$}x#a{B`+oLFZ!l5Wc6RtiSD(9_zFHZcmLad4A!GM`hM|6HN7q#kf!9$~=@ z@p0$TdZ;)u@pf@*y!mtQu(fT}es~_%B`L$XZ#(gI&MM90(B{PsLL2;~G?$~^{AZ|NDoN64& z^(UvjVn1tGetZ2se|*LzeS*c5*4#^a;qWIJpvcK-tK^*#M@V@IvXU&Q0$`JSuYZ*V zJLw8~L0Q?QHNXAsh|M;8bvAo&NWGPrdBvgv+e)KmTxk5OO1WM}@@M=>tyC z(fmd5NPqvIR^UQ-bD~zoL8M{gHYiWFVg>#d#6Gd-^dyfr^h1imJI3ehU9SsIxyp2V0V8!9L>pm%SXc~)Y9hLg(G$nOl7&Lu<7fTkW z_e2<4*6uY$$sgtQBX-3<+ul#6Qi)y}2 z*zD|)?vvfFUD`S)4;=CI!*zTdp;bHX`+8i;{XiUUc*P{$Kg&tMI_7TuAVqX#=0MCw792tdNuL+0L9tI*19} zhHwAiGI_q`ig3`*4LhlnY`7nSu0qt64;HEs!aA2JW#uj3ti-=jr#)NDOWdjR*Z*}) z6xgCELJ6|l2A^lzyOj&JV|DVuFFpV}JX1wH2xnns5h2vS7M!cuzH3ecFWNbR7Zi^}mO~pKQf2&{yf`WaArTT}Raj<2g=HgF~)mKGgzVZhN9j+jcn(p?W==>$Ckvd zPA*w@fj4vVzGVK7%u>2GN8V(PE5rc~=)}}&))e$%P0X+YKzLX{d2OfFC*=ZDyDh#+ zZWq3h^0s2tXJMQzYf9|$_FQusj_t|d6!7On-o|Gp95_nGBjD&%ZB|aD093nGT#Nd+ zJ*R|45{^=8t7?(6zZ$?y&-^6J(G4x*mO6wx-r!F_mCK}j%B{}kvZ|xpWvqg~$cTbO z2e>Yi(v@&l=BfpaCRQyx;%E?YzfjN+G$i8rce7$UU!tlwv1`)_T7Mc>GspuCs@F&0 z&l$U)2?t|g7-ezZ&pBm(1j0MJy($pY#+fZ;$yM?1KNQ>oQ(9hysF~_=n+KjIVJg%6 zk$OxEUmbC-KKOvvn#{ZH)vuX^Tr(Hzo@%6#6<^s_>`H_A$z(7NWPn`iT2;bl-WoZy zo?e#lF9Awl+&JdZz67c#GDvFLT&1-qW53Bmj(**jX)mBuYqt9F$v!oJg`>o+_ZFO8 zRMNIgh2*cT@81|R&OKhs$TABJQL~7}MvJ9&?%s1KXzF-vY;!4G<{wDy?0L`~V0f3b z*0ZCI=9p6DXQJzT{$WDFE%tXIAIN___iftC*g~Wz$C#3NeLXh2RxD~)i#=JMmvZx} ze4e3sA+)Vf&!S^c_?Q%wq%t2ejkq*0)%W4jCf}z4&vl$Bw`Yav?Vp0hbYi)4uCn=q za`zf9L1cX3-b_NQsP(F3mvt#N4yef04;V6`?dFmFiGA;xv{cs~v(rgb%MIch2l!)k zpmi=>mUiHqeNhm}n)J};s0+&ycEYyUBq*c*Wn2Mt#@oF3=GTKnQ>Ayd=swzPb!kp- z&;qFActZ_fuSZSeTfK>(-yFn(GE}Nh-FBPbFE^BLU%T0%hmba*C7F5r&&I~hyd3;= zU~!tCy+{EL>ow@`qCz@Y_*4qoO_&vIYEFS?$c~yX2RR7-fC*M~+-=|+E*t%qE4$^j zTNOk4c-}$#aUu zQ2Dyo1F>Tde0}7PGzR!~&!L+E&zeBS=B~v{`kJ(oE}9x4si@Hz1s!JQ!kZ z5>}Z-Rbe-7p&CKA1H0%=j$8s5mDy-;*f`^zf9C>d&ib#{F`nLveLPSfM73X&IC2fi zmTUbE-=(}iZUBk*9zD4De%wa-B9$@!nLK*@T8VbPcKcKgdDl@5G0%|p^FkAsN5ReP z3B3M}CG(q*k)RD(WO%*I&Bv->4Nvsc=1SKGOa}Db9^UKoxc~i*u;_rs#c>v4aZytVCSGO*O!dHessy>t)ylTE-0Fgj7dkvL}iq6An^1g~OZ4(IOvWwF-kgZ)EI zl|KNa+Mnp295`#t-vXR)C)*I}$MXIe__b7!rhs<~UU@i}W705G?N4*xh5XhZvVfHQ z=)ugvBcW8#rIMVL%Q}CrKO%u17b?b0TtbvbiLOy(EJGsg^fEn55oJ|+SLpSgk?3pe zB0TfyhQga%{yH#|#otWl&8EOEAUbA-{tE0$)m2>-mS}tHer|RE4jfo*SzAmdk$>)3wLxzGPMvC(&l17+jN)sy)Z_6Zt6vuZR1q13safy(axNc8u6* z$LiK67orQR9+rKX;K}{WY6LRgZpN0udcLc@|GC9t$D~EyzU|hy?y+AtJu=`w4e-cr zsmCLY6IJz%l2_VWTXJnLmFF^v5>#*4JmT~wPSn-Z+c1%7Y=n#Eo9&o7Hvq1Q@uUjq2=UBHs*B?tost$(p*-xb0C13H7>F(=HtcBnUY z9K~2}Fw$~+spN1M2LuN4E@?8+A6O}jD120-eKYRiHqqK}C~zKDgvbw%`!a}|K0lN{ z0<_gWDTA5sE%3t~@2b7T&)W<7jArYluEVO~fJBLptqZ>*Djx)AeXXBNa#L2_`lUdZ z%tTc=u7q^)XM$Hc%_)wEjE|<|;7kv+a>~xBlwhL1YM&5b5hJ=4) z5NjcPMYNU>`1z&d2f|i;+}Z6O2EiXse08`8K*I8{F?|cBAKugp$T<6Uc$#ZXM{0}I zefzcskcL!mntxz7{WCzbm1Dp+flHKtzy{sZ7!|YN;sR*9t>2Q1}7VaZH9uZ zfwi?oSNy3OZ2#RO^N2ru=DkUF)P;VbqFR4~K+|U4bu`D|U(K%A0!BkaG6g812iNQV zmtzS2TUPe}132Wbudff?{`_ for version control. +`GitHub ` is used to host and manage ongoing projects. + To create projects different *copier* templates are provided. For the installation of *copier*, refer to the `official documentation <./https://copier.readthedocs.io/en/latest/>`. @@ -26,6 +33,8 @@ Existing templates are: Whether you want to create a new project using a template or want to issue a new template, refer to the coding guidelines for your respective language. +For further information on the usage of *copier*, please refer to the template documentation. + .. note:: Sometimes it does not make sense to use one of our *copier* templates. Document your decision in the respective guidelines for the language and the documentation of the project itself. Every project has to use the *copier-documentation* template for consistent understanding throughout all projects. @@ -45,14 +54,19 @@ At the moment there are two issue templates: The templates provide the necessary guidelines to state the issue. You can also create issues as a collection of other issues. -An issue state a clearly defined problem which can be solved with a series of commits. -It should also contain some idea how to solve the issue or kick of a discussion about that. +An issue states a clearly defined problem which can be solved with a series of commits. +It should also contain some idea how to solve the issue or at least open a discussion. +.. note:: For questions or general discussions, please refer to the `Discussions` tab of your project, instead of abusing the issue functionality for that, e.g. `here `_ ----------------- Version control ----------------- +********** + Branches +********** + `git `_ has to be used for all projects. The `master` (or `main`) branch has to pass all tests at all times. @@ -60,19 +74,24 @@ To make changes first create an issue in the respective github repository. Create a branch using the respective: `Create a branch for this issue or link a pull request.` button. -.. .. image:: /_static/images/github_create_branch_from_issue.png - .. :align: center - Prepend `dev/` for your branch name. So for example a valid branch name is `dev/1_first_issue`. -For branches consisting of many issues create an epic issue. -Refer to GitHub templates for more information. -.. note:: GitHub templates are automatically generated using *copier* for your project. +.. figure:: /_static/images/github_create_branch_from_issue.png + :align: right + :figwidth: 40% -Refer to the guidelines for tests for your respective language. + You can create a branch directly from the issue page. Do not forget to prepend the suggested branch name with `/dev`. + +********* + Commits +********* -.. warning:: Every commit has to come with test coverage. +It is advised (and necessary) to use `git`s `commit` functionality. +A commit should consist of exactly one added or fixed functionality. + +.. warning:: Every commit should to come with test coverage. +Refer to the guidelines for tests for your respective language. For *work in progress* commits first check out appending `-wip/` to your branch name and do not forget to delete that *wip* branch as soon as it is no longer up to date.