GitHub Actions, Hook, Cron, YAML
세 개는 자주 같이 등장하지만 서로 다른 개념이다.
GitHub Actions
GitHub 안에서 이벤트가 발생했을 때 자동 작업을 실행하는 시스템이다.
flowchart LR
E[Event] --> W[Workflow YAML]
W --> J[Job]
J --> R[Runner]
R --> S[Steps]
예:
name: PR Check
on:
pull_request:
branches: [stable]
jobs:
build:
runs-on: windows-latest
steps:
- uses: actions/checkout@v4
- run: cmake --build build
가장 흔한 Trigger
| Trigger | 의미 |
|---|---|
| push | Push 후 실행 |
| pull_request | PR 생성/갱신 시 |
| workflow_dispatch | 사람이 버튼으로 실행 |
| schedule | 정해진 시간에 실행 |
| release | Release 이벤트 |
| workflow_call | 다른 Workflow가 호출 |
Hook
Hook은 특정 Git 행동 전후에 실행되는 로컬 Script다.
예: pre-push hook
git push
↓
pre-push hook
↓
Local Build / Test
↓
성공하면 Push
Hook은 YAML이 아니다. Shell, Python 등 실행 가능한 Script일 수 있다.
Cron
Cron은 시간 예약 표현식이다.
분 시 일 월 요일
0 3 * * *
→ 매일 03:00
GitHub Actions의 YAML 안에서 Cron을 사용할 수 있다.
on:
schedule:
- cron: '0 18 * * *'
즉:
YAML
└─ schedule
└─ cron 표현식
Push 전 Build도 쓰는가?
많이 쓴다. 다만 보통 GitHub Actions가 아니라 Local Build다.
구현
↓
Local Incremental Build / Test
↓
Commit
↓
Push
↓
GitHub Actions Clean Build / Test
↓
PR Review
큰 C++ 프로젝트에서는 매 Push마다 Full Build를 강제하는 것보다:
- Local: 빠른 Incremental Build
- CI: Clean Build
- Nightly: 무거운 Regression
으로 단계화하는 편이 효율적이다.
추천 Workflow
.github/workflows/
├─ pr-check.yml
├─ stable-check.yml
├─ manual-build.yml
└─ nightly.yml
PR Check
빠른 Compile/Test
Stable Check
Merge 후 Integration 확인
Manual Build
필요할 때만 Full Build
Nightly
전체 Regression, Import/Export, Performance 등 무거운 검사
Actions는 “기능이 사용자에게 좋은가”를 판단하지 않는다. 기계적으로 검증 가능한 조건을 자동화하는 계층이다.