Загрузка данных
#!/usr/bin/env bash
# ENV vars must be set: "$TUZ_NAME_FOR_ACCESS_ANALYZER_BINS:$TUZ_NAME_FOR_ACCESS_ANALYZER_BINS"
# ^ used in noir_runner.sh
set -euo pipefail
set -e
echo "zz TUZ_NAME_FOR_ACCESS_ANALYZER_BINS:"
echo "$TUZ_NAME_FOR_ACCESS_ANALYZER_BINS"
### prepare vars
echo "=== Jenkins tools preparation: ==="
echo "=== Jenkins tool roots ==="
#echo MAVEN_ROOT=${MAVEN_ROOT:-}
echo CT_YQ_ROOT=$CT_YQ_ROOT
echo CT_JQ_ROOT=$CT_JQ_ROOT
echo CT_PYTHON312_ROOT=$CT_PYTHON312_ROOT
echo "=== Prepare PATH wrappers ==="
JENKINS_BIN_DIR="$WORKSPACE/.oakb-jenkins-bin"
mkdir -p "$JENKINS_BIN_DIR"
# yq custom tool executable is named yq_linux_amd64.
# Create normal command name "yq" for scripts.
if [[ ! -x "$CT_YQ_ROOT/yq_linux_amd64" ]]; then
echo "ERROR: yq executable not found or not executable: $CT_YQ_ROOT/yq_linux_amd64" >&2
ls -la "$CT_YQ_ROOT" >&2 || true
exit 1
fi
ln -sfn "$CT_YQ_ROOT/yq_linux_amd64" "$JENKINS_BIN_DIR/yq"
# export MAVEN_HOME="$MAVEN_ROOT"
# export M2_HOME="$MAVEN_ROOT"
# export PATH="$JENKINS_BIN_DIR:$MAVEN_ROOT/bin:$CT_JQ_ROOT:$CT_PYTHON312_ROOT/python/install/bin:$PATH"
#export PATH="$JENKINS_BIN_DIR:$CT_JQ_ROOT:$CT_PYTHON312_ROOT/python/install/bin:$PATH"
export PATH="$JENKINS_BIN_DIR:$CT_JQ_ROOT:$CT_PYTHON312_ROOT/python/install/bin:$PATH"
# Clear Bash command lookup cache after PATH changes.
hash -r
echo "=== Tool command resolution ==="
#echo "command -v mvn:"
#command -v mvn
echo "command -v jq:"
command -v jq
echo "command -v yq:"
command -v yq
echo "command -v python3:"
command -v python3
echo "=== Tool versions ==="
#mvn -version
jq --version
yq --version
#python3 --version || true
echo "=== Jenkins tools preparation. ==="
log() {
local level="$1"
shift
printf '[%s] %s\n' "$level" "$*" >&2
}
git_version_floor() {
printf '2.42.4\n'
}
export_git_compat_env() {
export GIT_CONFIG_GLOBAL="${OAKB_GIT_CONFIG_GLOBAL:-/dev/null}"
export GIT_CONFIG_NOSYSTEM="${OAKB_GIT_CONFIG_NOSYSTEM:-1}"
unset GIT_CONFIG_COUNT
unset GIT_CONFIG_PARAMETERS
}
parse_git_version_triplet() {
local version_text="$1"
if [[ "$version_text" =~ ([0-9]+)\.([0-9]+)\.([0-9]+) ]]; then
printf '%s %s %s\n' "${BASH_REMATCH[1]}" "${BASH_REMATCH[2]}" "${BASH_REMATCH[3]}"
return 0
fi
return 1
}
git_version_at_least() {
local actual_version_text="$1"
local required_version_text="$2"
local actual_major actual_minor actual_patch
local required_major required_minor required_patch
read -r actual_major actual_minor actual_patch < <(parse_git_version_triplet "$actual_version_text") || return 1
read -r required_major required_minor required_patch < <(parse_git_version_triplet "$required_version_text") || return 1
if ((actual_major != required_major)); then
((actual_major > required_major))
return $?
fi
if ((actual_minor != required_minor)); then
((actual_minor > required_minor))
return $?
fi
((actual_patch >= required_patch))
}
require_git_version_floor() {
local version_text
local version_floor
version_floor="$(git_version_floor)"
if ! command -v git >/dev/null 2>&1; then
log ERROR "jenkins_generate_reports.sh requires Git $version_floor or newer, but git was not found"
exit 1
fi
if ! version_text="$(git --version 2>/dev/null)"; then
log ERROR "jenkins_generate_reports.sh requires Git $version_floor or newer, but git --version failed"
exit 1
fi
log INFO "jenkins_generate_reports.sh git --version: $version_text"
if ! git_version_at_least "$version_text" "$version_floor"; then
log ERROR "jenkins_generate_reports.sh requires Git $version_floor or newer; effective git --version is: $version_text"
exit 1
fi
export APA_ANALYZER_GIT_VERSION="$version_text"
}
validate_git_branch_name() {
local branch="$1"
if [[ -z "$branch" ]]; then
log ERROR "Git branch name is empty"
exit 1
fi
if [[ "$branch" == -* ]]; then
log ERROR "Git branch name must not start with '-': $branch"
exit 1
fi
if ! git check-ref-format --branch "$branch" >/dev/null 2>&1; then
log ERROR "Invalid Git branch name: $branch"
exit 1
fi
}
workspace="${WORKSPACE:-$PWD}"
oakb_tmp_root="${OAKB_TMP_ROOT:-$workspace/.oakb_tmp}"
mkdir -p "$oakb_tmp_root"
oakb_tmp_root="$(cd "$oakb_tmp_root" && pwd -P)"
export OAKB_TMP_ROOT="$oakb_tmp_root"
export TMPDIR="$oakb_tmp_root"
: "${ANALYZER_REPO_URL:=ssh://git@portal.works.prod.sbt:7998/oakbapa/apa_analyzer.git}"
: "${ANALYZER_REPO_BRANCH:=main}"
: "${ANALYZER_DIR:=$workspace/.apa_analyzer}"
: "${CODE_ROOTS_GIT_DIR_PATHS:?CODE_ROOTS_GIT_DIR_PATHS is required}"
: "${CODE_GIT_DIR_PATHS:=}"
: "${SWAGGER_FILE_PATH:=}"
export_git_compat_env
require_git_version_floor
validate_git_branch_name "$ANALYZER_REPO_BRANCH"
export GIT_SSH_COMMAND="ssh -i \"$GIT_SSH_KEY\" -o IdentitiesOnly=yes -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -o GlobalKnownHostsFile=/dev/null"
export CODE_ROOTS_GIT_DIR_PATHS CODE_GIT_DIR_PATHS COMPONENT_CODE COMPONENT_VERSION SWAGGER_FILE_PATH
# Always download a fresh analyzer checkout so producer jobs never reuse a local
# workspace cache after apa_analyzer changes.
if [[ -z "$ANALYZER_DIR" || "$ANALYZER_DIR" == "/" ]]; then
printf 'Refusing to remove unsafe ANALYZER_DIR: %s\n' "$ANALYZER_DIR" >&2
exit 1
fi
if [[ -e "$ANALYZER_DIR" ]]; then
rm -rf -- "$ANALYZER_DIR"
fi
git clone --depth 1 --single-branch --no-tags --branch "$ANALYZER_REPO_BRANCH" "$ANALYZER_REPO_URL" "$ANALYZER_DIR"
APA_ANALYZER_REPO_URL="$(git -C "$ANALYZER_DIR" remote get-url origin)"
APA_ANALYZER_REPO_BRANCH="$ANALYZER_REPO_BRANCH"
APA_ANALYZER_REPO_COMMIT="$(git -C "$ANALYZER_DIR" rev-parse HEAD)"
export APA_ANALYZER_REPO_URL APA_ANALYZER_REPO_BRANCH APA_ANALYZER_REPO_COMMIT
printf '%s\n' "$APA_ANALYZER_REPO_COMMIT"
find "$ANALYZER_DIR/scripts" -type f -name '*.sh' -exec chmod +x {} +
"$ANALYZER_DIR/scripts/generate_reports.sh"