# Shared jobs specific to the OpenStack Project
# imports jobs from:
#    https://opendev.org/openstack/project-config
#    https://opendev.org/zuul/zuul-jobs

- job:
    name: build-openstack-sphinx-docs
    parent: build-sphinx-docs
    branches: ^stable/(ocata|pike|queens|rocky).*$
    nodeset: ubuntu-xenial
    description: |
      Builds documentation using Sphinx per a previous version of the
      OpenStack PTI and then
      collects the results into the log directory so that they can be
      examined in their published form after a successful build.
      It runs the prepare-docs-for-afs role so that AFS stamp files
      can be examined if desired, and also validates htaccess files
      using the whereto tool.

      This job is obsolete and is not supported on branches after rocky, use
      :zuul:job:`openstack-tox-docs` instead.
    success-url: html/
    required-projects:
      - name: openstack/requirements
      # Add neutron and horizon for the neutron-horizon-hack.
      # TODO(AJaeger) ZOMG DELETE THIS once we neutron-horizon-hack.
      - name: openstack/horizon
      - name: openstack/neutron
    pre-run: playbooks/sphinx-docs/neutron-horizon-hack.yaml
    roles:
      - zuul: zuul/zuul-jobs
    vars:
      constraints_file: '{{ ansible_user_dir }}/src/opendev.org/openstack/requirements/upper-constraints.txt'
      sphinx_python: python2

- job:
    name: tox-py35-on-zuul
    parent: tox-py35
    nodeset: ubuntu-xenial
    description: |
      Run zuul's py35 unittests on patches to zuul-jobs.
    vars:
      zuul_work_dir: src/opendev.org/zuul/zuul
    required-projects:
      - zuul/zuul

- job:
    name: openstack-tox
    abstract: true
    parent: tox-fips
    nodeset: ubuntu-focal
    description: |
      Base job to run tox jobs with OpenStack project specific updates.

      Processing upper-constraints files from openstack/requirements.
    branches: ^(?!stable/(ocata|pike|queens|rocky|stein|train|ussuri)).*$
    required-projects:
      - name: openstack/requirements
    vars:
      tox_constraints_file: '{{ ansible_user_dir }}/src/opendev.org/openstack/requirements/upper-constraints.txt'
      enable_fips: false

- job:
    name: openstack-tox
    abstract: true
    parent: tox
    nodeset: ubuntu-bionic
    description: |
      Base job (bionic) to run tox jobs with OpenStack project specific updates.

      Processing upper-constraints files from openstack/requirements.

      This job runs on bionic for stable/stein, train, and ussuri. This
      job is prepared to make sure all stable branches from stable/stein till
      stable/ussuri will keep running on bionic.
    branches:
      - stable/stein
      - stable/train
      - stable/ussuri
    required-projects:
      - name: openstack/requirements
    vars:
      tox_constraints_file: '{{ ansible_user_dir }}/src/opendev.org/openstack/requirements/upper-constraints.txt'

- job:
    name: openstack-tox
    abstract: true
    parent: tox
    nodeset: ubuntu-xenial
    description: |
      Base job (xenial) to run tox jobs with OpenStack project specific updates.

      Processing upper-constraints files from openstack/requirements.

      This job runs on Xenial for stable/ocata, pike, queens and rocky. This
      job is prepared to make sure all stable branches before stable/stein will
      keep running on xenial.
    branches:
      - stable/ocata
      - stable/pike
      - stable/queens
      - stable/rocky
    required-projects:
      - name: openstack/requirements
    vars:
      tox_constraints_file: '{{ ansible_user_dir }}/src/opendev.org/openstack/requirements/upper-constraints.txt'

- job:
    name: openstack-tox-with-sudo
    parent: openstack-tox
    description: |
      Job to run tox for tests with OpenStack project specific
      settings such as constraints but without sudo access being revoked.
    run: playbooks/tox-with-sudo/run.yaml

- job:
    name: openstack-tox-py27
    parent: openstack-tox
    nodeset: ubuntu-bionic
    timeout: 2400
    description: |
      Run unit tests for an OpenStack Python project under cPython version 2.7.

      Uses tox with the ``py27`` environment.
    branches: ^(?!stable/(ocata|pike|queens|rocky)).*$
    irrelevant-files: &common-irrelevant-files
      - ^.*\.rst$
      - ^api-ref/.*$
      - ^doc/.*$
      - ^releasenotes/.*$
      - ^deliverables/.*$
    vars:
      tox_envlist: py27
      bindep_profile: test py27

- job:
    name: openstack-tox-py27
    parent: openstack-tox
    nodeset: ubuntu-xenial
    timeout: 2400
    description: |
      Run unit tests for an OpenStack Python project under cPython version 2.7.

      Uses tox with the ``py27`` environment.

      This job runs on Xenial for stable/ocata, pike, queens and rocky. This
      job is prepared to make sure all stable branches before stable/stein will
      keep running on xenial.
    branches:
      - stable/ocata
      - stable/pike
      - stable/queens
      - stable/rocky
    irrelevant-files: *common-irrelevant-files
    vars:
      tox_envlist: py27
      bindep_profile: test py27

- job:
    name: openstack-tox-py35
    parent: openstack-tox
    nodeset: ubuntu-xenial
    branches: ^(?!driverfixes/).*$
    timeout: 2400
    description: |
      Run unit tests for an OpenStack project under cPython version 3.5.

      Uses tox with the ``py35`` environment.
    irrelevant-files: *common-irrelevant-files
    vars:
      tox_envlist: py35
      bindep_profile: test py35

- job:
    name: openstack-tox-py36
    parent: openstack-tox
    nodeset: ubuntu-bionic
    timeout: 2400
    description: |

      Run unit tests for an OpenStack Python project under cPython
      version 3.6.

      Uses tox with the ``py36`` environment.
    irrelevant-files: *common-irrelevant-files
    vars:
      tox_envlist: py36
      bindep_profile: test py36

- job:
    name: openstack-tox-py37
    parent: openstack-tox
    nodeset: ubuntu-bionic
    timeout: 2400
    description: |

      Run unit tests for an OpenStack Python project under cPython
      version 3.7.

      Uses tox with the ``py37`` environment.
    irrelevant-files: *common-irrelevant-files
    vars:
      tox_envlist: py37
      bindep_profile: test py37
      python_version: 3.7

