#!/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 "$@"