mirror of
https://github.com/edgelesssys/constellation.git
synced 2024-12-27 00:19:36 -05:00
97 lines
2.3 KiB
Bash
97 lines
2.3 KiB
Bash
|
#!/usr/bin/env bash
|
||
|
|
||
|
###### script header ######
|
||
|
|
||
|
lib=$(realpath @@BASE_LIB@@) || exit 1
|
||
|
stat "${lib}" >> /dev/null || exit 1
|
||
|
|
||
|
# shellcheck source=../sh/lib.bash
|
||
|
if ! source "${lib}"; then
|
||
|
echo "Error: could not find import"
|
||
|
exit 1
|
||
|
fi
|
||
|
|
||
|
go=$(realpath @@GO@@)
|
||
|
stat "${go}" >> /dev/null
|
||
|
gocoverage=$(realpath @@GOCOVERAGE@@)
|
||
|
stat "${gocoverage}" >> /dev/null
|
||
|
|
||
|
cd "${BUILD_WORKSPACE_DIRECTORY}"
|
||
|
|
||
|
###### script body ######
|
||
|
|
||
|
readonly coverageResultPath="coverage_result.json"
|
||
|
readonly coverageMainBucketPath="s3://constellation-ci/gocoverage/coverage_main.json"
|
||
|
readonly coverageMainPath="coverage_main.json"
|
||
|
readonly diffMdPath="coverage_diff.md"
|
||
|
|
||
|
function goTestCover() {
|
||
|
local path=${1-.}
|
||
|
testResult=0
|
||
|
testout=$(CGO_ENABLED=0 ${go} test -C "${path}" -cover "./...") || testResult=$?
|
||
|
if [[ ${testResult} -ne 0 ]]; then
|
||
|
echo "go test failed with exit code ${testResult}:"
|
||
|
echo "${testout}"
|
||
|
exit "${testResult}"
|
||
|
fi
|
||
|
echo "${testout}"
|
||
|
}
|
||
|
|
||
|
function goTestCoverAllMods() {
|
||
|
readarray -t <<< "$(${go} list -f '{{.Dir}}' -m)"
|
||
|
modules=("${MAPFILE[@]}")
|
||
|
|
||
|
excludeMods=(
|
||
|
"hack/tools"
|
||
|
)
|
||
|
|
||
|
for exclude in "${excludeMods[@]}"; do
|
||
|
for i in "${!modules[@]}"; do
|
||
|
if [[ ${modules[i]} == "${BUILD_WORKSPACE_DIRECTORY}/${exclude}" ]]; then
|
||
|
unset 'modules[i]'
|
||
|
fi
|
||
|
done
|
||
|
done
|
||
|
|
||
|
out=""
|
||
|
for mod in "${modules[@]}"; do
|
||
|
out="${out}$(goTestCover "${mod}")\n"
|
||
|
done
|
||
|
|
||
|
echo "${out}"
|
||
|
}
|
||
|
|
||
|
function fetchMainReport() {
|
||
|
if ! aws s3 cp "${coverageMainBucketPath}" "${coverageMainPath}" > /dev/null; then
|
||
|
echo "Could not fetch main coverage report from ${coverageMainBucketPath}"
|
||
|
exit 1
|
||
|
fi
|
||
|
}
|
||
|
|
||
|
function findDiffPaths() {
|
||
|
diff=$(git diff --name-only origin/main...HEAD)
|
||
|
if [[ -z ${diff} ]]; then
|
||
|
echo "No diff found between main and HEAD"
|
||
|
exit 0
|
||
|
fi
|
||
|
echo "${diff}" | xargs dirname | sort | uniq | tr '\n' ','
|
||
|
}
|
||
|
|
||
|
function generateCoverageDiff() {
|
||
|
echo "Running go test with coverage for all modules..."
|
||
|
out=$(goTestCoverAllMods)
|
||
|
echo "Generating coverage report..."
|
||
|
${gocoverage} > "${coverageResultPath}" <<< "${out}"
|
||
|
echo "Fetch latest report from main..."
|
||
|
fetchMainReport
|
||
|
echo "Find package paths that changed..."
|
||
|
diffPaths=$(findDiffPaths)
|
||
|
echo "Generating diff report..."
|
||
|
${gocoverage} \
|
||
|
-touched "${diffPaths}" \
|
||
|
-diff "${coverageMainPath}" "${coverageResultPath}" \
|
||
|
> "${diffMdPath}"
|
||
|
}
|
||
|
|
||
|
generateCoverageDiff
|