- job:
    name: openstack-tox-py38
    parent: openstack-tox
    nodeset: ubuntu-focal
    timeout: 2400
    description: |

      Run unit tests for an OpenStack Python project under cPython
      version 3.8.

      Uses tox with the ``py38`` environment.
    irrelevant-files: *common-irrelevant-files
    branches: ^(?!stable/(train|ussuri)).*$
    vars:
      tox_envlist: py38
      bindep_profile: test py38
      python_version: 3.8

- job:
    name: openstack-tox-py38
    parent: openstack-tox
    nodeset: ubuntu-bionic
    timeout: 2400
    description: |

      Run unit tests for an OpenStack Python project under cPython
      version 3.8 on ubuntu bionic.

      This job runs on bionic for stable/train and ussuri.

      Uses tox with the ``py38`` environment.
    irrelevant-files: *common-irrelevant-files
    branches:
      - stable/train
      - stable/ussuri
    vars:
      tox_envlist: py38
      bindep_profile: test py38
      python_version: 3.8

- job:
    name: openstack-tox-py38-arm64
    parent: openstack-tox-py38
    nodeset: ubuntu-focal-arm64
    timeout: 3600
    description: |

      Run unit tests for an OpenStack Python project under cPython
      version 3.8 on top of arm64 architecture.

      Uses tox with the ``py38`` environment in arm64 platform.

- job:
    name: openstack-tox-py39
    parent: openstack-tox
    nodeset: ubuntu-focal
    timeout: 2400
    description: |

      Run unit tests for an OpenStack Python project under cPython
      version 3.9.

      Uses tox with the ``py39`` environment.
    irrelevant-files: *common-irrelevant-files
    vars:
      tox_envlist: py39
      bindep_profile: test py39
      python_version: 3.9

- job:
    name: openstack-tox-py39-arm64
    parent: openstack-tox-py39
    nodeset: ubuntu-focal-arm64
    timeout: 3600
    description: |

      Run unit tests for an OpenStack Python project under cPython
      version 3.9 on top of arm64 architecture.

      Uses tox with the ``py39`` environment in arm64 platform.

- job:
    name: openstack-tox-py310
    parent: openstack-tox
    nodeset: fedora-latest
    timeout: 2400
    description: |

      Run unit tests for an OpenStack Python project under cPython
      version 3.10.

      Uses tox with the ``py310`` environment.
    irrelevant-files: *common-irrelevant-files
    vars:
      tox_envlist: py310
      bindep_profile: test py310
      python_version: '3.10'

- job:
    name: openstack-tox-pypy
    parent: openstack-tox
    description: |
      Run unit tests for an OpenStack Python project under PyPy.

      Uses tox with the ``pypy`` environment.
    irrelevant-files: *common-irrelevant-files
    vars:
      tox_envlist: pypy
      bindep_profile: test pypy

- job:
    name: openstack-tox-linters
    parent: openstack-tox
    description: |
      Runs code linting tests.

      Uses tox with the ``linters`` environment.
    vars:
      tox_envlist: linters
      bindep_profile: test linters

- job:
    name: openstack-tox-molecule
    parent: tox-molecule
    description: |
      Runs molecule to test Ansible roles.

      Uses tox with the ``molecule`` environment.
    post-run: playbooks/tox-molecule/post.yaml
    vars:
      bindep_profile: test molecule

- job:
    name: openstack-tox-pep8
    parent: openstack-tox
    description: |
      Runs code pep8 tests.

      Uses tox with the ``pep8`` environment.
    vars:
      tox_envlist: pep8
      bindep_profile: test pep8
      test_setup_skip: true

- job:
    name: openstack-tox-cover
    parent: tox-cover
    description: |
      Run code coverage tests.

      Uses tox with the ``cover`` environment.
    nodeset: ubuntu-focal
    branches: ^(?!stable/(ocata|pike|queens|rocky|stein|train|ussuri)).*$
    required-projects:
      - name: openstack/requirements
    irrelevant-files: *common-irrelevant-files
    success-url: cover/
    vars:
      tox_constraints_file: '{{ ansible_user_dir }}/src/opendev.org/openstack/requirements/upper-constraints.txt'
    timeout: 3000

- job:
    name: openstack-tox-cover
    parent: tox-cover
    description: |
      Run code coverage tests (Bionic).

      Uses tox with the ``cover`` environment.

      This job runs on bionic for stable/stein, train, and ussuri.
    nodeset: ubuntu-bionic
    branches:
      - stable/stein
      - stable/train
      - stable/ussuri
    required-projects:
      - name: openstack/requirements
    irrelevant-files: *common-irrelevant-files
    success-url: cover/
    vars:
      tox_constraints_file: '{{ ansible_user_dir }}/src/opendev.org/openstack/requirements/upper-constraints.txt'
    timeout: 3000

- job:
    name: openstack-tox-cover
    parent: tox-cover
    description: |
      Run code coverage tests (Xenial).

      Uses tox with the ``cover`` environment.

      This job runs on Xenial for stable/ocata, pike, queens and rocky. This
      job is prepared to make sure all stable branches before stable/stein will
      keep running on xenial.
    nodeset: ubuntu-xenial
    required-projects:
      - name: openstack/requirements
    irrelevant-files: *common-irrelevant-files
    success-url: cover/
    vars:
      tox_constraints_file: '{{ ansible_user_dir }}/src/opendev.org/openstack/requirements/upper-constraints.txt'
    timeout: 3000
    branches:
      - stable/ocata
      - stable/pike
      - stable/queens
      - stable/rocky

- job:
    name: openstack-tox-bashate
    parent: openstack-tox
    description: |
      Run bashate tests.

      Uses tox with the ``bashate`` environment.
    vars:
      tox_envlist: bashate

- job:
    name: openstack-tox-build
    parent: openstack-tox
    description: |
      Run build tests.

      Uses tox with the ``build`` environment.
    vars:
      tox_envlist: build

