- pipeline:
    name: check
    description: |
      Newly uploaded patchsets enter this pipeline to receive an
      initial +/-1 Verified vote.
    success-message: Build succeeded (check pipeline).
    failure-message: |
      Build failed (check pipeline).  For information on how to proceed, see
      http://docs.openstack.org/infra/manual/developers.html#automated-testing
    manager: independent
    precedence: normal
    require:
      gerrit:
        open: True
        current-patchset: True
    trigger:
      gerrit:
        - event: patchset-created
        - event: change-restored
        - event: comment-added
          comment: (?i)^(Patch Set [0-9]+:)?( [\w\\+-]*)*(\n\n)?\s*recheck
    success:
      gerrit:
        # Note that gerrit keywords are case-sensitive.
        Verified: 1
    failure:
      gerrit:
        Verified: -1

- pipeline:
    name: gate
    description: |
      Changes that have been approved by core reviewers are enqueued
      in order in this pipeline, and if they pass tests, will be
      merged. For documentation on how gating with Zuul works, please see
      https://zuul-ci.org/docs/zuul/latest/gating.html
    success-message: Build succeeded (gate pipeline).
    failure-message: |
      Build failed (gate pipeline).  For information on how to proceed, see
      http://docs.openstack.org/infra/manual/developers.html#automated-testing
    manager: dependent
    precedence: high
    supercedes: check
    post-review: True
    require:
      gerrit:
        open: True
        current-patchset: True
        approval:
          - Workflow: 1
    trigger:
      gerrit:
        - event: comment-added
          approval:
            - Workflow: 1
        - event: comment-added
          comment: (?i)^(Patch Set [0-9]+:)?( [\w\\+-]*)*(\n\n)?\s*re(check|verify)
    start:
      gerrit:
        Verified: 0
    success:
      gerrit:
        Verified: 2
        submit: true
    failure:
      gerrit:
        Verified: -2
    window-floor: 20
    window-increase-factor: 2

- pipeline:
    name: post
    description: |
      This pipeline runs jobs that operate after each change is
      merged. Queue items are identified by the abbreviated hash (git
      log --format=%h) of the merge commit.
    manager: supercedent
    precedence: high
    post-review: True
    trigger:
      gerrit:
        - event: ref-updated
          ref: ^refs/heads/.*$

- pipeline:
    name: promote
    description: |
      This pipeline runs jobs that operate after each change is merged
      in order to promote artifacts generated in the gate
      pipeline.
    success-message: Build succeeded (promote pipeline).
    failure-message: |
      Build failed (promote pipeline).  For information on how to proceed, see
      http://docs.openstack.org/infra/manual/developers.html#automated-testing
    manager: supercedent
    precedence: high
    post-review: True
    trigger:
      gerrit:
        - event: change-merged
    success:
      gerrit: {}
    failure:
      gerrit: {}

- pipeline:
    name: release
    description: |
      When a commit is tagged as a release, this pipeline runs jobs
      that publish archives and documentation.
    manager: independent
    precedence: high
    post-review: True
    trigger:
      gerrit:
        - event: ref-updated
          ref: ^refs/tags/[0-9]+(\.[0-9]+)*$

- pipeline:
    name: periodic
    post-review: true
    description: Jobs in this queue are triggered on a timer.
    manager: independent
    precedence: low
    trigger:
      timer:
        - time: '0 6 * * *'

- pipeline:
    name: periodic-weekly
    post-review: true
    description: Jobs in this queue are triggered on a weekly timer.
    manager: independent
    precedence: low
    trigger:
      timer:
        # Saturday 8am UTC is a better time to start weekend jobs, as Sunday
        # is a working day in some geographies.
        - time: '0 8 * * 6'
    failure:
      smtp:
        from: zuul@opendev.org
        to: zuul-jobs-failures@lists.zuul-ci.org
        subject: 'zuul-jobs @periodic-weekly failed'

- pipeline:
    name: tag
    post-review: true
    description: This pipeline runs jobs in response to any tag event.
    manager: independent
    precedence: high
    trigger:
      gerrit:
        - event: ref-updated
          ref: ^refs/tags/.*$

- pipeline:
    name: experimental
    description: |
      On-demand pipeline for requesting a run against a set of jobs
      that are not yet gating. Leave review comment of "check
      experimental" to run jobs in this pipeline.
    success-message: Build succeeded (experimental pipeline).
    failure-message: Build failed (experimental pipeline).
    manager: independent
    precedence: low
    trigger:
      gerrit:
        - event: comment-added
          comment: (?i)^(Patch Set [0-9]+:)?( [\w\\+-]*)*(\n\n)?\s*check experimental\s*$
    success:
      gerrit: {}
    failure:
      gerrit: {}

- pipeline:
    name: third-party-check
    description: |
      Newly uploaded patchsets to external projects enter this
      pipeline to receive an initial +/-1 Verified vote.
    success-message: Build succeeded (third-party-check pipeline).
    # TODO(mordred) We should write a document for non-OpenStack developers
    failure-message: |
      Build failed (third-party-check pipeline) integration testing with
      Zuul. For information on how to proceed, see
      http://docs.openstack.org/infra/manual/developers.html#automated-testing
    manager: independent
    trigger:
      googlesource:
        - event: pending-check
          scheme: 'opendev-zuul-third-party-check'
    enqueue:
      googlesource:
        comment: False
        checks-api:
          scheme: 'opendev-zuul-third-party-check'
          state: SCHEDULED
          message: 'Change has been enqueued in check'
    start:
      googlesource:
        comment: False
        checks-api:
          scheme: 'opendev-zuul-third-party-check'
          state: RUNNING
          message: 'Jobs have started running'
    no-jobs:
      googlesource:
        comment: False
        checks-api:
          scheme: 'opendev-zuul-third-party-check'
          state: NOT_RELEVANT
          message: 'Project has no jobs configured'
    success:
      googlesource:
        comment: False
        checks-api:
          scheme: 'opendev-zuul-third-party-check'
          state: SUCCESSFUL
          message: 'Change passed all voting jobs'
    failure:
      googlesource:
        comment: False
        checks-api:
          scheme: 'opendev-zuul-third-party-check'
          state: FAILED
          message: 'Change failed'