4 GitHub Actions Patterns kwa Monorepo ETL
Kuendesha tovuti tatu kutoka monorepo moja kunasababisha matatizo. Unakabiliwa na kazi tatu tofauti za ETL, ujenzi upya wa maudhui mara tatu, na mifumo mitatu ya usambazaji (deployment pipelines). Ikiwa huziratibu, zinagongana.
Nilitumia wiki sita nikijaribu ratiba ili kuimarisha mpangilio huu. Hapa kuna mitindo minne ninayotumia.
- Tumia Time Offsets kwa Kazi za Cron
Kuendesha kazi zote za ETL kwa wakati mmoja kunasababisha hitilafu. Kazi zinashindana kupata ukomo wa API (API rate limits). HuggingFace au GitHub zinaporudisha kosa la 429, kazi inafeli.
Ninatumia offsets za dakika 30 kuzuia hili.
- Kazi ya kwanza inaanza saa 02:00
- Kazi ya pili inaanza saa 02:30
- Kazi ya tatu inaanza saa 03:00
Dakika thelathini inatosha kumaliza upakiaji mzito (heavy pull) kabla ya kazi inayofuata kuanza. Hii inafanya logi zako ziwe safi na inazuia migongano ya API.
- Tumia Skip Flags Ili Kusitisha Ujenzi Upya Usio wa Lazima
Kila kazi ya ETL huishia na usambazaji wa Vercel. Tatizo hutokea wakati commit za makala pia zinachochea ujenzi upya. Bila mpango, kila sasisho la makala linasababisha tovuti zote tatu zijengwe upya. Hii inapoteza dakika za ujenzi (build minutes).
Ninatumia tag ya [skip publish-articles] kwenye ujumbe wa commit za ETL.
Niliongeza hatua katika workflow yangu ili kuangalia tag hii. Ikiwa tag hiyo ipo, workflow inaruka hatua ya ujenzi na usambazaji. Hii inafanya mifumo ya ETL kuwa tofauti na mifumo ya makala.
- Tumia Path Filters Ili Kulenga Tovuti Maalum
Hutaki sasisho la tovuti moja lichochee usambazaji mitatu. Ninasanidi workflow ya kila tovuti ili iangalie tu folda yake yenyewe na folda ya shared packages.
Mantiki ya mfano:
- Tovuti ya AI tools inaangalia tu
apps/ai-tools/ - Tovuti ya OSS inaangalia tu
apps/oss-alternatives/
Ukibadilisha kodi kwenye folda ya pamoja (shared directory), tovuti zote zitajengwa upya. Nakubali mabadiliko haya kwa sababu mabadiliko ya kodi ya pamoja ni nadra.
- Ongeza Manual Dispatch Kwa Ajili ya Udhibiti
Cron inashughulikia ratiba ya kila siku. Manual dispatch inashughulikia kila kitu kingine. Ninatumia workflow_dispatch ili niweze:
- Kuendesha tena kazi ya ETL iliyofeli
- Kulazimisha usasishaji (refresh) baada ya kuongeza data
- Kufanya jaribio la awali (dry run) ili kujaribu data bila kuiandika kwenye database
UI ya GitHub inaonyesha menyu ya kushuka (dropdown menu) kwa ajili ya chaguzi hizi. Hii inazuia makosa ya uandishi na kufanya utatuzi wa matatizo (debugging) kuwa rahisi.
Muhtasari
Mitindo hii si migumu. Ni ya wazi. Ninatunza faili rahisi ya markdown kwenye repository yangu ili kuandika sheria hizi. Hii inahakikisha kwamba siharibu mfumo ninapoongeza workflow mpya.
