- GitHub Actions के धीमे feedback loop और जटिल debugging प्रक्रिया को लेकर एक डेवलपर की निराशा भरी कहानी
- tmplr प्रोजेक्ट में
build.rs के ज़रिए CUE से दस्तावेज़ generate किए गए, लेकिन CI build fail होने के साथ ही समस्या शुरू हुई
- 4 प्लेटफ़ॉर्म में से सिर्फ Linux ARM पर build fail हुआ; वजह थी cross build के दौरान GitHub Actions का x86_64 binary को arm64 runner पर छिपा देना
- एक ही बदलाव को test करने में 2–3 मिनट लगने वाला अक्षम feedback loop बार-बार दोहराया गया
- समाधान के रूप में
build.rs हटाकर GNU Makefile पर स्विच किया गया, ताकि CI logic को सीधे नियंत्रित करके समस्या हल की जा सके
समस्या कैसे शुरू हुई
- tmplr एक file/project scaffolding tool है, जो ऐसे template files का उपयोग करता है जिन्हें इंसान आसानी से पढ़ और लिख सके
build.rs में CUE का उपयोग करके README.md, CHANGELOG.md, version/help files generate किए जाते थे, ताकि consistency बनी रहे
- यह काम खुद लगभग 1.5 घंटे में पूरा हो गया था, और इस पर एक संबंधित लेख भी लिखा जा चुका था
- लोकल पर सब ठीक चल रहा था, लेकिन GitHub Actions के CI environment में CUE binary इंस्टॉल न होने के कारण build fail हो गया
build fail होने की वजह
- 4 प्लेटफ़ॉर्म (Linux ARM, macOS ARM, Linux x86_64, macOS x86_64) में से सिर्फ Linux ARM पर “command not found” error आया
- कारण: matrix cross build बहुत कड़ी तरह से isolated था, इसलिए CUE सिर्फ x86_64 Linux host और macOS ARM host पर इंस्टॉल था
- macOS पर x86_64 binary चलाने में कोई समस्या नहीं थी
- Linux x86_64 पर भी x86_64 binary ठीक चल रहा था
- लेकिन GitHub Actions arm64 runner पर x86_64 binary को छिपा देता है, जिससे उसे चलाया नहीं जा सकता
अक्षम feedback loop
- समस्या सुलझाने के लिए बार-बार यह प्रक्रिया दोहराई गई:
1. संभावित fixes खोजो
2. ci.yml बदलो
3. commit और push करो (jj squash --ignore-immutable && jj git push)
4. "Actions" टैब खोलो
5. सबसे नया run खोलो
6. Linux ARM run खोलो
7. कुछ सेकंड इंतज़ार करो
8. निराश हो जाओ
9. फिर से दोहराओ
- हर एक बदलाव पर 2–3 मिनट लगते थे
- आदर्श स्थिति में GitHub या तो पूरी तरह सक्षम local runner देता, या push के बाद प्रगति जल्दी देखने की कोई सुविधा देता
- "scratch commit" जैसी सुविधा: Git history और Action run history को गंदा किए बिना अलग-अलग runs test करने का तरीका
- लेकिन फिलहाल ऐसी कोई सुविधा मौजूद नहीं है
समाधान
- 30 मिनट तक यह loop दोहराने के बाद इसे रोका गया
- इंटरनेट पर सुझाया गया तरीका अपनाया गया: "GitHub Actions को logic manage न करने दें; script को खुद नियंत्रित करें और Actions सिर्फ उस script को call करे"
build.rs हटा दिया गया (अफसोस था, लेकिन यह कुर्बानी ज़रूरी थी)
- सारे generation tasks को GNU Makefile में शिफ्ट कर दिया गया
- generated files को repository में commit किया गया और CI changes वापस ले लिए गए
- समस्या पूरी तरह हल हो गई
निष्कर्ष
- GitHub Actions ऐसी चीज़ है जो कुछ अच्छे approaches अपनाने से रोक देती है
- runner debugging और build process optimization में बहुत समय बर्बाद होता है
- फिर भी इससे macOS builds जैसे कुछ ऐसे फ़ायदे मिलते हैं जिन्हें दूसरे तरीकों से पाना आसान नहीं है
- और बेशक, GitHub Actions से आसान setup वाला कोई दूसरा system व्यापक रूप से जाना-पहचाना नहीं है
> We are all doomed to GitHub Actions. …but at least I dodged the bullet early.
अभी कोई टिप्पणी नहीं है.