GitHub Actions의 증분 린트 수정
standard
gem을 추가했는데 이제 많은 파일을 변경해야 하지만 한 번에 적용할 수 없었습니다.나는 같은 문제를 겪었고 이 PR이 검토되는 동안 정기적인 리베이스가 필요하거나 일부 안전한 변경이 성가신 문제를 일으킬 수 있기 때문에 작은 변경 사항을 대량으로 추가할 수 없었습니다.
가장 일반적인 솔루션
개발자에게 별도의 커밋으로 PR의 모든 변경된 파일에 대한 외관 변경 사항을 추가하도록 요청하십시오. 비즈니스 논리 변경 사항을 찾을 때 Code Reviewer에 몇 가지 문제가 추가됩니다.
큰 열정이 없는 PR 작성자 및 코드 리뷰어는 이를 따를 것입니다.
그래서 저는 이 성가신 문제를 기계에 맡기기로 했습니다!
Photo by Thierry K
접근하다
지속적인 통합(GitHub 작업)에 간단한 정기 작업을 추가했습니다.
자동 수정 변경 사항이 있는 공개 PR
#!/usr/bin/env bash
set -e
echo "-----Create and switch to new branch-----"
current_date=$(date +"%Y%m%d%H%M")
new_branch_name="auto-fix-lint-${current_date}"
git checkout -b "$new_branch_name"
git config user.name "jt-bot"
git config user.email "[email protected]"
echo "-----Run Rubocop-----"
# shellcheck disable=SC2046
bin/rubocop --no-server --fail-level "E" -a $(bin/rubocop --no-server -L **/*.rb | sort -R | head -n 5 | tr "\n" " ")
echo "-----Commit Updates-----"
git add .
commit_message="Auto-fix lint warnings ${current_date}"
git commit -am "$commit_message" ||
(bin/rubocop -aF --fail-level "A" && exit 1) ||
git commit -am "$commit_message" || exit 1
if [[ -z "${GITHUB_TOKEN}" ]]; then
echo "No Pull Request, because no GITHUB_TOKEN passed!"
exit 1
else
git push "https://${GITHUB_TOKEN}@github.com/${GITHUB_USERNAME}/${GITHUB_REPONAME}.git" -f
curl -X POST \
-H "Authorization: token ${GITHUB_TOKEN}" \
-d '{"title":"'"$commit_message"'","base":"develop","head":"'"$GITHUB_USERNAME"':'"$new_branch_name"'"}' \
"https://api.github.com/repos/${GITHUB_USERNAME}/${GITHUB_REPONAME}/pulls"
fi
라인별
current_date=$(date +"%Y%m%d%H%M")
new_branch_name="auto-fix-lint-${current_date}"
git checkout -b "$new_branch_name"
변경 사항을 저장할 고유한 분기를 만듭니다.
git config user.name "jt-bot"
git config user.email "[email protected]"
커밋을 수행하도록 Git을 설정합니다.
bin/rubocop --no-server --fail-level "E" -a $(bin/rubocop --no-server -L **/*.rb | sort -R | head -n 5 | tr "\n" " ")
이 줄은 Rubocop 파일에서 지원하는 모든 파일을 찾아 섞고 상위 5개를 가져옵니다(업데이트할 수 있음).
git commit -am "$commit_message" ||
(bin/rubocop -aF --fail-level "A" && exit 1) ||
git commit -am "$commit_message" || exit 1
이전 단계에서 변경 사항이 없으면 변경 사항이 있는 첫 번째 파일을 찾으려고 합니다.
git push "https://${GITHUB_TOKEN}@github.com/${GITHUB_USERNAME}/${GITHUB_REPONAME}.git" -f
curl -X POST \
-H "Authorization: token ${GITHUB_TOKEN}" \
-d '{"title":"'"$commit_message"'","base":"develop","head":"'"$GITHUB_USERNAME"':'"$new_branch_name"'"}' \
"https://api.github.com/repos/${GITHUB_USERNAME}/${GITHUB_REPONAME}/pulls"
변경 사항으로 PR을 푸시하고 생성합니다.
2. 스케줄러를 사용한 GitHub 작업 흐름
Need to use Personal Tokens only for GitHub to get it you should use GitHub Docs: Creating a personal access token. And more details why we need to use Personal Tokens: GitHub Docs: Triggering a workflow from a workflow
---
name: Auto-fix
on:
schedule:
# * is a special character in YAML so you have to quote this string
- cron: '0 0 * * 1,3' # Each Monday and Wednesday
env:
CI: true
RAILS_ENV: test
concurrency:
group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }}
cancel-in-progress: true
jobs:
rubocop:
runs-on: ubuntu-latest
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
GITHUB_USERNAME: jetthoughts
GITHUB_REPONAME: jt_tools
steps:
- uses: actions/checkout@v3
with:
fetch-depth: 1
- name: Set up Ruby
uses: ruby/setup-ruby@v1
with:
bundler-cache: true
- name: Create Pull Request with RuboCop fixes (3 retries)
continue-on-error: true
run: |
bin/ci-generates-lint-fix || bin/ci-generates-lint-fix || bin/ci-generates-lint-fix
보너스: 자동 병합되도록 PR 표시 및 코드 검토 요청
---
name: Enable auto-merge for bots' PRs
on: pull_request
permissions:
pull-requests: write
statuses: write
contents: write
jobs:
select_for_auto_merge:
runs-on: ubuntu-latest
if: ${{ github.actor == 'github-actions[bot]' || startsWith(github.head_ref, 'auto-') }}
steps:
- name: Enable auto-merge for bots' PRs
run: |
gh pr merge --auto --rebase "$PR_URL"
gh pr edit "$PR_URL" --add-reviewer "@jetthoughts/developers" --add-label "Need to review"
env:
PR_URL: ${{github.event.pull_request.html_url}}
GITHUB_TOKEN: ${{secrets.GITHUB_TOKEN}}
그리고 우리는 "원자적 습관"을 얻었습니다.
몇 주 후에 깨끗한 코드를 얻을 수 있으며 코드 검토자나 개발자에게 해가 되지 않습니다 ;)
Paul Keen은 오픈 소스 기여자이자 JetThoughts의 CTO입니다. 그를 팔로우하거나 GitHub .
If you enjoyed this story, we recommend reading our latest tech stories and trending tech stories.
Reference
이 문제에 관하여(GitHub Actions의 증분 린트 수정), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/jetthoughts/incremental-lint-fixes-by-github-actions-38o8텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)