통합 코드 기후 및 go PKG
15059 단어 codequalitygotesting
--prefix
단계에서 after-build
arg (pkg github 접두사, 즉 "github.com/mottaquikarim/esqueridsl") 를 설정하여 테스트 보고원이 src 코드를 식별할 수 있도록 합니다.만약 ^^ 의미가 없다면 아래의 전체 배경을 읽어 주십시오👍
나는 최근에 esquerydsl라는 골뱅 pkg을 발표했는데, 이것은 골뱅이에서elasticsearch 조회를 안전하게 구축하는 데 도움이 된다.
미래의 안정성을 확보하기 위해 저는 통합Code Climate을 통해 유지보수성과 테스트 범위율을 추적하고 싶습니다.
이전에python 프로젝트에서CC를 사용한 적이 있지만 go에서 사용한 적이 없습니다. 통합할 때 기록/공유해야 한다고 생각하는 문제에 부딪혔습니다.
0단계: 테스트를 작성하고 실행합니다!
나는 실제 소스 코드를 상세하게 설명하지 않고 테스트 + 결과를 어떻게 실행하고 코드 환경으로 내보내는지에 중점을 두었다.
go에서 테스트를 실행하는 것은 매우 간단합니다.
go test ./...
나는 docker에서 일하는 것을 더 좋아하기 때문에 보통 다음과 같은 방식으로 상술한 조작을 실행한다.docker run -w /app -v ${PWD}:/app golang:1.15 go test ./...
(여기 있는 모든 예는 docker에서 실행됩니다.)계속하기 전에 우리는 먼저 그것을 분해한다.
docker run
:docker 용기에서 물건을 운행합시다-w /app
: 작업 디렉토리는 app
폴더-v ${PWD}:/app
: 현재 작업 디렉토리 볼륨을 컨테이너의 작업 디렉토리에 넣습니다.이것은 개발 기간golang:1.15
: 우리가 실행하고 싶은 그림은 이 예에서golangv1입니다.15 go test ./...
: 마지막으로 docker 용기에서 실행하기를 원하는 명령입니다. 이것은 당연히 Gotest 명령입니다추적 코드 덮어쓰기
Golang의 코드 커버율을 추적하는 것도 매우 쉽다.우리는
go test
명령에 arg를 추가하기만 하면 된다.-coverprofile=c.out
-coverprofile
파라미터는 go가 테스트 덮어쓰기 결과를 어디서 발표하는지 알려주고 잠시 후에 이를 분석하여 시각화된 소스 코드의 덮어쓰기 결과를 도울 수 있다.결론:
docker run -w /app -v ${PWD}:/app golang:1.15 go test ./... -coverprofile=c.out
현재 작업 디렉터리에 c.out
라는 파일이 있습니다. 이것은 줄마다 테스트 덮어쓰기 데이터를 인코딩합니다.위대하다우리가 지금 해야 할 일은 이것을 기후 코드에 올리는 것이다. 우리는 금색이다.사이드바:HTML 형식으로 코드 덮어쓰기 결과 생성
올바른 탄젠트이므로 무시하십시오.
나는 내가 단원 테스트에서 어떤 줄을 빠뜨렸는지 이해하고 확인하는 것이 매우 유용하다는 것을 발견했다.한 줄 한 줄 테스트 범위가 반드시 안정성을 보장하는 것은 아니지만, 나는 그것이 유용한 기준이라는 것을 발견했다. 단원 테스트를 언제 중단하는지 알 수 있도록 도와줄 수 있다. (나의 테스트 범위는 약 90+)👍 (점)
go에서 시각화를 실현하려면 테스트 후 다음 명령을 실행합니다.
docker run -w /app -v ${PWD}:/app golang:1.15 go tool cover -html=c.out -o coverage.html
coverage.html
브라우저에서 src 코드를 열면 테스트에 덮어쓰고 누락된 줄을 직관적으로 표시할 수 있습니다.CodeClimate 시작
나는 이 문장을 건너갈 것이다. 그렇지 않으면 이 문장은 매우 길 것이다.내 가설은 이 글을 읽은 사람이 이미 CC 품질 계정을 하나 가지고 있고 (golang!)재구매가 사용으로 설정되었습니다.
1단계:test reporter 다운로드
Climate test reporter 코드를 다운로드하고 실행합니다.물론, 우리는 docker 용기에서 이 점을 실현하기를 희망한다.내게는 다음과 같은 의미가 있습니다.
# 1. download CC test reported
CC_URL=https://codeclimate.com/downloads/test-reporter/test-reporter-latest-linux-amd64
docker run -w /app -v ${PWD}:/app golang:1.15 \
/bin/bash -c \
"curl -L ${CC_URL} > ./cc-test-reporter"
# 2. update perms
docker run -w /app -v ${PWD}:/app golang:1.15 chmod +x ./cc-test-reporter
# 3. run before build
docker run -w /app -v ${PWD}:/app \
-e CC_TEST_REPORTER_ID=${CC_TEST_REPORTER_ID} \
golang:1.15 ./cc-test-reporter before-build
여기에는 세 가지 주요 부분이 있다.curl
를 통해CC_URL
다운로드할 수 있습니다.나는 docker run
명령에서 두 단계로 그것을 실행했다. 이것이 바로 내가 /bin/bash -c "...steps to run..."
줄을 가지고 있는 이유이다. (필요하면 두 줄로 나누어 실행할 수도 있다.) chmod
에서 cc-test-reporter
을 실행합니다. (마음대로 호출할 수 있습니다.)before-build
를 실행하고testreporter를 설정하여 덮어쓰기 데이터를 보냅니다.CC_TEST_REPORTER_ID
는 중요한 것이다. 이것이 바로 CC가 환매 협의의 코드 커버율이 정말로 당신에게 왔는지 검증하는 것이다.나는 그것을 envvar로 삼았다. 왜냐하면 그것은 어느 곳의 코드에 제출되어서는 안 되기 때문이다. 2단계: 코드 덮어쓰기를 사용하여 테스트 실행
이 단계는 매우 간단하다. 기본적으로 0단계이다.
docker run -w /app -v ${PWD}:/app golang:1.15 go test ./... -coverprofile=c.out
3단계: 사후 구축
이것이 바로 내가 문제에 부딪힌 곳이다.간단/로깅 단계는 다음과 같습니다.
# upload data to CC
docker run -w /app -v ${PWD}:/app \
-e CC_TEST_REPORTER_ID=${CC_TEST_REPORTER_ID} \
golang:1.15 ./cc-test-reporter after-build
이 점에서 이것은 상당히 표준적이다.CodeClimate의 지도에 따라 우리는 cc-test-reporter
arg 운행after-build
을 사용한다.그리고 우리는 CC_TEST_REPORTER_ID
를 통해 우리의 신분을 확정한다.그러나 축구하는 사람은 유일하다. 위의 명령은 소용없다!내
esquerydsl
패키지를 위해 위의 줄을 실행할 때 (평시하고 나도 임시로 --debug
로고를 추가했다) 나는 다음과 같은 출력을 얻었다.time="2020-12-31T19:52:57Z" level=error msg="failed to read file github.com/mottaquikarim/esquerydsl/esquerydsl.go\nopen github.com/mottaquikarim/esquerydsl/esquerydsl.go: no such file or directory"
Error: open github.com/mottaquikarim/esquerydsl/esquerydsl.go: no such file or directory
다음과 같이 복구하려면 --prefix
가 필요합니다.docker run -w /app -v ${PWD}:/app \
-e CC_TEST_REPORTER_ID=${CC_TEST_REPORTER_ID} \
golang:1.15 ./cc-test-reporter after-build --prefix=github.com/mottaquikarim/esquerydsl
주의하십시오--prefix=github.com/mottaquikarim/esquerydsl
.완전한 패키지 접두사 URL이 있어야만 작업을 할 수 있습니다.일단 내가 이 파라미터를 추가하면, 나는 나의 Pkg 코드 커버율 통계 데이터를 업로드할 수 있다.(보기here.비밀 번호
나는 이 물건을 가지런한 리본에 묶어서 여러분과 나누고 싶습니다.Github 작업에서 이 작업을 실행하는 데 make targets를 사용합니다.나는 미래의 다른 사람들을 도울 수 있도록 아래의 식단을 공유할 것이다.
Makefile
# Definitions
ROOT := $(PWD)
GO_HTML_COV := ./coverage.html
GO_TEST_OUTFILE := ./c.out
GOLANG_DOCKER_IMAGE := golang:1.15
GOLANG_DOCKER_CONTAINER := goesquerydsl-container
CC_TEST_REPORTER_ID := ${CC_TEST_REPORTER_ID}
CC_PREFIX := github.com/mottaquikarim/esquerydsl
# Usage:
# make test
test:
docker run -w /app -v ${ROOT}:/app ${GOLANG_DOCKER_IMAGE} go test ./... -coverprofile=${GO_TEST_OUTFILE}
docker run -w /app -v ${ROOT}:/app ${GOLANG_DOCKER_IMAGE} go tool cover -html=${GO_TEST_OUTFILE} -o ${GO_HTML_COV}
# custom logic for code climate, gross but necessary
_before-cc:
# download CC test reported
docker run -w /app -v ${ROOT}:/app ${GOLANG_DOCKER_IMAGE} \
/bin/bash -c \
"curl -L https://codeclimate.com/downloads/test-reporter/test-reporter-latest-linux-amd64 > ./cc-test-reporter"
# update perms
docker run -w /app -v ${ROOT}:/app ${GOLANG_DOCKER_IMAGE} chmod +x ./cc-test-reporter
# run before build
docker run -w /app -v ${ROOT}:/app \
-e CC_TEST_REPORTER_ID=${CC_TEST_REPORTER_ID} \
${GOLANG_DOCKER_IMAGE} ./cc-test-reporter before-build
_after-cc:
# handle custom prefix
$(eval PREFIX=${CC_PREFIX})
ifdef prefix
$(eval PREFIX=${prefix})
endif
# upload data to CC
docker run -w /app -v ${ROOT}:/app \
-e CC_TEST_REPORTER_ID=${CC_TEST_REPORTER_ID} \
${GOLANG_DOCKER_IMAGE} ./cc-test-reporter after-build --prefix ${PREFIX}
# this runs tests with cc reporting built in
test-ci: _before-cc test _after-cc
Github Action
나는 .github/workflows/run-build.yml
에서 이 파일을 저장했고, 나의 환매 기밀에서, 구축할 때 이 파일을 envvar로 내보낼 수 있도록 CC_TEST_REPORTER_ID
저장했다.name: Build Status
on:
push:
jobs:
build:
runs-on: ubuntu-latest
steps:
- name: Checkout master
uses: actions/checkout@v2
- name: Run unit tests
run: |
make clean test-ci
env:
CC_TEST_REPORTER_ID: ${{ secrets.CC_TEST_REPORTER_ID }}
런닝make test-ci
은 코드climate reporter가 실행되는 상황에서 테스트를 실행하고 make test
는 개발/디버깅에 사용되는 정상적인 단위 테스트만 실행합니다.위의 구성 결과는 다음 위치에서 볼 수 있습니다.
Reference
이 문제에 관하여(통합 코드 기후 및 go PKG), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/taqkarim/integrating-code-climate-w-go-pkgs-2on6텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)