| # 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 |
| 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' |