GitHub Actions एक समस्या हैं

कई डेवलपर GitHub Actions को कई platforms पर free और convenient CI/CD के लिए सराहते हैं, लेकिन अब इसे opaque workflows, धीमे feedback loops, YAML complexity, और vendor lock-in के लिए अधिक आलोचना मिल रही है। टिप्पणीकारों का तर्क है कि core build और deploy logic साधारण scripts में रहनी चाहिए जिन्हें local रूप से या किसी भी CI system पर चलाया जा सके, और Actions का उपयोग केवल thin orchestration के लिए होना चाहिए। Dagger, Earthly, Garden, `act`, self-hosted runners, और generic workflow engines जैसे tools व workarounds का उल्लेख किया गया है — जिनका लक्ष्य portability, testability, और pipelines पर नियंत्रण वापस पाना है।

GitHub Actions के बारे में महसूस की गई समस्याएँ

  • YAML workflows जटिल हो जाते हैं, उन्हें debug करना कठिन होता है, और उन्हें local स्तर पर आसानी से test नहीं किया जा सकता।
  • third‑party actions पर भारी निर्भरता behavior को opaque बना देती है और vendor lock‑in बढ़ाती है।
  • terminology भ्रमित करने वाली है (actions vs workflows), और runner implementation को उलझा हुआ माना जाता है, साथ ही अजीब behaviors और exit codes की रिपोर्टें मिलती हैं।
  • feedback loop धीमा है: pipeline logic पर iterate करने के लिए commits और remote runs की आवश्यकता व्यापक रूप से नापसंद की जाती है।
  • कुछ लोग Actions को “good enough” मानते हैं, लेकिन GitLab CI जैसे सरल systems की तुलना में conceptual clarity में कमतर समझते हैं।

Workarounds और Recommended Practices

  • YAML को “thin” रखें: इसका उपयोग मुख्यतः triggers और orchestration के लिए करें; असली logic scripts, Make/just targets, Magefiles, Bazel, आदि में रखें।
  • सुनिश्चित करें कि सभी CI steps local रूप से उन्हीं commands के साथ चल सकें जो CI में उपयोग होती हैं।
  • भारी reusable actions की बजाय local scripts और containers को प्राथमिकता दें; कुछ लोग basic setup actions के अलावा बाकी सब से बचते हैं।
  • Docker images या devcontainer images को local और CI दोनों runs के लिए canonical environment के रूप में उपयोग करें।
  • common logic को shared scripts या DSLs के जरिए केंद्रीकृत करें जो CI YAML में compile होते हैं; CI को एक glue layer मानें।

Local Execution और Tooling Gaps

  • GHA को local रूप से चलाने के लिए first‑party तरीके की मजबूत मांग है; मौजूदा self‑hosted runners के लिए भी commits और remote execution की आवश्यकता रहती है।
  • act और संबंधित emulators कुछ workflows में मदद करते हैं, लेकिन उन्हें incomplete, brittle, और complex pipelines के लिए debug करना कठिन बताया जाता है।
  • Reverse‑shell/debug actions (जैसे tmate) actual runners पर troubleshooting के लिए सराहे जाते हैं।

Vendor Lock‑in और Platform संबंधी चिंताएँ

  • Actions का ecosystem और free/cheap hosted runners (खासकर Windows/macOS के लिए) एक शक्तिशाली lock‑in mechanism के रूप में देखे जाते हैं।
  • कुछ लोग तर्क देते हैं कि GitHub का CI monetization पूरी तरह local, free runners के लिए प्रोत्साहन कम करता है।
  • अन्य लोग GitHub के broader feature set और network effects को मुख्य “stickiness” बताते हैं।

Alternative CI/Workflow Approaches

  • कई projects CI-agnostic या “pipelines as code” solutions की ओर काम कर रहे हैं (Dagger, Earthly, Garden, Windmill, Cirrus CLI, Cicada)।
  • Jenkins का Groovy DSL और shared libraries raw YAML की तुलना में बेहतर abstraction model के रूप में उद्धृत किए जाते हैं।
  • universal workflow/CI engines बनाने के प्रयास leaking abstractions, environment variance, और उच्च migration costs से जूझते हैं।

CI/CD Complexity पर व्यापक विचार

  • कई लोग CI pipelines को अत्यधिक जटिल workflow engines मानते हैं जिन्हें बार-बार reinvent किया गया है।
  • इस बात पर सहमति है कि deployments auditable, scriptable होने चाहिए, और पूरी तरह किसी एक CI provider से tied नहीं होने चाहिए.