| #!/usr/bin/env groovy |
| // ----------------------------------------------------------------------- |
| // ----------------------------------------------------------------------- |
| |
| // ----------------------------------------------------------------------- |
| // ----------------------------------------------------------------------- |
| def getIam(String func) |
| { |
| String src = 'vars/getVolthaCode.groovy' |
| String iam = [src, func].join('::') |
| return iam |
| } |
| |
| // TODO the 3 stages are very similar, most of the code can be shared |
| |
| def wrapped(Map config) |
| { |
| def defaultConfig = [ |
| branch: "master", |
| gerritProject: "", |
| gerritRefspec: "", |
| volthaSystemTestsChange: "", |
| volthaHelmChartsChange: "", |
| ] |
| |
| def cfg = defaultConfig + config |
| |
| println "Downloading VOLTHA code with the following parameters: ${cfg}." |
| |
| stage('Download Patch') |
| { |
| frequent_repos = [ |
| '', |
| 'voltha-system-tests', |
| 'voltha-helm-charts', |
| ] |
| |
| // We are always downloading those repos, if the patch under test is in one of those |
| // just checkout the patch, no need to clone it again |
| if (cfg.gerritProject == '') |
| { |
| // Revisit: |
| // gerritProject should be defined. Ignore when empty was likely |
| // added to support manually re-running a job when repo values |
| // may not be defined. |
| // Unfortunately the conditional can also inadvertently bypass |
| // checkout during an error condition. |
| // Case: when cfg= is invalid due to a jenkins hiccup. |
| } |
| else if (!(cfg.gerritProject in frequent_repos)) |
| { |
| repo_project = "https://gerrit.opencord.org/${cfg.gerritProject}" |
| |
| checkout([ |
| $class: 'GitSCM', |
| userRemoteConfigs: [[ url:repo_project ]], |
| branches: [[ name: "${cfg.branch}", ]], |
| extensions: [ |
| [$class: 'WipeWorkspace'], |
| [$class: 'RelativeTargetDirectory', relativeTargetDir: "${cfg.gerritProject}"], |
| [$class: 'CloneOption', depth: 0, noTags: false, reference: '', shallow: false], |
| ], |
| ]) |
| |
| sh """ |
| pushd $WORKSPACE/${cfg.gerritProject} |
| git fetch "$repo_project" ${cfg.gerritRefspec} && git checkout FETCH_HEAD |
| |
| echo "Currently on commit: \n" |
| git log -1 --oneline |
| popd |
| """ |
| } |
| } |
| |
| stage('Clone voltha-system-tests') |
| { |
| repo_vst = 'https://gerrit.opencord.org/voltha-system-tests' |
| |
| checkout([ |
| $class: 'GitSCM', |
| userRemoteConfigs: [[ url:repo_vst ]], |
| branches: [[ name: "${cfg.branch}", ]], |
| extensions: [ |
| [$class: 'WipeWorkspace'], |
| [$class: 'RelativeTargetDirectory', relativeTargetDir: "voltha-system-tests"], |
| [$class: 'CloneOption', depth: 0, noTags: false, reference: '', shallow: false], |
| ], |
| ]) |
| |
| if (cfg.volthaSystemTestsChange != '' && cfg.gerritProject != 'voltha-system-tests') |
| { |
| sh """ |
| cd "$WORKSPACE/voltha-system-tests" |
| git fetch "${repo_vst}" ${cfg.volthaSystemTestsChange} && git checkout FETCH_HEAD |
| """ |
| } |
| else if (cfg.gerritProject == 'voltha-system-tests') { |
| sh """ |
| pushd "$WORKSPACE/${cfg.gerritProject}" |
| git fetch https://gerrit.opencord.org/${cfg.gerritProject} ${cfg.gerritRefspec} && git checkout FETCH_HEAD |
| |
| echo "Currently on commit: \n" |
| git log -1 --oneline |
| popd |
| """ |
| } |
| } |
| |
| stage('Clone voltha-helm-charts') |
| { |
| repo_vhc = 'https://gerrit.opencord.org/voltha-helm-charts' |
| |
| checkout([ |
| $class: 'GitSCM', |
| userRemoteConfigs: [[ url:repo_vhc ]], |
| branches: [[ name: "${cfg.branch}", ]], |
| extensions: [ |
| [$class: 'WipeWorkspace'], |
| [$class: 'RelativeTargetDirectory', relativeTargetDir: "voltha-helm-charts"], |
| [$class: 'CloneOption', depth: 0, noTags: false, reference: '', shallow: false], |
| ], |
| ]) |
| |
| if (cfg.volthaHelmChartsChange != '' && cfg.gerritProject != 'voltha-helm-charts') { |
| sh """ |
| cd "$WORKSPACE/voltha-helm-charts" |
| git fetch "$repo_vhc" ${cfg.volthaHelmChartsChange} && git checkout FETCH_HEAD |
| """ |
| } |
| else if (cfg.gerritProject == 'voltha-helm-charts') { |
| sh """ |
| pushd "$WORKSPACE/${cfg.gerritProject}" |
| git fetch "https://gerrit.opencord.org/${cfg.gerritProject}" ${cfg.gerritRefspec} && git checkout FETCH_HEAD |
| |
| echo "Currently on commit: \n" |
| git log -1 --oneline |
| popd |
| """ |
| } |
| } |
| } |
| |
| // ----------------------------------------------------------------------- |
| // ----------------------------------------------------------------------- |
| def call(Map config) |
| { |
| String iam = getIam('main') |
| Boolean debug = false |
| |
| if (debug) |
| { |
| println("** ${iam}: ENTER") |
| } |
| |
| if (!config) { |
| config = [:] |
| } |
| |
| try |
| { |
| wrapped(config) |
| } |
| catch (Exception err) |
| { |
| println("** ${iam}: EXCEPTION ${err}") |
| throw err |
| } |
| finally |
| { |
| if (debug) |
| { |
| println("** ${iam}: LEAVE") |
| } |
| } |
| |
| return |
| } |