• 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.

अभी कोई टिप्पणी नहीं है.

अभी कोई टिप्पणी नहीं है.