HomeAboutMeBlogGuest
© 2025 Sejin Cha. All rights reserved.
Built with Next.js, deployed on Vercel
🍗
[New] 조규현팀
/
🏗️
Tech Store
/
🤖
PR test - workflow
🤖

PR test - workflow

담당자들
카테고리
Skill
주제
PR test
나의 블로그
완료율%
프로젝트
인스타뀨램
상태
완료
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[전반적 흐름]
      1. pr 감지
      1. 브렌치 판별
      1. 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로 구성
      notion image
 

내가 작성한 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]
notion image
Contexts - GitHub Docs
Contexts are a way to access information about workflow runs, runner environments, jobs, and steps. Each context is an object that contains properties, which can be strings or other objects. Contexts, objects, and properties will vary significantly under different workflow run conditions. For example, the matrix context is only populated for jobs in a matrix.
https://docs.github.com/en/actions/learn-github-actions/contexts#job-status-check-functions
Contexts - GitHub Docs
 
 

이건 암마 봐도 모르겠음… 로깅 찍어주는 것 같은데.. test제목당 ${pass, failed} 이렇게 기록해주는 것 같음. [아몰랑]

==== build.gradle ==== test { testLogging { events "PASSED", "SKIPPED", "FAILED" } }
해당 코드가 있으면 무엇이 pass 하고 fail됬는지 나옴
해당 코드가 없을 떄는 아무것도 안나옴.. [머지하려는 곳에 build.gradle이 저렇게 구성되어 있지 않을 떄]
notion image

📌REFER


GitHub Actions 로 풀리퀘스트 test 검증하기
이번엔 전에 배웠던 기초적인 actions의 문법으로 간단한 workflow를 만들어보겠습니다. 특정 브랜치에 pr을 보낼 경우 test를 돌리는 action을 작성해보도록 하겠습니다! workflow를 만들때는 말 그대로 흐름을 미리 생각해두고 코드로 구현하면 더 쉬운것 같다. 순서대로 흐름을 나열해보면 pr을 감지한다. pr을 보낸 브랜치를 판별한다. jest로 코드를 test한다. test가 성공할 경우 pr을 그대로 open.
GitHub Actions 로 풀리퀘스트 test 검증하기
https://velog.io/@adam2/GitHub-Actions-%EB%A1%9C-%ED%92%80%EB%A6%AC%ED%80%98%EC%8A%A4%ED%8A%B8-test-%EA%B2%80%EC%A6%9D%ED%95%98%EA%B8%B0
GitHub Actions 로 풀리퀘스트 test 검증하기
  • gradle test task naming
[testing] Gradle : 실시간으로 콘솔에 테스트 결과를 표시하는 방법
내가 실행 하는 동일한 콘솔에서 테스트 결과 (system.out / err, 테스트중인 구성 요소의 로그 메시지) 를보고 싶습니다. gradle test 그리고 테스트가 완료 될 때만 생성되는 테스트 보고서를보기 위해 테스트가 완료 될 때까지 기다리지 마십시오. 답변 명령 행에서 INFO 로깅 레벨로 Gradle을 실행할 수 있습니다. 실행중인 각 테스트의 결과를 보여줍니다.
[testing] Gradle : 실시간으로 콘솔에 테스트 결과를 표시하는 방법
http://daplus.net/testing-gradle-%EC%8B%A4%EC%8B%9C%EA%B0%84%EC%9C%BC%EB%A1%9C-%EC%BD%98%EC%86%94%EC%97%90-%ED%85%8C%EC%8A%A4%ED%8A%B8-%EA%B2%B0%EA%B3%BC%EB%A5%BC-%ED%91%9C%EC%8B%9C%ED%95%98%EB%8A%94-%EB%B0%A9/
[testing] Gradle : 실시간으로 콘솔에 테스트 결과를 표시하는 방법
  • github workflow create guide
About workflows - GitHub Docs
A workflow is a configurable automated process that will run one or more jobs. Workflows are defined by a YAML file checked in to your repository and will run when triggered by an event in your repository, or they can be triggered manually, or at a defined schedule.
https://docs.github.com/en/actions/using-workflows/about-workflows
About workflows - GitHub Docs
  • gradle workflow 예시
devs0n.tistory.com
https://devs0n.tistory.com/25