Skip to content
Snippets Groups Projects
validation.yml 2.80 KiB
spec:
  inputs:
    check-links-job-tags:
      description: tags to filter applicable runners for check-links build job
      type: array
      default: []
    tbc-check-job-tags:
      description: tags to filter applicable runners for tbc-checklinks build job
      type: array
      default: []
    tbc-check-image:
      description: image to use for tbc-check job
      type: string
      default: registry.gitlab.com/to-be-continuous/tools/tbc-check:latest
    gitlab-ci-lint-job-tags:
      description: tags to filter applicable runners for gitlab-ci-lint build job
      type: array
      default: []

---

.lint-scripts: &lint-scripts |
  set -e
  function log_info() {
    echo -e "[\e[1;94mINFO\e[0m] $*"
  }

  function log_warn() {
    echo -e "[\\e[1;93mWARN\\e[0m] $*"
  }

  function log_error() {
    echo -e "[\e[1;91mERROR\e[0m] $*" >&2
  }

  function install_ca_certs() {
    certs=$1
    if [[ -z "$certs" ]]
    then
      return
    fi

    # import in system
    if echo "$certs" >> /etc/ssl/certs/ca-certificates.crt
    then
      log_info "CA certificates imported in \\e[33;1m/etc/ssl/certs/ca-certificates.crt\\e[0m"
    fi
    if echo "$certs" >> /etc/ssl/cert.pem
    then
      log_info "CA certificates imported in \\e[33;1m/etc/ssl/cert.pem\\e[0m"
    fi
  }

  # validates an input GitLab CI YAML file
  function ci_lint() {
    rc=0
    for file in $(eval "ls -1 $GITLAB_CI_FILES")
    do
      log_info "Validating: $file..."
      cilint_req="{\"content\": $(jq --raw-input --slurp '.'  < "${file:-/dev/stdin}")}"
      cilint_resp=$(curl -s --header "Content-Type: application/json" --header "PRIVATE-TOKEN: $GITLAB_TOKEN" $CI_API_V4_URL/projects/$CI_PROJECT_ID/ci/lint --data "$cilint_req")
      if [ "$(echo "$cilint_resp" | jq -r '.valid')" == "true" ]
      then
        log_info " ... valid"
      else
        log_error " ... invalid"
        echo "$cilint_resp" | jq
        rc=1
      fi
    done