name: Jenkins Checker # Lint Jenkinsfile and related groovy files on: pull_request: # file paths to consider in the event. Optional; defaults to all. paths: - 'build/ci/jenkins/**.groovy' - 'ci/jenkins/**.groovy' - '.github/workflows/jenkins-checker.yaml' jobs: check-jenkinsfile: name: Jenkinsfile Checker runs-on: ubuntu-latest steps: - name: Checkout uses: actions/checkout@v2 - name: Validate Jenkinsfile shell: bash run: | function validate(){ local file_path=${1:-Jenkinsfile} local jenkins_url=${2:-"https://jenkins.milvus.io:18080/"} JENKINS_CRUMB=`curl "${jenkins_url}/crumbIssuer/api/xml?xpath=concat(//crumbRequestField,\":\",//crumb)"` response=$(curl --max-time 10 --retry 5 --retry-delay 0 --retry-max-time 40 -X POST -H $JENKINS_CRUMB -F "jenkinsfile=<${file_path}" ${jenkins_url}/pipeline-model-converter/validate) if [[ ${response} =~ "Error" ]] then echo " ${response}" echo "Validate ${file_path} failed !" exit 1 fi } function validate_path(){ local path=${1} local jenkins_url=${2} for file in ${path} do if [ -f "$file" ] then # echo "$file" file_name=$(basename "$file") if echo "${file_name}" | grep -q -E '\.groovy$' then # echo "Validate groovy file ${file_name}" validate $file ${jenkins_url} elif [[ "${file_name}" == "Jenkinsfile" ]] then # echo "Validate Jenkinsfile" validate $file ${jenkins_url} fi fi done } validate_path "ci/jenkins/*" "https://jenkins.milvus.io:18080/"