티스토리 뷰

이 글의 제목은 "Gihub Actions, black, pre-commit 을 이용해 Python 프로젝트를 체계적으로 관리해보자 " 이다.

 

여기서 모호한 표현인 체계적은 코드가 일관적인 포맷으로 잘 정렬된 상태를 의미한다.


이미 이전 글에서 관련 주제를 다루었다.

 

일관적인 포맷으로 포매팅을 해주는 대표적인 툴 black! https://developer0hye.tistory.com/481

 

commit 전에 black을 실행하여 git commit 전에 코드를 자동으로 포매팅 해줄 수 있는 pre-commit! https://developer0hye.tistory.com/482

 

이제 여기에 Github Actions 를 끼얹어보자


pre-commit 까지 했으면 어느정도 된 거 아닌가? 싶은데 문제는 pre-commit은 웹에서 바로 수정하여 commit하는 경우에 동작하지 않는다.

웹에서 바로 수정하고픈 욕구

누가 웹에서 바로 수정해? 라고 생각할 수 있지만 그런 사람들이 있다. 나는 아니다.

피노키오

그치만, Github Actions라면 웹에서 바로 수정한 경우에도 감지가 가능해진다. 여로모로 은혜로운 툴이다.


1. 우선 Github 프로젝트를 생성하자

 

이름은 python-black-pre-commit-actions-for-blogging 으로 생성했다.

 

2. 로컬에 클론하자

git clone https://github.com/developer0hye/python-black-pre-commit-actions-for-blogging
cd python-black-pre-commit-actions-for-blogging

3. pre-commit 용 파일 .pre-commit-config.yaml 을 생성하자 

 

4. .pre-commit-config.yaml commit 전에 black이 실행되도록 .pre-commit-config.yaml 을 작성하자

rev 에 쓰인게 우리가 쓸 black 버전이고, Github Actions workflow 파일 작성할때도 이 버전이 쓰이니 기억해두자

repos:
-   repo: https://github.com/psf/black
    rev: 23.1.0
    hooks:
    -   id: black

5. git hook 생성을 위한 pre-commit install 명령어 실행

pip install pre-commit
pre-commit install

6. 보면 열받는 포맷으로 python 파일 app.py 생성

a = 1                   +2
b = a  *       3

7. pre-commit 잘되나 테스트

git add app.py
git add .pre-commit-config.yaml
git commit -m "pre-commit test"

black이 실행되고 Fail 이 잘 뜨는것을 확인할 수 있다.

 

app.py 도 아래와 같이 정렬돼있을것이다.

8. 다시 stage에 올리고 commit 해서 remote repo에 push

git add app.py
git commit -m "pre-commit test"

9. Github Actions 활용하여 workflow 파일 작성

 

name: Python Formatting

on:
  push:
    branches: [ "main" ]
  pull_request:
    branches: [ "main" ]

jobs:
  build:

    runs-on: ubuntu-latest

    steps:
    - uses: actions/checkout@v3
    - name: Set up Python 3.10
      uses: actions/setup-python@v3
      with:
        python-version: "3.10"
    - name: Install dependencies
      run: |
        python -m pip install --upgrade pip
        pip install black==23.1.0
    - name: Formatting with black
      run: |
        black --check .

위 파일에 대해 설명하자면,

 

main branch 로 push 되거나 pull request 요청이 날라오면 실행됨

 

서버 pc의 os는 ubuntu-latest

 

clone 하고 python 3.10으로 세팅후 pip update 해주고 23.1.0버전의 black을 설치함

 

그다음 black --check . 통해 format이 black의 format과 안맞으면 실패!

 

--check 안붙이면 실패/성공 여부 체크가 안됨

 

10. 테스트

 

10.1 test-actions 라는 branch를 웹에서 만들자

10.2 웹 에디터로 포맷 안맞게 app.py를 수정하자

10.3 main branch로 pull request 날려보자

 

 

야호 Python Formatting에서 Fail 뜬다.

DCO 도 Fail 뜨는데 이건 그냥 수동으로 Success 로 바꿔줌

옆에 Details 눌러서 봐보면 아래와 같이 black --check . 통해서 실패로 판단내린것을 확인할 수 있다.

 

 

 

다음번에는 pytest 까지 이용해 "체계적"을 넘어서 안정적이고 보다 테스트 주도 개발에 가깝게 Python 프로젝트를 관리하는 방법에 대해 정리해봐야겠다.

 

 

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함