blob: 127cd562d4da164a147ad069a37cfe64a8fa2bcb [file] [log] [blame]
# Automate code coverage upload to NG3 Metrics bucket
#
# Substitutions:
# _NG3_BUCKET: where coverage and metadata should be uploaded to reflect in NorthStar, Non-Google3 Metrics owned
# COMMIT_SHA: most recent commit
# _REF: target branch
# _OWNER: email to contact for issues
#
# Schema for bazel test redirection, in output.txt:
# [bazel server connection logs]
# [test name, PASSED/FAILED in: xxx]
# [coverage file location]
# ...
# (repeat for every test)
#
# Example:
# Starting local Bazel server and connecting to it...
# //src/pkg/config:config_test (cached) PASSED in 0.1s
# /usr/local/.cache/bazel-out/k8-fastbuild/testlogs/src/pkg/config/config_test/coverage.dat
steps:
# Use docker container to install bazel
- name: 'gcr.io/cloud-builders/docker'
entrypoint: 'bash'
args:
- '-c'
- |
cat <<EOF | docker build -t bazel -
FROM gcr.io/cloud-builders/bazel
RUN apt-get update && apt-get install -y mtools dosfstools
EOF
# Run bash script that builds the metadata.json
# Run bazel tests and redirect to output.txt
# Open and merge coverage files found in output.txt
# Remove duplicate coverage lines
- name: 'bazel'
entrypoint: 'bash'
args:
- '-c'
- |
set -o errexit
./coverage/build-metadata.sh
bazel test --collect_code_coverage --spawn_strategy=standalone -- ... -//src/pkg/tools/... > output.txt
cat $(grep -A 1 --no-group-separator -E 'PASSED in|FAILED in' output.txt | grep -v -E 'PASSED in|FAILED in') > merged-coverage.txt
cat -n merged-coverage.txt | sort -uk2 | sort -nk1 | cut -f2- > combined-coverage.out
env:
- 'COMMIT_SHA=$COMMIT_SHA'
- 'REF=$_REF'
- 'OWNER=$_OWNER'
# Upload coverage and metadata to NG3 buckets
- name: 'gcr.io/cloud-builders/gsutil'
args: ['cp', 'combined-coverage.out', '${_NG3_BUCKET}/$BUILD_ID/combined-coverage.out']
- name: 'gcr.io/cloud-builders/gsutil'
args: ['cp', 'metadata.json', '${_NG3_BUCKET}/$BUILD_ID/metadata.json']
options:
machineType: 'N1_HIGHCPU_8'
substitutionOption: 'MUST_MATCH'
timeout: '3000s'