Github Actions ဆိုတာက Github ကနေ အခမဲ့ သုံးလို့ ရတဲ့ CI/CD platform တစ်ခု ဖြစ်ပါတယ်။ ကျနော်တို့ ရေးထားတဲ့ project တွေမှာ build , test နဲ့ deployment တွေ လုပ်တဲ့အခါမှာ အလိုအလျောက် လုပ်ဆောင်နိုင်ဖို့ ကူညီပေးပါတယ်။ [Github Actions](https://docs.github.com/en/actions/about-github-actions/understanding-github-actions) အကြောင်း နဲ့ [Usage Limit](https://docs.github.com/en/actions/administering-github-actions/usage-limits-billing-and-administration) အကြောင်းကို ဆက်ဖတ်ကြည့်စေချင်ပါတယ်။
### Github Actions - Theory
### Github Actions - YAML File
- YAML အကြောင်း [Official Documentation](https://docs.github.com/en/actions/writing-workflows/workflow-syntax-for-github-actions)
- [Learn YAML in Y minutes](https://learnxinyminutes.com/yaml/)
Github Actions တွေကို `.yaml` or `.yml` file ထဲမှာ workflow configuration တွေကို ရေးပါတယ်။ ဒီ YAML file တိုင်းကို project repository ထဲက `.github/workflows` location အောက်မှာ သိမ်းဆည်းရပါမယ်။ YML (or) YAML file တိုင်းမှာ အရေးကြီးတဲ့ Key Elements **၄ ခု** ပါဝင်ပါတယ်။ name, triggers, jobs နဲ့ steps တို့ ဖြစ်ပါတယ်။
- `name` ဆိုတာက ကျနော်တို့ workflow အတွက် နာမည် ကို ဆိုလိုတာပါ။ အကယ်ရွေ့ ကိုယ်က name မကြေညာခဲ့ဖူးဆိုရင် Github က repo file path ကို အခြေခံပြီး workflow filename ကို ဖော်ပြပါလိမ့်မယ်။
- triggers ဆိုတာက `on:` syntax ကို အသုံးပြုပြီး ရေးသားတဲ့ အပိုင်းပါ။ ဘယ်လို events တွေကို အခြေခံပြီး workflow ကို auto trigger လုပ်မလဲဆိုတာကို `on:` နဲ့ ကြေညာတဲ့ သဘောပါ။ Trigger လုပ်ဖို့အတွက် သုံးလို့ ရသမျှ events တွေအကြောင်း ကို ဒီ [official documentation](https://docs.github.com/en/actions/writing-workflows/workflow-syntax-for-github-actions#on) မှာ ဆက်ဖတ်နိုင်ပါတယ်။
- ဥပမာ အားဖြင့် `push` ကို သုံးရင် new code ကို repo ထဲကို push လုပ်တဲ့အခါတိုင်းမှာ workflow ကို execute လုပ်မှာ ဖြစ်ပါတယ်။
- `schedule` ဆိုရင်ကျ သတ်မှတ်ထားတဲ့ cron job အတိုင်း Timer ပေးထားသလိုမျိုး သတ်မှတ်ချိန် ရောက်တဲ့အခါမှာ workflow အလုပ်လုပ်ပါမယ်။
- `workflow_dispatch` ကကျ repo ထဲမှာ button တစ်ခု တည်ဆောက်ပီး manual click နှိပ်ပီး workflow အလုပ်လုပ်လို့ ရအောင်ပါ။
- Workflow တွေ ကို **jobs** တွေနဲ့ တည်ဆောက်ထားပါတယ်။ (YAML ထဲမှာ `jobs:` syntax ကို အသုံးပြုပြီး ရေးသားတဲ့ အပိုင်းပါ။) **Jobs** တွေကိုလဲ **steps** တွေနဲ့ ဖွဲ့စည်းထားပါတယ်။
ဒီတော့ အပေါ်က အားလုံးကို ခြုံပြီး ပြန်ပြောရမယ် ဆိုရင် -
- event တစ်ခုခုကနေ Github Action workflow ကို trigger လုပ်ပါတယ်။
- Workflow တွေမှာ တစ်ခု (သို့မဟုတ်) တစ်ခုထက်ပိုတဲ့ Jobs တွေ ပါဝင်နိုင်ပါတယ်။ Jobs တစ်ခုချင်းဆီမှာလဲ sequence လိုက် လုပ်ဆောင်မယ့် steps တွေ ရှိပါတယ်။
### Github Actions - Secrets & Variables
- Secrets တွေက encrypted လုပ်ထားပြီး sensitive (လုံခြုံရေး အထူးစိုးရိမ်ရတဲ့) data အတွက် အသုံးပြုတယ်။ `${{ secrets.name }}` နဲ့ access လုပ်တယ်။
- Variables ကတော့ plain text သာ ဖြစ်ပြီး non-sensitive(လုံခြုံရေး ပူစရာမရှိတဲ့) data အတွက် အသုံးပြုတယ်။ variables တွေကို access လုပ်ဖို့အတွက် `vars` context ကို သုံးတယ်။
- Secrets မှာမှ Environment နဲ့ Repository secrets ဆိုပြီး ၂ မျိုး ထပ်ခွဲသေးတယ်။
- Environment ကတော့ workflow ကို dev / testing / production စသဖြင့် environment ခွဲပြီး အသုံးချဖို့ပါ။
- Repository ကတော့ ဒီ project repo မှာ အသုံးပြုဖို့ပါ။
- personal repo မှာဆိုရင် repo secrets create လုပ်ဖို့အတွက် owner ဖြစ်ဖို့ လိုပါတယ်
### To Learn
- What's Github actions/checkout? [Link](https://spacelift.io/blog/github-actions-checkout)
### References
- https://innerjoin.bit.io/making-a-simple-data-pipeline-part-4-ci-cd-with-github-actions-733251f211a6
- https://towardsdatascience.com/automating-data-pipelines-with-python-github-actions-c19e2ef9ca90/