- job:
    name: openstack-tox-functional
    parent: openstack-tox
    description: |
      Run tox-based functional tests for an OpenStack Python project.

      Uses tox with the ``functional`` environment.
    irrelevant-files: *common-irrelevant-files
    branches: ^(?!stable/(ocata|pike|queens|rocky|stein|train|ussuri)).*$
    vars:
      tox_envlist: functional

- job:
    name: openstack-tox-functional
    parent: openstack-tox
    description: |
      Run tox-based (bionic) functional tests for an OpenStack Python project.

      Uses tox with the ``functional`` environment.
      This job runs on bionic for stable/stein, train, and ussuri.
    irrelevant-files: *common-irrelevant-files
    nodeset: ubuntu-bionic
    branches:
      - stable/stein
      - stable/train
      - stable/ussuri
    vars:
      tox_envlist: functional

- job:
    name: openstack-tox-functional
    parent: openstack-tox
    description: |
      Run tox-based (xenial) functional tests for an OpenStack Python project.

      Uses tox with the ``functional`` environment.
      This job runs on xenial for stable/rocky.
    irrelevant-files: *common-irrelevant-files
    nodeset: ubuntu-xenial
    branches:
      - stable/ocata
      - stable/pike
      - stable/queens
      - stable/rocky
    vars:
      tox_envlist: functional

- job:
    name: openstack-tox-functional-with-sudo
    parent: openstack-tox-with-sudo
    description: |
      Run tox-based functional tests for an OpenStack Python project.

      Uses tox with the ``functional`` environment.
      Sudo access is not revoked.
    irrelevant-files: *common-irrelevant-files
    branches: ^(?!stable/(ocata|pike|queens|rocky|stein|train|ussuri)).*$
    vars:
      tox_envlist: functional

- job:
    name: openstack-tox-functional-with-sudo
    parent: openstack-tox-with-sudo
    description: |
      Run tox-based (bionic) functional tests for an OpenStack Python project.

      Uses tox with the ``functional`` environment.
      Sudo access is not revoked.
      This job runs on bionic for stable/stein, train, and ussuri.
    irrelevant-files: *common-irrelevant-files
    nodeset: ubuntu-bionic
    branches:
      - stable/stein
      - stable/train
      - stable/ussuri
    vars:
      tox_envlist: functional

- job:
    name: openstack-tox-functional-with-sudo
    parent: openstack-tox-with-sudo
    description: |
      Run tox-based (xenial) functional tests for an OpenStack Python project.

      Uses tox with the ``functional`` environment.
      Sudo access is not revoked.
      This job runs on xenial till stable/rocky.
    irrelevant-files: *common-irrelevant-files
    nodeset: ubuntu-xenial
    branches:
      - stable/ocata
      - stable/pike
      - stable/queens
      - stable/rocky
    vars:
      tox_envlist: functional

- job:
    name: openstack-tox-functional-py35
    parent: openstack-tox
    nodeset: ubuntu-xenial
    description: |
      Run tox-based functional tests for an OpenStack Python project
      under cPython version 3.5..

      Uses tox with the ``functional-py35`` environment.
    irrelevant-files: *common-irrelevant-files
    vars:
      tox_envlist: functional-py35

- job:
    name: openstack-tox-functional-py36
    parent: openstack-tox
    nodeset: ubuntu-bionic
    description: |
      Run tox-based functional tests for an OpenStack Python project
      under cPython version 3.6.

      Uses tox with the ``functional-py36`` environment.
    irrelevant-files: *common-irrelevant-files
    vars:
      tox_envlist: functional-py36

- job:
    name: openstack-tox-functional-py37
    parent: openstack-tox
    nodeset: ubuntu-bionic
    description: |
      Run tox-based functional tests for an OpenStack Python project
      under cPython version 3.7.

      Uses tox with the ``functional-py37`` environment.
    irrelevant-files: *common-irrelevant-files
    vars:
      tox_envlist: functional-py37
      python_version: 3.7

- job:
    name: openstack-tox-functional-py38
    parent: openstack-tox
    nodeset: ubuntu-focal
    description: |
      Run tox-based functional tests for an OpenStack Python project
      under cPython version 3.8.

      Uses tox with the ``functional-py38`` environment.
    irrelevant-files: *common-irrelevant-files
    branches: ^(?!stable/(train|ussuri)).*$
    vars:
      tox_envlist: functional-py38
      bindep_profile: test py38
      python_version: 3.8

- job:
    name: openstack-tox-functional-py38
    parent: openstack-tox
    nodeset: ubuntu-bionic
    description: |
      Run tox-based (bionic) functional tests for an OpenStack Python project
      under cPython version 3.8.

      Uses tox with the ``functional-py38`` environment.
      This job runs on bionic for stable/train and ussuri.
    irrelevant-files: *common-irrelevant-files
    branches:
      - stable/train
      - stable/ussuri
    vars:
      tox_envlist: functional-py38
      bindep_profile: test py38
      python_version: 3.8

- job:
    name: openstack-tox-functional-py39
    parent: openstack-tox
    nodeset: ubuntu-focal
    description: |
      Run tox-based functional tests for an OpenStack Python project
      under cPython version 3.9.

      Uses tox with the ``functional-py39`` environment.
    irrelevant-files: *common-irrelevant-files
    vars:
      tox_envlist: functional-py39
      bindep_profile: test py39
      python_version: 3.9

- job:
    name: openstack-tox-functional-py36-fips
    parent: openstack-tox-functional-py36
    nodeset: devstack-single-node-centos-8-stream
    description: |
      Functional testing for a FIPS enabled Centos 8 system
    pre-run: playbooks/fips/enable-fips.yaml

- job:
    name: openstack-tox-validate
    parent: openstack-tox
    description: |
      Run validate tests.

      Uses tox with the ``validate`` environment.
    vars:
      tox_envlist: validate
      ensure_global_symlinks: true

- job:
    name: openstack-tox-pylint
    parent: openstack-tox
    description: |
      Runs pylint tests.

      Uses tox with the ``pylint`` environment.
    irrelevant-files: *common-irrelevant-files
    vars:
      # pylint is very noisy
      tox_inline_comments: false
      tox_envlist: pylint

