chore_: setup ci codeclimate coverage reports (#5101)
* chore_: nix derivation with cc-test-reporter
This commit is contained in:
parent
59c6ee5ffe
commit
068ae3b67c
1
Makefile
1
Makefile
|
@ -353,6 +353,7 @@ test-unit: export UNIT_TEST_COUNT ?= 1
|
||||||
test-unit: export UNIT_TEST_FAILFAST ?= true
|
test-unit: export UNIT_TEST_FAILFAST ?= true
|
||||||
test-unit: export UNIT_TEST_RERUN_FAILS ?= true
|
test-unit: export UNIT_TEST_RERUN_FAILS ?= true
|
||||||
test-unit: export UNIT_TEST_USE_DEVELOPMENT_LOGGER ?= true
|
test-unit: export UNIT_TEST_USE_DEVELOPMENT_LOGGER ?= true
|
||||||
|
test-unit: export UNIT_TEST_REPORT_CODECLIMATE ?= false
|
||||||
test-unit: export UNIT_TEST_PACKAGES ?= $(call sh, go list ./... | \
|
test-unit: export UNIT_TEST_PACKAGES ?= $(call sh, go list ./... | \
|
||||||
grep -v /vendor | \
|
grep -v /vendor | \
|
||||||
grep -v /t/e2e | \
|
grep -v /t/e2e | \
|
||||||
|
|
|
@ -30,6 +30,11 @@ pipeline {
|
||||||
defaultValue: getDefaultUnitTestUseDevelopmentLogger(),
|
defaultValue: getDefaultUnitTestUseDevelopmentLogger(),
|
||||||
description: 'Should the job use detailed logging for tests, potentially generating large logs?'
|
description: 'Should the job use detailed logging for tests, potentially generating large logs?'
|
||||||
)
|
)
|
||||||
|
booleanParam(
|
||||||
|
name: 'UNIT_TEST_REPORT_CODECLIMATE',
|
||||||
|
defaultValue: getDefaultUnitTestReportCodeClimate(),
|
||||||
|
description: 'Should the job report test coverage to CodeClimate?'
|
||||||
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
options {
|
options {
|
||||||
|
@ -90,7 +95,6 @@ pipeline {
|
||||||
} }
|
} }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
stage('Lint') {
|
stage('Lint') {
|
||||||
steps { script {
|
steps { script {
|
||||||
nix.shell('make lint', pure: true)
|
nix.shell('make lint', pure: true)
|
||||||
|
@ -114,7 +118,14 @@ pipeline {
|
||||||
"--publish=${DB_PORT}:${DB_PORT}",
|
"--publish=${DB_PORT}:${DB_PORT}",
|
||||||
].join(' '), "-p ${DB_PORT}") { c ->
|
].join(' '), "-p ${DB_PORT}") { c ->
|
||||||
nix.shell('make generate-handlers', pure: true)
|
nix.shell('make generate-handlers', pure: true)
|
||||||
nix.shell('make test-unit V=1', pure: false)
|
withCredentials([
|
||||||
|
string(
|
||||||
|
credentialsId: 'codeclimate-test-reporter-id',
|
||||||
|
variable: 'CC_TEST_REPORTER_ID'
|
||||||
|
),
|
||||||
|
]) {
|
||||||
|
nix.shell('make test-unit V=1', pure: false)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
} }
|
} }
|
||||||
post { cleanup { /* Leftover DB containers. */
|
post { cleanup { /* Leftover DB containers. */
|
||||||
|
@ -171,6 +182,8 @@ def getDefaultUnitTestRerunFails() { isTestNightlyJob() ? false : true }
|
||||||
|
|
||||||
def getDefaultUnitTestUseDevelopmentLogger() { isTestNightlyJob() ? false : true }
|
def getDefaultUnitTestUseDevelopmentLogger() { isTestNightlyJob() ? false : true }
|
||||||
|
|
||||||
|
def getDefaultUnitTestReportCodeClimate() { isTestNightlyJob() ? false : true }
|
||||||
|
|
||||||
def getDefaultUnitTestFailfast() { isTestNightlyJob() ? false : true }
|
def getDefaultUnitTestFailfast() { isTestNightlyJob() ? false : true }
|
||||||
|
|
||||||
def getDefaultTimeout() { isTestNightlyJob() ? 5*60 : 50 }
|
def getDefaultTimeout() { isTestNightlyJob() ? 5*60 : 50 }
|
||||||
|
|
|
@ -62,6 +62,7 @@ run_test_for_package() {
|
||||||
echo -e "${GRN}Testing:${RST} ${package} Iteration:${iteration}"
|
echo -e "${GRN}Testing:${RST} ${package} Iteration:${iteration}"
|
||||||
package_dir=$(go list -f "{{.Dir}}" "${package}")
|
package_dir=$(go list -f "{{.Dir}}" "${package}")
|
||||||
output_file="${package_dir}/test_${iteration}.log"
|
output_file="${package_dir}/test_${iteration}.log"
|
||||||
|
coverage_file="${package_dir}/test_${iteration}.coverage.out"
|
||||||
|
|
||||||
if has_extended_timeout "${package}"; then
|
if has_extended_timeout "${package}"; then
|
||||||
package_timeout="${UNIT_TEST_PACKAGE_TIMEOUT_EXTENDED}"
|
package_timeout="${UNIT_TEST_PACKAGE_TIMEOUT_EXTENDED}"
|
||||||
|
@ -82,7 +83,9 @@ run_test_for_package() {
|
||||||
-v ${GOTEST_EXTRAFLAGS} \
|
-v ${GOTEST_EXTRAFLAGS} \
|
||||||
-timeout "${package_timeout}" \
|
-timeout "${package_timeout}" \
|
||||||
-count 1 \
|
-count 1 \
|
||||||
-tags "${BUILD_TAGS}" | \
|
-tags "${BUILD_TAGS}" \
|
||||||
|
-covermode=atomic \
|
||||||
|
-coverprofile="${coverage_file}" | \
|
||||||
redirect_stdout "${output_file}"
|
redirect_stdout "${output_file}"
|
||||||
|
|
||||||
local go_test_exit=$?
|
local go_test_exit=$?
|
||||||
|
@ -96,6 +99,10 @@ run_test_for_package() {
|
||||||
return ${go_test_exit}
|
return ${go_test_exit}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if [[ $UNIT_TEST_REPORT_CODECLIMATE == 'true' ]]; then
|
||||||
|
cc-test-reporter before-build
|
||||||
|
fi
|
||||||
|
|
||||||
for package in ${UNIT_TEST_PACKAGES}; do
|
for package in ${UNIT_TEST_PACKAGES}; do
|
||||||
for ((i=1; i<=UNIT_TEST_COUNT; i++)); do
|
for ((i=1; i<=UNIT_TEST_COUNT; i++)); do
|
||||||
if ! is_parallelizable "${package}" || [[ "$UNIT_TEST_FAILFAST" == 'true' ]]; then
|
if ! is_parallelizable "${package}" || [[ "$UNIT_TEST_FAILFAST" == 'true' ]]; then
|
||||||
|
@ -124,3 +131,12 @@ if [[ "${UNIT_TEST_COUNT}" -gt 1 ]]; then
|
||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
# Gather test coverage results
|
||||||
|
echo "mode: atomic" > c.out
|
||||||
|
grep -h -v "^mode:" ./**/*.coverage.out >> c.out
|
||||||
|
rm -rf ./**/*.coverage.out
|
||||||
|
|
||||||
|
if [[ $UNIT_TEST_REPORT_CODECLIMATE == 'true' ]]; then
|
||||||
|
cc-test-reporter after-build --prefix=github.com/status-im/status-go
|
||||||
|
fi
|
|
@ -51,6 +51,7 @@ in rec {
|
||||||
|
|
||||||
# Custom packages
|
# Custom packages
|
||||||
go-modvendor = callPackage ./pkgs/go-modvendor { };
|
go-modvendor = callPackage ./pkgs/go-modvendor { };
|
||||||
|
cc-test-reporter = callPackage ./pkgs/cc-test-reporter { };
|
||||||
|
|
||||||
gomobile = (prev.gomobile.overrideAttrs (old: {
|
gomobile = (prev.gomobile.overrideAttrs (old: {
|
||||||
patches = [
|
patches = [
|
||||||
|
|
|
@ -0,0 +1,41 @@
|
||||||
|
{ lib, stdenv, fetchurl }:
|
||||||
|
|
||||||
|
let
|
||||||
|
platform = lib.getAttr builtins.currentSystem {
|
||||||
|
aarch64-linux = "linux-arm64";
|
||||||
|
x86_64-linux = "linux-amd64";
|
||||||
|
aarch64-darwin = "darwin-amd64"; # There's no arm64 build for macOS, amd64 works on both
|
||||||
|
x86_64-darwin = "darwin-amd64";
|
||||||
|
};
|
||||||
|
|
||||||
|
in stdenv.mkDerivation rec {
|
||||||
|
pname = "cc-test-reporter";
|
||||||
|
version = "0.11.1";
|
||||||
|
|
||||||
|
src = fetchurl {
|
||||||
|
url = "https://codeclimate.com/downloads/test-reporter/test-reporter-${version}-${platform}";
|
||||||
|
hash = lib.getAttr builtins.currentSystem {
|
||||||
|
aarch64-linux = "sha256-b6rTiiKZiVxoR/aQaxlqG6Ftt7sqyAKXgO9EG6/sKck=";
|
||||||
|
x86_64-linux = "sha256-ne79mW3w9tHJ+3lAWzluuRp6yjWsy4lpdV/KpmjaTa0=";
|
||||||
|
aarch64-darwin = "sha256-uO9aRL3cJe+KCoC+uN6cBQy8xGQHim6h5Qzw36QO7EY=";
|
||||||
|
x86_64-darwin = "sha256-uO9aRL3cJe+KCoC+uN6cBQy8xGQHim6h5Qzw36QO7EY=";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
dontUnpack = true;
|
||||||
|
|
||||||
|
installPhase = ''
|
||||||
|
runHook preInstall
|
||||||
|
install -D $src $out/bin/cc-test-reporter
|
||||||
|
chmod +x $out/bin/cc-test-reporter
|
||||||
|
runHook postInstall
|
||||||
|
'';
|
||||||
|
|
||||||
|
meta = with lib; {
|
||||||
|
description = "Code Climate test reporter for sending coverage data";
|
||||||
|
homepage = "https://docs.codeclimate.com/docs/configuring-test-coverage";
|
||||||
|
license = licenses.mit;
|
||||||
|
mainProgram = "cc-test-reporter";
|
||||||
|
platforms = ["aarch64-linux" "x86_64-linux" "aarch64-darwin" "x86_64-darwin"];
|
||||||
|
};
|
||||||
|
}
|
|
@ -21,7 +21,7 @@ in pkgs.mkShell {
|
||||||
buildInputs = with pkgs; [
|
buildInputs = with pkgs; [
|
||||||
git jq which
|
git jq which
|
||||||
go golangci-lint go-junit-report gopls go-bindata gomobileMod
|
go golangci-lint go-junit-report gopls go-bindata gomobileMod
|
||||||
mockgen protobuf3_20 protoc-gen-go gotestsum go-modvendor openjdk
|
mockgen protobuf3_20 protoc-gen-go gotestsum go-modvendor openjdk cc-test-reporter
|
||||||
] ++ lib.optionals (stdenv.isDarwin) [ xcodeWrapper ];
|
] ++ lib.optionals (stdenv.isDarwin) [ xcodeWrapper ];
|
||||||
|
|
||||||
shellHook = lib.optionalString (!isMacM1) ''
|
shellHook = lib.optionalString (!isMacM1) ''
|
||||||
|
|
Loading…
Reference in New Issue