| // Copyright (C) 2017 The Bazel Authors |
| // |
| // 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. |
| |
| // A pipeline step that control a global test for Bazel: |
| // - Bootstrap bazel and do some basic tests |
| // - Deploy the artifacts (site, releases) and send mails |
| // - Run all downstream job |
| def call(config = [:]) { |
| def repository = config.get("repository", "https://bazel.googlesource.com/bazel") |
| def branch = config.get("branch", "master") |
| def extra_bazelrc = config.get("extra_bazelrc", "") |
| def refspec = config.get("refspec", "+refs/heads/*:refs/remotes/origin/*") |
| def json_config = config.configuration |
| |
| stage("Startup global test") { |
| echo "Running global test for branch ${branch} (refspec: ${refspec})" |
| } |
| |
| // First we bootstrap bazel on all platform |
| stage("Bootstrap on all platforms") { |
| bootstrapBazelAll(repository: repository, |
| branch: branch, |
| refspec: refspec, |
| configuration: json_config) |
| } |
| |
| |
| // Deployment steps |
| def is_master = branch.matches('^(.*/)?master$') |
| def is_rc = branch.matches('^(refs/heads/)?release-.*$') |
| def is_release = branch.matches('^refs/tags/.*$') |
| if(is_master || is_rc | is_release) { |
| stage(is_master ? "Push website" : "Push release") { |
| machine("deploy") { |
| recursiveGit(repository: repository, |
| refspec: refspec, |
| branch: branch) |
| if (!is_master) { |
| def r_name = sh(script: "bash -c 'source scripts/release/common.sh; get_full_release_name'", |
| returnStdout: true).trim() |
| if (!r_name.isEmpty()) { |
| pushRelease(name: r_name, |
| configuration: json_config, |
| excludes: ["**/*.bazel.build.tar*", "**/bazel", "**/bazel.exe"]) |
| if (is_release) { |
| stage("Install new release on all nodes") { |
| build(job: "/maintenance/install-bazel", wait: false, propagate: false) |
| } |
| } |
| } |
| } |
| } |
| } |
| } |
| |
| // Then we run all jobs in the Global folder except the global pipeline job (the current job). |
| report = null |
| stage("Test downstream jobs") { |
| report = runAll(folder: "Global", |
| parameters: [ |
| [$class: 'TextParameterValue', |
| name: 'EXTRA_BAZELRC', |
| value: "${extra_bazelrc}"], |
| [$class: 'StringParameterValue', |
| name: 'REPOSITORY', |
| value: "${repository}"], |
| [$class: 'StringParameterValue', |
| name: 'BRANCH', |
| value: "${branch}"], |
| [$class: 'StringParameterValue', |
| name: 'REFSPEC', |
| value: "${refspec}"] |
| ], |
| excludes: ["pipeline", currentBuild.getProjectName()]) |
| } |
| |
| stage("Publish report") { |
| reportAB report: report, name: "Downstream projects" |
| } |
| } |