- job:
    name: openstack-tox-compare-cover
    parent: openstack-tox
    # NOTE(sambetts) This job runs the full UTs twice to compare the coverage
    # pre-and-post a patch so requires longer to run.
    timeout: 4500
    description: |
      Run coverage comparison tests.

      Uses tox with the ``compare-cover`` environment.
    vars:
      tox_envlist: compare-cover

- job:
    name: openstack-tox-snap-with-sudo
    parent: openstack-tox-with-sudo
    description: |
      Run tox-based functional tests for an OpenStack Python project.

      Uses tox with the ``snap`` environment.
      Sudo access is not revoked.
    irrelevant-files: *common-irrelevant-files
    vars:
      tox_envlist: snap

- job:
    name: openstack-tox-docs
    parent: opendev-tox-docs
    nodeset: ubuntu-focal
    description: |
      Run documentation build.

      Uses tox with the ``docs`` environment.

      .. zuul:jobvar: tox_envlist

         The tox environment for building HTML, default is ``docs``.

      .. zuul:jobvar: tox_pdf_envlist

         The tox environment for building PDF, default is ``pdf-docs``.
         If this environment does not exist, no PDF building is done.

      .. zuul:jobvar: tox_skip_pdf

         Whether to skip building of PDF documents. By default a PDF
         file is build if the tox environment specified by
         :zuul:jobvar:`tox_pdf_envlist` exists.

    branches: ^(?!stable/(ocata|pike|queens|rocky|stein|train|ussuri)).*$
    required-projects:
      - name: openstack/requirements
    vars:
      tox_constraints_file: '{{ ansible_user_dir }}/src/opendev.org/openstack/requirements/upper-constraints.txt'
      bindep_profile: compile doc
      tox_envlist: docs
      tox_pdf_envlist: pdf-docs
      tox_skip_pdf: false
    # PDF Building is only done from stein onwards.
    pre-run: playbooks/tox-docs/pre.yaml
    run: playbooks/tox-docs/run.yaml

- job:
    name: openstack-tox-docs
    parent: opendev-tox-docs
    description: |
      Run documentation build (bionic).

      Uses tox with the ``docs`` environment.

      This job runs on bionic for stable/stein, train, and ussuri.

      .. zuul:jobvar: tox_envlist

         The tox environment for building HTML, default is ``docs``.

      .. zuul:jobvar: tox_pdf_envlist

         The tox environment for building PDF, default is ``pdf-docs``.
         If this environment does not exist, no PDF building is done.

      .. zuul:jobvar: tox_skip_pdf

         Whether to skip building of PDF documents. By default a PDF
         file is build if the tox environment specified by
         :zuul:jobvar:`tox_pdf_envlist` exists.

    required-projects:
      - name: openstack/requirements
    vars:
      tox_constraints_file: '{{ ansible_user_dir }}/src/opendev.org/openstack/requirements/upper-constraints.txt'
      tox_envlist: docs
      bindep_profile: compile doc
      tox_pdf_envlist: pdf-docs
      tox_skip_pdf: false
    nodeset: ubuntu-bionic
    # PDF Building is only done from stein onwards, therefore these
    # pre-run and run playbooks are not part of
    # openstack-tox-docs job for older branches up to rocky.
    pre-run: playbooks/tox-docs/pre.yaml
    run: playbooks/tox-docs/run.yaml
    branches:
      - stable/stein
      - stable/train
      - stable/ussuri

- job:
    name: openstack-tox-docs
    parent: opendev-tox-docs
    description: |
      Run documentation build (xenial).

      Uses tox with the ``docs`` environment.

      This job runs on Xenial for stable/ocata, pike, queens and rocky. This
      job is prepared to make sure all stable branches before stable/stein will
      keep running on xenial.
    required-projects:
      - name: openstack/requirements
    vars:
      tox_constraints_file: '{{ ansible_user_dir }}/src/opendev.org/openstack/requirements/upper-constraints.txt'
      tox_envlist: docs
      bindep_profile: compile doc
    nodeset: ubuntu-xenial
    branches:
      - stable/ocata
      - stable/pike
      - stable/queens
      - stable/rocky

- job:
    name: openstack-tox-with-oslo-master-base
    parent: openstack-tox-py27
    timeout: 3000
    description: |
      This job installs all oslo libraries from source and tests that the
      unit tests of the tested project work.
    required-projects:
      - openstack/automaton
      - openstack/debtcollector
      - openstack/futurist
      - openstack/osprofiler
      - openstack/oslo.cache
      - openstack/oslo.concurrency
      - openstack/oslo.config
      - openstack/oslo.context
      - openstack/oslo.db
      - openstack/oslo.i18n
      - openstack/oslo.log
      - openstack/oslo.messaging
      - openstack/oslo.middleware
      - openstack/oslo.policy
      - openstack/oslo.privsep
      - openstack/oslo.reports
      - openstack/oslo.rootwrap
      - openstack/oslo.serialization
      - openstack/oslo.service
      - openstack/oslo.utils
      - openstack/oslo.versionedobjects
      - openstack/oslo.vmware
      - openstack/oslotest
      - openstack/pycadf
      - openstack/stevedore
      - openstack/taskflow
      - openstack/tooz
      - openstack/pbr
    vars:
      tox_install_siblings: true

- job:
    name: openstack-tox-py36-with-oslo-master
    parent: openstack-tox-with-oslo-master-base
    nodeset: ubuntu-bionic
    description: |
      This job installs all oslo libraries from source and tests that the
      unit tests of the tested project work.

      It uses the tox ``py36`` environment.

      The job is normally run in a periodic pipeline, it is configured
      to run on the master branch.
    branches: master
    vars:
      tox_envlist: py36
      bindep_profile: test py36

- job:
    name: openstack-tox-py36-with-neutron-lib-master
    parent: openstack-tox-py36
    timeout: 3000
    description: |
      This job installs neutron-lib from source and tests that the
      unit tests of the tested project work.

      It uses the tox ``py36`` environment.

      The job is normally run in a periodic pipeline, it is configured
      to run on the master branch.
    branches: master
    required-projects:
      - openstack/neutron
      - openstack/neutron-lib
    vars:
      tox_install_siblings: true

