// 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.

// Install the bazel release on all the machine

import build.bazel.ci.JenkinsUtils

jobs = [:]
nodes = JenkinsUtils.nodeNames("install-bazel")
latest = "latest"

stage("Get latest version of Bazel") {
  latest = installBazel.getLatestBazelVersion()
  echo "Latest bazel version is ${latest}"
}

for (int k = 0; k < nodes.size(); k++) {
  def node = nodes[k]
  if (!node.startsWith("freebsd")) {
    // Skip FreeBSD, because we install Bazel via ports on that platform.
    jobs[node] = {
      stage("Install Bazel on ${node}") {
        installBazel(node: node,
                     version: latest,
                     alias: "latest")
      }
    }
  }
}

stage("Install on all nodes") {
  // We fail after 4h in case a node is offline and doesn't come back online.
  timeout(240) {
    parallel jobs
  }
}
