변경된 파일에서만 mypy를 실행하는 GitHub 작업

최근에 저는 GitHub 풀 요청을 위해 "변경된"파일에서만 mypy를 사용하여 Python 정적 유형 검사를 수행하는 방법이 필요했습니다.

그래서 구글링을 좀 해본 결과 워크플로에서 바로 사용할 수 있는 매우 유용한 액션을 발견했습니다.


tj-액션 / 변경된 파일


:octocat: 모든(추가, 복사, 수정, 삭제, 이름 변경, 유형 변경, 병합 해제, 알 수 없음) 파일 및 디렉토리를 검색하는 Github 작업입니다.











변경된 파일


대상 브랜치(pull_request* 기반 이벤트) 또는 마지막 원격 커밋(push 기반 이벤트)에 상대적인 모든 변경된 파일 및 디렉토리를 검색하여 프로젝트 루트에서 변경된 모든 파일 및 디렉토리에 대한 절대 경로를 반환합니다.

특징


  • 빠른 실행(평균 0-2초).
  • 디버그하기 쉽습니다.
  • 특정 파일이 변경되었음을 나타내는 부울 출력.
  • 대규모 리포지토리로 확장됩니다.
  • Git 하위 모듈이 지원됩니다.
  • 추가 API 호출이 없습니다.
  • Monorepos(마지막 원격 커밋만 가져옴).
  • 모든 플랫폼(Linux, MacOS, Windows)을 지원합니다.

  • GitHub-hosted runners 서포트

  • GitHub Enterprise Server 지원합니다.

  • self-hosted runners 지원합니다.
  • 변경된 모든 파일 및 디렉토리 나열
  • 현재 풀 요청 분기와 대상 분기의 마지막 커밋 사이.
  • 현재 풀 요청 분기와 대상 분기의 포크 지점 사이.
  • 마지막 커밋과 현재 푸시된 변경 사이.
  • 마지막 원격 분기 커밋과 현재 HEAD 사이.

  • 변경 감지 제한…


  • View on GitHub

    그리고 필터 전용*.py 파일과 같은 일부 옵션을 사용자 정의한 후 변경된 파일을 인수로 전달하여 실행mypy할 수 있었습니다.

    전체 리포지토리를 스캔하지 않고 일부 파일만 스캔하기 때문에 --ignore-missing-importsmypy 인수를 포함해야 한다는 점을 언급할 가치가 있습니다. 물론 목표는 그것들을 모두 확인하는 것입니다. 그러나 준비되기 전에 많은 수정이 이루어져야 합니다.

    이 솔루션은 기존 파일이 조금씩 수정되는 레거시 프로젝트에서 새 파일에 대한 정적 유형 검사를 포함하려는 경우 매우 유용할 수 있습니다.

    name: "mypy check"
    on: [pull_request]
    
    jobs:
    
      static-type-check:
        runs-on: ubuntu-latest
        steps:
        - uses: actions/checkout@v2
        - uses: actions/setup-python@v3
          with:
            python-version: '3.x'
        - run: pip install mypy  # you can pin your preferred version
        - name: Get Python changed files
          id: changed-py-files
          uses: tj-actions/changed-files@v23
          with:
            files: |
              *.py
              **/*.py
        - name: Run if any of the listed files above is changed
          if: steps.changed-py-files.outputs.any_changed == 'true'
          run: mypy ${{ steps.changed-py-files.outputs.all_changed_files }} --ignore-missing-imports
    
    


    행복한 유형 안전!

    좋은 웹페이지 즐겨찾기