CircleCI+PHP_CodeSniffer+reviewdog로 코드에 규율을

전제


  • PHP
  • Github
  • Composer

  • 프로젝트에 PHP_CodeSniffer 설치


    $ composer require --dev squizlabs/php_codesniffer
    

    CI로 테스트할 때 curl 에서 다운로드해도 좋다고 생각하십니까?
    이번은 로컬로 phpcbf 를 사용하고 싶을 때가 있으므로 동봉한다

    CircleCI 설정



    CircleCI > ADD PROJECTS > Set Up Project
  • 설정 파일의 작성·배치
  • Starting build

  • 설정 파일의 작성·배치



    프로젝트 바로 아래에 .circleci/config.yml를 만들고 push
    .circle/config.yml
    # PHP CircleCI 2.0 configuration file
    #
    # Check https://circleci.com/docs/2.0/language-php/ for more details
    #
    version: 2
    jobs:
      build:
        docker:
          # specify the version you desire here
          - image: circleci/php:7.1-browsers
            environment:
              REVIEWDOG_VERSION: "0.9.11"
    
          # Specify service dependencies here if necessary
          # CircleCI maintains a library of pre-built images
          # documented at https://circleci.com/docs/2.0/circleci-images/
          # - image: circleci/mysql:9.4
    
        working_directory: ~/repo
    
        steps:
          - checkout
    
          # Download and cache dependencies
          - restore_cache:
              keys:
                - v1-dependencies-{{ checksum "composer.json" }}
                # fallback to using the latest cache if no exact match is found
                - v1-dependencies-
    
          - run: composer install -n --prefer-dist
    
          - save_cache:
              paths:
                - ./vendor
              key: v1-dependencies-{{ checksum "composer.json" }}
    
          # run tests!
          - run: curl -fSL https://github.com/haya14busa/reviewdog/releases/download/$REVIEWDOG_VERSION/reviewdog_linux_amd64 -o reviewdog && chmod +x ./reviewdog
          - run: ./vendor/bin/phpcs --warning-severity=0 --standard=PSR2 --report=code --report-width=120 ./src
          - run: |
              ./vendor/bin/phpcs --error-severity=0 --runtime-set ignore_warnings_on_exit 1 --standard=PSR2 --report=emacs ./src | ./reviewdog -efm="%f:%l:%c: %m" -reporter=github-pr-review
    

    Github 액세스 토큰 설정


    reviewdog 에 코멘트 시키기 위해서는 권한을 가지는 Github 액세스 토큰을 발행할 필요가 있습니다.

    New personal access token > public_repo 권한이 부여된 토큰 발행
  • CircleCI > WORKFLOWS > 대상 브랜치 기어 아이콘 > Environment Variables > Add Variables
  • REVIEWDOG_GITHUB_API_TOKEN 값에 방금 만든 토큰 설정

  • 빌드할 타이밍 설정



    디폴트에서는 PR의 유무에 관계없이 푸시마다 빌드가 움직여 버립니다만,reviewdog는 PR에 주석을 달기위한 도구이므로 PR이 존재하지 않으면 주석을 달 수 없습니다.

    PR이 있는 브랜치만 빌드하는 설정으로 변경합니다.

    CircleCI > WORKFLOWS > 대상 브랜치 기어 아이콘 > Advanced Settings > Only build pull requestsOn 로 설정

    (이 설정도 폐해가 있는 것 같아 앱을 만들어 대책을 하고 있는 분도 계시는 것 같습니다.)

    참고 : CircleCI의 Only build pull requests를 off로 해도 풀 리퀘스트를 만들면 Job을 실행하고 싶다

    브랜치 보호 설정



    이 상태에서는 CircleCI에서 오류가 발생해도 병합할 수 있으므로 브랜치의 보호 설정을 변경합니다.

    대상 리포지토리 > Settings > Branches > Add rule에서 아래와 같이 설정합니다.

    참고 : Protected Branches 기능으로 유연한 워크플로 구축



    마지막으로



    테스트에 걸릴 것 같은 코드를 커밋하고 PR을 만듭니다.
    CircleCI로 빌드되어 코멘트가 붙어, 병합이 블록 되고 있는 것을 알 수 있습니다.





    기계적으로 고칠 수있는 것은 고쳐집니다.
    $ ./vendor/bin/phpcbf --standard=PSR2 ./src
    

    좋은 웹페이지 즐겨찾기