From a093d55e6dcdd57c964ed377b673762cf9b1c510 Mon Sep 17 00:00:00 2001 From: BexTuychiev Date: Mon, 9 Dec 2024 16:55:04 +0500 Subject: [PATCH] Add assets for GitHub actions tutorialc --- .../actions.png | Bin .../alert.png | Bin .../discord.png | Bin .../finished.png | Bin .../linechart.png | Bin .../new-alert.png | Bin .../new-server.png | Bin .../sneak-peek.png | Bin .../supabase_connect.png | Bin .../webhook.png | Bin .../amazon-price-tracking/notebook.md | 18 +- .../cron-syntax.png | Bin 0 -> 419696 bytes .../github-actions-tutorial/notebook.ipynb | 1630 +++++++++++++++++ .../github-actions-tutorial/notebook.md | 1187 ++++++++++++ 14 files changed, 2826 insertions(+), 9 deletions(-) rename examples/blog-articles/amazon-price-tracking/{images => amazon-price-tracking-images}/actions.png (100%) rename examples/blog-articles/amazon-price-tracking/{images => amazon-price-tracking-images}/alert.png (100%) rename examples/blog-articles/amazon-price-tracking/{images => amazon-price-tracking-images}/discord.png (100%) rename examples/blog-articles/amazon-price-tracking/{images => amazon-price-tracking-images}/finished.png (100%) rename examples/blog-articles/amazon-price-tracking/{images => amazon-price-tracking-images}/linechart.png (100%) rename examples/blog-articles/amazon-price-tracking/{images => amazon-price-tracking-images}/new-alert.png (100%) rename examples/blog-articles/amazon-price-tracking/{images => amazon-price-tracking-images}/new-server.png (100%) rename examples/blog-articles/amazon-price-tracking/{images => amazon-price-tracking-images}/sneak-peek.png (100%) rename examples/blog-articles/amazon-price-tracking/{images => amazon-price-tracking-images}/supabase_connect.png (100%) rename examples/blog-articles/amazon-price-tracking/{images => amazon-price-tracking-images}/webhook.png (100%) create mode 100644 examples/blog-articles/github-actions-tutorial/github-actions-tutorial-images/cron-syntax.png create mode 100644 examples/blog-articles/github-actions-tutorial/notebook.ipynb create mode 100644 examples/blog-articles/github-actions-tutorial/notebook.md diff --git a/examples/blog-articles/amazon-price-tracking/images/actions.png b/examples/blog-articles/amazon-price-tracking/amazon-price-tracking-images/actions.png similarity index 100% rename from examples/blog-articles/amazon-price-tracking/images/actions.png rename to examples/blog-articles/amazon-price-tracking/amazon-price-tracking-images/actions.png diff --git a/examples/blog-articles/amazon-price-tracking/images/alert.png b/examples/blog-articles/amazon-price-tracking/amazon-price-tracking-images/alert.png similarity index 100% rename from examples/blog-articles/amazon-price-tracking/images/alert.png rename to examples/blog-articles/amazon-price-tracking/amazon-price-tracking-images/alert.png diff --git a/examples/blog-articles/amazon-price-tracking/images/discord.png b/examples/blog-articles/amazon-price-tracking/amazon-price-tracking-images/discord.png similarity index 100% rename from examples/blog-articles/amazon-price-tracking/images/discord.png rename to examples/blog-articles/amazon-price-tracking/amazon-price-tracking-images/discord.png diff --git a/examples/blog-articles/amazon-price-tracking/images/finished.png b/examples/blog-articles/amazon-price-tracking/amazon-price-tracking-images/finished.png similarity index 100% rename from examples/blog-articles/amazon-price-tracking/images/finished.png rename to examples/blog-articles/amazon-price-tracking/amazon-price-tracking-images/finished.png diff --git a/examples/blog-articles/amazon-price-tracking/images/linechart.png b/examples/blog-articles/amazon-price-tracking/amazon-price-tracking-images/linechart.png similarity index 100% rename from examples/blog-articles/amazon-price-tracking/images/linechart.png rename to examples/blog-articles/amazon-price-tracking/amazon-price-tracking-images/linechart.png diff --git a/examples/blog-articles/amazon-price-tracking/images/new-alert.png b/examples/blog-articles/amazon-price-tracking/amazon-price-tracking-images/new-alert.png similarity index 100% rename from examples/blog-articles/amazon-price-tracking/images/new-alert.png rename to examples/blog-articles/amazon-price-tracking/amazon-price-tracking-images/new-alert.png diff --git a/examples/blog-articles/amazon-price-tracking/images/new-server.png b/examples/blog-articles/amazon-price-tracking/amazon-price-tracking-images/new-server.png similarity index 100% rename from examples/blog-articles/amazon-price-tracking/images/new-server.png rename to examples/blog-articles/amazon-price-tracking/amazon-price-tracking-images/new-server.png diff --git a/examples/blog-articles/amazon-price-tracking/images/sneak-peek.png b/examples/blog-articles/amazon-price-tracking/amazon-price-tracking-images/sneak-peek.png similarity index 100% rename from examples/blog-articles/amazon-price-tracking/images/sneak-peek.png rename to examples/blog-articles/amazon-price-tracking/amazon-price-tracking-images/sneak-peek.png diff --git a/examples/blog-articles/amazon-price-tracking/images/supabase_connect.png b/examples/blog-articles/amazon-price-tracking/amazon-price-tracking-images/supabase_connect.png similarity index 100% rename from examples/blog-articles/amazon-price-tracking/images/supabase_connect.png rename to examples/blog-articles/amazon-price-tracking/amazon-price-tracking-images/supabase_connect.png diff --git a/examples/blog-articles/amazon-price-tracking/images/webhook.png b/examples/blog-articles/amazon-price-tracking/amazon-price-tracking-images/webhook.png similarity index 100% rename from examples/blog-articles/amazon-price-tracking/images/webhook.png rename to examples/blog-articles/amazon-price-tracking/amazon-price-tracking-images/webhook.png diff --git a/examples/blog-articles/amazon-price-tracking/notebook.md b/examples/blog-articles/amazon-price-tracking/notebook.md index 01283f2a..59ca47a5 100644 --- a/examples/blog-articles/amazon-price-tracking/notebook.md +++ b/examples/blog-articles/amazon-price-tracking/notebook.md @@ -19,7 +19,7 @@ The challenge is that e-commerce websites run flash sales and temporary discount That's where automation comes in. In this guide, we'll build a Python application that monitors product prices across any e-commerce website and instantly notifies you when prices drop on items you're actually interested in. Here is a sneak peek of the app: -![Screenshot of a minimalist price tracking application showing product listings, price history charts, and notification controls for monitoring e-commerce deals using Firecrawl](images/sneak-peek.png) +![Screenshot of a minimalist price tracking application showing product listings, price history charts, and notification controls for monitoring e-commerce deals using Firecrawl](amazon-price-tracking-images/sneak-peek.png) The app has a simple appearance but provides complete functionality: @@ -96,7 +96,7 @@ git commit -m "Initial commit" Let's take a look at the final product one more time: -![A screenshot of an Amazon price tracker web application showing a sidebar for adding product URLs and a main dashboard displaying tracked products with price history charts. Created with streamlit and firecrawl](images/sneak-peek.png) +![A screenshot of an Amazon price tracker web application showing a sidebar for adding product URLs and a main dashboard displaying tracked products with price history charts. Created with streamlit and firecrawl](amazon-price-tracking-images/sneak-peek.png) It has two sections: the sidebar and the main dashboard. Since the first thing you do when launching this app is adding products, we will start building the sidebar first. Open `ui.py` and paste the following code: @@ -389,7 +389,7 @@ There are many platforms for hosting Postgres instances but the one I find the e Then, in a few minutes, your free Postgres instance comes online. To connect to this instance, click on Home in the left sidebar and then, "Connect": -![Screenshot of Supabase dashboard showing database connection settings and credentials for connecting to a PostgreSQL database instance](images/supabase_connect.png) +![Screenshot of Supabase dashboard showing database connection settings and credentials for connecting to a PostgreSQL database instance](amazon-price-tracking-images/supabase_connect.png) You will be shown your database connection string with a placeholder for the password you copied. You should paste this string in your `.env` file with your password added to the `.env` file: @@ -623,7 +623,7 @@ git commit -m "Add a feature to track product prices after they are added" Let's take a look at the final product shown in the introduction once again: -![Screenshot of a minimalist price tracking dashboard showing product price history charts, add/remove product controls, and notification settings for monitoring e-commerce deals and price drops](images/sneak-peek.png) +![Screenshot of a minimalist price tracking dashboard showing product price history charts, add/remove product controls, and notification settings for monitoring e-commerce deals and price drops](amazon-price-tracking-images/sneak-peek.png) Apart from the sidebar, the main dashboard shows each product's price history visualized with a Plotly line plot where the X axis is the timestamp while the Y axis is the prices. Each line plot is wrapped in a Streamlit component that includes buttons for removing the product from the database or visiting its source URL. @@ -772,7 +772,7 @@ In the right column, we create an interactive line plot using Plotly Express to After this step, the UI must be fully functional and ready to track products. For example, here is what mine looks like after adding a couple of products: -![Screenshot of a price tracking dashboard showing multiple product listings with price history charts, product images, and current prices for Amazon items](images/finished.png) +![Screenshot of a price tracking dashboard showing multiple product listings with price history charts, product images, and current prices for Amazon items](amazon-price-tracking-images/finished.png) But notice how the price history chart doesn't show anything. That's because we haven't populated it by checking the product price in regular intervals. Let's do that in the next couple of steps. For now, commit the latest changes we've made: @@ -825,7 +825,7 @@ In the function body, we retrieve all products URLs, retrieve their new price da If you run the function once and refresh the Streamlit app, you must see a line chart appear for each product you are tracking: -![Screenshot of a price tracking dashboard showing a line chart visualization of product price history over time, with price on the y-axis and dates on the x-axis](images/linechart.png) +![Screenshot of a price tracking dashboard showing a line chart visualization of product price history over time, with price on the y-axis and dates on the x-axis](amazon-price-tracking-images/linechart.png) Let's commit the changes in this step: @@ -933,7 +933,7 @@ git push origin main Next, navigate to your GitHub repository again and click on the "Actions" tab: -![Screenshot of GitHub Actions interface showing workflow runs and manual trigger button for automated price tracking application](images/actions.png) +![Screenshot of GitHub Actions interface showing workflow runs and manual trigger button for automated price tracking application](amazon-price-tracking-images/actions.png) From there, you can run the workflow manually (click "Run workflow" and refresh the page). If it is executed successfully, you can return to the Streamlit app and refresh to see the new price added to the chart. @@ -1083,7 +1083,7 @@ python notifications.py If all is well, you should get a Discord message in your server that looks like this: -![Screenshot of a Discord notification showing a price drop alert with product details, original price, new discounted price and percentage savings](images/alert.png) +![Screenshot of a Discord notification showing a price drop alert with product details, original price, new discounted price and percentage savings](amazon-price-tracking-images/alert.png) Let's commit the changes we have: @@ -1176,7 +1176,7 @@ Let's examine the key changes in this enhanced version of `check_prices.py`: When I tested this new version of the script, I immediately got an alert: -![Screenshot of a Discord notification showing a price drop alert for an Amazon product, displaying the original and discounted prices with percentage savings](images/new-alert.png) +![Screenshot of a Discord notification showing a price drop alert for an Amazon product, displaying the original and discounted prices with percentage savings](amazon-price-tracking-images/new-alert.png) Before we supercharge our workflow with the new notification system, you should add this line of code to your `check_prices.yml` workflow file to read the Discord webhook URL from your GitHub secrets: diff --git a/examples/blog-articles/github-actions-tutorial/github-actions-tutorial-images/cron-syntax.png b/examples/blog-articles/github-actions-tutorial/github-actions-tutorial-images/cron-syntax.png new file mode 100644 index 0000000000000000000000000000000000000000..d790c1ef66204dc250e07f7c7c7b48dc7b10435b GIT binary patch literal 419696 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%0AjW;?Wd|2H4zrRGJ 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