- job:
    name: openstack-tox-py36-with-ovsdbapp-master
    parent: openstack-tox-py36
    timeout: 3000
    description: |
      This job installs ovsdbapp from source and tests that the
      unit tests of the tested project work.

      It uses the tox ``py36`` environment.

      The job is normally run in a periodic pipeline, it is configured
      to run on the master branch.
    branches: master
    required-projects:
      - openstack/ovsdbapp
    vars:
      tox_install_siblings: true

- job:
    name: openstack-tox-lower-constraints
    parent: openstack-tox
    nodeset: ubuntu-focal
    branches: ^(?!driverfixes/).*$
    timeout: 2400
    description: |
      Run unit tests using the lower constraints.

      Uses tox with the ``lower-constraints`` environment,
      which should be configured to use Python 3 by default
      unless the project does not support Python 3.
    irrelevant-files: *common-irrelevant-files
    vars:
      tox_envlist: lower-constraints
      bindep_profile: test py38

- job:
    name: build-openstack-puppet-tarball
    description: |
      Build a puppet tarball but do not upload it anywhere.
    pre-run: playbooks/puppet-tarball/pre.yaml
    run: playbooks/puppet-tarball/run.yaml
    files: ^metadata.json$

- job:
    name: publish-openstack-puppet-branch-tarball
    parent: publish-openstack-artifacts
    description: |
      Publish the results of the puppet-tarball job to tarballs.openstack.org.
    pre-run: playbooks/puppet-tarball/pre.yaml
    run: playbooks/puppet-tarball/run.yaml
    post-run: playbooks/puppet-branch-tarball/post.yaml

- job:
    name: publish-openstack-javascript-tarball
    parent: publish-openstack-artifacts
    description: |
      Build and publish source tarball for a Javascript project.

      Responds to these variables:

      .. zuul:jobvar:: node_version
         :default: 6

        The version of Node to use.

      .. zuul:jobvar: zuul_work_dir
         :default: {{ zuul.project.src_dir }}

        Path to operate in.
    pre-run: playbooks/javascript/pre.yaml
    run: playbooks/javascript/tarball.yaml
    post-run:
      - playbooks/javascript/post.yaml
      - playbooks/javascript/post-tarball.yaml

- job:
    name: announce-release
    description: Send a release announcement after publishing a project
    pre-run: playbooks/release/pre.yaml
    run: playbooks/release/announce.yaml
    required-projects:
      - openstack/releases

- job:
    name: xstatic-check-version
    description: Check version used by xstatic packages
    run: playbooks/xstatic/check-version.yaml

- job:
    name: build-openstack-releasenotes
    branches: ^(?!driverfixes/).*$
    parent: build-reno-releasenotes
    description: |
      Build releasenotes, with optional translation support, using reno.
    # Building translated releasenotes can take long for large repositories
    timeout: 3600
    required-projects:
      - name: openstack/requirements
    vars:
      constraints_file: '{{ ansible_user_dir }}/src/opendev.org/openstack/requirements/upper-constraints.txt'

- job:
    name: build-openstack-api-ref
    parent: openstack-tox-docs
    description: |
      Build api-ref document. This is only run on master branch of a
      project.
    timeout: 1800
    vars:
      sphinx_build_dir: api-ref/build
      tox_envlist: api-ref
      tox_skip_pdf: true
    # We only publish the master branch, so no need to run
    # for changes on other branches.
    branches: master

- job:
    name: build-openstack-api-guide
    parent: openstack-tox-docs
    description: |
      Build api-guide document. This is only run for changes on master
      branch of a project.
    vars:
      sphinx_build_dir: api-guide/build
      tox_envlist: api-guide
      tox_skip_pdf: true
    # We only publish the master branch, so no need to run
    # for changes on other branches.
    branches: master

- job:
    name: build-openstack-deploy-guide
    parent: openstack-tox-docs
    description: |
      Build deploy-guide document.
    vars:
      sphinx_build_dir: deploy-guide/build
      tox_envlist: deploy-guide
      tox_skip_pdf: true

- job:
    name: build-openstack-install-guide
    parent: build-openstack-sphinx-docs
    description: |
      Build install-guide document.
    vars:
      sphinx_build_dir: install-guide/build
      sphinx_source_dir: install-guide/source
    # This job runs only pre-pike, with pike the documents have been
    # integrated into normal builds.
    branches:
      - stable/newton
      - stable/ocata
    files:
      - ^install-guide/.*
      - bindep.txt
      - doc/requirements.txt
      - test-requirements.txt

- job:
    name: legacy-base
    abstract: true
    description: |
      Base job (xenial) for autoconverted legacy jobs

      This job runs on Xenial and this is for stable/ocata, pike, queens
      and rocky. This job is prepared to make sure all stable branches
      before stable/stein will keep running on xenial.
    pre-run: playbooks/legacy/pre.yaml
    nodeset: legacy-ubuntu-xenial
    vars:
      bindep_fallback: /usr/local/bindep-fallback/bindep-fallback.txt
    branches:
      - stable/ocata
      - stable/pike
      - stable/queens
      - stable/rocky

- job:
    name: legacy-base
    abstract: true
    description: |
      Base job (bionic) for autoconverted legacy jobs

      This job runs on Bionic from stable/stein on.
    pre-run: playbooks/legacy/pre.yaml
    vars:
      bindep_fallback: /usr/local/bindep-fallback/bindep-fallback.txt
    branches: ^(?!stable/(ocata|pike|queens|rocky)).*$
    nodeset: legacy-ubuntu-bionic

