github.com/opencontainers/umoci@v0.4.8-0.20240508124516-656e4836fb0d/hack/ci-coverage.sh (about)

     1  #!/bin/bash
     2  # umoci: Umoci Modifies Open Containers' Images
     3  # Copyright (C) 2016-2020 SUSE LLC
     4  #
     5  # Licensed under the Apache License, Version 2.0 (the "License");
     6  # you may not use this file except in compliance with the License.
     7  # You may obtain a copy of the License at
     8  #
     9  #   http://www.apache.org/licenses/LICENSE-2.0
    10  #
    11  # Unless required by applicable law or agreed to in writing, software
    12  # distributed under the License is distributed on an "AS IS" BASIS,
    13  # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    14  # See the License for the specific language governing permissions and
    15  # limitations under the License.
    16  
    17  set -Eeuo pipefail
    18  
    19  COVERAGE="$1"
    20  
    21  function coverage() {
    22  	go tool cover -func "$@"
    23  }
    24  
    25  # Sort the coverage of all of the functions. This helps eye-ball what parts of
    26  # the project don't have enough test coverage.
    27  coverage "$COVERAGE" | egrep -v '^total:' | sort -k 3gr
    28  
    29  # Now find the coverage percentage, to check against the hardcoded lower limit.
    30  TOTAL="$(coverage "$COVERAGE" | grep '^total:' | sed -E 's|^[^[:digit:]]*([[:digit:]]+\.[[:digit:]]+)%$|\1|')"
    31  CUTOFF="80.0"
    32  
    33  echo "=== TOTAL COVERAGE: ${TOTAL}% ==="
    34  if (( "$(echo "$TOTAL < $CUTOFF" | bc)" ))
    35  then
    36  	echo "ERROR: Test coverage has fallen below hard cutoff of $CUTOFF."
    37  	echo "       Failing this CI run, as test coverage is a hard limit."
    38  	exit 64
    39  fi