캐시 가속을 활용한 GitHub Actions에서의 PlatformIO
Source: Dev.to
공식 문서의 샘플
공식 문서에서는 GitHub Actions에서 PlatformIO를 사용하는 예시 워크플로우를 제시합니다.
name: PlatformIO CI
on: [push]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/cache@v4
with:
path: |
~/.cache/pip
~/.platformio/.cache
key: ${{ runner.os }}-pio
- uses: actions/setup-python@v5
with:
python-version: '3.11'
- name: Install PlatformIO Core
run: pip install --upgrade platformio
- name: Build PlatformIO Project
run: pio run
PlatformIO CLI pio를 설정한 뒤 pio run으로 빌드를 실행합니다. PlatformIO CLI는 Python으로 작성되었기 때문에 먼저 Python을 설치합니다. Python 패키지와 PlatformIO 파일을 모두 캐시하면 다운로드 속도가 불안정하거나 PlatformIO 패키지가 클 때 워크플로우 소요 시간을 줄일 수 있습니다.
워크플로우 개선
위 워크플로우는 매 실행마다 패키지를 압축 해제하는데, 이는 시간이 소요됩니다. 압축 해제된 파일을 캐시하면 압축 해제 단계를 없앨 수 있습니다. 홈 폴더에 있는 .platformio/ 디렉터리에는 다운로드 캐시 파일과 압축 해제된 패키지가 들어 있습니다.
- uses: actions/cache@v4
with:
path: |
~/.cache/pip
# ~/.platformio/.cache
~/.platformio/
key: ${{ runner.os }}-pio
Note: 캐시가 새로 고쳐지기 전까지는 패키지가 업데이트되지 않습니다.
실험
다음 실험에서는 세 가지 워크플로우 패턴을 비교합니다: 캐시 없음, 다운로드 캐시, 압축 해제 캐시.
- 측정 단계: 캐시 복원, PlatformIO 설치, 빌드.
- 5회 실행 평균(첫 실행은 캐시가 히트되지 않으므로 제외).
- 대상 작업: 빌드(단위 테스트 없음).
- 소스 코드:
int main()에while(1)와return 0;만 포함. - 빌드는 NUCLEO‑F303K8 HAL 라이브러리를 중심으로 수행; 기타 설정은 기본값.
결과
| Run | 캐시 없음 (s) | 다운로드 캐시 (s) | 압축 해제 캐시 (s) |
|---|---|---|---|
| 1 | 32 | 18 | 12 |
| 2 | 34 | 22 | 13 |
| 3 | 32 | 17 | 11 |
| 4 | 35 | 17 | 12 |
| 5 | 31 | 19 | 10 |
| Average | 32.8 | 18.6 | 11.6 |
다운로드 캐시를 사용하면 약 14초 정도 시간이 단축되고, 압축 해제 캐시를 추가하면 추가로 7초 정도 더 절약됩니다.