- job:
    name: legacy-dsvm-base
    abstract: true
    description: |
      Base job (xenial) for autoconverted legacy devstack-gate jobs

      This job runs devstack-gate with as few changes as possible and
      may be used by jobs which have been automatically converted as
      part of the migration to Zuul v3. This job runs on Xenial for
      stable/ocata, pike, queens and rocky. This job is prepared to
      make sure all stable branches before stable/stein will keep
      running on xenial.
    nodeset: devstack-single-node
    branches:
      - stable/ocata
      - stable/pike
      - stable/queens
      - stable/rocky
    pre-run: playbooks/legacy/pre.yaml
    required-projects:
      - openstack/devstack
      - openstack/devstack-gate
      - openstack/tripleo-ci
      - openstack/ceilometer
      - openstack/ceilometermiddleware
      - openstack/cinder
      - openstack/glance
      - openstack/glance_store
      - openstack/heat
      - openstack/heat-cfntools
      - openstack/heat-templates
      - openstack/horizon
      - openstack/keystone
      - openstack/keystoneauth
      - openstack/keystonemiddleware
      - openstack/manila
      - openstack/manila-ui
      - openstack/neutron
      - openstack/neutron-fwaas
      - openstack/neutron-vpnaas
      - openstack/nova
      - openstack/octavia
      - openstack/os-apply-config
      - openstack/os-brick
      - openstack/os-client-config
      - openstack/os-collect-config
      - openstack/os-net-config
      - openstack/os-refresh-config
      - openstack/osc-lib
      # NOTE(mriedem): The openstack/placement repo is new in Stein and will
      # be ignored on stable branches before Stein.
      - openstack/placement
      - openstack/requirements
      - openstack/swift
      - openstack/tempest
      - openstack/tripleo-heat-templates
      - openstack/tripleo-image-elements
      - openstack/zaqar

- job:
    name: legacy-dsvm-base
    abstract: true
    description: |
      Base job (bionic) for autoconverted legacy devstack-gate jobs

      This job runs devstack-gate with as few changes as possible and
      may be used by jobs which have been automatically converted as
      part of the migration to Zuul v3. This job runs on Bionic from
      stable/stein on.
    branches: ^(?!stable/(ocata|pike|queens|rocky)).*$
    nodeset: legacy-ubuntu-bionic
    pre-run: playbooks/legacy/pre.yaml
    required-projects:
      - openstack/devstack
      - openstack/devstack-gate
      - openstack/tripleo-ci
      - openstack/ceilometer
      - openstack/ceilometermiddleware
      - openstack/cinder
      - openstack/glance
      - openstack/glance_store
      - openstack/heat
      - openstack/heat-cfntools
      - openstack/heat-templates
      - openstack/horizon
      - openstack/keystone
      - openstack/keystoneauth
      - openstack/keystonemiddleware
      - openstack/manila
      - openstack/manila-ui
      - openstack/neutron
      - openstack/neutron-fwaas
      - openstack/neutron-vpnaas
      - openstack/nova
      - openstack/octavia
      - openstack/os-apply-config
      - openstack/os-brick
      - openstack/os-client-config
      - openstack/os-collect-config
      - openstack/os-net-config
      - openstack/os-refresh-config
      - openstack/osc-lib
      # NOTE(mriedem): The openstack/placement repo is new in Stein and will
      # be ignored on stable branches before Stein.
      - openstack/placement
      - openstack/requirements
      - openstack/swift
      - openstack/tempest
      - openstack/tripleo-heat-templates
      - openstack/tripleo-image-elements
      - openstack/zaqar

- job:
    name: legacy-dsvm-base-multinode
    abstract: true
    parent: legacy-dsvm-base
    description: |
      Base job (xenial) for multinode devstack jobs.

      Will setup firewall rules on all the nodes allowing them to talk to
      each other. This job runs on Xenial for stable/ocata, pike, queens
      and rocky. This job is prepared to make sure all stable branches
      before stable/stein will keep running on xenial.

    roles:
      - zuul: zuul/zuul-jobs
    pre-run: playbooks/legacy/multinode-networking/pre.yaml
    nodeset: legacy-ubuntu-xenial-2-node
    branches:
      - stable/ocata
      - stable/pike
      - stable/queens
      - stable/rocky

- job:
    name: legacy-dsvm-base-multinode
    abstract: true
    parent: legacy-dsvm-base
    description: |
      Base job (bionic) for multinode devstack jobs.

      Will setup firewall rules on all the nodes allowing them to talk to
      each other. This job runs on Bionic from stable/stein on.
    roles:
      - zuul: zuul/zuul-jobs
    pre-run: playbooks/legacy/multinode-networking/pre.yaml
    branches: ^(?!stable/(ocata|pike|queens|rocky)).*$
    nodeset: legacy-ubuntu-bionic-2-node

- job:
    name: legacy-publish-openstack-artifacts
    abstract: true
    parent: publish-openstack-artifacts
    description: |
      Base job (xenial) for autoconverted legacy jobs that publish artifacts

      This job runs on Xenial for stable/ocata, pike, queens
      and rocky. This job is prepared to make sure all stable branches
      before stable/stein will keep running on xenial.
    nodeset: devstack-single-node
    pre-run: playbooks/legacy/pre.yaml
    branches:
      - stable/ocata
      - stable/pike
      - stable/queens
      - stable/rocky

- job:
    name: legacy-publish-openstack-artifacts
    abstract: true
    parent: publish-openstack-artifacts
    description: |
      Base job (bionic) for autoconverted legacy jobs that publish artifacts.

      This job runs on Bionic from stable/stein on.
    branches: ^(?!stable/(ocata|pike|queens|rocky)).*$
    nodeset: legacy-ubuntu-bionic
    pre-run: playbooks/legacy/pre.yaml


- job:
    name: project-config-gerrit
    parent: tox
    description: |
      Runs checks on gerrit-related configuration.  Uses ``gerrit``
      tox env.
    vars:
      tox_envlist: gerrit
    files:
      - ^gerrit/acls/.*$
      - bindep.txt
      - tools/check_valid_gerrit_projects.py
      - gerrit/projects.yaml
      - other-requirements.txt
      - tools/check_projects_yaml_alphabetized.sh
      - tools/check_valid_gerrit_config.sh
      - tox.ini
      - zuul/main.yaml

- job:
    name: project-config-grafyaml
    parent: tox
    description: |
      Runs checks on grafyaml configuration with the ``grafyaml`` tox
      env.
    vars:
      tox_envlist: grafyaml
      tox_environment:
        GRAFYAML_SRC: "{{ ansible_user_dir }}/{{ zuul.projects['opendev.org/opendev/grafyaml'].src_dir }}"
    required-projects:
      - opendev/grafyaml
    files:
      - ^grafana/.*$
      - bindep.txt
      - other-requirements.txt
      - tox.ini

