GitHub Actions를 사용해 보았습니다.
9881 단어 googletest시GitHubActions
소개
타이틀은 사실은 「GitHub Actions로 GoogleTest를 사용한 테스트 모듈을 실행시켜, 그것이 실패했을 경우 해당 브랜치의 master에의 병합을 프로텍트한다」이었지만 너무 길었기 때문에 컴팩트하게 했습니다. 드디어 환경이 CI 같아졌다고 생각합니다. 사람은 실수를 하는 생물이므로, CI와 같이 기계적으로 실수를 검출하는 구조는 좋은 것이라고 생각하고 있습니다.
했던 일
퍼블릭 베타 참여
기본 워크플로
Actions 탭에서 해당 push 단위로 워크플로우의 실행 로그를 확인할 수 있다.
CMake로 코드 빌드
blank.yml
name: CI
on: [push]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v1
- name: label change test1
run: |
pwd
ls
- name: label change test2
run: |
echo Add other actions to build,
echo test, and deploy your project.
실행 결과
blank.yml
(略)
- name: build
run: |
cd C++/helloworld/
mkdir build/
cd build/
cmake ..
make
(略)
실행 결과
특히 문제없이 빌드 할 수 있습니다.
GoogleTest 모듈 실행
blank.yml
(略)
- name: build
run: |
cd C++/helloworld/
./build.sh
- name: test
run: |
C++/helloworld/build/test_calc
build.sh
#!/bin/bash
set -eu
pushd third_party/
GOOGLETEST_VERSION=release-1.8.1
wget --quiet https://github.com/google/googletest/archive/${GOOGLETEST_VERSION}.tar.gz
tar -xf ${GOOGLETEST_VERSION}.tar.gz
rm ${GOOGLETEST_VERSION}.tar.gz
mkdir googletest-${GOOGLETEST_VERSION}/build/
cd googletest-${GOOGLETEST_VERSION}/build/
cmake ..
make
#make install
popd
rm -rf build/
mkdir build/
cd build/
cmake ..
make
CMakeLists.txt
add_executable(test_calc
test/test_main.cpp
test/test_calc.cpp
src/calc.cpp)
target_link_libraries(test_calc
${CMAKE_CURRENT_SOURCE_DIR}/third_party/googletest-release-1.8.1/build/googlemock/gtest/libgtest.a
${CMAKE_CURRENT_SOURCE_DIR}/third_party/googletest-release-1.8.1/build/googlemock/gtest/libgtest_main.a
pthread)
target_include_directories(test_calc PUBLIC
include
${CMAKE_CURRENT_SOURCE_DIR}/third_party/googletest-release-1.8.1/googletest/include)
우여곡절이 있어 GoogleTest를 submodule이 아닌 wget으로 가져옵니다. 또한 googletest
make install
에서 GitHub Actions 환경 내에서 사용 권한 오류가 발생하여 빌드 경로를 링크 경로로 만듭니다.감동의 순간
실패 브랜치의 master에 병합을 보호
Include administrators 해 두지 않으면, 본인이 관리자를 위해 프로텍트의 확인을 실시할 수 없었습니다.
test_calc.cpp
#include <gtest/gtest.h>
#include "calc.h"
class TestCalc : public ::testing::Test {
};
TEST_F(TestCalc, add) {
EXPECT_EQ(3, add(1, 2));
EXPECT_EQ(-2, add(1, -3));
// NG
EXPECT_EQ(0, add(1, 1));
}
실행 로그에서 실패를 확인할 수 있습니다.
보호 확인. 병합 버튼이 눌리지 않는 것을 확인할 수 있다.
우여곡절
이것Add submodule support이 행해지면 사용할 수 있을까.
로컬과 동일한 환경에서 빌드해 주었으면 하는 마음으로 GitHub Actions에서도 독자적인 Dockerfile에 의한 Docker 빌드를 시도 성공시켰습니다만, 매회 apt install하고 있는 것을 깨닫는다. push 때마다 이것이라고 너무 늦어서 사용할 수 없다 ··.
소감
코드나 스쿠쇼 포함의 기사 쓸 예정으로 재료 모으면서 작업을 진행하고 있었습니다만 부족한 것 다수. 기사를 쓰면서 모으는 효율의 나쁜 일을 했습니다. 기사도 세로로 길어져 가독성 내려가, 개요만 쪽이 좋은 것일까··.
Reference
이 문제에 관하여(GitHub Actions를 사용해 보았습니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/toppy-luna/items/8358c19bbfb2aee4e848텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)