PR TEST 검증?해당 기술을 택한 이유는?PR TEST 관련 중요 키워드어떻게 사용하는지 workflow 작성하기 ‼️내가 작성한 pr test 코드이건 암마 봐도 모르겠음… 로깅 찍어주는 것 같은데.. test제목당 ${pass, failed} 이렇게 기록해주는 것 같음. [아몰랑]📌REFER
PR TEST 검증?
- 특정 브렌치에 PR을 보낼 경우 test를 돌리는 action 이다.
- 이외로 push 할때도 검증이 가능하도록 할 수 있음.
해당 기술을 택한 이유는?
develop branch에 merge가 진행될 떄마다 간혹 develop의 테스트가 꺠지는 자주 발생했다.
누군가는 원인을 찾고 해결해야 했다.
- 예상치 못한 테스트 이슈를 해결하고자 틈틈히 신경써야 하고 개발 일정에 차질이 생기기 시작했다. 그리고 pr이 쌓여 develop branch에 머지하게 되면 pr을 역추적하여 원인을 찾아야만 했다.
- 그래서 PR을 통해 머지 하기 전에 테스트 코드를 체크후 각 pr에 독립적으로 원인을 해결할 수 있도록 분리했다. ‼️
PR TEST 관련 중요 키워드
workflow
- 하나 이상의 작업을 실행하는 구성 가능한 자동화 프로세스 이다,.
- 워크플로는 레포지토리에 체크인된
yaml file에 의해 정의
되면 레포지토리의 이벤트에 의해 트리거 될 때 실행되거나 수동으로 또는 정의된 일정에 트리거 될 수 있다. 트리거 : 어느 특정한 동작에 반응해 자동으로 필요한 동작을 실행하는 것이다.
Workflows are defined in the.github/workflows
directory in a repository, and a repository can have multiple workflows, each of which can perform a different set of tasks.
어떻게 사용하는지
workflow 작성하기 ‼️
- overview flow
[전반적 흐름]
- pr 감지
- 브렌치 판별
- gradle 환경 test 시작 [
gradle이 아닐 수도 있음.
] - test가 성공할 경우 pr open 상태 유지
- test가 실패할 경우 pr close 상태로 변경 후 comment를 남긴다.
- 최상단 프로젝트 파일 밑에 github안에 workflow 디렉토리를 생성하고 pr-test.yml 파일을 생성한다
- yml 뼈대 코드
name : // ${workflow_name} on: // event 정의 [트리거 정의] pull_request: //${push 도 올수 있음.} branches: - ${branch_name} - ${another_branch_name} jobs: // 작업 내용 모음 == steps들의 묵음 test: runs-on: ubuntu-latest [실행 환경] steps: // job이 가질 수 있는 동작의 나열, step은 독립적인 프로세스를 가진다. uses: // 해당 step에 사용할 액션(행위) with: // 해당 acition에 의해 정의되는 input 파라미터, ket/value로 pair로 구성

내가 작성한 pr test 코드
name: PR Test on: pull_request: branches: - develop - main jobs: test: runs-on: ubuntu-latest //환경 steps: - uses: actions/checkout@v2 - name: Set Up JDK 17 uses: actions/setup-java@v1 with: java-version: 17 - name: Grant execute permission for gradlew run: chmod +x gradlew - name: Test with Gradle run: ./gradlew test // ./gradlew --info test 이렇게 하면 로그가 엄청 쏟아짐 - name: if fail uses: actions/github-script@0.2.0 with: github-token: ${{github.token}} script: | const ref = "${{github.ref}}" const pull_number = Number(ref.split("/")[2]) await github.pulls.createReview({ ...context.repo, pull_number, body:"테스트코드를 다시 확인해주세요. ", event: "REQUEST_CHANGES" }) await github.pulls.update({ ...context.repo, pull_number, state: "closed" }) if: failure()
그리고 마지막에
if: failure()
라는 구문이 중요하다. ‼️if
문과 같은 역할을 한다. 이전의 step이 fail일 경우에만 이 "if fail" step이 실행되는 것이다! 해당 키워드 failure외에도 success, alwayse 등등의 옵션들이 있으니 참고 하세요. [conexets] 
이건 암마 봐도 모르겠음… 로깅 찍어주는 것 같은데.. test제목당 ${pass, failed} 이렇게 기록해주는 것 같음. [아몰랑]
==== build.gradle ==== test { testLogging { events "PASSED", "SKIPPED", "FAILED" } }
해당 코드가 있으면 무엇이 pass 하고 fail됬는지 나옴
해당 코드가 없을 떄는 아무것도 안나옴.. [머지하려는 곳에 build.gradle이 저렇게 구성되어 있지 않을 떄]

📌REFER
- gradle test task naming
- github workflow create guide
- gradle workflow 예시