- job:
    name: project-config-irc-access
    parent: tox
    description: |
      Runs checks on IRC configuration with the ``irc`` tox
      env.
    vars:
      tox_envlist: irc
    files:
      - bindep.txt
      - accessbot/channels.yaml
      - gerritbot/channels.yaml
      - other-requirements.txt
      - tools/check_irc_access.py
      - tools/check_channels_yaml.sh
      - tools/irc_tests.py
      - tools/normalize_channels_yaml.py
      - tools/projectconfig_yamllib.py
      - tox.ini

- job:
    name: project-config-nodepool
    parent: tox
    description: |
      Runs checks on nodepool configuration with the ``nodepool`` tox
      env.
    vars:
      tox_envlist: nodepool
    required-projects:
      - zuul/nodepool
    files:
      - ^nodepool/nodepool.yaml
      - ^nodepool/nl.*yaml$
      - bindep.txt
      - other-requirements.txt
      - tox.ini

- job:
    name: build-openstack-specs-site
    parent: opendev-tox-docs
    description: |
      Generates the index page of http://specs.openstack.org/.
    vars:
      tox_envlist: specs
      sphinx_build_dir: specs

- job:
    name: project-config-dib
    parent: tox
    description: |
      Runs diskimage-builder on all elements in project-config.  Uses
      the ``dib`` tox env.
    vars:
      tox_envlist: dib
    files:
      - ^nodepool/elements/.*$
      - bindep.txt
      - other-requirements.txt
      - tox.ini

- job:
    name: project-config-infra-docs-index
    parent: opendev-tox-docs
    description: |
      Generates the index page for https://docs.openstack.org/infra/.
    vars:
      tox_envlist: infra-docs
      sphinx_build_dir: docs-site

- job:
    name: openafs-rpm-package-build
    description: |
      There are no official builds for AFS on Centos, hence we build
      our own and publish them to tarballs.openstack.org for our
      centos hosts that need access to the mirror to consume.
    run: playbooks/openafs-rpm-package-build/run.yaml
    files: &afs-files
      - playbooks/openafs-rpm-package-build
      - roles/openafs-rpm-package-build

- job:
    name: openafs-rpm-package-build-centos-7-x86
    parent: openafs-rpm-package-build
    nodeset: centos-7

- job:
    name: openafs-rpm-package-build-centos-8-stream-x86
    parent: openafs-rpm-package-build
    nodeset: centos-8-stream

- job:
    name: openafs-rpm-package-build-centos-8-stream-arm64
    parent: openafs-rpm-package-build
    nodeset: centos-8-stream-arm64

- job:
    name: openafs-rpm-package-build-promote
    description: |
        Publish the openafs RPM packages
    parent: publish-openstack-artifacts
    run: playbooks/openafs-rpm-package-build/publish.yaml
    files: *afs-files
    nodeset:
      nodes: []

- job:
    name: openstack-zuul-jobs-linters
    parent: tox
    description: |
      This job runs against base-jobs, project-config, openstack-zuul-jobs
      and zuul-jobs so we can properly lint our ansible playbooks / roles.
    required-projects:
      - opendev/base-jobs
      - openstack/openstack-zuul-jobs
      - openstack/project-config
      - opendev/system-config
      - zuul/zuul-jobs
    vars:
      tox_envlist: linters
      tox_environment:
        ANSIBLE_ROLES_PATH: ~/src/opendev.org/opendev/base-jobs/roles:~/src/opendev.org/zuul/zuul-jobs/roles:~/src/opendev.org/openstack/openstack-zuul-jobs/roles:~/src/opendev.org/openstack/project-config/roles:~/src/opendev.org/opendev/system-config/roles

- job:
    name: ansible-role-functional-base
    abstract: true
    parent: tox
    description: |
      Run functional functional tests for ansible-role projects.

      Uses tox with the ``functional`` environment.
    pre-run: playbooks/ansible-role-functional/pre.yaml
    run: playbooks/tox-with-sudo/run.yaml
    vars:
      tox_envlist: functional

- job:
    name: ansible-role-functional-centos-7
    parent: ansible-role-functional-base
    nodeset: centos-7

- job:
    name: ansible-role-functional-ubuntu-xenial
    parent: ansible-role-functional-base

- job:
    name: golang-base
    parent: unittests
    abstract: true
    description: |
      Base job for golang tests.
    pre-run: playbooks/golang/pre.yaml
    run: playbooks/golang/run.yaml

- job:
    name: golang-fmt
    parent: golang-base
    description: |
      Run golang fmt test.

      This uses the make target ``fmt``.
    vars:
      golang_target: "fmt"

- job:
    name: golang-unit
    parent: golang-base
    description: |
      Run golang unit test.

      This uses the make target ``test``.
    vars:
      golang_target: "test"

