Skip to content

Checkout Error Fix Plan

This content is not available in your language yet.

Can't find 'action.yml', 'action.yaml' or 'Dockerfile' under
'/home/runner/work/newsfork-seeds/newsfork-seeds/.github/actions/setup-project'.
Did you forget to run actions/checkout before running your local action?
  • Job: validate (Pre-deployment Validation)
  • Step: Setup Project (Composite Action 사용)
  • Composite Action: ./.github/actions/setup-project

GitHub Actions의 Local Action 동작 방식

섹션 제목: “GitHub Actions의 Local Action 동작 방식”
  1. Local Composite Action 사용 전제 조건

    • Local action을 사용하려면 먼저 repository를 checkout해야 함
    • Composite Action 파일(action.yml)이 repository 내부에 있기 때문
    • Checkout 없이는 action 파일에 접근할 수 없음
  2. 현재 구조의 문제점

    jobs:
    validate:
    steps:
    - name: Setup Project
    uses: ./.github/actions/setup-project # ❌ Checkout 전에 사용 시도
    .github/actions/setup-project/action.yml
    runs:
    using: 'composite'
    steps:
    - name: Checkout # ❌ 이미 Composite Action 내부에 있음
    uses: actions/checkout@v4
  3. 문제의 핵심

    • Composite Action을 사용하기 전에 checkout이 필요함
    • 하지만 현재는 Composite Action 내부에 checkout이 있음
    • 이는 닭과 달걀 문제: Action을 사용하려면 checkout이 필요하지만, checkout은 Action 내부에 있음

방안 1: Job에서 먼저 Checkout 실행 (권장) ⭐

섹션 제목: “방안 1: Job에서 먼저 Checkout 실행 (권장) ⭐”
  • 각 job에서 Composite Action을 사용하기 전에 먼저 actions/checkout@v4 실행
  • setup-project action에서 checkout step 제거
  • setup-project action은 checkout 이후의 setup만 수행
  • ✅ GitHub Actions의 표준 패턴
  • ✅ 명확한 의존성 (checkout → action 사용)
  • ✅ 다른 Composite Actions도 동일한 패턴 적용 가능
  • ✅ 디버깅 용이
  • ⚠️ 각 job에서 checkout step 추가 필요 (하지만 이는 표준 패턴)

Before (현재 - 문제 있음):

jobs:
validate:
steps:
- name: Setup Project
uses: ./.github/actions/setup-project # ❌ Checkout 전에 사용

After (수정 후):

jobs:
validate:
steps:
- name: Checkout repository
uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Setup Project
uses: ./.github/actions/setup-project # ✅ Checkout 후 사용

setup-project/action.yml 수정:

# Checkout step 제거
runs:
using: 'composite'
steps:
# ❌ 제거: - name: Checkout
# ❌ 제거: uses: actions/checkout@v4
- name: Setup Environment
shell: bash
run: |
chmod +x .github/scripts/setup.sh
./.github/scripts/setup.sh
env:
GITHUB_SHA: ${{ github.sha }}
# ...
- name: Setup pnpm
uses: pnpm/action-setup@v4
# ...

방안 2: Checkout 전용 Composite Action 분리 (대안)

섹션 제목: “방안 2: Checkout 전용 Composite Action 분리 (대안)”
  • checkout-repo action 생성 (checkout만 수행)
  • setup-project action은 checkout 없이 setup만 수행
  • Job에서 두 action을 순차적으로 사용
  • ✅ 명확한 책임 분리
  • ✅ 재사용 가능한 checkout action
  • ⚠️ 추가 action 생성 필요
  • ⚠️ 두 step으로 분리되어 복잡도 증가
jobs:
validate:
steps:
- name: Checkout repository
uses: ./.github/actions/checkout-repo
- name: Setup Project
uses: ./.github/actions/setup-project

방안 3: Inline Steps로 변경 (비권장)

