파이썬 코드의 자동 성형을위한 액션을 만들어 보았습니다.

Why


  • 팀 개발을 할 때 코드 형식의 차이가 크다.
  • 할 사람도 있고,하지 않는 사람도있다
  • 다른 포맷터

  • 코드 성형 전용 커밋을 넣고 싶지 않음

  • 개발자에게 번거로움을주지 않고 로컬 환경의 의존성을 없애고 싶습니다.
  • black, autopep 등의 라이브러리를 로컬 환경에 의존하고 싶지 않음
  • vscode 나 emacs 등 편집기에 의존하고 싶지 않음


  • github actions를 만지고 싶었습니다.
  • 처음의 제목으로는 정확히 좋다고 생각했다


  • What


  • 만든 것
  • 소정의 branch에 push했을 때에, 소정의 (이번 예라면, workspace/python 이하)의 *.py 코드를 검색해, 대상이 된 python 파일에 black에 의한 코드 정형을 실행한다
  • 풀릭 → 병합을 가정하여 병합 대상의 분기에 병합 된 경우에도 코드 정형을 수행합니다
  • 리포지토리

  • 전제
  • 코드 성형에는 black을 사용한다
  • 분기는 적용 가능하게, main/develop의 2개

  • 디렉토리 구성
  • code-format.yml이 이번 액션의 내용

  • ├─.github
    │  └─workflows
    │          code-format.yml
    │
    └─python
        │  pyproject.toml
        │
        └─source
                a.py
                b.py
    

    How


  • code-format.yml은 다음과 같습니다

  • code-format.yml
    name: python auto code format
    
    on:
      push:
        branches: 
          - main
          - develop
        paths:
          - 'python/**'
    
      workflow_dispatch:
    
    jobs:
      black:
        name: Check code style with Black
        runs-on: ubuntu-latest
        defaults:
          run:
            working-directory: ./python
        steps:    
          - name: Checkout
            uses: actions/checkout@v2
          - name: Set up Python 3.6.8
            uses: actions/setup-python@v2
            with:
              python-version: 3.6.8
          - name: Install black
            run: pip install black
          - name: run code format
            run: find . -type f -name "*.py" | xargs black
          - name: git settings
            run: |
              git config --local user.email "github-actions[bot]@users.noreply.github.com"
              git config --local user.name "github-actions[bot]"
          - name: Extract branch name
            id: extract_branch
            run: echo "##[set-output name=BRANCH_NAME;]$(echo ${GITHUB_REF#refs/heads/})"
          - name: commit
            run: git commit -m "python modules changed auto format." -a || echo "No changes to commit."
          - name: push
            run: |
              echo target branch is ${{ steps.extract_branch.outputs.BRANCH_NAME }}
              git pull
              git push origin ${{ steps.extract_branch.outputs.BRANCH_NAME }}
    
    

  • 확인 방법
  • develop 브랜치에서 적절한 토픽 브랜치 만들기
  • 적당한 topic 브랜치로 적당한 코드 (이번에는 b.py) 편집 (포맷을 무너뜨린다)
  • commit & push
  • github에서 풀릭 생성
  • 적당한 topic 분기 → develop에 merge
  • 액션 실행
  • develop 브랜치의 b.py가 코드 성형 된 상태로 push되었습니다

  • actions의 모습

  • develop 브랜치 커밋 이력
  • 조금 이해하기 어렵지만, github actions가 커밋 한 이력이 남아있어 깨끗하게 포맷되어 있는지 확인할 수 있습니다.



  • lastly



    이번에는 topic 브랜치 → develop 브랜치를 상정해 갔습니다만, develop → main도 마찬가지입니다
    또, 이 경우라면, main or develop 브랜치에 다이렉트 커밋했을 경우도 actions가 달립니다

    좋은 웹페이지 즐겨찾기