#!/usr/bin/env bash
set -e

# Copyright (c) 2019-2023 Cosmin Truta.
#
# Use, modification and distribution are subject
# to the Boost Software License, Version 1.0.
# See the accompanying file LICENSE_BSL_1_0.txt
# or visit http://www.boost.org/LICENSE_1_0.txt
#
# SPDX-License-Identifier: BSL-1.0

# shellcheck source="ci/lib/ci.lib.sh"
source "$(dirname "$0")/lib/ci.lib.sh"
cd "$CI_TOPLEVEL_DIR"

CI_SHELLCHECK="$(command -v shellcheck || true)"
CI_YAMLLINT="$(command -v yamllint || true)"
CI_LINT_COUNTER=0

function ci_lint_ci_config_files {
    ci_info "linting: CI config files"
    local MY_FILE
    if [[ -x $CI_YAMLLINT ]]
    then
        ci_spawn "$CI_YAMLLINT" --version
        for MY_FILE in "$CI_TOPLEVEL_DIR"/.*.yml
        do
            ci_spawn "$CI_YAMLLINT" --strict "$MY_FILE" ||
                CI_LINT_COUNTER=$((CI_LINT_COUNTER + 1))
        done
    else
        ci_warn "program not found: 'yamllint'; skipping checks"
    fi
}

function ci_lint_ci_scripts {
    ci_info "linting: CI scripts"
    local MY_FILE
    if [[ -x $CI_SHELLCHECK ]]
    then
        ci_spawn "$CI_SHELLCHECK" --version
        for MY_FILE in "$CI_SCRIPT_DIR"/*.sh
        do
            ci_spawn "$CI_SHELLCHECK" -x "$MY_FILE" ||
                CI_LINT_COUNTER=$((CI_LINT_COUNTER + 1))
        done
    else
        ci_warn "program not found: 'shellcheck'; skipping checks"
    fi
}

function ci_lint_ci_scripts_license {
    ci_info "linting: CI scripts license"
    ci_spawn grep -F "Boost Software License" ci/LICENSE_BSL_1_0.txt || {
        ci_warn "bad or missing CI license file: '$CI_SCRIPT_DIR/LICENSE_BSL_1_0.txt'"
        CI_LINT_COUNTER=$((CI_LINT_COUNTER + 1))
    }
}

function main {
    [[ $# -eq 0 ]] || {
        ci_info "usage: $CI_SCRIPT_NAME"
        ci_err "unexpected command argument: '$1'"
    }
    ci_lint_ci_config_files
    ci_lint_ci_scripts
    ci_lint_ci_scripts_license
    if [[ $CI_LINT_COUNTER -eq 0 ]]
    then
        ci_info "success!"
        exit 0
    else
        ci_info "failed on $CI_LINT_COUNTER file(s)"
        exit 1
    fi
}

main "$@"