- job:
    name: openstack-infra-extra-integration
    description: |
      Runs non-base roles that are used within various jobs to prevent
      regressions.  As opposed to base roles, these may run in a
      limited set of environments or have other simplifying
      assumptions.
    abstract: true
    protected: true
    parent: base
    required-projects:
      - openstack/project-config
    roles:
      - zuul: zuul/zuul-jobs
    run: tests/extra.yaml
    files:
      - ^zuul.d/*
      - ^roles/prepare-zanata-client/.*
      - ^tests/.*

# NOTE(ianw): This test restricted to the two node types these roles
# run on in the gate.
- job:
    name: openstack-infra-extra-integration-xenial
    parent: openstack-infra-extra-integration
    nodeset: ubuntu-xenial

- job:
    name: openstack-infra-extra-integration-bionic
    parent: openstack-infra-extra-integration
    nodeset: ubuntu-bionic

- job:
    name: build-wheel-cache-base
    abstract: true
    description: |
      Base job for building wheels published in OpenStack CI mirrors.
    pre-run:
      - playbooks/wheel-cache/pre.yaml
    run: playbooks/wheel-cache/build.yaml
    post-run: playbooks/wheel-cache/post-base.yaml
    # 2.5 hours
    timeout: 9000
    required-projects:
      - name: openstack/requirements
    # The job iterates over all branches, so we only need to run it on
    # master.
    branches: master
    # The publish jobs use kerberos/openafs roles in pre/post
    # playbooks, so this needs to be included here in the parent.
    roles:
      - zuul: opendev/system-config
    vars:
      bindep_dir: "{{ zuul.projects['opendev.org/openstack/requirements'].src_dir }}"

- job:
    name: build-wheel-cache-centos-7
    parent: build-wheel-cache-base
    description: |
      Build CentOS 7 wheels for OpenStack CI mirrors.
    nodeset:
      nodes:
        - name: wheel-cache-centos-7-python2
          label: centos-7
        - name: wheel-cache-centos-7-python3
          label: centos-7
    host-vars:
      wheel-cache-centos-7-python2:
        wheel_python: python2
      wheel-cache-centos-7-python3:
        wheel_python: python3

- job:
    name: build-wheel-cache-centos-8-stream
    parent: build-wheel-cache-base
    description: |
      Build CentOS 8 wheels for OpenStack CI mirrors.
    nodeset:
      nodes:
        - name: wheel-cache-centos-8-stream-python3
          label: centos-8-stream
    host-vars:
      wheel-cache-centos-8-stream-python3:
        wheel_python: python3

- job:
    name: build-wheel-cache-centos-8-stream-arm64
    parent: build-wheel-cache-base
    description: |
      Build CentOS 8 wheels for OpenStack CI mirrors.
    nodeset:
      nodes:
        - name: wheel-cache-centos-8-stream-arm64-python3
          label: centos-8-stream-arm64
    host-vars:
      wheel-cache-centos-8-stream-arm64-python3:
        wheel_python: python3

- job:
    name: build-wheel-cache-debian-bullseye
    parent: build-wheel-cache-base
    description: |
      Build Debian bullseye wheels for OpenStack CI mirrors.
    nodeset:
      nodes:
        - name: wheel-cache-debian-bullseye-python3
          label: debian-bullseye
    host-vars:
      wheel-cache-debian-bullseye-python3:
        wheel_python: python3

- job:
    name: build-wheel-cache-debian-bullseye-arm64
    parent: build-wheel-cache-base
    description: |
      Build Debian bullseye wheels for OpenStack CI mirrors.
    nodeset:
      nodes:
        - name: wheel-cache-debian-bullseye-arm64-python3
          label: debian-bullseye-arm64
    host-vars:
      wheel-cache-debian-bullseye-arm64-python3:
        wheel_python: python3

- job:
    name: build-wheel-cache-debian-buster
    parent: build-wheel-cache-base
    description: |
      Build Debian buster wheels for OpenStack CI mirrors.
    nodeset:
      nodes:
        - name: wheel-cache-debian-buster-python2
          label: debian-buster
        - name: wheel-cache-debian-buster-python3
          label: debian-buster
    host-vars:
      wheel-cache-debian-buster-python2:
        wheel_python: python2
      wheel-cache-debian-buster-python3:
        wheel_python: python3

- job:
    name: build-wheel-cache-debian-buster-arm64
    parent: build-wheel-cache-base
    description: |
      Build Debian buster wheels for OpenStack CI mirrors.
    nodeset:
      nodes:
        - name: wheel-cache-debian-buster-arm64-python2
          label: debian-buster-arm64
        - name: wheel-cache-debian-buster-arm64-python3
          label: debian-buster-arm64
    host-vars:
      wheel-cache-debian-buster-arm64-python2:
        wheel_python: python2
      wheel-cache-debian-buster-arm64-python3:
        wheel_python: python3

- job:
    name: build-wheel-cache-ubuntu-focal
    parent: build-wheel-cache-base
    description: |
      Build Ubuntu Focal wheels for OpenStack CI mirrors.
    nodeset:
      nodes:
        - name: wheel-cache-ubuntu-focal-python3
          label: ubuntu-focal
    host-vars:
      wheel-cache-ubuntu-focal-python3:
        wheel_python: python3

- job:
    name: build-wheel-cache-ubuntu-focal-arm64
    parent: build-wheel-cache-base
    description: |
      Build Ubuntu Focal wheels for OpenStack CI mirrors.
    nodeset:
      nodes:
        - name: wheel-cache-ubuntu-focal-arm64-python3
          label: ubuntu-focal-arm64
    host-vars:
      wheel-cache-ubuntu-focal-arm64-python3:
        wheel_python: python3

- job:
    name: build-wheel-cache-ubuntu-bionic
    parent: build-wheel-cache-base
    description: |
      Build Ubuntu Bionic wheels for OpenStack CI mirrors.
    nodeset:
      nodes:
        - name: wheel-cache-ubuntu-bionic-python2
          label: ubuntu-bionic
        - name: wheel-cache-ubuntu-bionic-python3
          label: ubuntu-bionic
    host-vars:
      wheel-cache-ubuntu-bionic-python2:
        wheel_python: python2
      wheel-cache-ubuntu-bionic-python3:
        wheel_python: python3

- job:
    name: build-wheel-cache-ubuntu-bionic-arm64
    parent: build-wheel-cache-base
    description: |
      Build Ubuntu Bionic wheels for OpenStack CI mirrors.
    nodeset:
      nodes:
        - name: wheel-cache-ubuntu-bionic-arm64-python2
          label: ubuntu-bionic-arm64
        - name: wheel-cache-ubuntu-bionic-arm64-python3
          label: ubuntu-bionic-arm64
    host-vars:
      wheel-cache-ubuntu-bionic-arm64-python2:
        wheel_python: python2
      wheel-cache-ubuntu-bionic-arm64-python3:
        wheel_python: python3

- job:
    name: build-wheel-cache-ubuntu-xenial
    parent: build-wheel-cache-base
    description: |
      Build Ubuntu Xenial wheels for OpenStack CI mirrors.
    nodeset:
      nodes:
        - name: wheel-cache-ubuntu-xenial-python2
          label: ubuntu-xenial
        - name: wheel-cache-ubuntu-xenial-python3
          label: ubuntu-xenial
    host-vars:
      wheel-cache-ubuntu-xenial-python2:
        wheel_python: python2
      wheel-cache-ubuntu-xenial-python3:
        wheel_python: python3