blob: 2b6736519b86eb315fc4fdc5889b7b32957b2a8e [file] [log] [blame]
#!/usr/bin/env bash
# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements. See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
# The ASF licenses this file to You under the Apache License, Version 2.0
# (the "License"); you may not use this file except in compliance with
# the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
add_test_type golang
GOEXE=$(command -v go 2>/dev/null)
declare -a GOMOD_DIRS
GOMOD_DIRS_CONTROL=reset
## @description Usage info for go plugin
## @audience private
## @stability evolving
## @replaceable no
function golang_usage
{
yetus_add_option "--golang-go=<cmd>" "Location of the go binary (default: \"${GOEXE:-not found}\")"
}
## @description Option parsing for go plugin
## @audience private
## @stability evolving
## @replaceable no
function golang_parse_args
{
declare i
for i in "$@"; do
case ${i} in
--golang-go=*)
GOEXE=${i#*=}
;;
esac
done
}
## @description find all non-vendor directories that have a go.mod file
## @audience public
## @stability evolving
## @replaceable yes
function golang_gomod_find
{
declare input
if [[ "${GOMOD_DIRS_CONTROL}" == reset ]]; then
GOMOD_DIRS=()
while read -r; do
if [[ ! "${REPLY}" =~ /vendor/ ]] &&
[[ ! "${REPLY}" =~ ^vendor ]]; then
input=${REPLY%%/go.mod}
GOMOD_DIRS+=("${input}")
fi
done < <(find "${BASEDIR}" -name go.mod)
GOMOD_DIRS_CONTROL=filled
fi
}
## @description Determine if a file is in GOMOD_DIRS[@]
## @audience public
## @stability evolving
## @replaceable yes
## @return all matching dirs
function golang_gomod_file
{
declare fn=${1}
yetus_find_deepest_directory GOMOD_DIRS "${BASEDIR}/${fn}"
}
## @description discover files to check
## @audience private
## @stability stable
## @replaceable yes
function golang_filefilter
{
declare filename=$1
golang_gomod_find
if [[ "${filename}" =~ \.(c|h|go|s|cc)$ ]] ||
[[ "${filename}" =~ go.mod$ ]]; then
if golang_gomod_file "${filename}" >/dev/null; then
yetus_debug "tests/golang: ${filename}"
add_test golang
add_test compile
fi
fi
}
## @description check for golang compiler errors
## @audience private
## @stability stable
## @replaceable no
function golang_precompile
{
GOMOD_DIRS_CONTROL=reset
}
## @description check for golang compiler errors
## @audience private
## @stability stable
## @replaceable no
function golang_compile
{
declare codebase=$1
declare multijdkmode=$2
if ! verify_needed_test golang; then
return 0
fi
if [[ ${codebase} = patch ]]; then
generic_postlog_compare compile golang "${multijdkmode}"
fi
}
## @description Helper for generic_logfilter
## @audience private
## @stability evolving
## @replaceable yes
function golang_logfilter
{
declare input=$1
declare output=$2
#shellcheck disable=SC1117
"${GREP}" -i -E "^.*\.go\:[[:digit:]]*\:" "${input}" > "${output}"
}
## @description go post
## @audience private
## @stability evolving
## @replaceable yes
function golang_postapply
{
if [[ -z "${GOEXE}" ]]; then
# shellcheck disable=SC2016
version=$("${GOEXE}" version 2>&1 | "${AWK}" '{print $3}' 2>&1)
add_version_data golang "${version#* }"
fi
}
## @description set volumes and options as appropriate for maven
## @audience private
## @stability evolving
## @replaceable yes
function golang_docker_support
{
add_docker_env CGO_LDFLAGS
add_docker_env CGO_ENABLED
add_docker_env GO111MODULE
add_docker_env GOPATH
}
## @description set volumes and options as appropriate for maven
## @audience private
## @stability evolving
## @replaceable yes
function golang_clean
{
git_checkout_force
}