'Giithub Action' 으로 pre-commiit 실행
개시하다
이 글은
cookiecutter-django
에서 사용된pre-commit
과Github Actions
의 동작을 이해하기 위해 쓴 글이다.pre-commit
코드의 성형과 유형 검사를 할 수 있다.GithubAction
에서 집행pre-commit
하면 환경을 구축할 필요가 없다.샘플 창고
pre-commiit 내용 읽기
GithubActions
실행하기 전에 pre-commit
무엇을 실행했는지 읽어 보세요.exclude: "^docs/|/migrations/"
default_stages: [commit]
repos:
- repo: https://github.com/pre-commit/pre-commit-hooks
rev: v4.2.0
hooks:
- id: trailing-whitespace
- id: end-of-file-fixer
- id: check-yaml
- repo: https://github.com/psf/black
rev: 22.3.0
hooks:
- id: black
- repo: https://github.com/PyCQA/isort
rev: 5.10.1
hooks:
- id: isort
- repo: https://github.com/PyCQA/flake8
rev: 4.0.1
hooks:
- id: flake8
args: ["--config=setup.cfg"]
additional_dependencies: [flake8-isort]
# sets up .pre-commit-ci.yaml to ensure pre-commit dependencies stay up to date
ci:
autoupdate_schedule: weekly
skip: []
submodules: false
실행할 명령
repos
내의 명령은 다음과 같이 순서대로 집행된다.pre-commit-hooks
trailing-whitespace
end-of-file-fixer
check-yaml
yaml
파일의 문법 검사black
isort
flake8
기타
exclude
default_stages
commit
시 훅스의 집행을 제한ci
pre-commit
방향ci
설정autoupdate_schedule
지정
weekly
, 매주 업데이트skip
submodules
false
, 기본값false
환경 구조
우선 현지 환경
pre-commit
에서 실행하고 환경을 구축할 수 있다.# Code quality
# ------------------------------------------------------------------------------
flake8==4.0.1 # https://github.com/PyCQA/flake8
flake8-isort==4.1.1 # https://github.com/gforcada/flake8-isort
coverage==6.3.2 # https://github.com/nedbat/coveragepy
black==22.3.0 # https://github.com/psf/black
pylint-django==2.5.3 # https://github.com/PyCQA/pylint-django
pre-commit==2.18.1 # https://github.com/pre-commit/pre-commit
상술한 것은 로컬 환경용requirements.txt
의 코드 품질 부분이다.다음 두 개
pre-commit
중 사용하지 않아 설치되지 않았습니다.coverage
pylint-django
pre-commiit의 실행 테스트
성형이 필요한 다음 코드를 만들어서
pre-commit
동작을 합니다.pre-commit install
이후 확인.GithubActions
동작 시 pre-commit install
하지 않은 상태에서 동작 확인을 한다.hoge.py
import random
from fizzbuzz import fizzbuzz as fb
import click
import os
@click.command()
@click.option('--num','-n',default=lambda: random.randint(1, 100),type=int,help='Number of loop')
def fizzbuzz(num: int):
fb(num)
if __name__=='__main__':
fizzbuzz()
pre-commit
동작 로그$ >git commit -m "feat: isortなどが動作するコードに変更"
[WARNING] Unstaged files detected.
[INFO] Stashing unstaged files to C:\Users\ikura\.cache\pre-commit\patch1651315960-10368.
trim trailing whitespace.................................................Passed
fix end of files.........................................................Passed
check yaml...........................................(no files to check)Skipped
black....................................................................Failed
- hook id: black
- files were modified by this hook
reformatted hoge.py
All done! \u2728 \U0001f370 \u2728
1 file reformatted, 1 file left unchanged.
isort....................................................................Failed
- hook id: isort
- files were modified by this hook
Fixing C:\Users\ikura\repos\test-pre-commit\hoge.py
flake8...................................................................Passed
[INFO] Restored changes from C:\Users\ikura\.cache\pre-commit\patch1651315960-10368.
$ >
pre-commit
실행 후 코드hoge.py
import random
import click
from fizzbuzz import fizzbuzz as fb
@click.command()
@click.option(
"--num",
"-n",
default=lambda: random.randint(1, 100),
type=int,
help="Number of loop",
)
def fizzbuzz(num: int):
fb(num)
if __name__ == "__main__":
fizzbuzz()
Giithub Action 섹션 읽기
name: CI
# Enable Buildkit and let compose use it to speed up image building
env:
DOCKER_BUILDKIT: 1
COMPOSE_DOCKER_CLI_BUILD: 1
on:
pull_request:
branches: ["master", "main"]
paths-ignore: ["docs/**"]
push:
branches: ["master", "main"]
paths-ignore: ["docs/**"]
concurrency:
group: ${{ github.head_ref || github.run_id }}
cancel-in-progress: true
jobs:
linter:
runs-on: ubuntu-latest
steps:
- name: Checkout Code Repository
uses: actions/checkout@v3
- name: Set up Python
uses: actions/setup-python@v3
with:
python-version: "3.9"
cache: pip
cache-dependency-path: |
requirements/base.txt
requirements/local.txt
- name: Run pre-commit
uses: pre-commit/[email protected]
# With no caching at all the entire ci process takes 4m 30s to complete!
pytest:
runs-on: ubuntu-latest
steps:
- name: Checkout Code Repository
uses: actions/checkout@v3
- name: Build the Stack
run: docker-compose -f local.yml build
- name: Run DB Migrations
run: docker-compose -f local.yml run --rm django python manage.py migrate
- name: Run Django Tests
run: docker-compose -f local.yml run django pytest
- name: Tear down the Stack
run: docker-compose -f local.yml down
jobs
의 후반부pytest
를 무시한다.앞부분을 읽으면 충분하고 간단한 동작으로 확인하면 테스트 부분의 동작을 검증하기 어렵다.실행 설정
on:
pull_request:
branches: ["master", "main"]
paths-ignore: ["docs/**"]
push:
branches: ["master", "main"]
paths-ignore: ["docs/**"]
concurrency:
group: ${{ github.head_ref || github.run_id }}
cancel-in-progress: true
실행 정시on
밀어넣기 요청 및 밀어넣기 시 master
또는 main
분기에서 수행됩니다.또한, 제외docs
병렬concurrency변경을 허용하지 않고, 동시에 수법만 실행한다.
실행 부분
linter:
runs-on: ubuntu-latest
steps:
- name: Checkout Code Repository
uses: actions/checkout@v3
- name: Set up Python
uses: actions/setup-python@v3
with:
python-version: "3.9"
cache: pip
cache-dependency-path: |
requirements/base.txt
requirements/local.txt
- name: Run pre-commit
uses: pre-commit/[email protected]
requirements.txt
pre-commit
의 실행 동작 확인
pre-commit uninstall
에서 삭제pre-commit
하고 위에서 만든 슬픈 코드로 동작을 확인한다.코드별 조정 가능 시간
Github Actions
에 장애가 발생하여 수정을 요청합니다.o:감상
Github Actions
좋은 기분pre-commit
최종 사용자는 반드시 현지에서 환경을 구축해야 한다Github Actions
. 실행하면 사람이 환경에 참여하지 않는 것이 검사를 받는 것이 좋다.시험을 준비하다
mypy
에 포함되지 않음
pre-commit
coverage
참고 자료
Reference
이 문제에 관하여('Giithub Action' 으로 pre-commiit 실행), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://zenn.dev/ikura1/articles/ea4031e5bacdb3023658텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)