Travis CI에서 textlint의 지적을 Pull Request의 리뷰 코멘트로 작성
계속되는 이야기입니다.
textlint 의 체크가 실패하면, Pull Request의 코멘트로서 써 주는 것을 만드는 구조의 이야기입니다.
일반적으로 Lint계를 CI로 달리게 하면, 어디에서 실패했는지를 확인하기 어렵고 CI까지 보러 가는 것은 번거롭고 알기 어렵습니다.
GitHub에서는 리뷰 코멘트로 해당 행에 코멘트를 쓸 수 있으므로, 직접 거기에 지적의 코멘트 있는 것이 좋다.
Hound 가 바로 그러한 서비스입니다만, 임의의 툴에는 대응하고 있지 않습니다.
saddler이라는 도구가 Travis CI 또는 Circle CI에서 동일한 작업을 수행 할 수 있습니다.
.travis.yml 설정
보통의 CI의 설정은 textlint를 Travis CI에서 움직여 지속적으로 문장을 확인하십시오 - Qiita 에 있는 대로이므로, 거기까지는 이미 되어 있다고 전제입니다.
리뷰 코멘트를 기입하는 타이밍은, 테스트 실패(Lint 실패)했을 때이므로,
.travis.yml
의 after_failure
에 리뷰 코멘트를 기입하는 쉘 스크립트를 추가합니다.sudo: false
language: node_js
node_js: "stable"
after_failure:
- ./.travis/review-textlint.sh
Ruby가 필요하기 때문에
language: ruby
를 기본으로 하는 경우는 다음과 같이 설정할 수 있습니다.sudo: false
language: ruby
rvm:
- '2.2'
env:
- NODE_JS_VERSION='6'
install:
- nvm install $NODE_JS_VERSION
- nvm use $NODE_JS_VERSION
- npm install
script:
- npm test
after_failure:
- ./.travis/review-textlint.sh
Travis CI에는 기본적으로 ruby가 들어있는 언어가 많기 때문에 명시적으로 ruby를 넣지 않아도 움직인다고 생각합니다.
GitHub의 Token 설정
Travis CI에서 saddler이 리뷰 코멘트를 작성하려면 GitHub Token 설정이 필요합니다.
GITHUB_ACCESS_TOKEN=xxx
라는 환경 변수가 설정되면 자동으로 사용할 수 있습니다.Personal Access Tokens 에서
repo
의 권한을 포함한 Token 을 발행해, 커멘드 라인으로부터 travis
커멘드로 다음과 같이 설정하면 환경 변수가 정의됩니다.travis env set GITHUB_ACCESS_TOKEN xxx
또한 Travis CI의 해당 리포지토리 설정 화면에서도 설정할 수 있습니다.
레비 그림 w-xtint. sh
review-textlint.sh
에서는, 그 Pull Request로 변경한 파일만 textlint 로 Lint 해 그 결과를 Pull Request 에 기입하고 있습니다.Travis CI에서는
git clone
가 shallow이므로, 다른 브랜치 등을 취득하는 작업이 필요합니다 (Circle CI에서는 불필요합니다).이것을 하지 않으면
git diff
그리고 차등의 파일명 취득을 잘 할 수 없다고 생각합니다.또, Pull Request시 이외는 실행하지 않게
"$TRAVIS_PULL_REQUEST"
그리고 분기하고 있습니다. (Circle CI에서는 CI_PULL_REQUEST
를 볼 필요가 있습니다)#!/bin/bash
# Test if pull request
if [ "$TRAVIS_PULL_REQUEST" = "false" ] || [ -z "$TRAVIS_PULL_REQUEST" ]; then
echo 'not pull request.'
exit 0
fi
# Fetch other branch
# To avoid ambiguous argument
# http://stackoverflow.com/questions/37303969/git-fatal-ambiguous-argument-head-unknown-revision-or-path-not-in-the-workin
if [ "$TRAVIS" == "true" ]; then
#resolving `detached HEAD` by attaching HEAD to the `TRAVIS_FROM_BRANCH` branch
TRAVIS_FROM_BRANCH="travis_from_branch"
git branch $TRAVIS_FROM_BRANCH
git checkout $TRAVIS_FROM_BRANCH
#fetching `TRAVIS_BRANCH` branch
git fetch origin $TRAVIS_BRANCH
git checkout -qf FETCH_HEAD
git branch $TRAVIS_BRANCH
git checkout $TRAVIS_BRANCH
#switch to `TRAVIS_FROM_BRANCH`
git checkout $TRAVIS_FROM_BRANCH
fi
# Install saddler
# https://github.com/packsaddle/ruby-saddler
# Need secret env: `GITHUB_ACCESS_TOKEN=xxx`
gem install --no-document checkstyle_filter-git saddler saddler-reporter-github
# Diff Target Branch
# diff HEAD...target
# http://stackoverflow.com/questions/3161204/find-the-parent-branch-of-a-git-branch
# http://qiita.com/upinetree/items/0b74b08b64442f0a89b9
declare diffBranchName=$(git show-branch | grep '*' | grep -v "$(git rev-parse --abbrev-ref HEAD)" | head -1 | awk -F'[]~^[]' '{print $2}')
# filter files and lint
echo "${diffBranchName}...HEAD"
echo "textlint -> review_comments"
git diff --name-only --diff-filter=ACMR ${diffBranchName} \
| grep -a '.*.md$' \
| xargs $(npm bin)/textlint -f checkstyle \
| checkstyle_filter-git diff ${diffBranchName} \
| saddler report \
--require saddler/reporter/github \
--reporter Saddler::Reporter::Github::PullRequestReviewComment
나중에 이 파일을
.travis/review-textlint.sh
에 넣고 실행할 수 있도록 chmod +x .travis/review-textlint.sh
합니다.이제 리뷰 주석으로 Lint 결과를 쓸 수 있습니다.
참고 프로젝트
Reference
이 문제에 관하여(Travis CI에서 textlint의 지적을 Pull Request의 리뷰 코멘트로 작성), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/azu/items/c2305f3dded3fda968e0텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)