From 3e1b61dcba33a6913b670226fd51c62cfc059141 Mon Sep 17 00:00:00 2001 From: Gregory Poole Date: Fri, 9 Aug 2024 13:58:25 +1000 Subject: [PATCH] Documentation improvements. --- README.md | 21 +++++++++- docs/assets/adacs_logo.png | Bin 0 -> 50667 bytes docs/content/common_gotchas.md | 23 +++++++++++ docs/index.rst | 1 + .../INSTRUCTIONS.template | 38 ++++++++++-------- 5 files changed, 65 insertions(+), 18 deletions(-) create mode 100644 docs/assets/adacs_logo.png create mode 100644 docs/content/common_gotchas.md diff --git a/README.md b/README.md index 55d6a28..6be3380 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,22 @@ -# Starting a new Python codebase? -This template takes the effort out of starting from a good place. +

+ ADACS Logo +

+ +

+ + Python 3.11 + + + Documentation Status + + + MIT License + +

+ +# Base Python Codebase Template + +**Starting a new Python codebase?** Read on to see how this template can have you set-up with all the elements of a professional codebase in less than 30 mins. ## Getting Started ***Installing the needed dependencies and building your new project is easy with the following steps ...*** diff --git a/docs/assets/adacs_logo.png b/docs/assets/adacs_logo.png new file mode 100644 index 0000000000000000000000000000000000000000..1a4ade7c6786084ac21a343a97dd15b293d587e7 GIT binary patch literal 50667 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
    V>L- zy%i<+Fv-#I&AERJ(37~Oz)jYdSrHp?WHe*Qtcg2J%Jj}FjlpoO$7_CSL&uEp2cWld zD(`Jl|8cL(&@>-A9N{f+To}!hA0=Tr`5XlrD~jJ-WyQ;lEpw1?V;PUglt12C)mEd( zAqBd#r{uKyA4nfBxN>$%DI_kmzh~!P>E&r=JbaC)Wk?Y=BF2xl?W(@^byHQoZy<6C z%nK9b@*;X(G^(d`3|x`UDg|Y!}Rp@)KR1G zZI8{znnQe9s>#GbW#*_g#`%NWB*z_aJ$0tVgS68CS(?Lm(L){UA8O~+bB}*9?|Db< zd0Jo(eD41m6NvjNGTrOdK3;{>qyAO_O{oILJMrgjq-5p{b2AUqPUMz64M{myRaOh$ zVBXrPH90Scw<33Et@w(Acf+D!1#r6$dFi}AP*%*dY*BxV@6)?G{1Zt=pAXme+6QDG zv*d5NL^2sQ@#*ECyTN2?J57wqL^3gouZVngglOXj8721nX_e{7L9Y||@#`7mook8B z+Ox?DcFl%R)A5OXanJv&1wb|zqgxhErj)A_G+xwwuxGcWs_ij45_Ymdz&t-MJrsO9 zRw-M2c(uo?IUrD1p4(4Bw`4R)piE50iv)LjF64vO zk~CBs#o~z}1_hX5x5dEA(z&HuCRfu_+pRNj`^end2H{yR^U)*Udcvgm{NFNK5x!Oh z%FF|yfs}yur6-#m_%oXQem86g#X({dM*pMrW8p}=iQ>5u7qw%+VBnnjE__o!lj0D3 zCvDXK#b~DHPR#|ypo7aN6e#Nk`G1WOL*M@S!3@tt2m6e!IbpB#{}u+>SyHAyr@myY*8VDDR>%tx{RU60 z*UHb@zaT0nN=Wm+_Pj3l0)XvKiIe&c;Sc2I5^A*W7t?x8)Jr4Z~I-#F>jE(>}8W|O@-(}g?vCX_4ns6fAfCxuMe z{fqtF=|_4Q<+em|$+>lUslToT;Le?s#fPVPsSa(-$0%O!+8z+0R)5E2 z;Hn-brGs$A@9`9U3K5kQLdnpq=G-sIcNQzvmdnZ-LtZsNg!eKax;rZ>8~W@$3PB4r zb(Uvy`L9^XY8Ef%Tf&OvkDbHn}iBN>jr6MBjoeE^I#5@O8v`|D)L<^;U9Zd;ZsdG7gfO5z*zz>b_f zHHDH>5oyX3wvYlA>+1gBbXleU0I1+Ii zas1eS;~UF<%bnOFlSuAkp71i{0Vv1U1I#+{Tw;3x+ujMNa_^?)H44tbp$Qs^eq8z1 zZN=O0t>oxV7Hc)=(2eSXi~o#IGSSXapoNz%skh+L7_y)$y(t`1V?$)a5$GJSJ)(Qf z$Tc?{VeXrUoCQKiEkxKAXb{Ltoid##`s^~k6H)nnPu1;zs1J*eI+(lFJhWnOL+%@n zP^fNZ1q=@`6H-)w=tU)Z4b*xYi+yNsmC6 zfm*Z$>~MW1~gfV$gS?l?lP-`I_X;)7-2mK}J>|E&D^;ELV&t5-zf?8Y9X z>}xcq8g|2Fe&|iu%-7-t0Y;0rBr;!7A!)LcE`Ua+Y~|oF^x7yy(8nG;?h^=^;xT z0r}+(AmkVFgOatMd|n?mX^Qam)Rq zEhz3UuTg;>;T$IoQ5SC|EYGM0_b9TYg_Y^?D;}|Rq#aBBBuX^A9`bzDiMv%>-@vPG z&NDSt!0BEJVk>!>*F%{#L0`+xq17vKahXxbwkq;uMR^1R8TI< zZE?}=kmn+6VtcC`fn&;mFKVb`tJU}jqG4@_pSe+PFtF!Qh(1;_2`f*Rp&?BVroh$+ zx>b&Xh-v^u(t6zNw3|O6?2jQ!a@qTbWroIObGF`O%pY*G9XqFU0seDkc^@urr+^M) zf3zwNbH!^MMM=+pzEJd4KPAJ+E*&)a9<1FEx-|0s?}ekkHuCm|80}~#9gL+ z%S!kR*afG8ysJoel^Q|-I;06$xO&Vz1m=a8-)xMOyE?hTc2ze99S*rs8v!65BI4q0 z8-P8yN0@A9WT_+d^Jnk44_+dOx?AA|klvf?5UBYwt*UtB!^>h1cDK22*Heu{?OuUa z4e>v34&`9)o2%~Iqc$|K2k`POkAQf?RZP)Eam+Fe^aaevMHSG?Y*28V&#fP_%K{-) zA!99$SVny`X~Zd6ho1b`<}`<2F(|e})4@4~^*i*Lx`0CemMBp{sDo?J`L$wx1&%Yp zagA1zw#&T)WEs}^W<5VH;ms)N9tXtE-YqiCyHhKfK=Khq$$ks;A#koZ3LZxWq2Mf! z5%w{?Cl$4x^iD6ROERjyd7Nuw4}NOAo`()W@aJGh<7db{6FXRuIA=scQ8`E5WsQOM zk6iepITY!!S9BhWaAVGo+1T~d>I3H&i&R2#MkFARrHViJ^BE^-4$RSgG6pQ;rdoWS zA#{0*yvaOCp^e>LM+z+0a91o~U5Y#0rkKM_hu>bB^_%-n9bU0Mh-{8DTxEeF#W&c8 zk&0RW{&Rel4&soj>kEGzXdK*>Qb*VZN!*RWb$g6B^e|Xc=H##!1_GK8@+fSG|2tZa z4(aafg+D+3b5Wja)<6sg+d)c3KY|sb&)iALQdvpl)d4X?S4}X@llq+T(Ro8?A^5Y+ zq@_a;#3P+&Kf>Ih?kYg{x|R$7iLT9}qu36}B;`h6ecx}&KsRQ(gItlG>Duw4S7h6I zc5R)~%Z zUpmj2#^039q@dGFl}u4w1mqRd!HSC)h)Yq)$tS-BU$bAy$V!aE^B0^d(bA$`KSlWO z4rlQGxT{ssmHd;0yXcwxnmg-cxvGmtQfm<|QQuNPl0Jy6{*{RH0!!Z<8#DhcK!H0K zGxaA4QFkZ&4x2Qmj17<&F=s9J6cNSL;-ZRbtwE)j5M*cu(P9sUU~%;xYhvspj)5i! zU!Eda5o}sDRY!lho7L|yLQZdQoslY{JHvgB5_r!6#DPRwOPcP96HX={bA`!SP{jn8 zM0XBtHY6UdclP~EuAvcY3s&mjh`YQ!76zHVP1gA-VOxqlJQe4zk&-gRqI$fds7v#X7GV14E|h$#P)D@QXgu|&_p)U$K$!A^(jJTCZ9 z7Q8&chGO(Dkd}{9N)jbzY{hoF#j~g*D1$D=-IRf0Vbw+2qkH}S#1rMl5ZIYaQvY?v5XZ~1GUA_ESyx;*eMZo&t(k6Bq47B5XQdqDxN z?6C;sS{$+!3NMIy8p{FYm?#gk7XSrC*8#$|b7`7ETaOO=??09KOBY{N1@|_StmU)( zu6Mat`dXx82Gv5mFR9b%p{Gevm>KB1qn3SJ;pGqN*D=4;2Zc7CG;{8(=(2(KrM8g) zoHO7SelX(TYPGc)MaYW_aCBXI$iE-yDzhkeA#(b*olD7n>z;!T> zV$k-q2)#CcZ}8wd`!8eJCI9?;6hqH6GD;dxd!}OZYry-A7vwVnw)VixlFe37E3V}d z;Vm^n)iLA2o_2<3?fK+;RSl;7yon2s7Nlk$Xr@}{)(V&iR`$_rTJ~+kk0Q4=MYRf4 z=fXzgR%KSK+xx-lxeh(ql-+%qo?9=OC5vWN zv|yfNPv8F|(M?%MA(3TBp#w8*oO9?nuh{;JRNkedKgI`n8#QIc#iezGGKQfxPW7RJ z6iDb&lW-L%7iAb~2J-I|UGLTHd8^Kk3*qWl=7v$)ox2!PtvLqnoR)VDr1}k?2igf#}!J&k;kiJ;QWuGW7;@wA)HQ)iwQ0|whBht-21hEM7jBE!l;-M?e`&{*Z zbO&*`?0|80UCiBi$a^24bWR#X5ywSY>Gc4a*V zj&6PQA+h5G#b@w6TV^SjAWHb2l$}Bx#zbiQOjT^%+l?aJZExBQYyJx<`#Yqm3b&}> z<$oFW5$F5S(8=+*nCt9Jf(D+XCdlDq4w#7TMdO1N;B+pf_n(6B9pJonG6El&V5z=2 zG@wBK1RNE7rH#FDB3LcNwW2xdDhT?dMdB$0%Ur|kHY@71(BnwjD9>m2si zD|XryYd$I;mO0vdc=;InRE!nf;?R-|`;!HMMu&;@|lWB!bFC?13V}#(vJ? z3nAY;N2Jntjy}a2e%Yc2DlC2d{DeopV$9PpHD0^Hq(CHkc~gYC-sN3gBI!K*X()I; z)#6*|a?0R?o%piG{K*ykcYfGzobI-H&)S@0#~PpBR<{#-k6%Z@A4y~WM=j(FVUD1| zDKPA^c+ZbM*!kTEs1j}%u5R+V zTSS?wJBK%Z2j;Qh)*0360U3ukm@TifV#OHD$vpr?A_a8p;m_04%ys4jsk=6Shr}0s zw^!4TtE;QO>#LmRMsW$0sPQx(OlQ4_)d4B3KJbPv<31`4zyw66Q@U9LD+)hq3kj}& zHSI#-)Ljd5jt{-ydls6ha+^D@EOu=HGIAY*q}yYqes?uJ1(DiT=dtLhVuiq2n)!!z zp#vpX1Nl5=S=3$I%yywv9cXIRMThaYFC(#EUCIwU1+85Re1kr?_5uSoMEmK&A2|yr zI6}1O-Ws45NK5!+!07X#|Cuq9QrKwZX-jb}4Lzk2c?Vct?8;*glF|*kFag5Y0~X}k z5;$$e2GEo#KA(w)ewU2=1v4j)a-8Epe9UBN8>p)-pLh2lcM6N{>hJalPV;(D z`eQ9yC}vA;%p{ScY=3|y>d$9TxC{zkMD~=mDyT9H-9QOt`BosL{>xPHtnwrim{S1T z^RpB&x3WX-ddtsGYO|h_;c}a4_(>=W8wptXC5K&f?_We3e8&&*bD}` zov?FuM6WK9=~zsdJ}CL{9{OgUeL`WEAI|#9Gw=$-s~MVK_U!qrU|I_KwgJe4yzGAW zdqIgZ{04Y*r#JCZgPKH}Z37SXt2A`x{`m#j`EB+MS@nUHFK{iTwWOluN5_y($V=1l z#Em9!(?djlTR#`Gtd)0$@xrTOu8fP!DFbBo(y&Gcz+Pb%gd?P)q(bl+o*BAEy!a`JK%3lK#^#oKR`D zj*1E$Px|n_GBJK=1-${CQ@E1?a{53)5rl6PpgP|9Icm#;w{`R7PUc4LFw_(BmxqT( z;@TrX2?J`QQ;U#!^tzYq!F&a&h=ggx`Io{omZ7fs~!!36S$Rr%$iQ`ERbhf)8r0EMGF7jzgtl2@gF+g-Tnw}&wDeR z9Pu8ba^U7r{LC4oIdVPNCAG#lsbBiRCi5`hoSdA6q&{vo^!`bUxfb~L?g(#b_3y0T z7e-lsD0a`{zP72g(!fa8Spw<|<8$+PfMC#L?DXe7qk%N4vxYM@P(>zz57vtc`3MVF zyr;RVUaw}9Yccdhc-@2cXXdRUP~hwcKXd)LnM2p1M$=}=Q&bS!tA{yZ8=Zt50?&WH z{&^kF}0Sp-q;K$K|RbtSnc;EY`GL``R%$ z-z93{S>~*^sq_zHs~oV;3ZG5m9D&Lv=hrTv%nV2%tD+zJ(VcB5hd=p}GQ;_3|Bslf zFFQ2B9S^X~cKH}oZq4295T4H8W4RKAa#({H2p#dg7NS|IkRNb;lDe21`nzD!pj+VL zzDEHwTq@=R@Js7FdT z<{=s>(7YundTCitaDBbSd~6vRa6xl^w?TE&$62k_Cx_@6c=F02U*~`k?lwLU^gkUB zD*mJpJw5q#+@4Z|@e!X*=FSyXpfhjtOkIZZUt_*ve?Q*j-GSKrRkGm+maBkI--Wns zM{KO|b^y|2R`R8(qaifh(}k52=v@i$yMHb%7-9OEahkyfg^LQlExWW=GD4eNf#;*n>5 zC8PQPU44n|%@71)3Iv&?&bi(5N|Rz7Ow<39o>zi|kDh5V)eL{I?5 zmn0tSgW!pKxXewVQarvb(%(j+!{4V=d2{FyVe;Qw)esyZ$Ui*_Y?TcYwiZ(5bfN^Ot?xEsH$RSH~pf#u(V7&s}0yLN1xMn(8Y_YfF&%)@>ErQ#nXe9xp=i0+@U+{ z6tYYH0GyR>4mP5}!nF4MUMqMs>F{@opf)VAIPIb+s^t3jYpDO-7}~O3b)y}sjH;3> z)|rn5(@uWOsR)k%04X@aRQV~p{TN9@CdT9;|Gac^xfbHi9}g*pq3ie-Cy4pKuknhl zLlwJ?xo7hfs1335j9WNl+brq47EsyzWEL_;UWCN9*~U*m9_2=`B@aT+C7}}_ZDWsg zD{zt79fE$>z}oe|yJTz=-4&HJNX)le|QP?4`_OnzMW zfxf9WC?U#w`J4+ESRUJh+2suniWjXfqIqv^2Ra>?^DBF*$=(ow*F1zNstdoo4GZjI z_R^G%Qyh5$7kn9i!r}zZ;4I2SRgDx{@1N3t?{FlJBe$qPSe^xe0Q;5PLr6ci6fI1qqC?YjMrwic=GUU_EKtFWCSO$X z{SrebSs2n7K_qz>$?e~LeN$|NQvlxrik1Z$d}0xcjo@S97XWv)$@OwbR4XWx(z(y_ zUKiCW5w4?8dYMc8G8K22)OrhKN4gPp&wr+#Q%$0!z&@HMsl2jy^ls*f^W=^~eR~5ImZxf@p_ZKpevmteSBf zHR{wocP(Nb$E(Q+!h}%@c;j`Dd;pQ214xx7A}*$vME7>VV+5E8_ydEi)|-P1avz>P zFukWK7KYh!if^2jlmvCm`q~?tAsgNK`T19U(zoOIG(S_Va$GI2{o%B&_yKCRfseH; z3_Suus=gH-0zux-fXWi$Ki9gIcfLX13@{{T$IbGRK2vCb;f+wFy4- zWX1Xdw}j%_enN=yNojA_ilUYz+JkPB&Z|HJ^3a@g5%ZfM`m3;Z?~3lf2B@#pmC`i; P{L)m_MN~h28S(!BOH&H3 literal 0 HcmV?d00001 diff --git a/docs/content/common_gotchas.md b/docs/content/common_gotchas.md new file mode 100644 index 0000000..da6aa62 --- /dev/null +++ b/docs/content/common_gotchas.md @@ -0,0 +1,23 @@ +# Common Gotchas + +If you are encountering problems with a codebase rendered from this template, perhaps one of the +following is happening: + +## Configuring PyPI and TestPyPI + +### **'Entire account'-scoped secrets** + +'Entire account'-scoped tokens for *PyPI* (and *TestPyPI*) are not ideal, but there is a cold start problem when adding new projects to your account: you need a token to add a new project, but you need a project to create a project-scoped token. For this reason, you need to create and configure GitHub with a temporary 'Entire account'-scoped token first, and then when you have added the project to *PyPI* and *TestPyPi*, you need to delete the temporary token and repeat the process: create a token scoped to the project and reconfigure *GitHub* with the new secret. **It's easy to forget to do this.** + +## Workflow Issues + +### **My checks keep failing** + +Have you given workflows write permissions? If not, navigate within the repo to `Settings->Actions->General` and select `Read and write permissions`. + +## Developing Documentation + +### **I've added a new markdown file to the `docs/content` directory, but it isn't showing-up in the final rendered documentation** + +Have you added it to the `docs/index.rst` file? Follow the examples there for adding your new content +to the documentation. diff --git a/docs/index.rst b/docs/index.rst index 2725799..8f96e7b 100644 --- a/docs/index.rst +++ b/docs/index.rst @@ -11,4 +11,5 @@ Home Configuring a new project Development guidelines + Common Gotchas Maintianing this template diff --git a/{{cookiecutter.repo_name}}/INSTRUCTIONS.template b/{{cookiecutter.repo_name}}/INSTRUCTIONS.template index 557d6ce..8847331 100644 --- a/{{cookiecutter.repo_name}}/INSTRUCTIONS.template +++ b/{{cookiecutter.repo_name}}/INSTRUCTIONS.template @@ -6,7 +6,7 @@ 1. **Create and activate a Python 3.11 environment** -Use your favourite method to create and activate a Python 3.11 environment for your development. +Use your favourite method to *create and activate* a Python 3.11 environment for your development. 2. **Install the project and all dependencies** @@ -14,49 +14,55 @@ With your environment activated, run the following from within your new repo: `p *NOTE: This needs to be done before any tests can be run, documentation built, etc.* -3. **Create a GitHub repo and adjust workflow permissions** +3. **Create a GitHub repo** -Goto *`https://github.com`* and create a new repo with the following: +If you have not yet done so, goto *`https://github.com`* and create a new repo with the following: - account: **{{cookiecutter.github_login}}** - repo name: **{{cookiecutter.repo_name}}** +4. **Adjust workflow permissions** + Navigate within the repo to `Settings->Actions->General` and select `Read and write permissions`. *NOTE: This needs to be done before the next stage so that the GitHub version bump action that is run on first upload does not fail.* -4. **Push the local repo to GitHub** +5. **Push the local repo to GitHub** Your new repo has been configured with your GitHub repo details. Run the following from within your new local repo to push it to GitHub: `git push -u origin main` *NOTE: If you notice any failed workflow runs at this point, it may be because you forgot to make the Action permission change mentioned above.* -5. **Configure branch permissions** +6. **Configure branch permissions** Navigate to `Settings->Branches->Add branch ruleset` and ... - give the Ruleset whatever name you'd like (e.g. `Protect Main`) - set `Enforecement status` to `Active` -- add a `Target Branch` targeting criteria by pattern and type `main` -- select `Require a pull request before merging` -- select `Require status checks to pass` and add the check `Run all build and unit tests` as a required check +- add a `Target Branch` via `Add target->Include by pattern` and type `main` +- adjust `Branch Rules` by selecting `Require a pull request before merging` +- adjust `Branch Rules` by selecting `Require status checks to pass` and add the check `Run all build and unit tests` as a required check - push the `Create` button at the bottom *From this point on, no development should be performed on the main branch. All updates to the main branch are managed via Pull Requests in the GitHub UI.* -6. **[Optional] Activate pre-commit git hooks** +7. **[Optional] Activate pre-commit git hooks** From within the repo, run the following: `pre-commit install` -7 **[Optional] Configure Services (Read The Docs, PyPI, etc.)** +8 **[Optional] Configure Services (Read The Docs, PyPI, etc.)** + +This can be done at any time when you want to enable these features; they are simply deactivated until you do; see *https://adacs-python-template.readthedocs.io/en/latest/content/configuring_services.html* for instructions. + +9. **Start developing!** -This can be done at any time when you want to enable these features; they are simply deactivated until you do; see *`https://adacs-python-template.readthedocs.io/en/latest/content/configuring_services.html`* for instructions. +No development should be done on the *main* branch, so create and checkout a new git branch with `git checkout -b new_branch_name` and start developing. -8. **Start developing!** +**N.B.: If you are new to the use of this template, make sure you have a good read of the following +sections of the documentation:** -**No development should be done on *main***, so create and checkout a new git branch with `git checkout -b new_branch_name` and start -developing. +- `Guidelines for Developing a New Project`: *https://adacs-base-python-template.readthedocs.io/en/latest/content/development_guidelines.html* +- `Common Gotchas`: *https://adacs-base-python-template.readthedocs.io/en/latest/content/common_gotchas.html* -**N.B.: If you are new to the use of this template, make sure you have a good read of the `Notes for Developer -If you have any questions, consult the template documentation at *`https://adacs-python-template.readthedocs.io/en/latest/index.html`*. +Any questions? Consult the docs at *https://adacs-base-python-template.readthedocs.io/en/latest/index.html*.