From 83fb4aa3c02153f09e0495979a3c2f8782e52f5f Mon Sep 17 00:00:00 2001 From: kezhenxu94 Date: Sun, 27 Oct 2019 16:01:02 +0800 Subject: [PATCH] [CI] Skip CI when only docs are updated (#3722) --- Jenkinsfile | 19 +++++----- tools/ci/agent-build-condition.sh | 2 +- tools/ci/changed.sh | 62 +++++++++++++++++++------------ tools/ci/ci-build-condition.sh | 19 ++++++++++ tools/ci/e2e-build-condition.sh | 2 +- 5 files changed, 70 insertions(+), 34 deletions(-) create mode 100644 tools/ci/ci-build-condition.sh diff --git a/Jenkinsfile b/Jenkinsfile index e416a04a53..64e0bbdf86 100755 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -53,16 +53,12 @@ pipeline { } } - stage('Check environment') { - steps { - sh 'env' - sh 'pwd' - sh 'ls' - sh 'git status' - } - } - stage('Test & Report') { + when { + expression { + return sh(returnStatus: true, script: 'bash tools/ci/ci-build-condition.sh') + } + } steps { sh './mvnw -P"agent,backend,ui,dist,CI-with-IT" -DrepoToken=${COVERALLS_REPO_TOKEN} -DpullRequest=${ghprbPullLink} clean cobertura:cobertura verify coveralls:report install' sh './mvnw javadoc:javadoc -Dmaven.test.skip=true' @@ -70,6 +66,11 @@ pipeline { } stage('Check Dependencies Licenses') { + when { + expression { + return sh(returnStatus: true, script: 'bash tools/ci/ci-build-condition.sh') + } + } steps { sh 'tar -zxf dist/apache-skywalking-apm-bin.tar.gz -C dist' sh 'tools/dependencies/check-LICENSE.sh' diff --git a/tools/ci/agent-build-condition.sh b/tools/ci/agent-build-condition.sh index 7d708e308a..f95210dcb6 100644 --- a/tools/ci/agent-build-condition.sh +++ b/tools/ci/agent-build-condition.sh @@ -16,7 +16,7 @@ # See the License for the specific language governing permissions and # limitations under the License. -bash -x $(dirname "$0")/changed.sh --any-of '^pom.xml$' \ +bash -x $(dirname "$0")/changed.sh --includes '^pom.xml$' \ '^Jenkinsfile-Agent-.*$' \ '^apm-application-toolkit/.*$' \ '^apm-commons/.*$' \ diff --git a/tools/ci/changed.sh b/tools/ci/changed.sh index cc107576c5..9e22130404 100644 --- a/tools/ci/changed.sh +++ b/tools/ci/changed.sh @@ -16,43 +16,59 @@ # See the License for the specific language governing permissions and # limitations under the License. -patterns=() -any_of=0 +# Detect files' changed set +# --includes: includes these files when detecting changed file sets, defaults to ^.*$, meaning all files will be checked +# --excludes: excludes these files when detecting changed file sets +# exit with status code 0 if no changed file matches the patterns, otherwise exit with status code non 0 + +includes=('^.*$') +excludes=() + +including=0 +excluding=1 while [[ $# -gt 0 ]]; do case "$1" in - --any-of) - any_of=1 + --includes) + including=1 + excluding=0 + includes=() + ;; + --excludes) + including=0 + excluding=1 ;; *) - patterns+=($1) + if [[ ${including} -eq 1 ]]; then + includes+=($1) + elif [[ ${excluding} -eq 1 ]]; then + excludes+=($1) + fi ;; esac shift done -[[ ${#patterns[@]} -eq 0 ]] && echo 'No file pattern is specified, exiting' && exit 1 - changed_files=$(git diff --name-only origin/${ghprbTargetBranch:-master}..${ghprbActualCommit:-HEAD}) -test_results=() - for file in ${changed_files}; do - for pattern in ${patterns[@]}; do - if [[ ${file} =~ ${pattern} ]]; then - test_results+=("Hit: ${file} matches pattern ${pattern}") - else - test_results+=("Miss: ${file} does not match pattern ${pattern}") + excluded=0 + for exclude in ${excludes[@]}; do + if [[ ${file} =~ ${exclude} ]]; then + excluded=1 + break fi done -done - -IFS=$'\n' ; echo "${test_results[*]}" - -if [[ ${any_of} -eq 1 ]]; then - for test_result in ${test_results[@]}; do - [[ ${test_result} =~ ^Hit:.+$ ]] && echo ${test_result} && exit 1 + if [[ ${excluded} -eq 1 ]]; then + echo "${file} is excluded" + continue + fi + for include in ${includes[@]}; do + if [[ ${file} =~ ${include} ]]; then + echo "${file} is changed" + exit 1 + fi done -fi +done -exit 0 \ No newline at end of file +exit 0 diff --git a/tools/ci/ci-build-condition.sh b/tools/ci/ci-build-condition.sh new file mode 100644 index 0000000000..7e50efeee0 --- /dev/null +++ b/tools/ci/ci-build-condition.sh @@ -0,0 +1,19 @@ +#!/usr/bin/env bash +# +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +bash -x $(dirname "$0")/changed.sh --excludes '.*.md$' \ No newline at end of file diff --git a/tools/ci/e2e-build-condition.sh b/tools/ci/e2e-build-condition.sh index 5de72553ad..71815d97ff 100644 --- a/tools/ci/e2e-build-condition.sh +++ b/tools/ci/e2e-build-condition.sh @@ -16,7 +16,7 @@ # See the License for the specific language governing permissions and # limitations under the License. -bash -x $(dirname "$0")/changed.sh --any-of '^pom.xml$' \ +bash -x $(dirname "$0")/changed.sh --includes '^pom.xml$' \ '^Jenkinsfile-E2E$' \ '^apm-commons/.*$' \ '^apm-protocol/.*$' \ -- GitLab