blob: 18c5b406a0397ec7838ab8d032a649e6d1afcc85 [file] [log] [blame]
Zack Williamse64341b2018-04-10 22:14:35 -07001#!/usr/bin/env bash
2
Zack Williams32293ee2018-05-18 09:15:13 -07003# Copyright 2017-present Open Networking Foundation
4#
5# Licensed under the Apache License, Version 2.0 (the "License");
6# you may not use this file except in compliance with the License.
7# You may obtain a copy of the License at
8#
9# http://www.apache.org/licenses/LICENSE-2.0
10#
11# Unless required by applicable law or agreed to in writing, software
12# distributed under the License is distributed on an "AS IS" BASIS,
13# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14# See the License for the specific language governing permissions and
15# limitations under the License.
16
Zack Williamse64341b2018-04-10 22:14:35 -070017# jflint.sh - lint for Jenkins declarative pipeline jobs
18#
19# curl commands from: https://jenkins.io/doc/book/pipeline/development/#linter
20
21set -e -u -o pipefail
22
Zack Williamsf4c9c402018-06-27 14:58:43 -070023JENKINS_URL=https://jenkins.opencord.org/
Zack Williamse64341b2018-04-10 22:14:35 -070024JF_LIST=()
25
Zack Williamsbd4241f2019-02-13 10:36:08 -070026JF_FAIL=0
27
Zack Williamse64341b2018-04-10 22:14:35 -070028# if no args, and there's a Jenkinsfile in cwd, check it
29if [ ! -n "$1" ] && [ -f "Jenkinsfile" ] ; then
30 JF_LIST+=("Jenkinsfile")
31else
32# iterate over all args, check if they exist, then add to list of jenkinsfiles to check
33 for arg in "$@"; do
34 if [ -f "$arg" ]; then
35 JF_LIST+=($arg)
36 else
37 echo "File does not exist: ${arg}"
38 exit 1;
39 fi
40 done
41fi
42
43# JENKINS_CRUMB is needed if your Jenkins master has CRSF protection enabled as it should
Zack Williamsbd4241f2019-02-13 10:36:08 -070044JENKINS_CRUMB=$(curl -s "$JENKINS_URL/crumbIssuer/api/xml?xpath=concat(//crumbRequestField,\":\",//crumb)")
Zack Williamse64341b2018-04-10 22:14:35 -070045
46for target in "${JF_LIST[@]-}"; do
Zack Williamsbd4241f2019-02-13 10:36:08 -070047 echo "Checking: '${target}'"
48 CURL_OUT=$(curl -s -H "${JENKINS_CRUMB}" -F "jenkinsfile=<${target}" $JENKINS_URL/pipeline-model-converter/validate)
49
50 # Jenkins doesn't set a HTTP failure code when validation fails, so check output
51 if [[ $CURL_OUT =~ Jenkinsfile\ successfully\ validated ]]
52 then
53 echo "Validated successfully: '${target}'"
54 else
55 echo "Failed to validate: '${target}' - errors:"
56 echo "$CURL_OUT"
57 JF_FAIL=1
58 fi
59
Zack Williamse64341b2018-04-10 22:14:35 -070060done
61
Zack Williamsbd4241f2019-02-13 10:36:08 -070062exit $JF_FAIL