Event로는 push, pull request, fork 등 Github 내 다양한 동작들이 지정될 수 있음
.github/workflows에 저장돼 있는 yaml 파일이 바로 Workflows를 정의하는 파일임
name: Update README # workflows의 이름
on: # Event 발생 시 실행 정보
push:
branches: [ "main" ]
pull_request:
branches: [ "main" ]
Jobs
Workflows에서 독립적으로 수행할 작업들을 Job이라고 부름
각 Job은 각각 다른 서버에서 독립적으로 실행되기 때문에, 기본적으로 병렬 처리 됨
하지만 필요 시, Job 사이 의존 관계를 설정할 수 있음
runs-on 옵션을 통해, 각 서버의 OS 환경을 지정할 수 있음
# Workflows에서 수행할 Job 지정
jobs:
job1: # 이름은 자유롭게 설정할 수 있음
runs-on: ubuntu-latest
steps:
# job1에 대한 세부 내용
job2:
runs-on: windows-latest
steps:
# job2에 대한 세부 내용
job3:
runs-on: macos-latest
steps:
# job3에 대한 세부 내용
Steps
Job에서 순차적으로 실행할 작업들을 Step이라고 함
커맨드나 스크립트를 실행하는 작업의 경우 run을, Actions을 처리할 때는 use를 사용해서 처리 함
이전 단계에서의 변수를 $GITHUB_OUTPUT으로 전달 받아, 다음 step에 활용할 수 있음
전달할 변수의 형태는 변수 이름=변수의 값 형태가 돼야 함 ex) DO_UPDATE=True
아래 코드에선if 문의 조건 제어로 활용 함
steps:
- name: Checkout Repo
uses: actions/checkout@v3 # actions
with:
fetch-depth: 3
...
# README 업데이트 여부 확인
- name: Run update_readme.py
id: condition
working-directory: auto-readme # 실행할 폴더 정보
run: |
python update_readme.py >> $GITHUB_OUTPUT
# 변수 전달 됐는지 확인
- name: Echo condition Var
run: echo ${{steps.condition.outputs.DO_UPDATE}}
# 업데이트가 됐다면 commit 진행
- name: Commit changes
if: ${{steps.condition.outputs.DO_UPDATE == 'True'}} # 실행 조건 제어
run: |
git config --global user.name 'woodywarhol9'
git config --global user.email 'woodywarhol9@gmail.com'
git add -A
git commit -am "auto-update README.md"