섹션 제목: “방안 3: Inline Steps로 변경 (비권장)”
  • Composite Action 사용 포기
  • 각 job에서 setup steps를 직접 작성
  • ❌ 중복 코드 증가 (원래 개선 목적과 반대)
  • ❌ 유지보수성 저하
  • ❌ 코드 품질 저하

  1. GitHub Actions 표준 패턴

    • 공식 문서에서 권장하는 방식
    • 다른 프로젝트에서도 널리 사용
  2. 명확한 의존성

    • Checkout → Action 사용 순서가 명확
    • 디버깅이 쉬움
  3. 최소 변경

    • setup-project action에서 checkout만 제거
    • 각 job에 checkout step 추가 (표준 패턴)
  4. 확장성

    • 다른 Composite Actions도 동일한 패턴 적용 가능

  1. setup-project/action.yml에서 checkout step 제거
  2. 나머지 setup steps는 유지
runs:
using: 'composite'
steps:
- name: Checkout
uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Setup Environment
# ...
runs:
using: 'composite'
steps:
# Checkout은 job에서 먼저 실행됨
- name: Setup Environment
shell: bash
run: |
chmod +x .github/scripts/setup.sh
./.github/scripts/setup.sh
env:
GITHUB_SHA: ${{ github.sha }}
GITHUB_REPOSITORY: ${{ github.repository }}
GITHUB_RUN_ID: ${{ github.run_id }}
GITHUB_RUN_NUMBER: ${{ github.run_number }}
- name: Setup pnpm
uses: pnpm/action-setup@v4
with:
version: ${{ inputs.pnpm-version }}
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: ${{ inputs.node-version }}
cache: "pnpm"
- name: Install dependencies
shell: bash
run: pnpm install --frozen-lockfile

  • validate
  • provision
  • deploy
  • deploy-production
steps:
- name: Checkout repository
uses: actions/checkout@v4
with:
fetch-depth: 0 # Full history for git info
- name: Setup Project
uses: ./.github/actions/setup-project

Phase 3: 영향받는 Composite Actions 확인

섹션 제목: “Phase 3: 영향받는 Composite Actions 확인”
  • setup-project: checkout 제거 필요
  • determine-environment: checkout 불필요 (이미 job에서 checkout 후 사용)
  • setup-tmate: checkout 불필요 (이미 job에서 checkout 후 사용)

  1. .github/actions/setup-project/action.yml

    • Checkout step 제거
    • 나머지 steps 유지
  2. .github/workflows/deploy.yml

    • 4개 job에 checkout step 추가
    • 각 job의 첫 번째 step으로 추가
  • validate: checkout step 추가
  • provision: checkout step 추가
  • deploy: checkout step 추가
  • deploy-production: checkout step 추가
  • determine-environment action: 변경 불필요
  • setup-tmate action: 변경 불필요
  • ✅ 다른 스크립트들: 변경 불필요

  • setup-project/action.yml 문법 검사
  • deploy.yml 문법 검사
  • Checkout step이 모든 job에 추가되었는지 확인
  • validate job 실행 확인
  • provision job 실행 확인
  • deploy job 실행 확인
  • deploy-production job 실행 확인
  • Checkout이 정상적으로 실행되는지 확인
  • Setup steps가 정상적으로 실행되는지 확인
  • Composite Actions가 정상적으로 사용되는지 확인

  • 반드시 Composite Action 사용 전에 실행
  • ✅ 각 job의 첫 번째 step으로 배치
  • fetch-depth: 0 유지 (git 정보 필요)
  • ✅ 다른 설정은 기본값 사용
  • ❌ Composite Action 내부에서 checkout 금지
  • ✅ Job에서 먼저 checkout 후 action 사용

  • Checkout step 제거
  • 나머지 steps 유지
  • action.yml 문법 검사
  • validate job에 checkout step 추가
  • provision job에 checkout step 추가
  • deploy job에 checkout step 추가
  • deploy-production job에 checkout step 추가
  • 로컬 문법 검사
  • GitHub Actions 테스트
  • 모든 job 정상 실행 확인

jobs:
validate:
steps:
- name: Setup Project
uses: ./.github/actions/setup-project # ❌ Checkout 전에 사용

에러: Can't find 'action.yml'...

jobs:
validate:
steps:
- name: Checkout repository
uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Setup Project
uses: ./.github/actions/setup-project # ✅ Checkout 후 사용

결과: 정상 실행 ✅



기획 완료 일시: 2026-01-28
우선순위: 🔴 Critical (즉시 수정 필요)
예상 작업 시간: 15분
난이도: 낮음