گیتهاب اکشن چیست؟ چطور اکشن بنویسیم؟!
گیتهاب، چند سالی هست که از سیستم اتومات CI/CD خودش رونمایی کرده. حالا از اکشن میشه چه استفادههایی کرد؟ چند تا مثال میزنم باهاش بیشتر آشنا شید. مثلا فرض کنید یه ریپازیتوری دارید که عده خیلی زیادی دارن روش کار میکنن و pull request میزنن و شما بعنوان مینتینر اصلی، مجبوری هر سری بیای و تغییرات افراد رو خودت بصورت دستی روی لوکال چک کنی، تست کنی و اگه اوکی بود، مرج کنی.
اکشن بهتون این اجازه رو میده که هروقت اتفاقی روی پروژه افتاد (مثلا کسی pr زد)، خودش یه محیط ایزوله (یه کانتینر داکر مثلا) ایجاد کنه و تغییرات طرف رو در جابهای متنوع بررسی کنه. مثلا یه جاب، تستهاشو ران کنه. یه جاب بررسی کنه ببینه کدی که زده کلین هست یا فرمت شده یا… نهایتا یه ریپورت بنویسه توی همون conversationی که مربوطه به pr هست. به این محیط که شما استپها و ایونت رو تنظیم میکنی، میگن workflow. شما میتونی هر تعداد workflow که دوست داری داشته باشی.
چند تا کلمه کلیدی، معنیشون مهمه:
– ایونت (Event): منظور همون اتفاقه یا رویداده هست. مثلا کسی pr میزنه، prی مرج میشه، کسی پوش میکنه روی برنچی، کسی ایشو باز میکنه، رلیزی انجام میشه، تگی ساخته میشه یا…
جاب (Job): جاب، یه مجموعه از استپ ها هست که توی ورکفلو، روی رانر اجرا میشه. مثلا یه جاب میتونه استپهاش: نصب کردن اوبونتو روی رانر – نصب پایتون – آپدیت پیپ – نصب دیپندنسیها باشه. هر کدوم از این ایتمهایی که گفتم، میشن استپهای این جاب.
رانر (Runner): خیلی شبیه به کانتینرهای داکر هستن. ینی گیتهاب یه انجین مثل Docker Daemon داره و یه ساختاری شبیه به Container که بهتون اجازه میده جابهاتون رو داخلش ران کنید. اگه اشتباه نکنم، با سیشارپ ساختنش و اوپن سورس هم هست.
اکشن (Action): همونطور که گفتیم، توی جاب، یه سری استپها داریم. شما توی استپها میتونی هرکاری که دوست داری انجام بدی. کامند ران کنی یا از سری کامندها یا اکشن ها استفاده کنی! اکشن درواقع یه پکیجه که شما توی استپی که داری میتونی کالش کنی، یه سری مقادیر بهش پاس بدی و اون اجرا میشه. یه مثلا بخوام بزنم. مثلا فرض کنید یه اکشن داریم به اسم setup-python. دیگه احتیاج نیست خودتونو درگیر ران کردن انواع و اقسام کامند ها به منظور نصب پایتون نصب کنید. مستقیم از این اکشن استفاده میکنید، صرفا بهش ورژن پایتون دلخواهتون رو میدید و واستون پایتون و پیپ رو نصب میکنه.
شما میتونید اکشنهای خودتونو داشته باشید و توی ریپازیتوریتون قرارش بدید و توی ورکفلوهای همون ریپازیتوری هم ازش استفاده کنید. یا حتی میتونید در مارکتپلیس گیتهاب پابلیشش کنید.
ما سه مدل اکشن داریم:
– داکر: اکشن در محیطی (شبیه) به داکر ران میشه. رانرهای گیتهاب، داکر رو ساپورت میکنن پس اگه شما بهشون Dockerfile بدید، راحت اکشنتون رو ران میکنن و قابل استفاده میشه.
– کامپوزیت (Composite): صرفا بهش Entrypoint میدید و اون فایل رو ران میکنه. مثلا یه شلاسکریپت دارید توی اکشن که یه hello world رو echo میکنه. توی کانفیگ اکشن مینویسید:
runs:
using: composite
steps:
– name: ‘Run hello-world.sh’
run: ./hello-world.sh
– جاوا اسکریپت: رانرهای گیتهاب، از نود هم ساپورت میکنن. شما اگه js کارید، میتونید از این مدل رانر استفاده کنید و به زبان js، اکشن بنویسید. (اکثر اکشن ها به زبان js و نود هستن)
جدیدا روی یه پیادهسازی کار کردم که به پایتونکارها هم این اجازه رو میده که تحت یه ساختار خیلی خوب، اکشن بنویسن. ینی درواقع اکشن پایتون!
منبع:
https://t.me/lnxpylnxpy