JgmkS+dOXT+B5o)@mj$waM70>Dyd}C?m7S z6k-yx1A{;GvM3ydruP18v+S27!N_`1z9+E=WQ26Y1bb(O@p$7|i}Bi+s@j~jA$Lj@ zK<0_N7qJFx#_YK!IhnN!y}b|bfR4FSMP_`&T`y}_mBEkY^^sT;2%yp#R+UA-q%vNV zc9gux5erWHTXyl+M|Qhjo>RjTEaHXG{I3t3N3sV~n*a6(_LR9NEf%#NjmK2n8N3;} zt-f7*co%&O{L>;5HPyR3wJob?+}&M|y%KD^Sg9num}QDFjnv-M)bvc7AUt)(0O0Nr z#LwnMtZgF(WWAkqHjVKMr0*Th^G#Gaw02(W2wp)wO;DS%-nM zf)=tfH3f-60bnv0lVXi30?@#+5}(6PnOH&ZcECEgQKGO+=1FkM0ods-#15GWHM(OO z&+1S!-&P5El$Q|E{g29bLaq=ktq1|hpu))`k3YMdkFB9 zE_y$6;g>{2ng6FN!GAHYu()^(?afn=fX8kH{209eALopPU5~DDxMPH4;n|r*!HO4O zAGjN85Avv2E}eb0ya@#W7;845>L7YN;ekYyL?861zX+=D`~ChH^jiHMaLm^oYZ4_S z8pF<{-swRq7TCEBXXmcp{(?OaAb!h%@_kSom>)VXr@RL~3nAT{NJu&EvT=sN^LmKC z7{kfO)#+FOL`}3ozAzCw&IFY+95;oq8ekAraSS4CtO4Qv6%XKRMe@1MV#|(>j-~(zEO!s-lMG zS!M0vK#pK$@t3Be^^f*LtRN|vahD2i9^|oUxHfWKrFe+A?iZ?$(*y&RE9{FE8 z=&|SnyPqwD=1D*4wO2Ac1on7%I1G&f-S>bfxir|E4j-U7FJ2Bo!=a5Pbm@b}z=6HY zlEOk}h5Hf>ZW4q6Ge?t!JNn?F-DIk90odgB#P4r*qpc%zfL*xp{%|}avjAkow03;= zL7!`e^SIEY&YO`rgtPvM_pQP?%*Kx*b@az0#4Z4-+Q#)8t*3lAi> z!sw=@2GJn&`+H8VR6>m?^o0Nk$GA%#coi(2s1ul_17KvZN{_U{CmjIH)b<;UyviK` ztQ1%Q_vHR71gTAT1Z(40Ne1{JU^%mHV|<6N+^s?U?G9`f%Xl&JYd~?4A(> zu${dOXJZ(70eopk7P==4G-CjlYc=zwEnxqd5?+s;*v*H1fnlY8+k+M8@^>hv>sQWR z7@sV`p*@L@1GJq#U`P&CK#I&P`#3O(AcR?^`H5ShT0_GqgY7odu>n3#L(C1^A_0U? zSwVRUALceZ&mk|l3JhMdA_L3qkC#8_FtY=SHwD{DC`52hR>-L45^~80xZ2~J1zX^G z6a>@_qSm~+#tAB>ypISz_Y_@M2p(%(2r?v7Ta^o6gkd1-Lo}y zuVpx@rv9JQBoWZruGzVBNCQU(*aqvoR^(w|bY>CH&%gkVpxujb?Jo2TWZ_Aq94eTp z*$(9!v91b^3}F3d>(-hNx8Rw;m+YVd?|Q z*HHsN2aN4jGT5?f}AlIQq8SdW#m* z1t3f01H#RKZWO4jfg%^7dSfUt%Z`USc4*%n8e>;c@twZzKOuV&RTj6@dO4yZuE$39K*UvzJYsX=bL%`pTN#=#~w$gtN^A#w;s>;WFs6R1T| zEF$RU1hF9q2LFLn#~DBI6-)u+%9RY)m_$RkRyTcOW)}yPC@o|uDFxew&6&Kk2KbR1 z(Jt|*jnj=xrD}9=lvW}9s(`OMBqEk^d+e1GVBelQQ;T{;r83RCmNq6qZ}`$P5E!rz zzB9V)_Cl!f7JlF|OYTT)wrwcA2bCf!h{x8W4fqL+SB3#fQ3;(>)Of63NI}^oACRqV>=^*xHo)ryD1LXpdlR)l zg_{K0#-BwZxX&=)>`$CUpM&opFg*mHXwb<}CXMe+7!rM-2%x16#0^jY(*W3AvG+Wb zYTp0>q`Cj(a#%*_F3T`X+eP8pPN*JYKzZ9A2g7#jK#c7MA!Zefu>m|%l~o>4YIGQY zDf>8dZ_)>6pN1w2YzMK(W<1Nj_1c(PWrg|xQ`PB55JiM=Fre*Ges>r$zyN1MTksgI z7QBlQ8k(>g$X4(sjJnnc}KBBeFqji zUq*q!d``lAaLZT`CYh}Ely#ZK*ib1ojvTXD1-s0jbTR}afgM1yTUg4`Vn$*7ii%QZ zID*iuXl5%tstJl#8W63M%p1UzVEn>7Pt{(^gE&%hZJ7n?(RPh#KJww%LxENEKwhEfRG`GnuS3hG&tbpHOwe<`DuWT z>?N-HlXZu2_PW$7k6j!F#h7jGecxjsy)OlWy!>=t3I?wMdqd;gU`Xr=vO7GD9T;*( z^v4GGg~7k~^dqYmH0KFibC#}w!T%v#V1*wuLKU}ws%ju;NmZzL`nuZ|U8kmctkn9Q z*6r3>_?Zxph88ee%{aez@Gq}JVn}X0HbS-AWl&Z>_X8e)31U^`on-%|g`8nVz2yi8 zJ2S+$bTb0hqb6=i;P!ApNF6GQ&%;jPo8hu3b9y1Rgtx!<@D}I>;fE5fY&5UVZtC z4qE75koY9DC2=s3oib>dP@$ylasz`ZmzqIITO6iuY1G$5)W@BPeZnx%ejx)WfBMKI z8v4&RPvjw7W(VpEv#o-Y>m=;SHr6{|fqxStVVgzvMMGJw8r0L#;;UWV>tanAVRE3p zob3|sWx*c9>69PZBH}O)M-s?~-0pTwm?yULjK_i64F^7Wz-tkP(8&Xkhfv-3m>JfN zqX3z=C3Xp87(p_skNSsG{4KcOggq<$Kd0kszg61lzvS!f?QP~*w-peaP!Fb9W$Mdx z2PA?7tTu=v!j>zuR*+pm(U-Rr&@X%eJR=y^VR(ygg+Wc*|v(vMmD%d`E#w}X($rQpd&X{fBf zlELjpWU~92Gf>-+?ccFzVl*pvkjRz0t?Pug6FSJ80F_s{X~b!`h4`Syb@Hlh*hc%J zOKtA7QZZ-N%Kd$o{Qb&f<&8Dn%od$QSKX61v=}?Sz>~iflS;fm{yuPI+=nck&o7)$_{IY{$&{edTVjCB}Wu%k=_Og63Rfg)D67*qK|$fmDrUOBRRh&XJ^rlTvfqr;->TI>y|8+rY0sP zrVT7lu#kyPcGvf>$D(H3YnqSn$QgLl7s>c*4th$4h*>|Ac&BQwG2YT-8+(^(Gl;%# zxYg#LV||JrjdBDv#?*dzF(zo%pBnLL^Jh02%g+4j1?6>s6*q_tdu`K8H8`}g=3y0dya`b98 zgWw9M0kv7j@JUatZJUDYIu;@s`s{|YVuwzYm~UddbELpyl~isnQ-HdeF|)mq>BABm0i&fS}G1 z7gx!nBv$Fg!snu6nW{Q)sRJL25!KcL{m8|-H2SBvaYdGlPuZ+#%0aD!TOGSrx<-X~u8--8cQh`&?7aEkNQcjO&dg<&e=p{biH!hFC3#WGg z`&2yh`eZY_b59=CE>n8O=djyqkBwpn#y5TJ&-(16pn_uRDTw{T?nDm`y@OHBKfij` zs>*vch!|bCBplXy2PTHA=0+6vZ*RVb5GnC2;<;W2xEBLHoVi`O!q+I+<4`)qIMe>LA|hkP8i#nVa za`*$V6}oJPg&O_d53pWZ7#%iq8Ff9%SvhB?I9Bszs=G2XUj@nEAfI7rey8-CyRYWd z)?FA5|6*qSg!J>Ae~50p*_@StnlUPOUO~2lC0ESr##)7a3-MuCqNO3N?wIqhZJyRz-)LYa?Zf_)Ym?fl^*L`S5vS!0&xLSQ= z=aW=1@J)FK6x@QLzjc|zrFzej#%W1&vzYJc|;%Mxs0CyiYA{@{fD!HS?rP zjT%0E#-pyL4O2af+!4XC?goPkmZ_?~{)Kwqc+>N!5I$b`%d>Ag1Ccu`L7qbei{)O0 zgS5{=h~!S`F4FEGX{QgCB)5$l6(~?PkGAyJ%;aHN^?6?OJ*B}J%T(tc(-im~Xpi6) zGh+C&0W~MT-!LO_yWqfnCp5S`XLALge)b^Iw(?i_;TY?mBX$5w$!mwD~?fKMTBykGYCg^cDmzjB0fk zFQp|=ZjqeDS{8S5XqmrCxQ$&=0|}DO9?C0eI5W$f&N~~u?Q_lazd&X7(4>@q??hXQ zJ61km=D)p&{spyMEYf{u0(v*gTJ_8mx9BSn-uN*B}uVrv#eJH-Q5ge3aG{o zx~tx9ND}(+)^DzR(-5o2mFl_f=7AK4gw%_*A3ZSb?3NiFL*#imy&ySNsNEr@RWMjG zM^)gF&be{Mb5kDmLR1=LJRF%k?tMlI0$vicX(y~}%zZAjcv4%TCA`B^@A>1A zTIQP)LM70Qq53h8>fNXpyl~HJB;4~sTT*`Lg6p8G{mcA#LHG06&lx&GgYi5{sG3phX-zz3w|7{wn&Jc zEPHW^Z8EfL(d@d+@!&>lnSSE)*}JM(Vkdr$!-si&hxwA6iu#4{HK+SibqWe77RT2$dxdfY&9*p( z1QsAODkq@m==^kc4Rk4N-aPWeBeh?7vf}0EyXbQ<$pg!q_Giwm7Fq=v(4&RCL3TMS8NVz(iv*v~R}jMg=AG_@;)Q` zQqk#PiAnLJ#bF0u@AbWG-@5s$Xa5n_#Di2F%D3_VAtz(nOtbkfV&ik+JIMyy7g zRbr^b8H@S0C!aa8d}SIOJ5Wy?@-ajg-QuPZJCBX9KN5m-y5sZEZWaa>+%na67(*bk zo0nScu=lyxcy_w*rA%MeP&nFYZ;BawD3cgQt8oL_sQjaDE{1iVkn%Ro^RMIIcb~N> z7H#H>Z()(vsyjU9WnFWS661aLR$YTDIw^jl&v!U}Unpp%KAgQnf$Li+MdNdGa}cNY~DWs8)K2~4&M$A|bYyQfS=};n0EEbw8@S?Uxr~)o%I+b^0h5xGXt$qROhk{=nk7v^ED{>};-=&RR2Lx~*-Lk`0mhT@P=uK5n&IDN6u0XskAGyQtTe&v%^ zQ}xz)CO;wpv;V_l69yhHfo?kQOxF}`tg$5iI8id|MHJt6%*$x=)CUE7sq*b{2|Y;v zb!7!;oQ&mhHEu|z9GsBTmQbD$kCk z-{X7XaEagLxjI9yOv+G?nMlXm3cVo~^cxo)!s{}QB0Fl>mz%I4zMPa=c8y;qIcuFa z#d(|+h;~KC`8S@3s{(wjS)0cS>OLXj6KiFvG@H_|Xj2SReA?=H;6t+a0*XH628C8? z&H-IUI9#7?KDEF?7BQ}fvV z#GGkwFzKl=eZ6ubFFr1gi{8;M#SB0a~nzsxFdTYb7`NvS+uS#168F07+c#zw}& zFGP>$xCOC){IF$BmjBbVpGnS|J{mjcsLvMU>yUr$3_5PSM}5pQ4G1|}7jJ!wlxEG< zq#)1xVx-9hLF*dXGop8D*Co4CVicRoe7+Im@*{`Uj}Ln%v|ccte3fZkj*TV-qdEKN zjl}sj8EzgKoY|X4omI+=i!6FXOt_As3-}3}1il}K=I(M32J#9xVe44md_Otr@#sdm zhn#iq!3il>td`DitJm!{Czs^!>%TUFwLpV!tNy|}dd*j7+=`?-Bz&JbpZ$~?$~;2N z=TMJ91Ue2mq#Q%Z0^Q4PSzgg){XIr48&6qK9Y-v3l#ORCj&194K)c5GGo#a6E-Yi+ zxaA(pLX-D0j(3c5q_dMn3KItO@T+W9cfd-HX3Wns&&lRd$Gj}VEgohc8_sh+tK+5J z6x!T?cm!XJG#?mu444pbMkq?#?mTb!;M)zarYrJ?2m5u4M;xy3^*TTIxoarhy${|> z+0w;2z33VSP+gCxZcDxqp3UD6dl_Zx8qZlAd(@5cttnfC_*%5|nc7wiPK>xp%EjD~R+dNq}iKEF$R6I?N% zlj+tzSBVx}xwY$Sx)w)hu4jjRzl>T`1*uo_272Y>tE+_SP9;=qLhxHzA~IK|YTNOF z_%PoqJzwtz$*=H`aB7(X`;HXCzS)F^`(>c^&%%rmgIuNrzpaIKK#N{3Ygn!r6c8yxSc- zz{X?osqA9!rQqkczKu31*;#%n3Ku|eo-<(k4~cA;@qA7>&^v0CXB1d8-sADYam%5Z zf{IAAJgLM{)7I%K&727V?^i)gRN_U4JFe#HW7HmnrmLus9P%T1mD!Qug@^!IhrJ7j zBBl8}HbT4QPC2yr(hXo@f2mL#i?7BOzqn8cw=+(>n9YAe;#0#|6j2@$FuMG-f`U5) zh!`0}B=LcOKJ7}<=!m?z)SIR1_aLd464+Qas?>|r(H+ZDzh?%F#Ob(a@J{1~Q}fw} zy+&JY1E;)ac6ee@gh7ssgfHd4j+W7}0LhaRvHWh7V&aqFiT+UewBwU?2~DB4z4=p- zh=>se@JUM@V&(psl%s+p{M}|+_w4k(XjjAS3%lyTTOvrWoO`M~3TAZA`X4*oLQ0ZO zjLegcJ)>UxwN`1lMDCAZ*h&UI2nht+Jd)`v%hzaxn^1j>=fXe9_C&|Ya89OgK|Lab zf&*lZgzt5Ol0n$1$I%sE_y(*~=TmYmd>-xaUx%UT&A`_T+k4?r(YW#v1E%VpRHJgD z1c_Q*Mtn9l6)uA2ZdU3!Q<0>8MEXEVwVmb>i)y0B;J!KR6+5TO7POf{0PmH&uFxA_ zmM`7dZ{8cfWFe<@ z&!HXRxzHLkeu?|esHSys_on@5SS5y-@XrnlJB^3)I?g;&7`!<=0@WbizP@qWV{6NI zOtpo4xB@eS66H2`-)VceM=0x;+Eb0j$^C8=H%jja9};bR{_ha>81T8MQ}q^z|5m@1 zcY5J<@BY<=s-Bdt?#$2EwH5w5e~mW^BXLMPyh+WJf#OofIb!XR!i|U}yOIM|vGfj{ z=vsCz@!~5g%CvcJnAxkjDYdzLMfg?iSN8s6AR;e_FBQ8dZ7h-3E z$zx`M+HMb5FN%hQr}IGuGk~y_eA{pJ@HKOgR^@XEkyT0B>@GL}cXUV5P9uc>#62T{QC#rJB3 zD7DmI?r&qn&AGx*@^J@4|A_>>oo`1Dft}mqqq#div&QlEf_vbUznRV^Iuctb0(B~; zbv26>5<2a(QSIRUGLH)^(p4S$oR?1>YD#{wEiCnF{zMl#Y*K`~s;65c>wb|G<^&&q zCLK!-+4-KQ@is$jzS39h1z^-z?J3Ff-jS1`@>QwXB3UB|3ci79!6}%ogDhd&xJld@ zkBzn#lM1C)Pis!!&JR5s??&-(dV{pG=`JDCu){evg&`=bt2QAQ9nSllotC{MzjXhm zzV_-WkpXnF)MiagyDB_9(Rl@1uXMPjpG5 z$qOZ}X&DhG&ijID8nlE)`gd;@jcaX#q%iD^AUVZ5S(BqGhBP_z*-QRbH6FFn)ngbZ!^3J@1k-P3}i0}-Y|P9GjCo-|{Xda-TdK#%!F zi*gyZ1603Xxo5QZq+Cgscr%04fK(UjOtskf$bnHQ(vl-g@%+e>Gjqf;m5RoHvydvW zw3)cnI|v0XJ?68EpT(1p_7AwWOxE4i{%0iog#tRTN~dN^7+;LU0V{P3OddRSC?~9H zn(sw#{8ajCOs7FU|JX3>$%5kti%IEh>mBa-9=B*&WtyRxXw8y89+G`Nh1zXz%Mxk1j-!6rqS-Pph*j#@h{#xs3XpLgDi7EgY?s z$f1eZ+1bJR`laG3%9Z+Eva0a5zEFm(!j)qHRq#`O=G%H2QsI*m(~?dG!!y&zv3s^p z@>Pzhr*A#(e`ae5jq&`SK^#Y*5Kov^S>bS4Uu+1|%<4j*HYO5=U*x5e-Uua=;Qk*UOm zrRlr=QKqYh8p#sKVks!CDH(CJ&HB>eon-_Ix`Gz;1!EwhzD%A?#xVC8Zer)s-IJiQPj5HGO14qJrI6phIq}x zaKotz#F(W!X5K>qAPr|LzstH;{Yvu63Eu^y*Va@DoZaQ;HoY`kO)F@C&&r~n^{5LQ ztn4U5);5wLlU>>F;OAE_1yj!*v3{wo@=VQkj?;1O+@q3+Au=U~Ssn8MmB}@G`6Nc- z6#Tb3PSm|R=O{Kaw^JcaJ>mYB^uG}9lyHHZawV1a#*E)5@#Kenv3sj0>&`X>JV&%+ zBJ;cNeducDy%am4V03!$U|80<9Y)X8?aLFkY3=!3hS`~>mR-k_a~IBKH&r1c=*8!h zUAyld`C+6m9OoOjBQy;o9CjxBX;;5zwAcUDCSs*#G~WPs%Z#hsKl#-?SyQj(*Z8~W zRV3j-tQeX)%S%cZBn+rr1=o3`>K5{Pf@_nMrhWC|nemw3J5TT}`4=cDq3| zyQWuoYP!u~ghL@kJ0WgTx5*pL&4uTVrpf80d2cDF5A*XyV3W8f7wPFNX$)t5?5Nzi z4EqCA71(wnb|`0X$HL~|7}j1#<{;5~KX+%?CpK%Za4WkTfxaT_YNu10lggYbyFsfF9lbOSga#WEWPJ_6;w@qw3z9MdOf5F%K}(CxOTF@rIpotfj21s z+%;~InTq0upxNMXb++dl#&&3BqqHZ& z=LkcAZsc~w6!ZHm(t;%K@6VkzH>vG>L*X3N;@m~WqDfB)mpi?iGQX%t>kc)!8jbmS zBx_AMbCH`GS6`kJz!zFFrSqbfbh9Y5Y2t6Avi56H?cwBAIt$ z6}Sgbx!2@HUtcM;!a2FgI*)h2g++?69iO^`m=oSE%sX)GZ(3eVkR+H;-@dO0zy>2H zONjpTzF&jZh8)G;I<#jOiL(sFC8HJUA+u`2b=2~fb|h6@Zu}EqN9K5TlrZpEXk>p> zJ+buVi+kUb1QEZ$!D~^N1a}3MPO6VAEG!Uvu5ied%uPNAK5ssh9J1i#M7f(>%o<7R z;F1FL8t7LJvXPod9#zDsz(RNESXk(6Vb;*ox~z_2#eQlKrIS9cP1{Hz!j*TPO>kfM zi)?#%D|9-`y9vb^5WYMy(uM;GXa{5)ShH`d&?*7Ukj?mQvXlQxb+OP{E-NO!@J&1x zFU^QbCTbF{g$rymiwkoUnHZmzqg-1mu15T8d zCQ27^{*_3=>nWW|HN?^Nhr3e1khCwE`l54acqTI$G7ODowa4meH0S0mx%lz#ts`e` zsC%!Ob1lAY+)mG9BmN2)<2^6@)2@ZtA*%r3Zf)*P4U0`5AIxNC>hdo%btQPJx-Xp> z@$vI%kHqa=P-6I18|_%bt;KEi`P1FU6ALXn{vA3Sbr&QZ!cbpQvNRz+sA~M=)izEn zYD&&xJkDo5UDUMAjYWF6!0}cCvG%sbtBQ`9**x>ez55vjFgyy8^_N3)ikj}6xZ|zS z=A+3WlTK;Bu4_(Gic5BU_QcxAgs^{yjdRm&nr{eFJ5}&FKeU45SdN@?*;KQ7wPtwm zW2`?XR3tQ#h$U0;_eRuq165*l`ANo~N8OKWE4Xfo97zwWC`X|ze5?MfeLu`%!BvSm zO${Af{1DCf&(lxEJ=_)=7mm1Op0j+VF|hAzS;gwh>DD`63EaaX|0~E=40@Awt#>q< zJ0#?zgD(ZoWdl&z-1DJ{bEfAa+S&43F-M}FsUx?BQJC2xcwJ5=G=vJOOqZ+F)DF9% z%Wv1z-*8nhdtuCDL~=?)ISQTI&=sFS&y5me_sOhDFm?a9uN+)7@cik*sFWMUFYsk} zFqQx!Sd)wXzPDg>v)HvIEzP-ywr|Pm0`E1g{rxI6!$a>EEJxzsp=$`}y#a?|CQ;hF zGUq}Sv!k!h)tM{9&X`N&s-D}VRq(MQDK)&pdCk}Gbf=`|e|;%B3s~(}jkt@{yWFsa ze9vruEtwef3#VJI9Xow4JPzM$?k_m!3hXkk|Dgnp3H<^6`{IYp)8C(FY*IAV9xio&=jWQMb`Rp%i|A(GX8&12`p%Ng= zc0T9B6-PIKQV@YYRVA)JHhqi#-Mj>;g={#fj1kHYw$@NIv8!9_=B3~yv2Q}y6PS=Z zgyx2?9#0NA)v;$Wa`S#>3uc1V!Lpb)BUT~>amSO>#a%+ZCvU~kHy zHxIt2zlla;gwC=eUIA?QnW+O&W>;-a7U`sv!^=&F-?5{IYrzySP1eOyA@IE*D7^5| z-T;>8@u%hVio^9XiTlSF)&p9mL@N|`jKQ%7_*i+50|XgQzuJHlF`aq!kOPrKyNE0! z0+Y>o>kew;5sl&4d;$0`_x80IdNUxLEpNAkM9961U4#`S%Ci1CNJjW9RC_ zIbVmC(P2Lyms;bRFL0+eAwXsWs_h=rv^Z-rIX7@@azMOv_ z8I@lSZo$i3u{RY@7q0`yi&{nmU$9G-v1%VzKuHKS_;tkkH;4_QHG zLTg@|e<_%$lkE|$tq8l9Fo>FRgf4#vR(ypmIS0V6=h9h2MMH+9e7EZ>@)>e=k?GFSq4{!G>YW z&SOpRVVnp(L|fAxxs_Svwe-do^@ri1i9x9R@if^cFeNc^edBrEdbIeXandKXkj(N;)y@B~V&F zIpjTW=5HBAO{J7yf{aQLa_FnTDBXlnn&bbM(g%U4Om)4h^@(vQ2Fc8;eXNP8KxE{y9Ng z;Gw$!cqy6Ep%}0m*2a#)bm>M7;v(G#l(y3O-wPnd)^>0>&gUy)DH{+9xJ56InjQ&n z_B$$}Vi-Cl91)h1e(`{*1tK*QfILQ3t}K^Z3o?u6PKP8L1?DWDGJy1l&&h8%glM zz7$OP`cd4jzxT{f`nS?R{Cs*Lcr|dt9bLSK$@(Y2u_wHJY*hZKx}}RwQA?)98EQiH zz<^T|spf)fsQiCQD8S7HP!Agh?}V>B0c_mpUH#X4Cpg`(q8j+F4L|IB!XEH{v${i+J^}2_D)i>Vyqob=f(P|1aq>SnV_typvE1xhMeITRzp< zovu?}@&Q-pJk1ZC9H{1@PvWr%o8NqGzE#pP%L%j>sNA|P< ztuvL7;dVGpiL#;cJNP2r(nknJD5L-TrqI+pKd9R(rf+!fSDa*T5L+oLt^zSO1%1LI+uY}soG#ON4SnGjVC9WyH_!m#*RAyDnNtb6oSB2lu5iW^0Vf;uZA^kV8uQJ4Bi$#bPRr6oBLeitJWH@`Z$$OSL^|u<2P<=a?bZBH!-F4f z=nuC5;N1Vp-ge!}-qVJEtacDp#%zoIh%c-kac}C1va07LTs2rnW_WJ671VU}P21iV z6IhlTEe9&T+$beU>89Sjp5#2bK~lw}cp759)>6xhOOZ-+-ZShy(NkMPFaqZ5h~X=fgtPA5Y0dK(S3mLVu@Y5 zGu_f(_2$#b8v<9aNf_7Vrq$BB+(Q|7dtiR3;6RlUovrzSkLIsGgUjnpa_If>-~*-z ztL$NSt`GZIR|Z%(YkJ-WS2EFe1Ztae4O0p$53A6jegrPKJ0_31mGwQ;I^YXrh4ocy z%4F0S&;t|o`Zg0=YoWGgsu%hm+TO@t%+_{^&lnna980)wVbM8C$)J*i@g}Y!cwlEn} zG@WkA&9Nw>Do8rb7ZLC>hPEdcSW~QA?wfi~eQ*_~iHyyD@@If&LkX8ykMoD+-%T() zr^fS0G^O*S>sB#wFy=Ka+Mm@nUiG{aw+%r?JQ$ugojvn+OwJb~z2_SyIVX{ye^9g* z!!RR0~V^A1~-1HyN!A4GU2n9MO$Rgb?R&sdRu@|CsnTf^U0Q|kQUy^VH?bLBHDw&8V*%jP)$r+@(V^Cy zYU8QFc8*ZwD;KfFK=usomF6Z^$2H%8q#CCHO87Un~`AKJMYxWMrRvMMq??Ud7GV5 z9s(etB?;w}J`0uSmY`ZS+0&Y^LS8MyvAx`W`&66V-alT1*xc}R%<^sUu>Lc3?H%Z-Iy}1n`Z#w2>IC3j>*>6)>BTO{-9c-u1(q2+J0q6;~+cw zgyDXUeq|ixO=Ci4@NdLL{*k0PL2O*6nTWG8di%=hV?JdvmPDL2aYG3@Mc|wzOFni_ z(MewA%=RO!<8V+yl|2rCs570j1Z` z&aIYI%%L9?qU@%lC$y1Lv{+V(!1Ss6vut~JvDU&ZPWb26fc_U{PTEfUCtO)0496e0 zJq9MH?Z|&yz@rUvWa1P2Rb3Qci^cEIP9L!;yToeHcQH-831RTjFTX*(YuzU6tmS46 z4%;%it;?cF&N+S-bRC%yQ|f3C^I0=J`%Nv~AON}B3EY~(<)nbO0cvM7CN=-_Cb#vl z+X*`TI2j~(ET)5-4@#cCNniANE>kdB(LVmZ5`uBDx?|JB@<>tt6=^HUe_#B$=KQ+% z|HK@0NR#XO%Ty~MGW~wu<@uAfnm(7j*Jr%$dU#>9`$WEZOaHT~%AkKT1{0QyO?3S@ z)*0Mbfa0_YmfRfIlsi;9`51Sw9#tpt%A0t98N%AkV4Dk2yIuTwb55SvUfXby9r>gM z)}NC%=A~Oz4|txO|GK-<;)`51x?&kozjP}@UA)SPY^;e3dH{Kt16ykA;%~C0E|&xE zT$7vAu%_b$jkB-~GBqU_mcL1~!iD7-%h5cSuh#Fta(l*ye@u7U%59z zCsL~GLUZU$y#wfK^#9m<^SGG1_kUaoArwg|8j1>0mXwOICE1E-QHrE!mx^c^`%(!> zXrpLRlvb@ngi_hsS0$xgY18(*UNg;@n)90b&HMZQ{60(n+z)s2I_F&HI?ro8*EuJ$ zzJr!NA+!jwb;|e#d|Spi(~DvRaglvH)T!aadEVfoUtXkMRQ!5;0j=taTg5-)+{86M zC$6x)Oyf1zLe=U9tv4kRBB3;=k;u*>+k69*>_-F64i>sa1|Gb-%bj)%|7?; zHnuNHA%OIN<7s)ZWk=HIz~j`ZQFYxlKS!oas(8MOny>&BtV((}Cu`lev9nYR zX}p7BEIpk4T>|1224O8U6(;%>HRE{ zbnh-Z@BZvT(5oKm3}L;V`YI;I?T=+(Ztz@!cz{Y!Bjr2?rzyd`{l&S_Rg=!Yo=W4( zX?Cq8I-Iu`%D#)G2^u_pUD%dE-bafm3GONc6XmF=8g+vsG}$9@vuib*#diuFNaCfX z=`n>hmi_cn8DcC41wFx{?mylakgOhzkELCoOSWYfaB8SYY_n}Mm^ZjM#1$kLqa4Rt z4YSLQG<_f8O1>~f_+esVq8VSY@pPjc!L@s7c}LZ)gsNoMXXmnguS|N{_}jM-Uj&o2 zY%`-O-LQG?je25M`bl|#$0_%SV>lqjVw%VFA)Q5eQ{UL`hXXb-^Ix5$|M3vX)F`LP z%*%w1o*0g&W3uEQ8-3($*QCv-qd1cFCYECKr_Qym;E2 zJ(}z8R9g3ECLT~bW=cRS?QhS=loWH85vpm50bXc)bJW5>$)-c-NHi}k!oV1u z0YmN?+hI>3O?5XR^PJ(h^xa|wDYUMN#~*wau}It?@pdE}(WWf3|5M`mD5G+pg*zgW zX$Xp)_U0%6Hr;mF?{zRFaqR~wX8a6tK@z~#L*K8WRU6)Jr7=z>C;S9_D zg@%R!Gz1YMZjx(fc={+>tdPi~>0EA0i!?5}HsCg%W@!)`F5Gka>Mvu72&Xu33 zx&Su0PknzerEluwKuH>7*e6o|#y-XKBMtYP$0$w8Y$=udPAuXZoH5)%c2baZH()t^ z1yw=Sojr2l0Id-=Y)c@BqSz&cLFdGKfmG!K5WF3Y2{|-2aVl)mf7zVfw))&V#h~KV z^p&s-C11pN#q=%4XTMK}{phon-L3yQf~!+zdt=h?ULj<-4`cHrKE$3Vh5z#>8{Yzd zV2bQPx=In{;crZg%FNh2Hb;g=^_dASyq;eY+x*u*q{SoP5`4(^EiG1FdOVgUiTtYi z(GgrmIin}vzD~mh45PULyn?wd`v&ul(VQ+vzrP?^ZCR;EpI5{~=jLpaI(y35N{YnD zkknp)Pq3u;YavZ>>MMY$tZLu-ioSLZ97+>1Ejvn#l)`A+g_yKCfzQ)-(w~}eRaGJU zdN6U0z=QM;hiF9I8*|^u&i6-Cb8`^fjQHN|GF{;X&*4^FlvZf%Di^(Fa1qIz>>}QZ zJ@?8vZv-k0{*CBJ;(4*uTd~G(y*$n31G3?A7k{o#gX}O}%-#JF)Lz!>=cnlukK>rD zm(WsLSWDL*8>U?p^89ka@x#N7ii4k#iU2jAn^H^ZaEP9`Atg?FAZ>oz8q3Pxb_lHW zZm=ZkjY$raPf6MAJWF)D?&;Osi=gfEIg_`Of^RMEeV;@AJtnVZhfw6gBeZ=H?u+6T ziPkS42h)6EA|aIc(*K*BsKMmS7Fy^7tQ|!P1w{~QTSk?8;wX~xt;K;0#_@B`ql;L> z^ox9+U^OCs565@$SVu#m_1Dd6G;hqA7}%U`y^>@3UAhkkMSj;Xo^JBxjiJdM05IYv zAT~TOd=M)QycdstUl;n6jp~mB$N1M0UV!{aDtYm)_&ucD$&U4FqG*{k0=F(fMHOsG z?T!1Z2iI^ENsI8JFseEG5G_YR5y*jQ+#dU}|=eU`r17H_vuTk?&NEqeYf*C*v4c(6XWkHSsT+A;RJ36_Ni-jmcQk5I#3{o{#Gw#?}4?EF++ZD{3C zOjG&X{G0vr?Tn0aM7CYhrs15!k@II)zk;7!4*1eEVTOA)MBi5>wl!2WoCuUqTR5n@ zu-TbR**2tgCmXhe8Ehv0R{s^%4)q*e zod=Z#%{dd-+GAzzlw~H`vz7aNiYxfd9=@r^>k`|NToMH*?mtQYj@-h&!@;Se^h6h5 zF%{iZnEQZMIcDx$P3P`!@C=f}NGG)otG^ThtfS>l&~}v=IL|mLs~(0B0GF@$yJS!L zt>gZx7kUoEnRplalM&m&pmzQ(5|8n5dwh7t=1CXMf9BAT`TeGhIx%C=Nguv_m7r-Z z+A{y;w82cAUb<=}x%FRW_;7-T&BqM-EAm#L$CLjS^B{$z1;Jp=SWVjg`M=p6(H{#g z@7@Sv$>U*DV#S(OpeAceM$xnR|8Bq0<2f^oty?K|vVSFBLkS=nf&b$psDI-B6FbLszJHHR_}L~2C&{aXt%qWu0+EmO7n zi1Pcl)YgddW721=Oc~S1Bg$_?`TciM0qd^w9&3xE@>jCg@KjQQ7G z*O3tTkIdTek4Hk_KTz_+nFqif34#A1C4%4?gReEB{6>`DFaWvCZE0+K{k@^m-s5O4 z?MNGwEfD2}@{Wj*SlU?xrVkKet+}(JzAEv1W>E1!YHM|U@%LA`#q(~pFdjW%fF|@v zyaDOZ`SYjzNjkI+o{;FjiGc+u2>As`a z95KuB4o=PtskzL5XYrSlV>-qddh6=!0P4RE)XO zai6X{iZd`%iNPa;906(C^JYFT{)G4S6BVX=NNZR+wn_Qu>O9eN`F${V*hEOJ(0#_$ zQKSAKekVJUJpEmmw;6|O2e{~0HNEIX*`Fi~`8ECL!IRl#k5-nCD|_$}Z^|S!*qLzo zC}Bh2ImBT!BSotK0kzKN^qot_-!P`=KY?xFG}^8>0&UEQjL;yep8taT>0HPVU;I2N z=3gL=zAC4o4QC#AHBK8+B`nwFDb9`bO=g@A8D}>c`jq;;Yc&jML{Uf-UrV@0zpRU~ zDV?sN|A5Q$*9ttJd7r*FIINAT4&?5Cuthlh399BmpWo<(S;Hl1Xt~Ewau~&tadw=b zwnQ}7d(bNuhArV`*b)$5Ju3E3ASw%GCuyf}xqc0hxuNd7_P<6T6*|wM4Ts6aqd0Ad zR=}87YX$x;%B8A|r;TtvrLP0Q3)<*UQo|n9K=mrV z7;Hq>r~=Am%g9mbUD5wh;SMs_hAVR$rgD4mga{s?Z&>4s+HZn5VAqW&Y|igZ?qO|S z!6qrM@TlKg@WXyb%}ogC*gyCHIrHpE${>?-ZPrVon&L2mq|aWy+R3}Wzbaqsk$wBO zo*OyG>0Dv@hh-?Re%Ba>KiOJyhpJws%5O#VP4r7}PvY@l2-!}!A> zQvKrrxs{{!d(gN=v;c2%J@omGeqeC8Y{Jb3s!D<8!3>uG;E4sjd+x2!CgQv}o}ly2 z;Py~EHOiEBYLDKK#XsPMI@R;txS}@VER8rz{|e|woTcFcJ}7hlU7RI_c`f-pdcO7t z|1)k47Fo28Erv%Ik!axuEt5{n+PMJdca;9|zW_>ic3mDrP4G}J!xjsmW+2By^@lYc z2W}=m{dmxDV&HCPe;08dRa~Ww(4&N4;uh8P?yR(9wpO!_jmy9-?0E`-?wgOBd+SKs#*2 zw7g+(_`+bDZZqwe(QwwGcp}OTnMwakv3LYr2P`RnR4!&3j78^RkjXQU)N00Cb`H1c zfF;I5kjVKCCFvEcJFiJR!wH@tB*BZ^rIYJPCC!{23vO)_>}InKC4H6+Z~od}xw^!y^)9WcW`P=-2jkOS&-@1NA{@P(&uva z_Pu`cDK1BNisw;k)^(G(1}?IQ2O#LZbl1e>Uu7UlQYoX~wxSr6CB@|~9*z`;epv^HQ!BFu`dZr?e^%B> zE<${Vbv^9dDKjg>z@7O-5)^qADrq^is!^f?nzho4xlDryVLE27Y_M zd~Jw@84d)96<9&~Hxl#85D$>nuNBY}F5jlNy0qV*b8vI-0MB0ZLXc`e5{|pw$zh!2 z5OABo2b$}1?0q`~A2_jl z5R45xkjG6(&p8G+ixoB7sUePHLAD2;h2~@-cyN9Xd>eABI9g;IKqU9e;_{n?gSH2o z8+)h*a?kOfyfAKcaE{)mqh#?P%r=lac7$9&D+?d@e-U>>==(xW$={%?WL4@3ugT|( zy%S;?4}>$Qa(I9V?uz+!cqNWYpnnj47qQ#Xi1>Xns2{1>h#vrO5!lre4@8skQo!7@ zyTSDiIlUUOdCGdvW-P==()yn~=obJm%m!04*TFC;7iktF5*!eZG29BksD{WpLF_%R z|D26bXp{+7r~@B@Cj6qGu>P&%Sch2uv{9yvDYnA~^t)RaW&@gk8N>hn9uYJ@7SRwJj1U6r8t57$iC`29&5yT}@BgRo4fkQMVMC^i~>N%rC4WiW@vs@q3>9=JJHTeHn zR1*X;a0cQ1u!126=P|IgAJ|H-BNm0iP`Fumt-x56|GN`@*eqzW7um9w0BN_;3G)zs zCWR*?A7DNgc1IqjmKvk@BU?LZ`B^V-Uff|7GSyY&t@l?lceIHY6H|0&1iRC57hvV zV9hme=4awUSOf%Jh*YhHK${4R$se-!2=kaA_e4{WoXDPlRfvX|6sTg`$Pdhm8E>AT zN(WH_T0ST;LuWcPF*hMJX&>!UP$m^41VKd==c20!>EVYl)0IniGLMNVrvng_T`U#O zMG6nZPAVYG3v7z_F|$eq7$Kf(eiz9IGIm+Yp6d3aIE)}xaKd~y>7N*K?;4dAWULfO zsm}BFT^@}3pIZ-0DhMs2mGgE9s?9-1DR9Y8GzkB_;vm|6kAvEn0)`&Y8eTYAKFyuL zvg>!skYN@!m;%%+rdwB^qTRg60575?OzgQ}Anool#xXfKxv*qM#CZw4WCshgMyq6Y zTAOsrK|VR&UcNE$eQ#Zs-SI*FI*bb~!W~UD(Qc;WD=hDdxf3UfNln;L5HHRLSe~GQ^NrOHN`8+6|dGk<)Pb?371% zt{@5e9Xs=U0HWW5T|{w%9owj{2Mt3L(b-w`{7S@1Q`z7`Ab3c>;Ppmjx}c@fs8F=O z@LrQB9`K`u@-iC=#*o|ekbW;Egs8hA`@*7~Jfe-0nLE2QiD?QnZ0K{qlJY#P;6e<^ z4*X$PMSG;AbQse0LUSFW9R-~P=$CZQ$32%(>S!O&KN4_K^(Ao?&ay#K0;IY3%hKNkpsl9!D3aos zvr9WZN8^+?DkzpLT9e{vKfSV{&QUHoX*7=ZfTiJ_4x&{ZL%+z1VGISJUEw6<5wG8W z9i-L&KG6OuBw-p3?Or>8_LSRlv`dB=m`B_`d@QvWZi3Z;o!x|F1RH(gBP6Xte-f z@J9?crmz0NaB~_S$H`5?y@i}$H$}ES7r-1Z278KGU=DDYIQ+HI=|5Mns57Tf-Yg#8 z4(o|bgnma)N>fAh+aS@BsG9E7-(`KmKK?{x>DyQBM;&|OYox<)Jc^CrOkU>txB}4^ zWvs6-){QCee=tYaoJsR7IrsN={rdh&cwpKK2o-G6o#4Yecz)5>eKodj6*?v$>hA=X zbMv^G0>tlbFr?75)*8f5fRl)gusBydEfBb(aD^leJ&SAABS51JL4)#a=SE~xRp3)V z0Z|ukKWpm(2-m(>2q8+|$kH&R!Mc8&;!$|3UhyD3AsP8ITZbAW}fy}i-;H42pPyQLB}cp3K?V8oG}{6^-ES*9*n zW|T0!eF*rJb+}W7tP-YE zw17{`ZVNMu47b;M_{mL9ZXS|_hd|$Z8Sc!++vGa}jQH&Pq?kDc%`$<3Wu$QPN|)YRKDcg)fkV(Fp+3jSUN zi?(#?HSbewD$MOWYJXzoCmV0P+C^?JRe;uudvb^qwxks>FB6YbI0w`B0#{;15&(~GJx^n1yF3n08h136Ou(;^6{!!_hy)DZ zD^xXwJecnWj>9--e7pQ0+4>rx$*5R92m*6(2bub0+)#L*2Fg$COCmiL*5VKA$qkBQ z?bt73`vP;2M2*KJ0cqMUg@`@BRS<+9^G-lBg0Kg$o0pHbz2;1|0zOnJrJ#bo2ViVH z46KcjFyjJ6DgE=f5VOlh6`*LqsIl~+Tg(o3tvKveTh%q8g+>$T(bU7+YlW8z!4SC# zcGF%;XJ8`P0~T(VTh=|a3mOfxd0%BEi<}J8dV7D z0$Puiy8iZl8B~ZIU{tQj7LhunBDsGFcz!DoUV=E}fz*ygJVvHPNgF_FHk{gv@LH&X zodd(pMx1~o-G?7Gj;lxSp)11%yYkDp6%6zbu~jXQ(D*WEgxC?zj=<~CiwC56ln!|hjiNsM!Ld-vj7&sp;dNk8*PW2WHK;6{ z-(_G>-^s2pLL1ZqSR#X**WVGY8K%OZaQ>dl95@m z8Ja~jL-~$80r)Uoc{QShNeVonbeCP$)b}1~44}D=E|^EyampLdBZT7lj9Mu}J7$m2 z7(C+-M;jK?-gTz+NU}VBwZ+&$`XbBABWaBqq`e z+N|&@i$?(bKM25)!iSg9Y5^F4`QHxAmZbdt{_d}p_HwBXT;=6sktzk#Mpz1~tj&&j zUzYR&Kz;5){Sjo-e{$I(AXUeKXn7e_2JfsebfGE%Tw0M6qhir}xoqrNptA3*8I{lc zd+h;nN>m^u;8;#_+4Zk zjsS(cBD>1V5UitUO`J5He=wN356=_OWt1%U-XSD~TtYziXiMe`*hmS00UM+GLr8Mo zfZP7&a~%Eo+u@24C%4Qx!Z-+g`^r{;ch%=|2y>15N9i!%yyyQISWsG+Ab^Y_mI8E^ zwl^X*Kh^*zvpit}wzrLyj95ic^LJL={nb^ijct8b)~rcP(A&PGdBWv*oSa_6JlKf6 z6=*ZWE;5Amq&OHiX=9cJ;sdV5VCA};g@(MFOJ9a*V6(R>C~RVu1gcFN1GZ`c*9X+K z*S(MiPP;qA^wBxSqPT$Czy$iu6YoY`QcgYyP`NSbofR|SF&lUdY~Y5pqv}jf4|Qx+ z*eeRCP}QYB<@=jUIEcqSz^{*?s^&akZ6E9+JU5m;8R7wlBg`!u@li1`unF`5$Bx;9nVH zON7cGcW_;A1;4X61H%mNK@azm_z+-n7lC1` z%xN#u|7IXY6~3cI1xpnuIv06CF@$5;f^GS){M3ze{znM*Tv|5Z5zIoLv)nu3Tm;Dp zL>0%s$6=Ng^~#XORj!Uhlv9!Tfdl*+kB|U#CeQWw!b5ROsl+iZDI0qTtXD{{3}U^w zVZC^&j_gLj1at?>Q!6?^kB(C!!boz$YH;q4!MRa_HB-SZU#qvUL(nq^CNU?B4<|## z>X-tHI;RaF@f(7*aVmr+v+tO)GV@FGJ*W2ao+)eQAT2OO^WX=EgiTYu&_qZBMl9uAMZgU zf@DZDyh|j?oVqSu9IA^LIKvGi@MM@+Ax2=86~&LssUj!^{zZCxl+{v1zZT#O9$)4o zj3dlEpd)r5;zsHe@ZBg9t6lbg&=G%&2$niR9dv}c<6VS~xClDpqE!sewWF+c#9tzU zrQ&@9lJ=%OPM%qPlCW9{?mbs<){3R#eFg}9)^Ceayda-EFOHy&9siT!#rJrLXThaC z8@dANQV}Z%Eq$4Y<--OyMis~4 zIO=02!^)`YAmaBjNZJ25v}z4=5(evlBmzDAaxyOt^)G+z>}(WI6Ja3mw-bp;8h!}C zvOa|M0l&XB#jF+YZm=;o%fBJ`dH~kzfKE7az1Y|@TZ_uq3Y(7TN6Z|s_Mt}f2#}BA?bUYz7;4Ejf551jA-U`ZW*|tnAw3>D%DuSA{UuGkM za2%fWm-lX`?gC@F3y}-Qv}GIwQc1hBoAD+=QUtBgp&E^d9^q!WeLb5p)(M=MlwpNz zFLe+6nzQSz4Ke!+;$#-5s4%rkTm}>!8f~Y`L=kB=a9;6SgC~OXoZN4qtntnDxFt+e z9AqqBwh;EN)GUJ^BM(`VSX_xf@iPtqMOkB;5C@Vlk+FYQD2WtWcSzh_n`fcNG{r&U zA%iA}@H1Fsv0#!c&g@fyuPmVG&ZH6>W{T`NPYtwMb$4|4zcL&=9{FmGe$$W1CCpVs z)Vx@~uN?Xq7DWZHIM72r3mls^IqMoT70~n_(|GuYjL5J}nx& znGk6SU05Z8j1KE2*%9?~kZxbBA{;LAaU8_QVcGiUc|;Y{KOgKTs338_Ue=%N!n zNTy>;zEeDGT9NNqDM;`v6+f7 zeIGb;dLAMd(Qo=@r&+_J{Dn3rwz91ZoUTQ{(|PjjB8Hq~S09pYDxByNAUgDv;QS#T9i z-5ZzK{5^D6d)7BL+cw`_dOo>n6+=r@DErnChRe_rK8oZGB*=AE?m>vib_il+FXafM z8B1OQ+D?H7F)K<})Y~!2Q18c#1+H_wY(I={$~sw0xpU($dc{c&P+W26q3*r5`bUfJM-IOd}d7ons}X$#Z9M41|0dPyvI3;woO z9OsFuqc|b)!uiq;QIJf+YFPpfI^g&Tw(NRqQuI=sx_^#Nf0fmDw6BE=U%I3q3OC>n zpMqFCstU71t1!6C+VEJxQvvkKIuo~pQt>`%wGaVPG0DGJa6`6* zXI`@oqTkU_wl%i$7lL8fGP2xO{Oev>Dst><9scAqh+(@KMxSv=cQ5EzOVBvvcPMAyxrIoTajO z0m|YIqfFDJS?*9=6S>goNNR{gli*E6&Db^I22^l1~0hfpcvb!hiuoGomQ3@{}g zdqYSFiAd^8{VL}11?OoyG9NHwulO&-E*KSq@Pepny7ZBLMD;51C@HRgj3JaBU$I8N z)wgwS#1fClo`H>eB_%tSUNS-R6$B^>=zkY0-N~HjAPgSS@f+%g(6lM}1JJ+eQ#Vcp z7`WKj>C0(seW+?e>;#HHT;+BoGJ_#jR5Q9Y9~s?`kUW%UBV7Ki3r4Wa5ay2n~5@G&HiNDiRV$`Fr0Qggevj-YLpC`9PW(OepMx{k8TDp?ZG zJT7G)t)UQo)!aqs_TqIr<_-Em&lSf?!$a4wdmW;L+-WDy1%19D({lQ6z7C=4J+_-# z_`(&HhSt{;uew_9w3iYRzHCoxJ8ETJKKc!sc!K41uzZ_O_2W3=P+knXvsD}lP6(q+ zcmyF&URL}Jnw=V)G1Y%O0x{#~f&dAGwZ^O*^<<=Z7Ao`Ai#<^>4ZTjJYq0ntHV(LT z7zL1p_~L*tr2jFFV~Ky?ZRkx3%AK6ZP=%^L(4O%KkO|cNl>ZfMEtruJAOB46v9NEz z<8P>321U00<3XB!j1go$*5wcHHYnvJ-$i6zLE>t##N(}KYaBTnMH+yD=a%`1pD860 z@#-ST!XyHm%Tl^;7>{_FfgpRe~LTHN%woNh=ce29IK=`4Ob^;SJ>sRXQKD z(bgHnvtI*@H|i8AwFYjdD{|+Rw1FMGzeJOio|fyiv5yh2L{S|;bfILBj?_notH+d1z@0>1vl{1lq1d$=l>Bee#EEzj|4~m^=$3hEnWqA z&}Z?_b{sRnjXgO+AzD%|43tB-X-S~+T7(ckfHu*GddPHT-Eu^lml}n2fNO+b52+J+ z4cV_db}jCQr8?+(6b?>G$yTf-;*30{ye!fPeeFGqZEgw~IOPY_Qn&{*(fgWM(f?G* zwB5*w(2CM0u4InSsRi^WWzZL#--mARfAwLGum^WXaP|o(Wv2gA*h)_A?~n7_-rkg! z`LsE8q4Iuo;)I(YD$%4z<%;1s?Ss#q^&(E*l6AnDux`vWL$;N=3-C1+w8kr^SA`?h z0ojYUA>4rq?1af|#Cvp@F?WI8bpDX~;vq?s!G*(YFnKj>#y6v0NnT4@zg}R*%FfL8 zH0!nF(V-DMQv;3yPiP7<4{~Gr zle*>l&T_XMHEF^;Wsb|B=Xm!9qYg4PfFviOUSxo7_^}&tcjm`2&z3sNkyInARO5fW zHT^%4!5v}i|03Uy8i{ZJzv26VX|uBFjK=o+N55!VlbYnvKr%ol*SKZjO1G+m>x6Mt zx*HgA*{Runi1g$eur}9D$TuNwOM!G>H`u>#<@d%T4HX#wFz_6r%(IgbO1}XNcZ&kL z;fSxzKH_VSgfRc1$gn~K@@vUZFLx=y7e8tF0z~)REtBQUZe$Al;$UZSl<61DANPjC zIaNX#*|@sK5z58B=u#Zg!DQgze)GttA@vmL|CHVDif~n|47#;1Gf0>lcHC~2I@Jgx zF#%P1N>B*rdc7R6>{OtLK;)nl{A>PDNMOH_^dSPQ7$b|mjPey2pvy}Njw9j}%(M`& zN6{;*<7XoJHGrmWH{0ycO-CrE^W}dckMqth#UOd*ZcpXZbj00<)R;UQZn3s9x2i$- zJ+jydGy(Tn$hu$ZQ(&kVn~F0QAv!e)-Z3Y585sn*v&8S z`1Bg#qkiQE|NBQ?BN)-QR#tInV@HwzrS?$s#ul71Rnm2!Z(jZpai*z}n%FJQEnRHh zbgMKqsrQ#(sgrGAONr0BUb;*U`G+N(CQE12bVL*mQEe+r=C|w-H<(`GyC*9V; z{Lg=EPQbA48{e>^DcgamZHwKlpkm4=6K`H{Fgu;3?}+<6fGPMAkpd5!S2PKX!g2$5vr)PYzm3e#K3o1vT} zrGZp7)Qfo~-{G9wb0*FKBeyPdIiduFl+W(;ih>2G=r-(h>O-8vrL1x+95*jm_hBUh zt`xING5|QbskNa}rMPWylZpSR=+H6&%??e|oR$%va8i4*g|Lxe7VZgn685_H+ZkVR z9!*4MRY|7MrckDG^$_{^{i#2kt!k{LJjlz+WE1xd<jCZw8C0h= z5TwgqjoO8n0Toli;6x=&U{YYHz6O_sbOvBJxw6#&uaW+GkcCOo4wsoVI__Vn&o_8x z{XW27!}s6_trmc~Oca8Fu%nQ6|5|coFG6YHV)i4n3DkAHg42f73b3ozFeT#6X($C0 zZjxi6O|ktiglkIWUc^4|nUino;aCqei&@?10^Gw6II6W~Zb~7U!cCxWQ!C*D+54bt%KLjiNZQ@nbykZl1zY-on71+rS zqnEb4=tZF+ZwPn&PlGBtCwT|Y*?WiWm(-M%;COUH`l7L!#Q`r&`rZSg0{W(n`mGOX z4e|dX3-!-cQcF^Cx4mOQ?G$8xyoDqPr(eqZhGB*7I9i&3y&04d6aOddBs_sOWu@`x zmj^hxgW)QFHHWlsNb`)NS4<)I87Uo{gA3C~0Mk9Y@GekCE<2q1f}$gwJGcNo|Fjv7 z=+p~tmNoeJ>X{4<`ov)$QceGo60UYbES)zzfl=jMl#T1q?}IJM<5O@J5DlwwuyH8# zvidb%Bl3BWBEbW{{$$zxAxu-cAbFSh;VCK&Um>&o=Glxm+<7489teKFa^lPxcu=W^ zRnK@*;EXp91e!=@&?dJ1=L$RxqMr;-hW)}+WF;@6L&{QXdcx`XWw^`wS5N|lXRxv; zamtb#+iQ#PW=PxvCOYh{)e^kvAOJwz32g$eSV`ivc@N=O!1L>_zfCxzlVO}F*a^tr zvaK9lI9xote6JxW)jnMBH6aW1qH{t~H1MAl3!ipF5dnPyGui22_p7gI+wffK+Q0J77;_3a)cBVnzS|cgVCW^qdBY zmo(c!MUqb0>i$+cM_ezHTN9q6irkZddyziU`RRw-GrmY8@qyVi9>5h(UG|?uPg}9K z{kqw8nIAEv8p(gkd!cCIhMWygNV6%9C4CR)wE~)(w&Ct)Ao`TmhCtkSl@o4Q zwrB6aYp3x(?-SM6uKIY>?PuBE+Kr3EUyNC68thy!-PHdy@Au>_(=Fqp0WG|_*&l(@+I?cRNJk-uY%sF=mhmC@p6 z?LQHR$#hDG&y5_!!SC^9*XxZ@_;hu-0_%Fei5GI>FATc1yCu-2ENil79WDW*NNa$C z=a1MB(7^^XBFUJL+pHtNtk7A);r4-_QL{A0LqxQyZV*uPbY z9iJ_n@oS-Pb7CL|i*JyV;x=Zt9c!pL|8URiu`?(2Y{cgy={T>xs**zG&Y3KLg`8ZA z2B4;^{_WEx_}od_3lk`FSbgjQ4myz3V>mqi0AQ2Us%bm{pRUvyfXQ-UX~7Nn^Fy~T zSptCTyt|VJ{WE30LK6Wtkvu$qDypN{ou+{tE*X!{7Veg_Fgt~N*?0c5bLXoVRj;SG zcktlKN{bq{FtyJ=$owg6DmFvQ<2(Ig@H^+!floM^3Ztx9Ob^zjzimswzeAT54IgN+5_&~oG)352`6Rc1xgN=!RWy6C~`8{|^6Z^Kw_ zTiGy!&8o<}idGAN{1#(>GiE{TyhrPzX=Sk}tLFhK{8lZ#gAWU`1?Cj2-1JrnsjFB_ zj&v5JRq2IR)KnJi?Zph#zDX=r2*-A&v)hg{JbU)BTBS~|YyAzJuc-a@-i6gVj%H8G zN|NBUxahtTbDw7?_63>ye)xX3=2(B;#s}Lywa+d6y6Z--&F;C@JSBtEC-{z8d{*yc zl1OHB{fpJQT&cXBTHa#YCRcCu(S5daOh!dS7fU z#Xf6ILr5FBp5wsuM_ERWA6?E&jOqW(ccCx$-7c-PBa?T!pB74=O5?#dcIzoia*OYt zm*2X`ef5)~>4zVV?LM-=@H+40s`1PV)(H+!nuDi03$K%{2MCX_*eHrvNoU~+FJGn~ zsUto6b*NLc^fK4VqA#E3$p>rP7IQtysWd2{uh~y7o~?T8m4nc@eu=qimUCA)2FCtU zEL(s0#sis*dHhV%^#<^qw>CdGhc+u_h&Y=7RhC&-O;M5|%vWIj-GATSPT%Yjh33zT zXK(I|_!ixj7ou~0a3w4H*#qo$GNNwjN@qr}m=|=(yW8`+95oPK#0$diZ zliN42BIqP|9$)tD2t|F<~$LH<>g9Fn_AD{>$tiGuztKor>0VZr_sYs!9~8@}7)m^pp0rx6vf?F@l;0L@IF)o# zSX!}{XPgt46daoLHVh;p)ZxRoQ17ZA$7{W=57OOYM7ptZyGgIFz_0E~N1tSywRQm_ zrR?g`o3vcR+I#^~r8}?A9X?5pP>>?__OFF22UmIcLct39P6s_?)TcEI!9;>Dhm3bo zXxXDO%LMzU8#d>L9}iYBJfVK#Q}v!a_pK9lx_@d{rpTY=BJSDK?>(}6ys#mAl5XO( zhhTF&L}epC&fgOLdGjs_o2Tk3H-4rL%o5_&Y<}yRRb8xM)7B(e>cW*D9&B0q%uZwT zw0UZ+FW=r&P}@0gi}%*syAG!Q4{i)yI#8lmhu<+boDqH_^ zu{N)%|Js{9ay~nlJws&>+TFMS#paDNL{qm`oa)**E9vM4BXeJk(7-tveogzUclc?% zohG&=V)oV~Oq37V#jKsh!Ock|)p{8>rXJNS&S}hxwN8xb zd9ga6v(aPo&S1@l>lXO5tKH0Q4OTfQao=53qEG2){yB%DQ{TiI6HnDTIjxi`^ltC; zyRhylX1^EQiS%DkeSGV=Wqd7(sk_4Z%%WBoEZvz`-sgSde6CQS_K8s08!D5TaB~rK z5GNhe%wQ)k!*q~~{3AvkL{ymQon)nL5jLQDa>=Y;uT}EK)cP7Ggcy9_QxWo(^_7=i znEKe9PJlwJh0a)rnUhyRTT3=5w_@;RA?EE2k`$5E7Z=I3(U!Ef&#J>1eaJB!7Q-*2K^G z6$|=irO#6*7bt%ES?y*u`PRvh66-qku$yVJ?65#2;&lE<>!kEvh1}ykua-{#So=#@ zLUglAm5#*@&a0Q-M~`lcsi-~blVByYuV~xN``xOnWbn%r!by9cUOvNK zHgOa)sAw9W+wv+Xw2~_2>5SjBOl7M-t(B(bW9HP;dLegQ=)Qe9PSzi;nY_+D)E^Z) zy(UH|DCw|up_>?HV>o$9X&P50j;)8gf041G@5lfIX8WA>0S|*PN-J) z$r7oT*FM($BWC8)!|`+Po6Apdjq{t4qodiZ@Z)l8;9CI;6H)d3M&k}?rTO|w6iVMK zItU^?)R^}wfkkt)_Auo@DC0pUAd`j8BBaedMkWQZYHlz3JKGN2o^V*@22X5N)xs9= zfnut9XBSudE%>l6Iny?7)(!$lHMcl>Bj4&L>oweFn&r=Ih=|Cw%WzllQS)6nZquuh zPq*aLk5r}<&Nf*F+Q&6y;L_0tZ<``#Yl0uEuuwl)c#5XHdXTwyyQ#=^Og0`>pA6ad zC4F{tblIFhr0=!$FNkvuZ7NiEPMIFD$Am?Su}V+EPv*pThHO&`HGX(H{Y2Rv%a#nD zc3nl~884QcNZMHc@khi=ixB%JmD$bb#&Q!0UpNjNFfg3t+-0AC_Uzuz-&72r^5u)I zC~xhu6gBZmd%w-^aMPE0GV(j(BTfsnet(qEyl~fq@>%>mJT`kJzbP8_YH9X-3H=qA zzIXhEES2Hn&_x1>_f~KhvPkc(76(^dSYf#~E&9NKMCzHSez!@+U=KD6nyaU^1_(lo1MA}%ZoUkW78KL(^Qi9sAySH-JXN-YPm)#wx1^& zCJ0m?w{96!D*N&e#8sN*)jKiLbiC!Wl8*t{kn<O;Y zbH0mim-ZBnZ+Ct4xL!&Fi!`&XHC|jbvVG}LANw}VpKF@r0Ujc`e9YW{0CgJ`>rz*@ zc9nB8KBp*KKWV-(7Fy}(zwS=9x9uLK zm3pHmqYV?Cq>kbVJ5^7|^kx*<#q@R+aqP{>JqPYasMVzN5?1U}c&%cZ%iGeL%2czy z-%Edz**w$X;ZCi~&mK*x8}4~lc>+Ebm!Vub4Ilw`XkkQ3TI(te58eJF6pRhe}mhLTq z>UjBrUrLAT?>^Y(%k}ot_X{0STX$Z>GF-ho3G-$4!~|WatMjQ>>JilHRNS5YBVNsI z<=Ezwc)e1-&i3@Yrs5mzh4OK)_^UVH_!RW(p%w>smmO)>%AC;lB%@<1S1sLl@%lWK zQ1Bq9^PO0>Z>*JO^JbHxoIQ5}Ln!fa!dgfpT=OqkG(5Is^oa(rbOgM`_!|y{ zik0k}9?#Oa+nqDBQ4F#@MJ0#tsktSdnK4WE-pZAyOx0y}WpHWd+MZXNOwn&^CYUND zZ%f`Yd3lj`totHuzE!WpUkjeG0Qj8I@;SC}X~~0*u$&hY3NwRMvX3sf5fi^O=pDbE zM5+CYfVsyy^3KIOIm$j$D<4S6=(_(Sb%n-q1Ga5uziw`ExB+tLJ0s$}!SXw$TA&US z!f&Tv{k-SWqK!Y56O!yjby(?X!0AwAkmLGFIce zg~xiS;T}8*Y=;X`!KPz~Dq&=^vvUoW=ILJMKblchS>7PKwVnL=d1us>ty=4snw+Rr zUujdJb6YNTQQrG3KY@8C*Ox0znuc}z@&6f=9eyiT`cbBy?VVqUe0{0{YZiXdNW18lc}vE606vq`XRW8*#hxf)}r=_B9i zUHX}v+t$RBCAVodXF6o8o@YYverpY`yhGH<`+5Bx0h^2T4up4-Z<+-ygzU!l{Nt*X z50@3Uzqp*Q8*0{_r2hCqSf}|7v8Ah2wp{J=ml*f0t|ixCe#pQ@-Ou)?k3Pt5+Bs>* zJiQc$-7!INE40gIipD_BXpF=g@vF=V`){Lt*nrOKjorND@oZD|5dHI~?i8AOU;qx9 z<^5zzoXheBcO^xyc%IuXP1PWfx`lXe_ni`T2=>h^vJ$wGW7;|)Vk)o&iS~sgz$7D^ zqX{t`8}FD9yKANk@iwTtLYU;*f8uFM;ffC-rxw1Q`71g)i+9X8E4ISJ8>aHK_&cxg zzhC;IMz_iTkZ(raK$msKwN-bw#AIL4``pqP5L4N;DyS}c;m55{_S9CZKMn}ow{YB% zs_$mtSGL#W)#L>#=>>zEw7q&j?t52z`OoaDewj0+YTtbd(Oj6U-Xv$VGkI>%>sF2E z_J-{N`_fkkJzlDHMUZNH8ARFn@9P*W&yWFF?O=jj7u<9Tj#kPYcq9J0^!c=otdBv( zn*?vhES|d9T=6Z{(vr(LWPA!A&)Ab>9v!|wF7xn)Sy4F?0>(@g?~1W$Hu)YY?5%BP zoO>%*)M-}G(E;Csx*pBXDp%+xTbG8|TkNTOwCCJRxtm)c#eaNHMRiQGtfI$@x{{fr zq?5ks@6O!)JY2B*XOP8;{mome?qFf-ltv?g8ab7VyTeqjKB*UPNLdrNIw~w@v7O?c zHGZZ&O1nC8RxJKr?=n?1(})`e#*nfd>iN#J(Wx3>%P?+*2gJHI;E z-1cpeF`M9X14rLb9{JbB7kfoScii#TexI@EwJ{sT1sCRyC~FJvbi83?oXd9PdU^N6 z%=sp-G#U!`&iHJ(M=U5Kb@wwrZ9dZq^`^e-*`*2o->ehs&5s3Im13^8?uBP6Q@smh zZ-GnK;*I5k7wj(U^)@x<5If7Fkmyh4oemLA!J92f9 zjE%NGVT?dE&u}e9Bw*zZ?%VGsGbSJy4GYxAC}Nh@H_Ct75dEg6|NL6@%;+D}0v6mm zcek$naq?NU45X@aSh+zkI?>}Hr^@XcmK6@9K$5VGI zKQ#ud*k8V=N-=uDXJvqoiMNs1{_+Rw>wYF%`vv*s&b(juY+<3+d4Ay0R8qK+T`0(k zcU}6-E}7UbQidwmo`;;0-wd&(hL1oa@2qKNV!ck%7P}qQBqz!&&#>Y>RnfZNM)T+C zfC#7Fq!XlHGj$%MTKSfqjYwR%+fGToD(6ENfBeBXBfFO|)aQ40`a zjv zHo4RCHr8VKi2AI<9bwRjNhPMwycgS)kQ7@h%xF+6o|1b-GM68(k_uR*d*wpitJm)qYYR&1ixearG}e__e&Vvx z;;_xGsmnLd;RBzrWg+SI1-`mu;jFT8JqjJszKhE8f@W&xBd3cgUasb z?et2Xm|y9c8Gdu=<_Ts^(eK4yt66R}4Lh>cBpeVVbS}M50pk5EGifD=9*Zv9&8w}s z(vzF}KA89`=}zvc=!Kc~%kyvNd}y6=GcWj;@QG*(zD@Mx3>7!zyO{Hk6|~-hkp)9D zv0YEF7`M~3P=LWZVH1m}t(}nk?2AEw!y4VEXY6lEr&^juUp!M`C*$J*vcy_m&C#>J5^1dvS2mwA-J0i{tkTjQ>&M>Zaa($<@U(!(-{0 zJuyBIWSBjVF^bNuzW6A%SjAI3B-U2TRNj|3T*er-!H54u&kG?p4Zw}?oV_<7KQGxx z{d?g~pU+XpGy;U|#!V^ey2K}>Wv(83!0qX;gr;#yauhE0i|X6I%}qF#q;M=WXIivZ zvF_`%?E;Mk8+`0`&ohz>5W1mnwAyK4U#fZ8kzc{T1m|Z?g`%k0ycaJfgwOn>ojEgF zzeZq>wfm9kkON|$!=rX|GIfjZ#)3j~l~B4MQ3t+6FuvR7$r*Tl3ElW-Gn*^AqGE zTvc++r018N-@T~cCI<4w-1)l-N(Be%GiUOBPBgW<%5@-ECMH+UKJrWqHK;8f-=5(W zUSk{b`spoKdqHg*=R04Yn4lc`x!kLx&NumJ*IOoDvfizs99%fCTdD$3J+(L=F^=}flRcBl_>y+Hou z&4FWB=35>mBZVzH%@R245tV{Vcu9=FSxh)6yip2M%;J4;Cz#0~w#$ z#1X+RUh)0-a;CA>OHohuOO%_m^%4C0=f4bo`hVF`e36F=;tVWh9^w<+Dj~6XbR*klkh1z<5;2@QAcnkL7s$D1`wzEW?2xh zkgNzL9+tIz64x%xB*IwK8+R32kw>5yTc{4i$xyP+0d)PAch4{P{p%o>onMwp+8ChXK%`uQcg#-t9 z3jk=LyL@z;aZhv7FC^>-JLZh&Ic-?8r0wV+)?V9?M8YQ$R3*V5WQc6;&@esk3368%(<5WmaS-wp9co_q(9<`BT~aswbrOOn~twH zeBc|2OZ{we8tCHztF0?SyKnlR#sw9cD|~&&N5=RkviyHJY3H(tBrxxJylL`*BX^2+ zi?PYXa`mU2&}37JT1`Hm!I|^;lF$8qsIb~t-i!b?0;DB?n!Da~$*PZh(_cL)kU~KZ zv>6q!eK>|Boe%d^TX-VRb7gR$SEzt6by3KVsoIwP?M$+pA!))g(&BJ&2omrf%k0wH zrlzlrBD@=vcIlS#zutw_VJ&8>!Y3q(aIWFRl%ZE>WF;H#KidS7=-TL|OT~g!Z(ltf zDev8o*kl{dD|Szn=l_r@rmLR63p}^9Vg3X!)1}k(G_s<|x7{g(+RLs8pOlCx6Yq3P z)Uwq{r~(U~lu3NppV43}sP4G4gInN!wgq(>2vAWa>5OZoJ-Z2peOaukCdqws{Q*LNh{4%5S{pistg^r@)wM$3^P{U3zzO_rku- za=h3WH|?UiKJo(HuymH(k|AXP9`;2bjioKQ?g|id%awXY(e@5f)gzo8IS=!qRCoO( zln`a~=7{JlJ_c^|s$@llZm|S|g>&Bf*PXc?)D}-ZK&6i8qOwnMDsV_HFavq zPiODeSyu+V+Rv2NHIa6)>csQM8%zm5JG#E5=@VuM zv~8oR?;RJ_E?nF+C#70i!IBffpHcdDQ#EZs$(+RDD^dt;}tm3h-y;D&vP-H5m2P1lkZ_oCPLGa?s+Xtt`M!3@`^2!M4R>5(Q zW`nVS_I#<3momNmQkl3NR%AB4tP*bfA-7k(k+{!fIyyN+ig$` z%rfwC->f6H??wQvxy2N>nn*~wqYv-kmbVGw4D)n%%bPe*x#_A2;${Lh$ z4gVWD0=ZzXN9x@n$gjv3xKXuLp4`&}fe&p@8#ryd`I@#9|^+VYj0&F`CP#56o-1^CCEtCpKGgHO& z%C)#gjmEjc`TCdCDvJn>h>9?cfpr`|24xN@UhN;~?N`3qHTc^x3`^XR-U|&!_P#Y@ zdshFH5IqtnP06D+Wbi6*?e2wumtgP5Rf_{LqDLuE?ZuZB`LlmQ%&}_#lA|JUBL9c} zA`a;ZKYR+HvBf={VdDlcF>0B{+kvOUew61 zIy?gd;=a8se5Qw-Q@hVBKni4`>?JV7#Q*UCSBmm=uQjqVFp|XVaF-O%`4HcFQHB^q} zxE#nPMF^2oo;aP37Fo3Ko>u5J5-7)VXPo~QDBs=wk=K_egVM9eT&vM>ngryBmT|Z8 zRq~z&#SWRRy#r14!BzTXLMOlnDGTYUS#|3@Xc{R#*U*B%JA3LFFSf0X}K8VJGk znsi(~USW#w8uRYOF0?P{NXNE)6Q7$RfC0Oh%L-%&!txypB?f`-CE0FuK!L$n(L&|)cn#bev|I01z^>nkX&X_4UZ+Y8IW zWw%{)CTLrD-J=bXG%P?vhIsoAg0K?$MtW=BkGKb9P6Rk8su#r!C8A}bh;M)Y;$W80 znAzwJ4=`6?;3ZwWKJku)-#aL~t(G&|)$S~eC~-$HXi$|2gpQZz^!P@NCd`WHlbt4_ zAE#~o&5(8-@0%^mD%clm#j{3@z9~9WR0GAG0Jt&{q5D{@HV(P@AeLc(EA~^a7*#qY z%CN48`t19LeyMQz#UP&?DGW1YQ6a96CHvg(Do>fgyJaF;V?F=RG+`-U{&w7|qR-Gj zQLWrMT?mnVQpnyMzB1d`6s(nD`WWut&EE=r`VjcooefiNDfX@)juwUf0TMl`G3|FJy&so2l@H}FVVTN)!Izt^H zz@f;b>JY_pFE7Yl%sY7Krn$PvwzRGnqAOBIE<+8$V$bCy zgP^iZg#xjG8mA)&7>0FEDiIgk$rInIc-8YQaJ(`8UV&DjvtWfR>A*Q&T-fgz11_Q1!a_(Q0Td?apx;OxD5qOV#zSuS1vQs?3xauu-$@of5>D5yvh)z+3!yavMz`< z?2AiBK7>U^4whS*LE)t7tl8l1i$dOTYiK>BoaAd4O0=?c7E4qTQ%u$%nyQ4XH96c0 zMve!P*=VmLha7isgNq*K4N~E>d}^QJ9F>065~WL!qZuI~0(Y##C;t!o;$1WpSZ>D- zS^l%={G*_bCqV79%O!^H=Zk_~$pc(=n`KwUcE>uZoL}cZs5n)_g_&4gq*%v>_GXVH>rSC zv6JxZU3?b1=yA!ZW$ZIY;^~r)Rso2If}DJZMFy}F^?{vavKD+dv&KF%gqyVAN(#cc z_uk8c^>`$~h~5|~MdvTnoK0eB(q@R0*yMf7Ii_?yYvh7I%aUQ|XB z+7|ln;XQ{%@{6166G5K^v_`YG!U(3*bRijgv(bCu@Y_|0YnE)bPWQ0|DDkt}WDrp4 zhkRt??)!^a|I-y;%L_!MrqUoI2=D_fd(`Eq%x!lIbir7dwqn`0S?s0U?yWz zek&ImzUVqgWW`U34ZT<@O%~&?iIdjN*50^l$8EfmT^NbT00_)PpAf_r`=u^$pKi+_ zw0gwYt^QIrK2;!pa+4`wnNW zHdL>aNMzY_Bdj_+l|wQp;FiJz^p_M%$310QpDZ()G2xF{u#zZSs}G~28z~ZM|2TUr z1EEeNYiouBo<5m9;e;(`+j|;R6htrebb6+pD{ETywOcH(W?&sknIMFi2m!BT^D>V_ z2g?cV(X_pZCyO99p~qNMW>|id2r{T2V=&&{k_an?6)to3MI*)a_t&%s2|T1{%SsE^ zGpg8VHYFCHc>gH-PE|PUcAFuk49iJMpC{<=NH;2oku8)jN_uZUuLMVvi+-uMnpW`b zLfv4o{isJdJ{sj=Yx#C(OD4&oJqMwml{>PTAAO}U`*H++Rd0;Wr3&TBB$X$Vf3}VD z=fSFx#3fA3WDkORw?6|ip zea|9G%vF&_Djk5hm`~QF6i?tGzcFyibQ?(?q5QH5Y%fnQAIbet;@9?sMf3iw3Iwe> zTLnN|Wfa{P+>77OV=+KbB`w4Y6U2f5A@%deVl!h5x<3PCEPR=3i3{9&t`a_J)wJU2 z{SX3cx=b}DMeJGl0Qj=p>m5%j&~c%1g9haJAZ{y|KzzUr(nxwr#VI7M((;2++TOOJ ziY`p)L*jJHs0W9r6Q`PZvV3Y436P(!!cP*48Ooq!V0d&I6>^HG(8|4#N}r7WL!d~| z8}1Bj`s;C^bmIs-mBb}|dIk^tr1b2F;|TT!nL*Oc=^ak?*)=Z&mkODMmzihvUeMHr z@sP4n%1q{6MBB0~D)5v!8)ugaxnX~fL(xI*78k_T5ge6xR)G31wCHH}*sP!2WGVi* zg9;Mx{E?D8j%MHaLfOOmD_$1=<2c=bj#J~~T&&|S_7jk@(^f=w@g;78ptV{LNvel! zkvZ3b*f1Nj;L~Sw7Q=8@{XXiNgyl^VoXqu!;7K=id49$Sd>Zwh5SLe$svWy;F*>3H zY|SZK6s!kN$eD0WXwYMRb<3fd3>IGIsZpDB<9$U=W$U3oy4+TQL?g)GN$$7{LrkO` zOc3sC_l65-0eF|0G`xp30eC=6y90q{k2`HO=+`N#qYHX+@q?$-+<%H~LAjMYBfGcE zNl@42k8q!a6sasJ9-4D)rvB}ib@yync~GVb3ARcHzk3!*UaJMXJt6nT0xc)SkOlEs zt%1b5SHUY`x1P%1%^-Hj|Knnee^HX&ZDusL)30ZW7_H?>2w{Ei?ZNb_ znw6AqV)X`6u(6cZ>|tWpSe{n_n-5F*f&Ed>d?;%Bs+`${G?8Ur_!-kJV|`MekA^%& zB0NDAOH@k?e2$rKae3rY^B~-nWg*%DELY<9B{RtOfTiRl5sQ~#T!^?Y956{YL&BK{ zEA1zaM1zM-ci0ck%#x_a7O~mu<#!yp**}zvnJRAk@=aQVAx>L}T6cID*3OQZiIld! zPAinty<=Sp-@v;;n8q~LTQE|D)9~do8NKth^He7md9)@gLyd@=0%=7pT8$1eGR7#c zUoQisHGiU~&sA9xi!>#HS1Vew?^DZ#(##}WT96c$xP)UC(A#g$_kZ2%fo9vIKl6x^ z$(|trWUL5O&9a-l+quf6`B|~pGBs6blsinzp-6%mF*zhvj;3EJB{J!im;-T_)MbGF zL#x?Q4i}DsI)uGSe+Sfz0;cpEiI_a(@xIn*tMCSK#J8ytNSnqJG2 z8M9+sR!{|enpD2DxX!;4GHdxaCpFvm;@}N)RDt0G9TsDJBA@@GYmY%g_AuWd@Be{(dm-ezFcrgbyv#hfCXYe90fGI7d$rn{X|pt0 z4EpdX(?f8~;=u8Hkjb1rd%L$us+PUo$T^Q+Jc_PYh)2Y-pv>!A@n)|h&T5M5g}}BQr)o)wRti?gIDy|*zT$AC zDR-7;UM6^;=<$loDa%r{1I$@^o7O$te(I}53jmj4wc2vnm(H^oiy6d98N+;1B<|J_ z#dDx}(>_UR+-2THQ{G)Dq!BgJD+~I$saI{CXp6EM32F+y*Vq)H%uS~lHg#sd8f7i& zJ=Vv29yb`NLbqPE2f}Idd|G9+K)_fl^VH++h50d-Qr ztjL#(J8!fHe?W#&gJQQh-m?2EaXh#^F5+@OvjEua7nu*Nt1s_th*n^0Rcu9AgBV9* z#~B_k$>;`|$7(%SywEqu@UYK0<}MS8j`GzfUs_Ze%YZqeXOP{|mA$SN%!aTSft9A+ z{JvL+HTbzUzT6isY*(0@FzJ0)W!hEd)yzQP7lNyCHb?1kIF1LH^aEMi%^e>`0shNN z&fIeq%|_naAM@OB6!<-_Pd55fBrVKlB=)^0pw@pr>nh*1*hj^e^BHj0p%q#%m_~Pr zg)m;bjNR#v#XY~B42)O1jd7j-apMFj#5H_LZ!aGYgIAHB1deD1l%lKOxVv4S3Chj2Vv&X?>O$E&5N$RYg_D<~r-H$(R*VFl{!77y z_!KWwWh`D23t_rh3pSeWL}N{?^nrRP6XegKV!lwPAgC_D2Ste?3l+3W{F!}@ZD7Wy za%6Z*I2`pf5G$Kfd)1IQ5e5Q{olm;M9WuV+uMPN12|Jnb<=AfAWc_wF-)KscoJf4usT z<@m)r`t)g`POmc$3+Cm-P@BM242

n0u065Wha1?uJw?0Dj^52n!CAUL{ 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%0AkO!;4 z-EVG2^!$hoFb@<=CYN~3Tfh8Lv1l6lRe@&~!3U89fo@b=EBVpasbl<590p2gh2N*P z(x0x=Z1vduF%($ieqLhS9@>&Y7QJ>RhU?JCAfK?lYs`ZDh2Cg;Dg1RB(=1@%@J`k`%tZUFWoS!WmvHJ$mO)-&PCjgW$A2ms9F0k(=0zDFjZ^JTG zi3z(~Z|j6r2ywk?Zn*tCIfdiwN-BgqA&JEo)Di5rpwt2{6pAJnzrMs_#nsy}VPm{? z3Nykwm!N>aI0}^PUzkH+>9s~`(fX@tD2c&r2g8=DIf)U5=xv#T`=HUEYFprc2=^ng z3Yr~i?f^%MIeZ8KH$OG)>;06hGe7NA7toGva+Ey zxUL$=vVNDb#DkQ*I4sYOh_Zf={_@4ac1n~*{yeV{5(!2CIbM=?6|A_nRo3NGjG?8- z-{)_<@LRBFUtuxkUv=5Wd+-VM&d5n_vys9qbt^HIJ@7VGnV$Bu@Tb%o*C$T7J3pRt zB3qc%ul*+;D*6p`aQ`?y5<>V0M@5Xf~R?4r!SofiNDY+s*ocC zFjz5m-DP%Qll4kUwr4CyUE4XlAd|zIO*}Ig!3hMoW5uz2&lpqbt1gV<%t_BF=@jRn zL3~jVR2Zy0RRVeM4~iQgJoRqeg@P-MPkd@$1wj-MGuizee6ONwE^{EuS$vuW{3cD- zunB=cD~Jj-50z~o^!kDXEt2&*Hgp^6V>~iYm|mcV9m=xvDj+c!OfOdPE9{JLsF?AX z^*d};*>&a}CaCJZ0F1c7XdJaL6horNPKoFWRr@D@4RrR)k-w{5sI_ebI|lB0WP%bV z$m2dgqK;ufSs9Pd$WTDL0){L`g6sv}*{>P?;Df#eZ%rT$4eYgN3m%QVkg4C%ix&#Cg!PJ5&{N6;IPB@_NX0c|w+2xJRe609OoGLS!d$vNubD zxBf4=P{;UD_CWBF0`Re!Ma%Hnw^ki+cR`J+L4VE%OF6Fwgf*hkPp@KF4e+#56pZe) zi2oDept_B4JW&~Y_J>dKM*;e6xhE(6Ottryli9VVvEp4WNz2q0(=sUUlm@`^2by#Y z)nUH7y+VsNXAG4)UX^;)D2A%KXkUvTWb0n%F0c4p%$>x$sA7KT{xQ@iC-LRv@}3Fx z(E!W)&g2z2>H=OBNbtv^y@U->4ux`U3R2j3+U#h9PTY9tp5d_L+TD8yN@vmd3* zBCh|jM>(TpH`4i+TRsaSh`j(KR<8u@5Nh=7QgvBGzE@RJ;X0|Wv#4J7X-b<8pbOjI zX^~C&H2$nAiF5lZcCOLi?tg26hTT2KcEcP&$`e+=^O~A0G@WT3_r0A+y&A#VF9Yhe zKGx3$h96JLMh#tdtq!NcWwec&{+uB}2NdO638JUe(8z1p zo;~kLV83dr+Mt~Q=i0S-lNsLwOyzUzX)6iLggSdZ(`Y%9Ai+uTHi#8PMS{o1?#$el zAd^6MRT$!0CdQrWR@-pt>LJ@1W!_dSbsy;KisEa_ldiB$n{%phTq9Pgqr%ivmN zy(qA#_zU}OEot(WhoK&WnqG0Cj4+t=(nc!WiKGHUm_yg zq=Bp?mX@ubWPn1sh()5H?~zkYLtow%0#E;5tim}be>hd>jZn*z?LwZ&J7frB6v@R3 z|LBvm@woDkHswJ^Uv6Rt^zUrwzaVJ7HK{VfEC_376mTs@Jlx9>_Fqi;$ zk|}pz=LHI3jgZDgjr*e2OVrWX;HeSB?<9%Ai|}HJNhm8 zmlVIeBCh%&P`D(9+#fq2+yR_8=%TY3mz*7MM*-Y>`C*JU_B{qC%oh8^1y^=_)sf%H zmWepfILstsj(+bZ|M(~xU&F0!#Z~-@?tCwdtvuKak+Z*1OdI?;D4txmR2`(`bM2YX z)>F^mXav^Q(a-Mk{{_2?1NQi%6U>o#FDT95fNg^diLQ_hj~ji_Km6AR(G&W7xhI`VA3
5{0vr51D# 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 Xu7IPSE3jFD4183THI&j6O)vi+&?n|< literal 0 HcmV?d00001 diff --git a/examples/blog-articles/github-actions-tutorial/notebook.ipynb b/examples/blog-articles/github-actions-tutorial/notebook.ipynb new file mode 100644 index 00000000..42041b34 --- /dev/null +++ b/examples/blog-articles/github-actions-tutorial/notebook.ipynb @@ -0,0 +1,1630 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Comprehensive GitHub Actions Tutorial For Beginners With Examples in Python" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Introduction" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "GitHub Actions is a powerful automation platform that helps developers automate tedious, time-wasting software development workflows. Instead of running tests, executing scripts at intervals, or doing any programmable task manually, you can let GitHub Actions take the wheel when certain events happen in your repository. In this tutorial, you will learn how to use this critical feature of GitHub and design your own workflows for several real-world use cases." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### What are GitHub Actions?" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "At its core, [GitHub Actions](https://docs.github.com/en/actions) is a continuous integration and continuous delivery (CI/CD) platform that lets you automate various tasks directly from your GitHub repository. Think of it as your personal robot assistant that can:\n", + "\n", + "- Run your Python tests automatically when you push code\n", + "- Deploy your application when you create a new release\n", + "- Send notifications when issues are created\n", + "- Schedule tasks to run at specific times\n", + "- And much more..." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Why automate with GitHub Actions?" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Let's look at a common scenario: You are building a Python application that scrapes product prices from various e-commerce websites. Without GitHub actions, you would need to:\n", + "\n", + "1. Manually run your tests after each code change\n", + "2. Remember to execute the scraper at regular intervals\n", + "3. Deploy updates to your production environment\n", + "4. Keep track of environment variables and secrets" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "With GitHub actions, all of these tasks can be automated through workflows, usually written in YAML files like below:\n", + "\n", + "```yaml\n", + "name: Run Price Scraper\n", + "\n", + "on:\n", + " schedule:\n", + " - cron: '0 */12 * * *' # Runs every 12 hours\n", + " workflow_dispatch: # Allows manual triggers\n", + "\n", + "jobs:\n", + " scrape:\n", + " runs-on: ubuntu-latest\n", + " \n", + " steps:\n", + " - uses: actions/checkout@v3\n", + " - name: Set up Python\n", + " uses: actions/setup-python@v4\n", + " with:\n", + " python-version: '3.9'\n", + " \n", + " - name: Run scraper\n", + " env:\n", + " API_KEY: ${{ secrets.FIRECRAWL_API_KEY }}\n", + " run: python scraper.py\n", + "```" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "This workflow automatically runs a scraper every 12 hours, handles Python version setup, and securely manages API keys - all without manual intervention." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### What we'll build in this tutorial" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Throughout this tutorial, we'll build several practical GitHub Actions workflows for Python applications. You will learn how to:\n", + "\n", + "1. Create basic and advanced workflow configurations.\n", + "2. Work with environment variables and secrets.\n", + "3. Set up automated testing pipelines.\n", + "4. Build a real-world example: an automated scraping system app [Firecrawl](https://firecrawl.dev) in Python.\n", + "5. Implement best practices for security and efficiency. \n", + "\n", + "By the end, you will have hands-on experience with GitHub Actions and be able to automate your own Python projects effectively. \n", + "\n", + "> Note: Even though code examples are Python, the concepts and hands-on experience you will gain from the tutorial will apply to any programming language. \n", + "\n", + "Let's start by understanding the core concepts that make GitHub Actions work." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Understanding GitHub Actions Core Concepts" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "To write your own GitHub Actions workflows, you need to understand how its different components work together. Let's break down these core concepts using a practical example: automating tests for a simple Python script." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### GitHub Actions workflows and their components" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "A workflow is an automated process that you define in a YAML file within your repository's `.github/workflows` directory. Think of it as a recipe that tells GitHub exactly what to do, how and when to do it. You can transform virtually any programmable task into a GitHub workflow as long as it can be executed in a Linux, Windows, or macOS environment and doesn't require direct user interaction.\n", + "\n", + "Here is a basic workflow structure:\n", + "\n", + "```yaml\n", + "# test.yaml\n", + "name: Python Tests\n", + "on: [push, pull_request]\n", + "\n", + "jobs:\n", + " test:\n", + " runs-on: ubuntu-latest\n", + " steps:\n", + " - name: Check out repository\n", + " uses: actions/checkout@v3\n", + " \n", + " - name: Set up Python\n", + " uses: actions/setup-python@v4\n", + " with:\n", + " python-version: '3.9'\n", + "```" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The YAML file starts by specifying the name of the workflow with the `name` field. Immediately after, we specify the events that triggers this workflow. In this example, the workflow automatically executes on each `git push` command and pull request. We will learn more about events and triggers in a later section. \n", + "\n", + "Next, we define jobs, which are the building blocks of workflows. Each job:\n", + "\n", + "- Runs on a fresh virtual machine (called a runner) that is specified using the `runs-on` field.\n", + "- Can execute multiple steps in sequence\n", + "- Can run in parallel with other jobs\n", + "- Has access to shared workflow data\n", + "\n", + "For example, you might have separate jobs for testing and deployment:\n", + "\n", + "```yaml\n", + "jobs:\n", + " test:\n", + " runs-on: ubuntu-latest\n", + " ...\n", + " deploy:\n", + " runs-on: macos-latest\n", + " ...\n", + "```" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "Each job can contain one or more `steps` that are executed sequentially. Steps are individual tasks that make up your job. They can:\n", + "\n", + "- Run commands or shell scripts\n", + "- Execute actions (reusable units of code)\n", + "- Run commands in Docker containers\n", + "- Reference other GitHub repositories\n", + "\n", + "For example, a typical test job might have steps to:\n", + "\n", + "1. Check out (clone) code from your GitHub repository\n", + "2. Set up dependencies\n", + "3. Run tests\n", + "4. Upload test results\n", + "\n", + "Each step can specify:\n", + "\n", + "- `name`: A display name for the step\n", + "- `uses`: Reference to an action to run\n", + "- `run`: Any operating-system specific terminal command like `pip install package` or `python script.py`\n", + "- `with`: Input parameters for actions\n", + "- `env`: Environment variables for the step" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now that we understand jobs and steps, let's look at Actions - the reusable building blocks that make GitHub Actions so powerful.\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Actions" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The `test.yaml` file from earlier has a single `test` job that executes two steps:\n", + "\n", + "1. Checking out the repository code using a built-in `actions/checkout@v3` action.\n", + "2. Setting up a Python environment with `actions/setup-python@v4` and `python-version` as an input parameter for said action.\n", + "\n", + "```bash\n", + "# test.yaml\n", + "name: Python Tests\n", + "on: [push, pull_request]\n", + "\n", + "jobs:\n", + " test:\n", + " runs-on: ubuntu-latest\n", + " steps:\n", + " - name: Check out repository\n", + " uses: actions/checkout@v3\n", + " \n", + " - name: Set up Python\n", + " uses: actions/setup-python@v4\n", + " with:\n", + " python-version: '3.9'\n", + "```\n", + "\n", + "Actions are reusable units of code that can be shared across workflows (this is where GitHub Actions take its name). They are like pre-packaged functions that handle common tasks. For instance, instead of writing code to set up Node.js or caching dependencies, you can use the GitHub official actions like:\n", + "\n", + "- `actions/setup-node@v3` - Sets up Node.js environment\n", + "- `actions/cache@v3` - Caches dependencies and build outputs\n", + "- `actions/upload-artifact@v3` - Uploads workflow artifacts\n", + "- `actions/download-artifact@v3` - Downloads workflow artifacts\n", + "- `actions/labeler@v4` - Automatically labels pull requests\n", + "- `actions/stale@v8` - Marks and closes stale issues/PRs\n", + "- `actions/dependency-review-action@v3` - Reviews dependency changes\n", + "\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Events and triggers" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Events are specific activities that trigger a workflow. Common triggers include:\n", + "\n", + "- `push`: When code is pushed to the repository\n", + "- `pull_request`: When a PR is opened or updated\n", + "- `schedule`: At specified times using cron syntax\n", + "- `workflow_dispatch`: Manual trigger via GitHub UI\n", + "\n", + "Here is how you can configure multiple triggers:\n", + "\n", + "```yaml\n", + "name: Comprehensive Workflow\n", + "on:\n", + " push:\n", + " branches: [main]\n", + " pull_request:\n", + " branches: [main]\n", + " schedule:\n", + " - cron: '0 0 * * *' # Daily at midnight\n", + " workflow_dispatch: # Manual trigger\n", + "\n", + "jobs:\n", + " process:\n", + " runs-on: ubuntu-latest\n", + " steps:\n", + " - uses: actions/checkout@v3\n", + " - name: Run daily tasks\n", + " run: python daily_tasks.py\n", + " env:\n", + " API_KEY: ${{ secrets.FIRECRAWL_API_KEY }}\n", + "```" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "This example shows how a single workflow can:\n", + "\n", + "- Run automatically on code changes on `git push`\n", + "- Execute daily scheduled tasks with cron\n", + "- Be triggered automatically when needed through the GitHub UI\n", + "- Handle sensitive data like API keys securely" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Cron jobs in GitHub Actions" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "To use the `schedule` trigger effectively in GitHub Actions, you'll need to understand cron syntax. This powerful scheduling format lets you automate workflows to run at precise times. The syntax uses five fields to specify when a job should run:\n", + "\n", + "![](images/cron-syntax.png)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Here are some common cron schedule examples:\n", + "\n", + "```yaml\n", + "# Daily at 3:30 AM UTC\n", + "- cron: '30 3 * * *'\n", + "\n", + "# Every Monday at 1:00 PM UTC\n", + "- cron: '0 13 * * 1'\n", + "\n", + "# Every 6 hours at the first minute\n", + "- cron: '0 */6 * * *'\n", + "\n", + "# At minute 15 of every hour\n", + "- cron: '15 * * * *'\n", + "\n", + "# Every weekday (Monday through Friday)\n", + "- cron: '0 0 * * 1-5'\n", + "\n", + "# Each day at 12am, 6am, 12pm, 6pm on Tuesday, Thursday, Saturday\n", + "- cron: '0 0,6,12,18 * * 1,3,5'\n", + "```" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Here is a sample workflow for a scraping job with four different schedules (multiple schedules are allowed):\n", + "\n", + "```yaml\n", + "name: Price Scraper Schedules\n", + "on:\n", + " schedule:\n", + " - cron: '0 */4 * * *' # Every 4 hours\n", + " - cron: '30 1 * * *' # Daily at 1:30 AM UTC\n", + " - cron: '0 9 * * 1-5' # Weekdays at 9 AM UTC\n", + "\n", + "jobs:\n", + " scrape:\n", + " runs-on: ubuntu-latest\n", + " steps:\n", + " - uses: actions/checkout@v3\n", + " - name: Run Firecrawl scraper\n", + " env:\n", + " API_KEY: ${{ secrets.FIRECRAWL_API_KEY }}\n", + " run: python scraper.py\n", + "```\n", + "\n", + "Remember that GitHub Actions runs on UTC time, and schedules might experience slight delays during peak GitHub usage. That's why it's helpful to combine `schedule` with `workflow_dispatch` as we saw earlier - giving you both automated and manual trigger options." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "---------------\n", + "\n", + "Understanding these core concepts allows you to create workflows that are efficient (running only when needed), secure (properly handling sensitive data), maintainable (using reusable actions) and scalable (running on different platforms). \n", + "\n", + "In the next section, we will put these concepts into practice by creating your first GitHub actions workflow." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Creating Your First GitHub Actions Workflow" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Let's create a practical GitHub Actions workflow from scratch. We'll build a workflow that automatically tests a Python script and runts it on a schedule - a universal task applicable to any programming language. " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Setting up the environment" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Let's start by creating a working directory for this mini-project:\n", + "\n", + "```bash\n", + "mkdir first-workflows\n", + "cd first-workflows\n", + "```\n", + "\n", + "Let's create the standard `.github/workflows` folder structure GitHub uses for detecting workflow files:\n", + "\n", + "```bash\n", + "mkdir -p .github/workflows\n", + "```\n", + "\n", + "The workflow files can have any name but must have a `.yml` extension:\n", + "\n", + "```bash\n", + "touch .github/workflows/system_monitor.yml\n", + "```\n", + "\n", + "In addition to the workflows folder, create a `tests` folder as well as a test file:\n", + "\n", + "```bash\n", + "mkdir tests\n", + "touch tests/test_main.py\n", + "```\n", + "\n", + "We should also create the `main.py` file along with a `requirements.txt`:\n", + "\n", + "```bash\n", + "touch main.py requirements.txt\n", + "```\n", + "\n", + "Then, add these two dependencies to `requirements.txt`:\n", + "\n", + "```text\n", + "psutil>=5.9.0\n", + "pytest>=7.0.0\n", + "```\n", + "\n", + "Finally, let's initialize git and make our first commit:\n", + "\n", + "```bash\n", + "git init \n", + "git add .\n", + "git commit -m \"Initial commit\"\n", + "```" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Check out the [Git documentation](https://git-scm.com/doc) if you don't have it installed already." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Writing your first workflow file" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Let's write the workflow logic first. Open `system_monitor.yml` and paste each code snippet we are about to define one after the other. \n", + "\n", + "1. Workflow name and triggers:\n", + "\n", + "```yaml\n", + "name: System Monitoring\n", + "on:\n", + " schedule:\n", + " - cron: '*/30 * * * *' # Run every 30 minutes\n", + " workflow_dispatch: # Enables manual trigger\n", + "```\n", + "\n", + "In this part, we give a descriptive name to the workflow that appears in GitHub's UI. Using the `on` field, we set the workflow to run every 30 minutes and through a manual trigger." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "2. Job definition:\n", + "\n", + "```yaml\n", + "jobs:\n", + " run_script:\n", + " runs-on: ubuntu-latest\n", + "```\n", + "\n", + "`jobs` contains all the jobs in this workflow and it has a `run_script` name, which is a unique identifier. " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "3. Steps:\n", + "\n", + "There are five steps that run sequentially in this workflow. They are given descriptive names that appear in the GitHub UI and uses official GitHub actions and custom terminal commands. \n", + "\n", + "```yaml\n", + "jobs:\n", + " monitor:\n", + " runs-on: ubuntu-latest\n", + " \n", + " steps:\n", + " - name: Check out repository\n", + " uses: actions/checkout@v3\n", + " \n", + " - name: Set up Python\n", + " uses: actions/setup-python@v4\n", + " with:\n", + " python-version: '3.9'\n", + " \n", + " - name: Install dependencies\n", + " run: |\n", + " python -m pip install --upgrade pip\n", + " pip install -r requirements.txt\n", + " \n", + " - name: Run tests\n", + " run: pytest tests/\n", + " \n", + " - name: Collect system metrics\n", + " run: python main.py\n", + "```" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Here is what each step does:\n", + "\n", + "1. Check out repository code with `actions/checkout@v3`.\n", + "2. Configures Python 3.9 environment.\n", + "3. Runs two terminal commands that:\n", + " - Install/upgrade `pip`\n", + " - Install `pytest` package\n", + "4. Runs the tests located in the `tests` directory using `pytest`.\n", + "5. Executes the main script with `python main.py`. \n", + "\n", + "Notice the use of `|` (pipe) operator for multi-line commands.\n", + "\n", + "After you complete writing the workflow, commit the changes to Git:\n", + "\n", + "```bash\n", + "git add .\n", + "git commit -m \"Add a workflow file for monitoring system resources\"\n", + "```" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Creating the Python script" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now, let's write the `main.py` file, which is a monitoring script that helps software developers track system resource usage over time, enabling them to identify performance bottlenecks and capacity issues in their development environment. \n", + "\n", + "```python\n", + "import psutil\n", + "import json\n", + "from datetime import datetime\n", + "from pathlib import Path\n", + "```\n", + "\n", + "This script collects and logs system metrics over time. It uses `psutil` to gather CPU usage, memory usage, disk usage, and active process counts. The metrics are timestamped and saved to JSON files organized by date.\n", + "\n", + "The script has three main functions:\n", + "\n", + "```python\n", + "def get_system_metrics():\n", + " \"\"\"Collect key system metrics\"\"\"\n", + " metrics = {\n", + " \"cpu_percent\": psutil.cpu_percent(interval=1),\n", + " \"memory_percent\": psutil.virtual_memory().percent,\n", + " \"disk_usage\": psutil.disk_usage('/').percent,\n", + " \"timestamp\": datetime.now().isoformat()\n", + " }\n", + " \n", + " # Add running processes count\n", + " metrics[\"active_processes\"] = len(psutil.pids())\n", + " \n", + " return metrics\n", + "```\n", + "\n", + "`get_system_metrics()` - Collects current system metrics including CPU percentage, memory usage percentage, disk usage percentage, timestamp, and count of active processes.\n", + "\n", + "```python\n", + "def save_metrics(metrics):\n", + " \"\"\"Save metrics to a JSON file with today's date\"\"\"\n", + " date_str = datetime.now().strftime(\"%Y-%m-%d\")\n", + " reports_dir = Path(\"system_metrics\")\n", + " reports_dir.mkdir(exist_ok=True)\n", + " \n", + " # Save to daily file\n", + " file_path = reports_dir / f\"metrics_{date_str}.json\"\n", + " \n", + " # Load existing metrics if file exists\n", + " if file_path.exists():\n", + " with open(file_path) as f:\n", + " daily_metrics = json.load(f)\n", + " else:\n", + " daily_metrics = []\n", + " \n", + " # Append new metrics\n", + " daily_metrics.append(metrics)\n", + " \n", + " # Save updated metrics\n", + " with open(file_path, 'w') as f:\n", + " json.dump(daily_metrics, f, indent=2)\n", + "```\n", + "\n", + "`save_metrics()` - Handles saving the metrics to JSON files. It creates a `system_metrics` directory if needed, and saves metrics to date-specific files (e.g. `metrics_2024-12-12.json`). If a file for the current date exists, it loads and appends to it, otherwise creates a new file.\n", + "\n", + "```python\n", + "def main():\n", + " try:\n", + " metrics = get_system_metrics()\n", + " save_metrics(metrics)\n", + " print(f\"System metrics collected at {metrics['timestamp']}\")\n", + " print(f\"CPU: {metrics['cpu_percent']}% | Memory: {metrics['memory_percent']}%\")\n", + " return True\n", + " except Exception as e:\n", + " print(f\"Error collecting metrics: {str(e)}\")\n", + " return False\n", + "\n", + "if __name__ == \"__main__\":\n", + " main()\n", + "```\n", + "\n", + "`main()` - Orchestrates the metric collection and saving process. It calls `get_system_metrics()`, saves the data via `save_metrics()`, prints current CPU and memory usage to console, and handles any errors that occur during execution.\n", + "\n", + "The script can be run directly or imported as a module. When run directly (which is what happens in a GitHub Actions workflow), it executes the `main()` function which collects and saves one set of metrics." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Combine the code snippets above into the `main.py` file and commit the changes:\n", + "\n", + "```bash\n", + "git add .\n", + "git commit -m \"Add the main.py functionality\"\n", + "```" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Adding tests" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Testing is a critical part of software engineering workflows for several reasons:\n", + "\n", + "1. Reliability: Tests help ensure code behaves correctly and consistently across changes.\n", + "2. Regression prevention: Tests catch when new changes break existing functionality.\n", + "3. Documentation: Tests serve as executable documentation of expected behavior\n", + "4. Design feedback: Writing tests helps identify design issues early\n", + "5. Confidence: A good test suite gives confidence when refactoring or adding features\n", + "\n", + "For our system metrics collection script, tests would be valuable to verify:\n", + "\n", + "- The `get_system_metrics()` function returns data in the expected format with valid ranges\n", + "- The `save_metrics()` function properly handles file operations and JSON serialization\n", + "- Error handling works correctly for various failure scenarios\n", + "- The `main()` function orchestrates the workflow as intended\n", + "\n", + "With that said, let's work on the `tests/test_main.py` file:" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "```python\n", + "import json\n", + "from datetime import datetime\n", + "from pathlib import Path\n", + "from main import get_system_metrics, save_metrics\n", + "```" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The test file we are about to write demonstrates key principles of testing with `pytest`, a popular Python testing framework. Pytest makes it easy to write tests by using simple `assert` statements and providing a rich set of features for test organization and execution. The test functions are automatically discovered by `pytest` when their names start with `test_`, and each function tests a specific aspect of the system's functionality.\n", + "\n", + "```python\n", + "def test_get_system_metrics():\n", + " \"\"\"Test if system metrics are collected correctly\"\"\"\n", + " metrics = get_system_metrics()\n", + " \n", + " # Check if all required metrics exist and are valid\n", + " assert 0 <= metrics['cpu_percent'] <= 100\n", + " assert 0 <= metrics['memory_percent'] <= 100\n", + " assert metrics['active_processes'] > 0\n", + " assert 'timestamp' in metrics\n", + "```" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "In this example, we have two test functions that verify different components of our metrics collection system. The first test, `test_get_system_metrics()`, checks if the metrics collection function returns data in the expected format and with valid ranges. It uses multiple assert statements to verify that CPU and memory percentages are between 0 and 100, that there are active processes, and that a timestamp is included. This demonstrates the practice of testing both the structure of returned data and the validity of its values.\n", + "\n", + "```python\n", + "def test_save_and_read_metrics():\n", + " \"\"\"Test if metrics are saved and can be read back\"\"\"\n", + " # Get and save metrics\n", + " metrics = get_system_metrics()\n", + " save_metrics(metrics)\n", + " \n", + " # Check if file exists and contains data\n", + " date_str = datetime.now().strftime(\"%Y-%m-%d\")\n", + " file_path = Path(\"system_metrics\") / f\"metrics_{date_str}.json\"\n", + " \n", + " assert file_path.exists()\n", + " with open(file_path) as f:\n", + " saved_data = json.load(f)\n", + " \n", + " assert isinstance(saved_data, list)\n", + " assert len(saved_data) > 0\n", + "```\n", + "\n", + "The second test, `test_save_and_read_metrics()`, showcases integration testing by verifying that metrics can be both saved to and read from a file. It follows a common testing pattern: arrange (setup the test conditions), act (perform the operations being tested), and assert (verify the results). The test ensures that the file is created in the expected location and that the saved data maintains the correct structure. This type of test is particularly valuable as it verifies that different components of the system work together correctly.\n", + "\n", + "Combine the above code snippets and commit the changes to GitHub:" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "```bash\n", + "git add .\n", + "git commit -m \"Write tests for main.py\"\n", + "```" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Running your first GitHub Actions workflow" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now that we've created our system monitoring workflow, let's set it up on GitHub and run it. First, push everything we have to a new GitHub repository:\n", + "\n", + "```bash\n", + "git remote add origin https://github.com/your-username/your-repository.git\n", + "git branch -M main\n", + "git push -u origin main\n", + "```\n", + "\n", + "Once the workflow file is pushed, GitHub automatically detects it and displays in the \"Actions\" tab of your repository. The workflow is scheduled so you don't need to do anything - the first workflow run will happen within 30 minutes (remember how we set the running interval to `*/30` with cron). Since the workflow also includes a `workflow_dispatch` field, you can trigger it manually by clicking on the \"Run workflow\" button. \n", + "\n", + "After clicking the button, a new run appears within a few seconds (refresh if you don't see it). To see the workflow run in real-time, click on it and expand the `monitor` job. You'll see each step executing:\n", + "\n", + "- Checking out repository\n", + "- Setting up Python\n", + "- Installing dependencies\n", + "- Running tests\n", + "- Collecting metrics" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Committing changes made by GitHub Actions workflows" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Right now, our workflow file has a problem - while it successfully collects metrics, it doesn't commit and push the changes back to the repository. This means that although metrics are being gathered, they aren't being saved in version control. Let's modify the workflow to automatically commit and push the collected metrics:\n", + "\n", + "```yaml\n", + "name: System Monitor\n", + "\n", + "on:\n", + " schedule:\n", + " - cron: '*/30 * * * *'\n", + " workflow_dispatch:\n", + "\n", + "permissions:\n", + " contents: write\n", + "\n", + "jobs:\n", + " monitor:\n", + " runs-on: ubuntu-latest\n", + " steps:\n", + " - uses: actions/checkout@v3\n", + " \n", + " - name: Set up Python\n", + " uses: actions/setup-python@v4\n", + " with:\n", + " python-version: '3.10'\n", + " \n", + " - name: Install dependencies\n", + " run: |\n", + " python -m pip install --upgrade pip\n", + " pip install -r requirements.txt\n", + " \n", + " - name: Run tests\n", + " run: python -m pytest\n", + " \n", + " - name: Collect metrics\n", + " run: python main.py\n", + " \n", + " - name: Commit and push changes\n", + " run: |\n", + " git config --global user.name 'github-actions[bot]'\n", + " git config --global user.email 'github-actions[bot]@users.noreply.github.com'\n", + " git add metrics.json\n", + " git commit -m \"Update metrics\" || exit 0\n", + " git push\n", + "```\n", + "\n", + "The key changes in this updated workflow are:\n", + "\n", + "1. Added `permissions` block with `contents: write` to allow the workflow to push changes back to the repository.\n", + "2. Added a new \"Commit and push changes\" step that:\n", + " - Configures git user identity as `github-actions` bot\n", + " - Stages the `metrics.json` file\n", + " - Creates a commit with message \"Update metrics\" \n", + " - Pushes the changes back to the repository\n", + " \n", + "The \"|| exit 0\" after `git commit` ensures the workflow doesn't fail if there are no changes to commit.\n", + "\n", + "This allows the workflow to automatically save and version control the metrics it collects. Let's commit the changes to the workflow and push:\n", + "\n", + "```bash\n", + "git add .\n", + "git commit -m \"Add a commit step to the workflow file\"\n", + "git push origin main\n", + "```" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "After this change, try running the workflow manually and verify its success by navigating to the Actions tab in your GitHub repository. You should see the workflow run and the `metrics.json` file updated with new data." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Managing Sensitive Data and Environment Variables" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "When building automated workflows with GitHub Actions, proper handling of sensitive data like API keys, passwords, and access tokens is crucial for security. Let's explore best practices for managing these credentials." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Understanding environment variables in GitHub Actions" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Environment variables in GitHub Actions can be set at different levels:\n", + "\n", + "- Repository level (GitHub Secrets)\n", + "- Workflow level\n", + "- Job level\n", + "- Step level\n", + "\n", + "Here is how to properly configure and use them:" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### 1. Setting up repository secrets" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "First, store sensitive values as repository secrets:\n", + "\n", + "1. Navigate to your GitHub repository\n", + "2. Go to Settings → Secrets and variables → Actions\n", + "3. Click \"New repository secret\"\n", + "4. Add your secrets with descriptive names like:\n", + "\n", + "- `API_KEY`\n", + "- `DATABASE_URL`\n", + "- `AWS_ACCESS_KEY`\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### 2. Using secrets in workflows" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Reference secrets in your workflow file using the `secrets` context:\n", + "\n", + "```yaml\n", + "name: Web Scraping Pipeline\n", + "# ... the rest of the file\n", + "\n", + "jobs:\n", + " scrape:\n", + " runs-on: ubuntu-latest\n", + " \n", + " steps:\n", + " # ... the rest of the steps\n", + " \n", + " - name: Run scraper\n", + " env:\n", + " API_KEY: ${{ secrets.API_KEY }}\n", + " DATABASE_URL: ${{ secrets.DATABASE_URL }}\n", + " run: python scraper.py\n", + "```\n", + "\n", + "Above, the \"Run scraper\" step executes `scraper.py` which relies on two environment variables configured through the `secrets` context. " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### 3. Local development with .env files" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "For local development, use `.env` files to manage environment variables:\n", + "\n", + "```bash\n", + "touch .env\n", + "echo \"API_KEY='your-api-key-here'\" >> .env\n", + "echo \"DATABASE_URL='postgresql://user:pass@localhost:5432/db'\" >> .env\n", + "```\n", + "\n", + "Create a `.gitignore` file to prevent committing sensitive data:\n", + "\n", + "```bash\n", + "echo \".env\" >> .gitignore\n", + "```" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### 4. Loading environment variables in Python" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Use `python-dotenv` to load variables from `.env` files:\n", + "\n", + "```python\n", + "from dotenv import load_dotenv\n", + "import os\n", + "\n", + "# Load environment variables from .env file\n", + "load_dotenv()\n", + "\n", + "# Access variables\n", + "api_key = os.getenv('API_KEY')\n", + "database_url = os.getenv('DATABASE_URL')\n", + "\n", + "if not api_key or not database_url:\n", + " raise ValueError(\"Missing required environment variables\")\n", + "```\n", + "\n", + "This code demonstrates loading environment variables from a `.env` file using `python-dotenv`. The `load_dotenv()` function reads the variables, which can then be accessed via `os.getenv()`. Basic validation ensures required variables exist." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### 5. Environment variable validation" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Create a configuration class to validate environment variables:" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "```python\n", + "from pydantic import BaseSettings, SecretStr\n", + "\n", + "\n", + "class Settings(BaseSettings):\n", + " api_key: SecretStr\n", + " database_url: str\n", + " debug_mode: bool = False\n", + "\n", + " class Config:\n", + " env_file = \".env\"\n", + " env_file_encoding = \"utf-8\"\n", + "\n", + "\n", + "# Initialize settings\n", + "settings = Settings()\n", + "```" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "This approach using Pydantic provides several advantages for environment variable management:\n", + "\n", + "1. Type validation - Pydantic automatically validates types and converts values\n", + "2. Default values - The `debug_mode` demonstrates setting defaults\n", + "3. Secret handling - `SecretStr` provides secure handling of sensitive values\n", + "4. Centralized config - All environment variables are defined in one place\n", + "5. IDE support - Get autocomplete and type hints when using the settings object\n", + "\n", + "The `Settings` class inherits from `BaseSettings` which automatically loads from environment variables. The `Config` class specifies to also load from a `.env` file.\n", + "\n", + "Using `settings = Settings()` creates a validated configuration object that can be imported and used throughout the application. This is more robust than accessing `os.environ` directly.\n", + "\n", + "Example usage:\n", + "\n", + "```python\n", + "settings.api_key.get_secret_value() # Securely access API key\n", + "settings.database_url # Type-checked database URL\n", + "settings.debug_mode # Boolean with default value\n", + "```" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### 6. Handle different environments" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Handle different environments (development, staging, production) using environment-specific files:\n", + "\n", + "```bash\n", + ".env # Default environment variables\n", + ".env.development # Development-specific variables\n", + ".env.staging # Staging-specific variables\n", + ".env.production # Production-specific variables\n", + "```\n", + "\n", + "Load the appropriate file based on the environment:\n", + "\n", + "```bash\n", + "from dotenv import load_dotenv\n", + "import os\n", + "\n", + "env = os.getenv('ENVIRONMENT', 'development')\n", + "env_file = f'.env.{env}'\n", + "\n", + "load_dotenv(env_file)\n", + "```\n", + "\n", + "This approach allows you to maintain separate configurations for different environments while keeping sensitive information secure. The environment-specific files can contain different values for the same variables, such as:\n", + "\n", + "- Development environment may use local services and dummy credentials\n", + "- Staging environment may use test services with restricted access\n", + "- Production environment contains real credentials and production service endpoints\n", + "\n", + "You can also combine this with the `Pydantic` settings approach shown earlier for robust configuration management across environments.\n", + "\n", + "For example, staging might use a test database while production uses the live database:\n", + "\n", + "```bash\n", + "# .env.staging:\n", + "DATABASE_URL=postgresql://test-db.example.com\n", + "API_KEY=test-key\n", + "```\n", + "\n", + "```bash\n", + ".env.production:\n", + "DATABASE_URL=postgresql://prod-db.example.com \n", + "API_KEY=live-key\n", + "```\n", + "\n", + "This separation helps prevent accidental use of production resources during development and testing." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Building Real-World Python Workflows" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Let's explore three practical examples of GitHub Actions workflows for common Python tasks: web scraping, package publishing, and container builds." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 1. Scheduled web scraping with Firecrawl" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Web scraping is a common use case for automated workflows. Let's build a workflow that scrapes [Hacker News](https://news.ycombinator.com/) on a schedule using [Firecrawl](https://docs.firecrawl.dev), which is a Python AI-based web scraping engine designed for large-scale data collection. Here are some key benefits that make Firecrawl an excellent choice for this task:\n", + "\n", + "1. **Enterprise-grade automation and scalability** - Firecrawl streamlines web scraping with powerful automation features.\n", + "2. **AI-powered content extraction** - Maintains scraper reliability over time by identifying and extracting data based on semantic descriptions instead of relying HTML elements and CSS selectors.\n", + "3. **Handles complex scraping challenges** - Automatically manages proxies, anti-bot mechanisms, and dynamic JavaScript content.\n", + "4. **Multiple output formats** - Supports scraping and converting data in markdown, tabular, screenshots, and HTML, making it versatile for various applications.\n", + "5. **Built-in rate limiting and request management** - Ensures efficient and compliant data extraction.\n", + "6. **Geographic location customization** - Avoids IP bans by customizing the geographic location of requests." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Let's build our web scraping workflow using Firecrawl to demonstrate these capabilities.\n", + "\n", + "```bash\n", + "# Create project directory and install dependencies\n", + "mkdir hacker-news-scraper && cd hacker-news-scraper\n", + "pip install firecrawl-py pydantic python-dotenv\n", + "\n", + "# Create necessary files\n", + "touch requirements.txt scraper.py .env\n", + "\n", + "# Add dependencies to requirements.txt\n", + "echo \"firecrawl-py\\npydantic\\npython-dotenv\" > requirements.txt\n", + "\n", + "# Add Firecrawl API key to .env (get your key at firecrawl.dev/signin/signup)\n", + "echo \"FIRECRAWL_API_KEY='your_api_key_here'\" > .env\n", + "```" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Open the scraper script where we define our scraping logic:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# scraper.py\n", + "import json\n", + "from firecrawl import FirecrawlApp\n", + "from dotenv import load_dotenv\n", + "from pydantic import BaseModel, Field\n", + "from typing import List\n", + "from datetime import datetime\n", + "\n", + "load_dotenv()\n", + "\n", + "BASE_URL = \"https://news.ycombinator.com/\"" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "First, we import necessary libraries and packages, also defining a base URL we are going to scrape." + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [], + "source": [ + "class NewsItem(BaseModel):\n", + " title: str = Field(description=\"The title of the news item\")\n", + " source_url: str = Field(description=\"The URL of the news item\")\n", + " author: str = Field(\n", + " description=\"The URL of the post author's profile concatenated with the base URL.\"\n", + " )\n", + " rank: str = Field(description=\"The rank of the news item\")\n", + " upvotes: str = Field(description=\"The number of upvotes of the news item\")\n", + " date: str = Field(description=\"The date of the news item.\")\n", + "\n", + "\n", + "class NewsData(BaseModel):\n", + " news_items: List[NewsItem]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We define two Pydantic models to structure our scraped data:\n", + "\n", + "1. `NewsItem` - Represents a single news item with fields for title, URL, author, rank, upvotes and date\n", + "2. `NewsData` - Contains a list of `NewsItem` objects\n", + "\n", + "These models help validate the scraped data and ensure it matches our expected schema. They also make it easier to serialize/deserialize the data when saving to JSON. Using `Field` with a detailed description is crucial because Firecrawl uses these definitions to automatically detect the HTMl elements and CSS selectors we are looking for.\n" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [], + "source": [ + "def get_news_data():\n", + " app = FirecrawlApp()\n", + "\n", + " data = app.scrape_url(\n", + " BASE_URL,\n", + " params={\n", + " \"formats\": [\"extract\"],\n", + " \"extract\": {\"schema\": NewsData.model_json_schema()},\n", + " },\n", + " )\n", + "\n", + " return data" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The `get_news_data()` function uses Firecrawl to scrape Hacker News. It creates a `FirecrawlApp` instance and calls `scrape_url()` with the `BASE_URL` and parameters specifying we want to extract data according to our `NewsData` schema. The schema helps Firecrawl automatically identify and extract the relevant HTML elements. The function returns the scraped data containing news items with their titles, URLs, authors, ranks, upvotes and dates." + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [], + "source": [ + "def save_firecrawl_news_data():\n", + " \"\"\"\n", + " Save the scraped news data to a JSON file with the current date in the filename.\n", + " \"\"\"\n", + " # Get the data\n", + " data = get_news_data()\n", + " # Format current date for filename\n", + " date_str = datetime.now().strftime(\"%Y_%m_%d_%H_%M\")\n", + " filename = f\"firecrawl_hacker_news_data_{date_str}.json\"\n", + "\n", + " # Save the news items to JSON file\n", + " with open(filename, \"w\") as f:\n", + " json.dump(data[\"extract\"][\"news_items\"], f, indent=4)\n", + "\n", + " print(f\"{datetime.now()}: Successfully saved the news data.\")\n", + " \n", + "if __name__ == \"__main__\":\n", + " save_firecrawl_news_data()\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The `save_firecrawl_news_data()` function handles saving the scraped Hacker News data to a JSON file. It first calls `get_news_data()` to fetch the latest data from Hacker News. Then it generates a filename using the current timestamp to ensure uniqueness. The data is saved to a JSON file with that filename, with the news items formatted with proper indentation for readability. Finally, it prints a confirmation message with the current timestamp when the save is complete. This function provides a convenient way to store snapshots of Hacker News data that can be analyzed later.\n", + "\n", + "Combine these snippets into the `scraper.py` script. Then, we can write a workflow that executes it on schedule:\n", + "\n", + "```bash\n", + "cd .. # Change back to the project root directory\n", + "touch .github/workflows/hacker-news-scraper.py # Create the workflow file\n", + "```\n", + "\n", + "Here is what the workflow file must look like:\n", + "\n", + "```yaml\n", + "name: Run Hacker News Scraper\n", + "\n", + "permissions:\n", + " contents: write\n", + "\n", + "on:\n", + " schedule:\n", + " - cron: \"0 */6 * * *\"\n", + " workflow_dispatch:\n", + "\n", + "jobs:\n", + " scrape:\n", + " runs-on: ubuntu-latest\n", + " \n", + " steps:\n", + " - uses: actions/checkout@v3\n", + " \n", + " - name: Set up Python\n", + " uses: actions/setup-python@v4\n", + " with:\n", + " python-version: \"3.10\"\n", + " \n", + " - name: Install dependencies\n", + " run: |\n", + " python -m pip install --upgrade pip\n", + " pip install -r hacker-news-scraper/requirements.txt\n", + " \n", + " - name: Run scraper\n", + " run: python hacker-news-scraper/scraper.py\n", + " \n", + " - name: Commit and push if changes\n", + " run: |\n", + " git config --local user.email \"github-actions[bot]@users.noreply.github.com\"\n", + " git config --local user.name \"github-actions[bot]\"\n", + " git add .\n", + " git commit -m \"Update scraped data\" -a || exit 0\n", + " git push\n", + "```\n", + "\n", + "This workflow runs our Hacker News scraper every 6 hours using GitHub Actions. It sets up Python, installs dependencies, executes the scraper, and automatically commits any new data to the repository. The workflow can also be triggered manually using the `workflow_dispatch` event. One important note about the paths specified in the workflow file is that they must match your repository's directory structure exactly, including the requirements.txt location and the path to your scraper script.\n", + "\n", + "To enable the workflow, simply push all the changes to GitHub and test it through the UI. The next runs will be automatic.\n", + "\n", + "```bash\n", + "git add .\n", + "git commit -m \"Add a scraping workflow\"\n", + "git push origin main\n", + "```\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 2. Package publishing workflow" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Publishing Python packages to PyPI (Python Package Index) typically involves several steps. First, developers need to prepare their package by creating a proper directory structure, writing setup files, and ensuring all metadata is correct. Then, the package needs to be built into distribution formats - both source distributions (`sdist`) and wheel distributions (`bdist_wheel`). Finally, these distribution files are uploaded to PyPI using tools like `twine`. This process often requires careful version management and proper credentials for the package repository. While this can be done manually, automating it with CI/CD pipelines like GitHub Actions ensures consistency and reduces human error in the release process.\n", + "\n", + "For example, the following workflow publishes a new version of a package when you create a new release:\n", + "\n", + "```yaml\n", + "name: Publish Python Package\n", + "on:\n", + " release:\n", + " types: [created]\n", + "\n", + "jobs:\n", + " deploy:\n", + " runs-on: ubuntu-latest\n", + " steps:\n", + " - uses: actions/checkout@v3\n", + " \n", + " - name: Set up Python\n", + " uses: actions/setup-python@v4\n", + " with:\n", + " python-version: '3.10'\n", + " \n", + " - name: Install dependencies\n", + " run: |\n", + " python -m pip install --upgrade pip\n", + " pip install build twine\n", + " \n", + " - name: Build package\n", + " run: python -m build\n", + " \n", + " - name: Publish to PyPI\n", + " env:\n", + " TWINE_USERNAME: __token__\n", + " TWINE_PASSWORD: ${{ secrets.PYPI_API_TOKEN }}\n", + " run: |\n", + " python -m twine upload dist/*\n", + "```\n", + "\n", + "The workflow automates publishing Python packages to PyPI when GitHub releases are created. \n", + "\n", + "Required setup steps:\n", + "1. Package must have `setup.py` or `pyproject.toml` configured\n", + "2. Create PyPI account at `pypi.org`\n", + "3. Generate PyPI API token with upload permissions\n", + "4. Store token as `PYPI_API_TOKEN` in repository secrets\n", + "\n", + "The workflow process:\n", + "1. Triggers on new GitHub release\n", + "2. Checks out code and sets up Python\n", + "3. Installs build tools\n", + "4. Creates distribution packages\n", + "5. Uploads to PyPI using stored token\n", + "\n", + "The `__token__` username is used with PyPI's token authentication, while the actual token is accessed securely through GitHub secrets." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 3. Container build and push workflow" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "GitHub Actions can also automate building and pushing Docker containers to container registries like Docker Hub or GitHub Container Registry (GHCR). This workflow is useful for maintaining containerized applications and ensuring your latest code changes are packaged into updated container images.\n", + "\n", + "The process typically involves:\n", + "\n", + "1. Building a Docker image from your `Dockerfile`\n", + "2. Tagging the image with version/metadata\n", + "3. Authenticating with the container registry\n", + "4. Pushing the tagged image to the registry\n", + "\n", + "This automation ensures your container images stay in sync with code changes and are readily available for deployment. Here is a sample workflow containing these steps:\n", + "\n", + "```yaml\n", + "name: Build and Push Container\n", + "on:\n", + " push:\n", + " branches: [main]\n", + " paths:\n", + " - 'Dockerfile'\n", + " - 'src/**'\n", + " workflow_dispatch:\n", + "\n", + "jobs:\n", + " build:\n", + " runs-on: ubuntu-latest\n", + " steps:\n", + " - uses: actions/checkout@v3\n", + " \n", + " - name: Set up Docker Buildx\n", + " uses: docker/setup-buildx-action@v2\n", + " \n", + " - name: Login to Docker Hub\n", + " uses: docker/login-action@v2\n", + " with:\n", + " username: ${{ secrets.DOCKERHUB_USERNAME }}\n", + " password: ${{ secrets.DOCKERHUB_TOKEN }}\n", + " \n", + " - name: Build and push\n", + " uses: docker/build-push-action@v4\n", + " with:\n", + " context: .\n", + " push: true\n", + " tags: |\n", + " user/app:latest\n", + " user/app:${{ github.sha }}\n", + "```" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "This workflow introduces a few new GitHub Actions concepts and syntax:\n", + "\n", + "The `paths` trigger filter ensures the workflow only runs when changes are made to the Dockerfile or files in the `src` directory, preventing unnecessary builds.\n", + "\n", + "`docker/setup-buildx-action` configures Docker Buildx, which provides enhanced build capabilities including multi-platform builds and build caching.\n", + "\n", + "`docker/login-action` handles registry authentication. Before using this, you must:\n", + "\n", + "1. [Create a Docker Hub account](https://app.docker.com/signup)\n", + "2. Generate an access token in Docker Hub settings\n", + "3. Add `DOCKERHUB_USERNAME` and `DOCKERHUB_TOKEN` as repository secrets in GitHub\n", + "\n", + "`docker/build-push-action` is a specialized action for building and pushing Docker images. The configuration shows:\n", + "- `context: .` (builds from current directory)\n", + "- `push: true` (automatically pushes after building)\n", + "- `tags:` specifies multiple tags including:\n", + " - `latest:` rolling tag for most recent version\n", + " - `github.sha:` unique tag using commit hash for versioning\n", + "\n", + "The workflow assumes you have:\n", + "- A valid Dockerfile in your repository\n", + "- Required application code in `src` directory\n", + "- Docker Hub repository permissions\n", + "- Properly configured repository secrets\n", + "\n", + "When this workflow runs successfully, it produces a containerized version of your application that is automatically published to Docker Hub and can be pulled with either the latest tag or specific commit hash." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Conclusion" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Throughout this tutorial, we've explored the fundamentals and practical applications of GitHub Actions for Python development. From understanding core concepts like workflows, jobs, and actions, to implementing real-world examples including automated testing, web scraping, package publishing, and container builds, you've gained hands-on experience with this powerful automation platform. We've also covered critical aspects like managing sensitive data through environment variables and secrets, ensuring your automated workflows are both secure and maintainable.\n", + "\n", + "As you continue your journey with GitHub Actions, remember that automation is an iterative process. Start small with basic workflows, test thoroughly, and gradually add complexity as needed. The examples provided here serve as templates that you can adapt and expand for your specific use cases. For further learning, explore the [GitHub Actions documentation](https://docs.github.com/en/actions), join the [GitHub Community Forum](https://github.community/), and experiment with the vast ecosystem of pre-built actions available in the [GitHub Marketplace](https://github.com/marketplace?type=actions). Whether you're building a personal project or managing enterprise applications, GitHub Actions provides the tools you need to streamline your development workflow and focus on what matters most - writing great code.\n", + "\n", + "If you want to learn more about Firecrawl, the web scraping API we used today, you can read the following posts:\n", + "\n", + "- [Guide to Scheduling Web Scrapers in Python](https://www.firecrawl.dev/blog/automated-web-scraping-free-2025)\n", + "- [Mastering Firecrawl's Scrape Endpoint](https://www.firecrawl.dev/blog/mastering-firecrawl-scrape-endpoint)\n", + "- [Getting Started With Predicted Outputs in OpenAI](https://www.firecrawl.dev/blog/getting-started-with-predicted-outputs-openai)\n", + "\n", + "Thank you for reading!" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": ".venv", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.10.15" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/examples/blog-articles/github-actions-tutorial/notebook.md b/examples/blog-articles/github-actions-tutorial/notebook.md new file mode 100644 index 00000000..332a1c57 --- /dev/null +++ b/examples/blog-articles/github-actions-tutorial/notebook.md @@ -0,0 +1,1187 @@ +--- +title: Comprehensive GitHub Actions Tutorial For Beginners With Examples in Python +description: Learn how to automate software development workflows with GitHub Actions. This beginner-friendly tutorial covers workflow creation, CI/CD pipelines, scheduled tasks, and practical Python examples to help you streamline your development process. +slug: github-actions-tutorial-for-beginners-with-python-examples +date: Dec 9, 2024 +author: bex_tuychiev +image: /images/blog/github-actions-tutorial/github-actions-tutorial-for-beginners-with-python-examples.jpg +categories: [tutorials] +keywords: [github actions, github actions tutorial, github actions environment variables, github actions secrets, github actions workflow, github actions run, github actions jobs] +--- + +## Introduction + +GitHub Actions is a powerful automation platform that helps developers automate repetitive, time-consuming software development workflows. Instead of manually running tests, executing scripts at intervals, or performing any programmable task, you can let GitHub Actions handle those operations when specific events occur in your repository. In this tutorial, you will learn how to use this critical feature of GitHub and design your own workflows for several real-world use cases. + +### What are GitHub Actions? + +At its core, [GitHub Actions](https://docs.github.com/en/actions) is a continuous integration and continuous delivery (CI/CD) platform that lets you automate various tasks directly from your GitHub repository. Think of it as your personal automation assistant, which can: + +- Run your Python tests automatically when you push code +- Deploy your application when you create a new release +- Send notifications when issues are created +- Schedule tasks to run at specific times +- And much more... + +### Why automate with GitHub Actions? + +Consider this common scenario: You are building a Python application that scrapes product prices from various e-commerce websites. Without GitHub Actions, you would need to: + +1. Manually run your tests after each code change +2. Remember to execute the scraper at regular intervals +3. Deploy updates to your production environment +4. Keep track of environment variables and secrets + +With GitHub Actions, all of these tasks can be automated through workflows, typically written in YAML files like this: + +```yaml +name: Run Price Scraper + +on: + schedule: + - cron: '0 */12 * * *' # Runs every 12 hours + workflow_dispatch: # Allows manual triggers + +jobs: + scrape: + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v3 + - name: Set up Python + uses: actions/setup-python@v4 + with: + python-version: '3.9' + + - name: Run scraper + env: + API_KEY: ${{ secrets.FIRECRAWL_API_KEY }} + run: python scraper.py +``` + +This workflow automatically runs a scraper every 12 hours, handles Python version setup, and securely manages API keys—all without manual intervention. + +### What we'll build in this tutorial + +Throughout this tutorial, we'll build several practical GitHub Actions workflows for Python applications. You will learn how to: + +1. Create basic and advanced workflow configurations +2. Work with environment variables and secrets +3. Set up automated testing pipelines +4. Build a real-world example: an automated scraping system using [Firecrawl](https://firecrawl.dev) in Python +5. Implement best practices for security and efficiency + +By the end, you will have hands-on experience with GitHub Actions and be able to automate your own Python projects effectively. + +> Note: Even though code examples are Python, the concepts and hands-on experience you will gain from the tutorial will apply to any programming language. + +Let's start by understanding the core concepts that make GitHub Actions work. + +## How to Use This GitHub Actions Tutorial + +Before diving into the technical details, here's how to get the most from this GitHub Actions tutorial: + +1. Follow the examples sequentially - each builds on previous concepts +2. Try running the workflows yourself - hands-on practice is crucial +3. Refer back to earlier sections as needed +4. Use the provided code samples as templates for your own projects + +## Understanding GitHub Actions Core Concepts + +To write your own GitHub Actions workflows, you need to understand how its different components work together. Let's break down these core concepts using a practical example: automating tests for a simple Python script. + +### GitHub Actions workflows and their components + +A workflow is an automated process that you define in a YAML file within your repository's `.github/workflows` directory. Think of it as a recipe that tells GitHub exactly what to do, how and when to do it. You can transform virtually any programmable task into a GitHub workflow as long as it can be executed in a Linux, Windows, or macOS environment and doesn't require direct user interaction. + +Here is a basic workflow structure: + +```yaml +# test.yaml +name: Python Tests +on: [push, pull_request] + +jobs: + test: + runs-on: ubuntu-latest + steps: + - name: Check out repository + uses: actions/checkout@v3 + + - name: Set up Python + uses: actions/setup-python@v4 + with: + python-version: '3.9' +``` + +The YAML file starts by specifying the name of the workflow with the `name` field. Immediately after, we specify the events that triggers this workflow. In this example, the workflow automatically executes on each `git push` command and pull request. We will learn more about events and triggers in a later section. + +Next, we define jobs, which are the building blocks of workflows. Each job: + +- Runs on a fresh virtual machine (called a runner) that is specified using the `runs-on` field. +- Can execute multiple steps in sequence +- Can run in parallel with other jobs +- Has access to shared workflow data + +For example, you might have separate jobs for testing and deployment: + +```yaml +jobs: + test: + runs-on: ubuntu-latest + ... + deploy: + runs-on: macos-latest + ... +``` + +Each job can contain one or more `steps` that are executed sequentially. Steps are individual tasks that make up your job. They can: + +- Run commands or shell scripts +- Execute actions (reusable units of code) +- Run commands in Docker containers +- Reference other GitHub repositories + +For example, a typical test job might have steps to: + +1. Check out (clone) code from your GitHub repository +2. Set up dependencies +3. Run tests +4. Upload test results + +Each step can specify: + +- `name`: A display name for the step +- `uses`: Reference to an action to run +- `run`: Any operating-system specific terminal command like `pip install package` or `python script.py` +- `with`: Input parameters for actions +- `env`: Environment variables for the step + +Now that we understand jobs and steps, let's look at Actions - the reusable building blocks that make GitHub Actions so powerful. + +### Actions + +The `test.yaml` file from earlier has a single `test` job that executes two steps: + +1. Checking out the repository code using a built-in `actions/checkout@v3` action. +2. Setting up a Python environment with `actions/setup-python@v4` and `python-version` as an input parameter for said action. + +```bash +# test.yaml +name: Python Tests +on: [push, pull_request] + +jobs: + test: + runs-on: ubuntu-latest + steps: + - name: Check out repository + uses: actions/checkout@v3 + + - name: Set up Python + uses: actions/setup-python@v4 + with: + python-version: '3.9' +``` + +Actions are reusable units of code that can be shared across workflows (this is where GitHub Actions take its name). They are like pre-packaged functions that handle common tasks. For instance, instead of writing code to set up Node.js or caching dependencies, you can use the GitHub official actions like: + +- `actions/setup-node@v3` - Sets up Node.js environment +- `actions/cache@v3` - Caches dependencies and build outputs +- `actions/upload-artifact@v3` - Uploads workflow artifacts +- `actions/download-artifact@v3` - Downloads workflow artifacts +- `actions/labeler@v4` - Automatically labels pull requests +- `actions/stale@v8` - Marks and closes stale issues/PRs +- `actions/dependency-review-action@v3` - Reviews dependency changes + +### Events and triggers + +Events are specific activities that trigger a workflow. Common triggers include: + +- `push`: When code is pushed to the repository +- `pull_request`: When a PR is opened or updated +- `schedule`: At specified times using cron syntax +- `workflow_dispatch`: Manual trigger via GitHub UI + +Here is how you can configure multiple triggers: + +```yaml +name: Comprehensive Workflow +on: + push: + branches: [main] + pull_request: + branches: [main] + schedule: + - cron: '0 0 * * *' # Daily at midnight + workflow_dispatch: # Manual trigger + +jobs: + process: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + - name: Run daily tasks + run: python daily_tasks.py + env: + API_KEY: ${{ secrets.FIRECRAWL_API_KEY }} +``` + +This example shows how a single workflow can: + +- Run automatically on code changes on `git push` +- Execute daily scheduled tasks with cron +- Be triggered automatically when needed through the GitHub UI +- Handle sensitive data like API keys securely + +### Cron jobs in GitHub Actions + +To use the `schedule` trigger effectively in GitHub Actions, you'll need to understand cron syntax. This powerful scheduling format lets you automate workflows to run at precise times. The syntax uses five fields to specify when a job should run: + +![Cron syntax diagram showing minute, hour, day of month, month, and day of week fields with examples and explanations for GitHub Actions scheduling](github-actions-tutorial-images/cron-syntax.png) + +Here are some common cron schedule examples: + +```yaml +# Daily at 3:30 AM UTC +- cron: '30 3 * * *' + +# Every Monday at 1:00 PM UTC +- cron: '0 13 * * 1' + +# Every 6 hours at the first minute +- cron: '0 */6 * * *' + +# At minute 15 of every hour +- cron: '15 * * * *' + +# Every weekday (Monday through Friday) +- cron: '0 0 * * 1-5' + +# Each day at 12am, 6am, 12pm, 6pm on Tuesday, Thursday, Saturday +- cron: '0 0,6,12,18 * * 1,3,5' +``` + +Here is a sample workflow for a scraping job with four different schedules (multiple schedules are allowed): + +```yaml +name: Price Scraper Schedules +on: + schedule: + - cron: '0 */4 * * *' # Every 4 hours + - cron: '30 1 * * *' # Daily at 1:30 AM UTC + - cron: '0 9 * * 1-5' # Weekdays at 9 AM UTC + +jobs: + scrape: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + - name: Run Firecrawl scraper + env: + API_KEY: ${{ secrets.FIRECRAWL_API_KEY }} + run: python scraper.py +``` + +Remember that GitHub Actions runs on UTC time, and schedules might experience slight delays during peak GitHub usage. That's why it's helpful to combine `schedule` with `workflow_dispatch` as we saw earlier - giving you both automated and manual trigger options. + +--------------- + +Understanding these core concepts allows you to create workflows that are efficient (running only when needed), secure (properly handling sensitive data), maintainable (using reusable actions) and scalable (running on different platforms). + +In the next section, we will put these concepts into practice by creating your first GitHub actions workflow. + +## Creating Your First GitHub Actions Workflow + +Let's create a practical GitHub Actions workflow from scratch. We'll build a workflow that automatically tests a Python script and runts it on a schedule - a universal task applicable to any programming language. + +### Setting up the environment + +Let's start by creating a working directory for this mini-project: + +```bash +mkdir first-workflows +cd first-workflows +``` + +Let's create the standard `.github/workflows` folder structure GitHub uses for detecting workflow files: + +```bash +mkdir -p .github/workflows +``` + +The workflow files can have any name but must have a `.yml` extension: + +```bash +touch .github/workflows/system_monitor.yml +``` + +In addition to the workflows folder, create a `tests` folder as well as a test file: + +```bash +mkdir tests +touch tests/test_main.py +``` + +We should also create the `main.py` file along with a `requirements.txt`: + +```bash +touch main.py requirements.txt +``` + +Then, add these two dependencies to `requirements.txt`: + +```text +psutil>=5.9.0 +pytest>=7.0.0 +``` + +Finally, let's initialize git and make our first commit: + +```bash +git init +git add . +git commit -m "Initial commit" +``` + +Check out the [Git documentation](https://git-scm.com/doc) if you don't have it installed already. + +### Writing your first workflow file + +Let's write the workflow logic first. Open `system_monitor.yml` and paste each code snippet we are about to define one after the other. + +- Workflow name and triggers: + +```yaml +name: System Monitoring +on: + schedule: + - cron: '*/30 * * * *' # Run every 30 minutes + workflow_dispatch: # Enables manual trigger +``` + +In this part, we give a descriptive name to the workflow that appears in GitHub's UI. Using the `on` field, we set the workflow to run every 30 minutes and through a manual trigger. + +- Job definition: + +```yaml +jobs: + run_script: + runs-on: ubuntu-latest +``` + +`jobs` contains all the jobs in this workflow and it has a `run_script` name, which is a unique identifier. + +- Steps: + +There are five steps that run sequentially in this workflow. They are given descriptive names that appear in the GitHub UI and uses official GitHub actions and custom terminal commands. + +```yaml +jobs: + monitor: + runs-on: ubuntu-latest + + steps: + - name: Check out repository + uses: actions/checkout@v3 + + - name: Set up Python + uses: actions/setup-python@v4 + with: + python-version: '3.9' + + - name: Install dependencies + run: | + python -m pip install --upgrade pip + pip install -r requirements.txt + + - name: Run tests + run: pytest tests/ + + - name: Collect system metrics + run: python main.py +``` + +Here is what each step does: + +1. Check out repository code with `actions/checkout@v3`. +2. Configures Python 3.9 environment. +3. Runs two terminal commands that: + - Install/upgrade `pip` + - Install `pytest` package +4. Runs the tests located in the `tests` directory using `pytest`. +5. Executes the main script with `python main.py`. + +Notice the use of `|` (pipe) operator for multi-line commands. + +After you complete writing the workflow, commit the changes to Git: + +```bash +git add . +git commit -m "Add a workflow file for monitoring system resources" +``` + +### Creating the Python script + +Now, let's write the `main.py` file, which is a monitoring script that helps software developers track system resource usage over time, enabling them to identify performance bottlenecks and capacity issues in their development environment. + +```python +import psutil +import json +from datetime import datetime +from pathlib import Path +``` + +This script collects and logs system metrics over time. It uses `psutil` to gather CPU usage, memory usage, disk usage, and active process counts. The metrics are timestamped and saved to JSON files organized by date. + +The script has three main functions: + +```python +def get_system_metrics(): + """Collect key system metrics""" + metrics = { + "cpu_percent": psutil.cpu_percent(interval=1), + "memory_percent": psutil.virtual_memory().percent, + "disk_usage": psutil.disk_usage('/').percent, + "timestamp": datetime.now().isoformat() + } + + # Add running processes count + metrics["active_processes"] = len(psutil.pids()) + + return metrics +``` + +`get_system_metrics()` - Collects current system metrics including CPU percentage, memory usage percentage, disk usage percentage, timestamp, and count of active processes. + +```python +def save_metrics(metrics): + """Save metrics to a JSON file with today's date""" + date_str = datetime.now().strftime("%Y-%m-%d") + reports_dir = Path("system_metrics") + reports_dir.mkdir(exist_ok=True) + + # Save to daily file + file_path = reports_dir / f"metrics_{date_str}.json" + + # Load existing metrics if file exists + if file_path.exists(): + with open(file_path) as f: + daily_metrics = json.load(f) + else: + daily_metrics = [] + + # Append new metrics + daily_metrics.append(metrics) + + # Save updated metrics + with open(file_path, 'w') as f: + json.dump(daily_metrics, f, indent=2) +``` + +`save_metrics()` - Handles saving the metrics to JSON files. It creates a `system_metrics` directory if needed, and saves metrics to date-specific files (e.g. `metrics_2024-12-12.json`). If a file for the current date exists, it loads and appends to it, otherwise creates a new file. + +```python +def main(): + try: + metrics = get_system_metrics() + save_metrics(metrics) + print(f"System metrics collected at {metrics['timestamp']}") + print(f"CPU: {metrics['cpu_percent']}% | Memory: {metrics['memory_percent']}%") + return True + except Exception as e: + print(f"Error collecting metrics: {str(e)}") + return False + +if __name__ == "__main__": + main() +``` + +`main()` - Orchestrates the metric collection and saving process. It calls `get_system_metrics()`, saves the data via `save_metrics()`, prints current CPU and memory usage to console, and handles any errors that occur during execution. + +The script can be run directly or imported as a module. When run directly (which is what happens in a GitHub Actions workflow), it executes the `main()` function which collects and saves one set of metrics. + +Combine the code snippets above into the `main.py` file and commit the changes: + +```bash +git add . +git commit -m "Add the main.py functionality" +``` + +### Adding tests + +Testing is a critical part of software engineering workflows for several reasons: + +1. Reliability: Tests help ensure code behaves correctly and consistently across changes. +2. Regression prevention: Tests catch when new changes break existing functionality. +3. Documentation: Tests serve as executable documentation of expected behavior +4. Design feedback: Writing tests helps identify design issues early +5. Confidence: A good test suite gives confidence when refactoring or adding features + +For our system metrics collection script, tests would be valuable to verify: + +- The `get_system_metrics()` function returns data in the expected format with valid ranges +- The `save_metrics()` function properly handles file operations and JSON serialization +- Error handling works correctly for various failure scenarios +- The `main()` function orchestrates the workflow as intended + +With that said, let's work on the `tests/test_main.py` file: + +```python +import json +from datetime import datetime +from pathlib import Path +from main import get_system_metrics, save_metrics +``` + +The test file we are about to write demonstrates key principles of testing with `pytest`, a popular Python testing framework. Pytest makes it easy to write tests by using simple `assert` statements and providing a rich set of features for test organization and execution. The test functions are automatically discovered by `pytest` when their names start with `test_`, and each function tests a specific aspect of the system's functionality. + +```python +def test_get_system_metrics(): + """Test if system metrics are collected correctly""" + metrics = get_system_metrics() + + # Check if all required metrics exist and are valid + assert 0 <= metrics['cpu_percent'] <= 100 + assert 0 <= metrics['memory_percent'] <= 100 + assert metrics['active_processes'] > 0 + assert 'timestamp' in metrics +``` + +In this example, we have two test functions that verify different components of our metrics collection system. The first test, `test_get_system_metrics()`, checks if the metrics collection function returns data in the expected format and with valid ranges. It uses multiple assert statements to verify that CPU and memory percentages are between 0 and 100, that there are active processes, and that a timestamp is included. This demonstrates the practice of testing both the structure of returned data and the validity of its values. + +```python +def test_save_and_read_metrics(): + """Test if metrics are saved and can be read back""" + # Get and save metrics + metrics = get_system_metrics() + save_metrics(metrics) + + # Check if file exists and contains data + date_str = datetime.now().strftime("%Y-%m-%d") + file_path = Path("system_metrics") / f"metrics_{date_str}.json" + + assert file_path.exists() + with open(file_path) as f: + saved_data = json.load(f) + + assert isinstance(saved_data, list) + assert len(saved_data) > 0 +``` + +The second test, `test_save_and_read_metrics()`, showcases integration testing by verifying that metrics can be both saved to and read from a file. It follows a common testing pattern: arrange (setup the test conditions), act (perform the operations being tested), and assert (verify the results). The test ensures that the file is created in the expected location and that the saved data maintains the correct structure. This type of test is particularly valuable as it verifies that different components of the system work together correctly. + +Combine the above code snippets and commit the changes to GitHub: + +```bash +git add . +git commit -m "Write tests for main.py" +``` + +### Running your first GitHub Actions workflow + +Now that we've created our system monitoring workflow, let's set it up on GitHub and run it. First, push everything we have to a new GitHub repository: + +```bash +git remote add origin https://github.com/your-username/your-repository.git +git branch -M main +git push -u origin main +``` + +Once the workflow file is pushed, GitHub automatically detects it and displays in the "Actions" tab of your repository. The workflow is scheduled so you don't need to do anything - the first workflow run will happen within 30 minutes (remember how we set the running interval to `*/30` with cron). Since the workflow also includes a `workflow_dispatch` field, you can trigger it manually by clicking on the "Run workflow" button. + +After clicking the button, a new run appears within a few seconds (refresh if you don't see it). To see the workflow run in real-time, click on it and expand the `monitor` job. You'll see each step executing: + +- Checking out repository +- Setting up Python +- Installing dependencies +- Running tests +- Collecting metrics + +### Committing changes made by GitHub Actions workflows + +Right now, our workflow file has a problem - while it successfully collects metrics, it doesn't commit and push the changes back to the repository. This means that although metrics are being gathered, they aren't being saved in version control. Let's modify the workflow to automatically commit and push the collected metrics: + +```yaml +name: System Monitor + +on: + schedule: + - cron: '*/30 * * * *' + workflow_dispatch: + +permissions: + contents: write + +jobs: + monitor: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + + - name: Set up Python + uses: actions/setup-python@v4 + with: + python-version: '3.10' + + - name: Install dependencies + run: | + python -m pip install --upgrade pip + pip install -r requirements.txt + + - name: Run tests + run: python -m pytest + + - name: Collect metrics + run: python main.py + + - name: Commit and push changes + run: | + git config --global user.name 'github-actions[bot]' + git config --global user.email 'github-actions[bot]@users.noreply.github.com' + git add metrics.json + git commit -m "Update metrics" || exit 0 + git push +``` + +The key changes in this updated workflow are: + +1. Added `permissions` block with `contents: write` to allow the workflow to push changes back to the repository. +2. Added a new "Commit and push changes" step that: + - Configures git user identity as `github-actions` bot + - Stages the `metrics.json` file + - Creates a commit with message "Update metrics" + - Pushes the changes back to the repository + +The "|| exit 0" after `git commit` ensures the workflow doesn't fail if there are no changes to commit. + +This allows the workflow to automatically save and version control the metrics it collects. Let's commit the changes to the workflow and push: + +```bash +git add . +git commit -m "Add a commit step to the workflow file" +git push origin main +``` + +After this change, try running the workflow manually and verify its success by navigating to the Actions tab in your GitHub repository. You should see the workflow run and the `metrics.json` file updated with new data. + +## Managing Sensitive Data and Environment Variables + +When building automated workflows with GitHub Actions, proper handling of sensitive data like API keys, passwords, and access tokens is crucial for security. Let's explore best practices for managing these credentials. + +### Understanding environment variables in GitHub Actions + +Environment variables in GitHub Actions can be set at different levels: + +- Repository level (GitHub Secrets) +- Workflow level +- Job level +- Step level + +Here is how to properly configure and use them: + +#### 1. Setting up the repository secrets + +First, store sensitive values as repository secrets: + +1. Navigate to your GitHub repository +2. Go to Settings → Secrets and variables → Actions +3. Click "New repository secret" +4. Add your secrets with descriptive names like: + +- `API_KEY` +- `DATABASE_URL` +- `AWS_ACCESS_KEY` + +#### 2. Using secrets in workflows + +Reference secrets in your workflow file using the `secrets` context: + +```yaml +name: Web Scraping Pipeline +# ... the rest of the file + +jobs: + scrape: + runs-on: ubuntu-latest + + steps: + # ... the rest of the steps + + - name: Run scraper + env: + API_KEY: ${{ secrets.API_KEY }} + DATABASE_URL: ${{ secrets.DATABASE_URL }} + run: python scraper.py +``` + +Above, the "Run scraper" step executes `scraper.py` which relies on two environment variables configured through the `secrets` context. + +#### 3. Local development with .env files + +For local development, use `.env` files to manage environment variables: + +```bash +touch .env +echo "API_KEY='your-api-key-here'" >> .env +echo "DATABASE_URL='postgresql://user:pass@localhost:5432/db'" >> .env +``` + +Create a `.gitignore` file to prevent committing sensitive data: + +```bash +echo ".env" >> .gitignore +``` + +#### 4. Loading environment variables in Python + +Use `python-dotenv` to load variables from `.env` files: + +```python +from dotenv import load_dotenv +import os + +# Load environment variables from .env file +load_dotenv() + +# Access variables +api_key = os.getenv('API_KEY') +database_url = os.getenv('DATABASE_URL') + +if not api_key or not database_url: + raise ValueError("Missing required environment variables") +``` + +This code demonstrates loading environment variables from a `.env` file using `python-dotenv`. The `load_dotenv()` function reads the variables, which can then be accessed via `os.getenv()`. Basic validation ensures required variables exist. + +#### 5. Environment variable validation + +Create a configuration class to validate environment variables: + +```python +from pydantic import BaseSettings, SecretStr + + +class Settings(BaseSettings): + api_key: SecretStr + database_url: str + debug_mode: bool = False + + class Config: + env_file = ".env" + env_file_encoding = "utf-8" + + +# Initialize settings +settings = Settings() +``` + +This approach using Pydantic provides several advantages for environment variable management: + +1. Type validation - Pydantic automatically validates types and converts values +2. Default values - The `debug_mode` demonstrates setting defaults +3. Secret handling - `SecretStr` provides secure handling of sensitive values +4. Centralized config - All environment variables are defined in one place +5. IDE support - Get autocomplete and type hints when using the settings object + +The `Settings` class inherits from `BaseSettings` which automatically loads from environment variables. The `Config` class specifies to also load from a `.env` file. + +Using `settings = Settings()` creates a validated configuration object that can be imported and used throughout the application. This is more robust than accessing `os.environ` directly. + +Example usage: + +```python +settings.api_key.get_secret_value() # Securely access API key +settings.database_url # Type-checked database URL +settings.debug_mode # Boolean with default value +``` + +#### 6. Handle different environments + +Handle different environments (development, staging, production) using environment-specific files: + +```bash +.env # Default environment variables +.env.development # Development-specific variables +.env.staging # Staging-specific variables +.env.production # Production-specific variables +``` + +Load the appropriate file based on the environment: + +```bash +from dotenv import load_dotenv +import os + +env = os.getenv('ENVIRONMENT', 'development') +env_file = f'.env.{env}' + +load_dotenv(env_file) +``` + +This approach allows you to maintain separate configurations for different environments while keeping sensitive information secure. The environment-specific files can contain different values for the same variables, such as: + +- Development environment may use local services and dummy credentials +- Staging environment may use test services with restricted access +- Production environment contains real credentials and production service endpoints + +You can also combine this with the `Pydantic` settings approach shown earlier for robust configuration management across environments. + +For example, staging might use a test database while production uses the live database: + +```bash +# .env.staging: +DATABASE_URL=postgresql://test-db.example.com +API_KEY=test-key +``` + +```bash +.env.production: +DATABASE_URL=postgresql://prod-db.example.com +API_KEY=live-key +``` + +This separation helps prevent accidental use of production resources during development and testing. + +## Building Real-World Python Workflows + +Let's explore three practical examples of GitHub Actions workflows for common Python tasks: web scraping, package publishing, and container builds. + +### 1. Scheduled web scraping with Firecrawl + +Web scraping is a common use case for automated workflows. Let's build a workflow that scrapes [Hacker News](https://news.ycombinator.com/) on a schedule using [Firecrawl](https://docs.firecrawl.dev), which is a Python AI-based web scraping engine designed for large-scale data collection. Here are some key benefits that make Firecrawl an excellent choice for this task: + +1. **Enterprise-grade automation and scalability** - Firecrawl streamlines web scraping with powerful automation features. +2. **AI-powered content extraction** - Maintains scraper reliability over time by identifying and extracting data based on semantic descriptions instead of relying HTML elements and CSS selectors. +3. **Handles complex scraping challenges** - Automatically manages proxies, anti-bot mechanisms, and dynamic JavaScript content. +4. **Multiple output formats** - Supports scraping and converting data in markdown, tabular, screenshots, and HTML, making it versatile for various applications. +5. **Built-in rate limiting and request management** - Ensures efficient and compliant data extraction. +6. **Geographic location customization** - Avoids IP bans by customizing the geographic location of requests. + +Let's build our web scraping workflow using Firecrawl to demonstrate these capabilities. + +```bash +# Create project directory and install dependencies +mkdir hacker-news-scraper && cd hacker-news-scraper +pip install firecrawl-py pydantic python-dotenv + +# Create necessary files +touch requirements.txt scraper.py .env + +# Add dependencies to requirements.txt +echo "firecrawl-py\npydantic\npython-dotenv" > requirements.txt + +# Add Firecrawl API key to .env (get your key at firecrawl.dev/signin/signup) +echo "FIRECRAWL_API_KEY='your_api_key_here'" > .env +``` + +Open the scraper script where we define our scraping logic: + +```python +# scraper.py +import json +from firecrawl import FirecrawlApp +from dotenv import load_dotenv +from pydantic import BaseModel, Field +from typing import List +from datetime import datetime + +load_dotenv() + +BASE_URL = "https://news.ycombinator.com/" +``` + +First, we import necessary libraries and packages, also defining a base URL we are going to scrape. + +```python +class NewsItem(BaseModel): + title: str = Field(description="The title of the news item") + source_url: str = Field(description="The URL of the news item") + author: str = Field( + description="The URL of the post author's profile concatenated with the base URL." + ) + rank: str = Field(description="The rank of the news item") + upvotes: str = Field(description="The number of upvotes of the news item") + date: str = Field(description="The date of the news item.") + + +class NewsData(BaseModel): + news_items: List[NewsItem] +``` + +We define two Pydantic models to structure our scraped data: + +1. `NewsItem` - Represents a single news item with fields for title, URL, author, rank, upvotes and date +2. `NewsData` - Contains a list of `NewsItem` objects + +These models help validate the scraped data and ensure it matches our expected schema. They also make it easier to serialize/deserialize the data when saving to JSON. Using `Field` with a detailed description is crucial because Firecrawl uses these definitions to automatically detect the HTMl elements and CSS selectors we are looking for. + +```python +def get_news_data(): + app = FirecrawlApp() + + data = app.scrape_url( + BASE_URL, + params={ + "formats": ["extract"], + "extract": {"schema": NewsData.model_json_schema()}, + }, + ) + + return data +``` + +The `get_news_data()` function uses Firecrawl to scrape Hacker News. It creates a `FirecrawlApp` instance and calls `scrape_url()` with the `BASE_URL` and parameters specifying we want to extract data according to our `NewsData` schema. The schema helps Firecrawl automatically identify and extract the relevant HTML elements. The function returns the scraped data containing news items with their titles, URLs, authors, ranks, upvotes and dates. + +```python +def save_firecrawl_news_data(): + """ + Save the scraped news data to a JSON file with the current date in the filename. + """ + # Get the data + data = get_news_data() + # Format current date for filename + date_str = datetime.now().strftime("%Y_%m_%d_%H_%M") + filename = f"firecrawl_hacker_news_data_{date_str}.json" + + # Save the news items to JSON file + with open(filename, "w") as f: + json.dump(data["extract"]["news_items"], f, indent=4) + + print(f"{datetime.now()}: Successfully saved the news data.") + +if __name__ == "__main__": + save_firecrawl_news_data() + +``` + +The `save_firecrawl_news_data()` function handles saving the scraped Hacker News data to a JSON file. It first calls `get_news_data()` to fetch the latest data from Hacker News. Then it generates a filename using the current timestamp to ensure uniqueness. The data is saved to a JSON file with that filename, with the news items formatted with proper indentation for readability. Finally, it prints a confirmation message with the current timestamp when the save is complete. This function provides a convenient way to store snapshots of Hacker News data that can be analyzed later. + +Combine these snippets into the `scraper.py` script. Then, we can write a workflow that executes it on schedule: + +```bash +cd .. # Change back to the project root directory +touch .github/workflows/hacker-news-scraper.py # Create the workflow file +``` + +Here is what the workflow file must look like: + +```yaml +name: Run Hacker News Scraper + +permissions: + contents: write + +on: + schedule: + - cron: "0 */6 * * *" + workflow_dispatch: + +jobs: + scrape: + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v3 + + - name: Set up Python + uses: actions/setup-python@v4 + with: + python-version: "3.10" + + - name: Install dependencies + run: | + python -m pip install --upgrade pip + pip install -r hacker-news-scraper/requirements.txt + + - name: Run scraper + run: python hacker-news-scraper/scraper.py + + - name: Commit and push if changes + run: | + git config --local user.email "github-actions[bot]@users.noreply.github.com" + git config --local user.name "github-actions[bot]" + git add . + git commit -m "Update scraped data" -a || exit 0 + git push +``` + +This workflow runs our Hacker News scraper every 6 hours using GitHub Actions. It sets up Python, installs dependencies, executes the scraper, and automatically commits any new data to the repository. The workflow can also be triggered manually using the `workflow_dispatch` event. One important note about the paths specified in the workflow file is that they must match your repository's directory structure exactly, including the requirements.txt location and the path to your scraper script. + +To enable the workflow, simply push all the changes to GitHub and test it through the UI. The next runs will be automatic. + +```bash +git add . +git commit -m "Add a scraping workflow" +git push origin main +``` + +### 2. Package publishing workflow + +Publishing Python packages to PyPI (Python Package Index) typically involves several steps. First, developers need to prepare their package by creating a proper directory structure, writing setup files, and ensuring all metadata is correct. Then, the package needs to be built into distribution formats - both source distributions (`sdist`) and wheel distributions (`bdist_wheel`). Finally, these distribution files are uploaded to PyPI using tools like `twine`. This process often requires careful version management and proper credentials for the package repository. While this can be done manually, automating it with CI/CD pipelines like GitHub Actions ensures consistency and reduces human error in the release process. + +For example, the following workflow publishes a new version of a package when you create a new release: + +```yaml +name: Publish Python Package +on: + release: + types: [created] + +jobs: + deploy: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + + - name: Set up Python + uses: actions/setup-python@v4 + with: + python-version: '3.10' + + - name: Install dependencies + run: | + python -m pip install --upgrade pip + pip install build twine + + - name: Build package + run: python -m build + + - name: Publish to PyPI + env: + TWINE_USERNAME: __token__ + TWINE_PASSWORD: ${{ secrets.PYPI_API_TOKEN }} + run: | + python -m twine upload dist/* +``` + +The workflow automates publishing Python packages to PyPI when GitHub releases are created. + +Required setup steps: + +1. Package must have `setup.py` or `pyproject.toml` configured +2. Create PyPI account at `pypi.org` +3. Generate PyPI API token with upload permissions +4. Store token as `PYPI_API_TOKEN` in repository secrets + +The workflow process: + +1. Triggers on new GitHub release +2. Checks out code and sets up Python +3. Installs build tools +4. Creates distribution packages +5. Uploads to PyPI using stored token + +The `__token__` username is used with PyPI's token authentication, while the actual token is accessed securely through GitHub secrets. + +### 3. Container build and push workflow + +GitHub Actions can also automate building and pushing Docker containers to container registries like Docker Hub or GitHub Container Registry (GHCR). This workflow is useful for maintaining containerized applications and ensuring your latest code changes are packaged into updated container images. + +The process typically involves: + +1. Building a Docker image from your `Dockerfile` +2. Tagging the image with version/metadata +3. Authenticating with the container registry +4. Pushing the tagged image to the registry + +This automation ensures your container images stay in sync with code changes and are readily available for deployment. Here is a sample workflow containing these steps: + +```yaml +name: Build and Push Container +on: + push: + branches: [main] + paths: + - 'Dockerfile' + - 'src/**' + workflow_dispatch: + +jobs: + build: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v2 + + - name: Login to Docker Hub + uses: docker/login-action@v2 + with: + username: ${{ secrets.DOCKERHUB_USERNAME }} + password: ${{ secrets.DOCKERHUB_TOKEN }} + + - name: Build and push + uses: docker/build-push-action@v4 + with: + context: . + push: true + tags: | + user/app:latest + user/app:${{ github.sha }} +``` + +This workflow introduces a few new GitHub Actions concepts and syntax: + +The `paths` trigger filter ensures the workflow only runs when changes are made to the Dockerfile or files in the `src` directory, preventing unnecessary builds. + +`docker/setup-buildx-action` configures Docker Buildx, which provides enhanced build capabilities including multi-platform builds and build caching. + +`docker/login-action` handles registry authentication. Before using this, you must: + +1. [Create a Docker Hub account](https://app.docker.com/signup) +2. Generate an access token in Docker Hub settings +3. Add `DOCKERHUB_USERNAME` and `DOCKERHUB_TOKEN` as repository secrets in GitHub + +`docker/build-push-action` is a specialized action for building and pushing Docker images. The configuration shows: + +- `context: .` (builds from current directory) +- `push: true` (automatically pushes after building) +- `tags:` specifies multiple tags including: + - `latest:` rolling tag for most recent version + - `github.sha:` unique tag using commit hash for versioning + +The workflow assumes you have: + +- A valid Dockerfile in your repository +- Required application code in `src` directory +- Docker Hub repository permissions +- Properly configured repository secrets + +When this workflow runs successfully, it produces a containerized version of your application that is automatically published to Docker Hub and can be pulled with either the latest tag or specific commit hash. + +## Understanding How GitHub Actions Run + +When you trigger a GitHub Actions run, whether manually or through automated events, the platform: + +1. Provisions a fresh virtual machine (runner) +2. Executes your workflow steps sequentially +3. Reports results back to GitHub +4. Tears down the runner environment + +This isolated execution model ensures consistency and security for each GitHub Actions run. + +## Glossary of GitHub Actions Terms + +- **GitHub Actions**: GitHub's built-in automation platform for software development workflows +- **GitHub Actions Workflow**: A configurable automated process made up of one or more jobs +- **GitHub Actions Jobs**: Individual units of work that can run sequentially or in parallel +- **GitHub Actions Run**: A single execution instance of a workflow +- **GitHub Actions Environment Variables**: Configuration values available during workflow execution +- **GitHub Actions Secrets**: Encrypted environment variables for sensitive data +- **GitHub Actions Tutorial**: A guide teaching the fundamentals of GitHub Actions (like this one!) + +## Conclusion + +Throughout this tutorial, we've explored the fundamentals and practical applications of GitHub Actions for Python development. From understanding core concepts like workflows, jobs, and actions, to implementing real-world examples including automated testing, web scraping, package publishing, and container builds, you've gained hands-on experience with this powerful automation platform. We've also covered critical aspects like managing sensitive data through environment variables and secrets, ensuring your automated workflows are both secure and maintainable. + +As you continue your journey with GitHub Actions, remember that automation is an iterative process. Start small with basic workflows, test thoroughly, and gradually add complexity as needed. The examples provided here serve as templates that you can adapt and expand for your specific use cases. For further learning, explore the [GitHub Actions documentation](https://docs.github.com/en/actions), join the [GitHub Community Forum](https://github.community/), and experiment with the vast ecosystem of pre-built actions available in the [GitHub Marketplace](https://github.com/marketplace?type=actions). Whether you're building a personal project or managing enterprise applications, GitHub Actions provides the tools you need to streamline your development workflow and focus on what matters most - writing great code. + +If you want to learn more about Firecrawl, the web scraping API we used today, you can read the following posts: + +- [Guide to Scheduling Web Scrapers in Python](https://www.firecrawl.dev/blog/automated-web-scraping-free-2025) +- [Mastering Firecrawl's Scrape Endpoint](https://www.firecrawl.dev/blog/mastering-firecrawl-scrape-endpoint) +- [Getting Started With Predicted Outputs in OpenAI](https://www.firecrawl.dev/blog/getting-started-with-predicted-outputs-openai) + +Thank you for reading!