이번 시간의 목표
안드로이드에서 저장소에 push가 되었을 때, Test를 자동으로 돌아가도록 만들어 Test가 성공했는지 확인한다.
간단한 테스트 만들기
GitHub Action에서 테스트를 돌리기 위해 app/src/test/java/com/lecture/githubaction 경로에 GitHubActionTest.kt 파일을 만든다.
이 테스트는 아래와 같이 하나는 성공(testSuccess)하고 하나는 실패(testFail)하도록 만든다.
package com.lecture.githubaction
import org.junit.Test
internal class GitHubActionTest {
@Test
fun testSuccess() {
assert(true)
}
@Test
fun testFail() {
assert(false)
}
}
자 이제 간단한 테스트 작성이 끝났다. 위 테스트는 단순히 테스트 중 실패가 있을 때 GitHub Action이 어떻게 동작하는지 알아보기 위한 테스트 이므로 의미를 부여하지 말자.
테스트를 만들었으므로 이제 이 테스트를 실행할 Workflow 파일을 작성할 시간이다.
Workflow 파일 작성하기
.github/workflows 폴더에 test_action.yml 파일을 생성한다.
test_action.yml은 다음과 같이 작성한다.
Trigger 이벤트 설정
먼저 어떤 경우에 이 Workflow가 실행되는지를 정의해야 한다. 사용자가 직접 실행할 경우와 push가 일어났을 경우 Workflow가 실행되어야 하므로 다음과 같이 작성한다.
on:
workflow_dispatch:
push:
저장소 다운로드
먼저 이전 글에서 다룬 Repository를 체크아웃 해 GitHub Action을 실행하는 Virtual Machine에 저장하는 코드이다.
- name: Check out Repository
uses: actions/checkout@v3
JDK 설정
Repository가 체크아웃 되었으면 Android Build를 위해 JDK를 설정해야 한다. setup-java 라 불리는 미리 정의된 action을 사용하며, JDK는 11 버전으로 다운을 받는다. 'temurin'은 Eclipse 에서 만든 JDK이다.
- name: set up JDK 11
uses: actions/setup-java@v3
with:
java-version: '11'
distribution: 'temurin'
cache: gradle
Gradle 실행 권한 부여
이후 gradlew를 실행하기 위한 권한을 부여한다. Mac과 Ubuntu Machine에서는 Wrapping된 Gradle을 실행하기 위해 이 권한이 필수이다.
- name: Grant execute permission for gradlew
run: chmod +x gradlew
테스트 실행
이제 마지막으로 테스트를 실행한다.
- name: Build with Gradle
run: ./gradlew test
전체 코드 정리
전체 코드는 다음과 같다.
name: Test Action
on:
workflow_dispatch:
push:
jobs:
test:
runs-on: ubuntu-latest
steps:
- name: Check out Repository
uses: actions/checkout@v3
- name: set up JDK 11
uses: actions/setup-java@v3
with:
java-version: '11'
distribution: 'temurin'
cache: gradle
- name: Grant execute permission for gradlew
run: chmod +x gradlew
- name: Build with Gradle
run: ./gradlew test
모든 준비가 완료되었다. 이제 GitHub에 푸시해서 실행 해보도록 하자.
GitHub Action에서 실행된 테스트 확인하기
푸시가 일어나면 다음과 같이 Workflow가 자동 실행된 것을 확인할 수 있다.
내부를 보면 아래와 같이 Action 이 실패한 것을 확인할 수 있다.
내부를 보면 위에서 작성한 testFail() 테스트로 인해 애러가 생긴 것을 확인할 수 있다.
테스트 수정하기
실제 상황이라면 테스트를 수정해야 하지만 Action에서 Test를 확인하기 위한 과정이므로, 주석 처리한 후 다시 푸시한다.
package com.lecture.githubaction
import org.junit.Test
internal class GitHubActionTest {
@Test
fun testSuccess() {
assert(true)
}
// @Test
// fun testFail() {
// assert(false)
// }
}
그러면 이제 테스트가 성공한 것을 확인할 수 있다.
정리
이번 시간에는 푸시가 되었을 때 자동으로 테스트가 돌아가도록 하는 기능을 만들어 보았다. 이 기능은 간단하지만 설정해두면 매번 테스트를 로컬 환경에서 하지 않고도 리모트 환경에서 자동으로 되기 때문에 매우 강력한 기능이다.
이 강의에서는 이 기능을 계속해서 발전시켜 실제 어플리케이션에서 활용할 수 있을 정도까지 만들어 볼 것이다.