https://github.com/kintoun-secops/secops-actions-lab

0단계. 준비단계

  1. 해당 레포를 fork하기
  2. git clone 후 uv sync로 환경 맞추기 (uv 설치는 공식 문서 참고)
  3. 워크플로를 채우기 전에 아래 로컬에서 먼저 돌리기로 각 도구를 손으로 한 번씩 돌려보기

image.png

22개 패키지 설치 성공, .venv 가상환경 완성, ruff==0.9.10, mypy==1.15.0 등 문서에서 말한 버전도 일치

이것저것 도구 시도해보기

워크플로를 채우기 전, 도구를 로컬에서 먼저 실행해보고 실제로 어떤 문제를 잡아내는지 확인해보았다.

명령어 결과
ruff check 코드 스타일 + 보안 문제 13건 발견
ruff format 포맷 안 맞는 파일 1개
mypy 타입 오류 2건
pytest 테스트 실패 1건
pip-audit 의존성 CVE 18건

1단계. 워크플로 채우기

TODO로 비워진 부분은 크게 두 종류였다.

다 설명하기에는 내용이 너무 길어져서 중요한 부분 2개 정도만 골라서 자세하게 설명하겠다.

01 - ruff.yml

이 워크플로는 Ruff로 코드 스타일과 보안 이슈를 검사하는 부분이다.

name: "01 - Ruff (format + lint + security)"

on:
  workflow_call:
  workflow_dispatch:
permissions:
  contents: read
  pull-requests: write   # reviewdog 인라인 코멘트용
jobs:
  ruff:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: astral-sh/setup-uv@v5
      - run: uv sync --frozen
      - uses: reviewdog/action-setup@v1
        with:
          reviewdog_version: latest

      - name: Ruff lint -> reviewdog (PR 인라인 리뷰)
        if: github.event_name == 'pull_request'
        env:
          REVIEWDOG_GITHUB_API_TOKEN: ${{ secrets.GITHUB_TOKEN }}
        run: |
          uv run ruff check app/ --output-format=rdjson |
            reviewdog -f=rdjson -reporter=github-pr-review -level=warning

      - name: Run Ruff (formatter)
        run: uv run ruff format --check .
      - name: Run Ruff (linter)
        run: uv run ruff check app/

1. 두 가지 트리거만 남겨두기

on: #언제 시작될지
  workflow_call:
  workflow_dispatch: