<?xml version='1.0' encoding='UTF-8'?>
<flow-definition>
  <actions/>
  <description>Global pipeline to bootstrap bazel and runs all downstream jobs</description>
  <keepDependencies>false</keepDependencies>
  <properties>
    <org.jenkinsci.plugins.workflow.job.properties.DisableConcurrentBuildsJobProperty/>
    <com.coravy.hudson.plugins.github.GithubProjectProperty>
      <projectUrl>https://github.com/bazelbuild/bazel/</projectUrl>
      <displayName></displayName>
    </com.coravy.hudson.plugins.github.GithubProjectProperty>
    <jenkins.model.BuildDiscarderProperty>
      <strategy class="hudson.tasks.LogRotator">
        <daysToKeep>90</daysToKeep>
        <numToKeep>-1</numToKeep>
        <artifactDaysToKeep>-1</artifactDaysToKeep>
        <artifactNumToKeep>-1</artifactNumToKeep>
      </strategy>
    </jenkins.model.BuildDiscarderProperty>
    <hudson.model.ParametersDefinitionProperty>
      <parameterDefinitions>
        <hudson.model.StringParameterDefinition>
          <name>payload</name>
          <description>Payload sent by GitHub</description>
          <defaultValue></defaultValue>
        </hudson.model.StringParameterDefinition>
        <hudson.model.TextParameterDefinition>
          <name>EXTRA_BAZELRC</name>
          <description>To inject new option to the .bazelrc file in downstream projects.</description>
          <defaultValue></defaultValue>
        </hudson.model.TextParameterDefinition>
      </parameterDefinitions>
    </hudson.model.ParametersDefinitionProperty>
    <org.jenkinsci.plugins.workflow.job.properties.PipelineTriggersJobProperty>
      <triggers>
        {% if variables.production == "true" %}
        <hudson.triggers.TimerTrigger>
          <spec>@midnight</spec>
        </hudson.triggers.TimerTrigger>
        {% endif %}
      </triggers>
    </org.jenkinsci.plugins.workflow.job.properties.PipelineTriggersJobProperty>
  </properties>
  <authToken>##SECRET:github_trigger_auth_token##</authToken>
  <definition class="org.jenkinsci.plugins.workflow.cps.CpsFlowDefinition">
    <script>
githubHook(refs: '^refs/(heads/release-|tags/).*$') {
  def branch = delegate.branch ? delegate.branch :"master"
  def refspec = branch.matches('^(refs/heads/)?master$') ?
                        "+refs/heads/*:refs/remotes/origin/*" :
                        "+refs/heads/*:refs/remotes/origin/* +refs/notes/*:refs/notes/*"
  globalBazelTest(
      repository: delegate.url ? delegate.url : "https://bazel.googlesource.com/bazel",
      branch: branch,
      extra_bazelrc: params.EXTRA_BAZELRC,
      refspec: refspec,
      configuration: '''{{ raw_imports['//jenkins/jobs:configs/bootstrap.json'].replace('\\', '\\\\').replace("'", "\\'") }}''',
      restrict_configuration: {{ variables.RESTRICT_CONFIGURATION }},
      mail_recipient: "{{ variables.BAZEL_BUILD_RECIPIENT }}")
}
  </script>
    <sandbox>true</sandbox>
  </definition>
  <triggers/>
</flow-definition>
