| #!/usr/bin/env groovy |
| // ----------------------------------------------------------------------- |
| // Copyright 2021-2024 Open Networking Foundation (ONF) and the ONF Contributors |
| // |
| // Licensed 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. |
| // ----------------------------------------------------------------------- |
| |
| // ----------------------------------------------------------------------- |
| // ----------------------------------------------------------------------- |
| def getIam(String func) |
| { |
| String src = 'vars/getVolthaCode.groovy' |
| String iam = [src, func].join('::') |
| return iam |
| } |
| |
| // ----------------------------------------------------------------------- |
| // Intent: Log progress message |
| // ----------------------------------------------------------------------- |
| void enter(String name) { |
| // Announce ourselves for log usability |
| String iam = getIam(name) |
| println("${iam}: ENTER") |
| return |
| } |
| |
| // ----------------------------------------------------------------------- |
| // Intent: Log progress message |
| // ----------------------------------------------------------------------- |
| void leave(String name) { |
| // Announce ourselves for log usability |
| String iam = getIam(name) |
| println("${iam}: LEAVE") |
| return |
| } |
| |
| // 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') |
| { |
| enter('Clone voltha-system-tests') |
| println(""" |
| |
| ** ----------------------------------------------------------------------- |
| ** 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') |
| { |
| enter("git fetch repo_vst=[${repo_vst}]") |
| |
| sh """ |
| cd "$WORKSPACE/voltha-system-tests" |
| git fetch "${repo_vst}" ${cfg.volthaSystemTestsChange} && git checkout FETCH_HEAD |
| """ |
| leave("git fetch repo_vst=[${repo_vst}]") |
| } |
| else if (cfg.gerritProject == 'voltha-system-tests') { |
| enter("git fetch https://${cfg.gerritProject}") |
| |
| 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 |
| """) |
| leave("git fetch https://${cfg.gerritProject}") |
| } |
| |
| leave('Clone voltha-system-tests') |
| } |
| |
| // ----------------------------------------------------------------------- |
| // ----------------------------------------------------------------------- |
| stage('Clone voltha-helm-charts') |
| { |
| enter('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') { |
| enter("git fetch repo_vhc=[$repo_vhc]") |
| sh """ |
| cd "$WORKSPACE/voltha-helm-charts" |
| git fetch "$repo_vhc" ${cfg.volthaHelmChartsChange} && git checkout FETCH_HEAD |
| """ |
| leave("git fetch repo_vhc=[$repo_vhc]") |
| } |
| else if (cfg.gerritProject == 'voltha-helm-charts') { |
| enter('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 |
| """ |
| leave('cfg.gerritProject == voltha-helm-charts') |
| } |
| |
| leave('Clone voltha-helm-charts') |
| } |
| } |
| |
| // ----------------------------------------------------------------------- |
| // ----------------------------------------------------------------------- |
| def call(Map config) |
| { |
| String iam = getIam('main') |
| Boolean debug = true |
| |
| if (debug) { |
| println("** ${iam}: ENTER") |
| } |
| |
| config ?: [:] |
| |
| try |
| { |
| wrapped(config) |
| } |
| catch (Exception err) |
| { |
| println("** ${iam}: EXCEPTION ${err}") |
| throw err |
| } |
| finally |
| { |
| if (debug) |
| { |
| println("** ${iam}: LEAVE") |
| } |
| } |
| |
| return |
| } |
| |
| // [EOF] |