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

- job:
    name: openstack-infra-base-integration
    description: |
      Runs roles that are included by default in the 'base' job in order to
      prevent regressions. This job should not be used outside the context of
      testing roles and playbooks found in project-config, zuul-jobs and
      openstack-zuul-jobs.
    parent: base-minimal
    required-projects:
      - openstack-infra/project-config
    roles:
      - zuul: openstack-infra/zuul-jobs
    run: tests/base.yaml
    files:
      - ^roles/configure-mirror/.*
      - ^roles/configure-unbound/.*
      - ^roles/emit-job-header/.*
      - ^roles/fetch-zuul-cloner/.*
      - ^roles/mirror-info/.*
      - ^roles/set-zuul-log-path-fact/.*
      - ^roles/use-cached-repos/.*
      - ^tests/.*

- job:
    name: openstack-infra-base-integration-centos-7
    parent: openstack-infra-base-integration
    nodeset: centos-7

- job:
    name: openstack-infra-base-integration-debian-jessie
    parent: openstack-infra-base-integration
    nodeset: debian-jessie

- job:
    name: openstack-infra-base-integration-fedora-26
    parent: openstack-infra-base-integration
    nodeset: fedora-26

- job:
    name: openstack-infra-base-integration-opensuse423
    parent: openstack-infra-base-integration
    nodeset: opensuse-423

- job:
    name: openstack-infra-base-integration-ubuntu-trusty
    parent: openstack-infra-base-integration
    nodeset: ubuntu-trusty

- job:
    name: openstack-infra-base-integration-ubuntu-xenial
    parent: openstack-infra-base-integration
    nodeset: ubuntu-xenial

- job:
    name: openstack-infra-multinode-integration
    description: |
      Runs roles that are included by default in the 'multinode' job in order
      to prevent regressions. This job should not be used outside the context
      of testing roles and playbooks found in project-config, zuul-jobs and
      openstack-zuul-jobs.
    parent: base-minimal
    vars:
      ara_generate_html: true
    required-projects:
      - openstack-infra/project-config
    roles:
      - zuul: openstack-infra/zuul-jobs
    run: tests/multinode.yaml
    files:
      - ^roles/configure-mirror/.*
      - ^roles/configure-unbound/.*
      - ^roles/emit-job-header/.*
      - ^roles/fetch-zuul-cloner/.*
      - ^roles/mirror-info/.*
      - ^roles/set-zuul-log-path-fact/.*
      - ^roles/use-cached-repos/.*
      - ^roles/multi-node-bridge/.*
      - ^roles/multi-node-firewall/.*
      - ^roles/multi-node-hosts-file/.*
      - ^roles/multi-node-known-hosts/.*
      - ^tests/.*

- job:
    name: openstack-infra-multinode-integration-centos-7
    parent: openstack-infra-multinode-integration
    nodeset:
      nodes:
        - name: primary
          label: centos-7
        - name: secondary
          label: centos-7
      groups:
        - name: switch
          nodes:
            - primary
        - name: peers
          nodes:
            - secondary

- job:
    name: openstack-infra-multinode-integration-debian-jessie
    parent: openstack-infra-multinode-integration
    nodeset:
      nodes:
        - name: primary
          label: debian-jessie
        - name: secondary
          label: debian-jessie
      groups:
        - name: switch
          nodes:
            - primary
        - name: peers
          nodes:
            - secondary

- job:
    name: openstack-infra-multinode-integration-fedora-26
    parent: openstack-infra-multinode-integration
    nodeset:
      nodes:
        - name: primary
          label: fedora-26
        - name: secondary
          label: fedora-26
      groups:
        - name: switch
          nodes:
            - primary
        - name: peers
          nodes:
            - secondary

- job:
    name: openstack-infra-multinode-integration-opensuse423
    parent: openstack-infra-multinode-integration
    nodeset:
      nodes:
        - name: primary
          label: opensuse-423
        - name: secondary
          label: opensuse-423
      groups:
        - name: switch
          nodes:
            - primary
        - name: peers
          nodes:
            - secondary

- job:
    name: openstack-infra-multinode-integration-ubuntu-trusty
    parent: openstack-infra-multinode-integration
    nodeset:
      nodes:
        - name: primary
          label: ubuntu-trusty
        - name: secondary
          label: ubuntu-trusty
      groups:
        - name: switch
          nodes:
            - primary
        - name: peers
          nodes:
            - secondary

- job:
    name: openstack-infra-multinode-integration-ubuntu-xenial
    parent: openstack-infra-multinode-integration
    nodeset:
      nodes:
        - name: primary
          label: ubuntu-xenial
        - name: secondary
          label: ubuntu-xenial
      groups:
        - name: switch
          nodes:
            - primary
        - name: peers
          nodes:
            - secondary

- job:
    name: build-openstack-sphinx-docs
    parent: build-sphinx-docs
    branches: ^(?!driverfixes/).*$
    description: |
      Builds documentation using Sphinx per 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.
    success-url: html/
    required-projects:
      - name: openstack/requirements
    pre-run: playbooks/sphinx-docs/neutron-horizon-hack.yaml
    roles:
      - zuul: openstack-infra/zuul-jobs
    vars:
      constraints_file: '{{ ansible_user_dir }}/src/git.openstack.org/openstack/requirements/upper-constraints.txt'

- job:
    name: tox-py35-on-zuul
    parent: tox-py35
    description: |
      Run zuul's py35 unittests on patches to zuul-jobs
    vars:
      zuul_work_dir: src/git.openstack.org/openstack-infra/zuul
    required-projects:
      - name: openstack-infra/zuul
        override-checkout: feature/zuulv3

- job:
    name: openstack-tox
    parent: tox
    description: |
      Base job to run tox jobs with OpenStack project specific updates.

      Processing upper-constraints files from openstack/requirements.
    required-projects:
      - name: openstack/requirements
    vars:
      tox_constraints_file: '{{ ansible_user_dir }}/src/git.openstack.org/openstack/requirements/upper-constraints.txt'

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

      Uses tox with the ``py27`` environment.
    irrelevant-files:
      - ^.*\.rst$
      - ^doc/.*$
      - ^releasenotes/.*$
    vars:
      tox_envlist: py27
      bindep_profile: test py27

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

      Uses tox with the ``py35`` environment.
    irrelevant-files:
      - ^.*\.rst$
      - ^doc/.*$
      - ^releasenotes/.*$
      - ^deliverables/.*$
    vars:
      tox_envlist: py35
      bindep_profile: test py35

- 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:
      - ^.*\.rst$
      - ^doc/.*$
      - ^releasenotes/.*$
    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-pep8
    parent: openstack-tox
    description: |
      Runs code pep8 tests.

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

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

      Uses tox with the ``cover`` environment.
    required-projects:
      - name: openstack/requirements
    irrelevant-files:
      - ^.*\.rst$
      - ^doc/.*$
      - ^releasenotes/.*$
    success-url: cover/
    vars:
      tox_constraints_file: '{{ ansible_user_dir }}/src/git.openstack.org/openstack/requirements/upper-constraints.txt'
    timeout: 2400

- 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 functional tests.

      Uses tox with the ``functional`` environment.
    irrelevant-files:
      - ^.*\.rst$
      - ^doc/.*$
      - ^releasenotes/.*$
    vars:
      tox_envlist: functional

- job:
    name: openstack-tox-functional-py35
    parent: openstack-tox
    description: |
      Run functional tests using python 3.5.

      Uses tox with the ``functional-py35`` environment.
    irrelevant-files:
      - ^.*\.rst$
      - ^doc/.*$
      - ^releasenotes/.*$
    vars:
      tox_envlist: functional-py35

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

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

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

      Uses tox with the ``pylint`` environment.
    irrelevant-files:
      - ^.*\.rst$
      - ^doc/.*$
      - ^releasenotes/.*$
    vars:
      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: 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-python-tarball
    parent: publish-openstack-artifacts
    description: |
      Publish the results of the tox-tarball job to tarballs.openstack.org.
    run: playbooks/python-tarball/run.yaml
    post-run: playbooks/python-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-infra/release-tools

- 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.
    timeout: 1800
    required-projects:
      - name: openstack/requirements
    vars:
      constraints_file: '{{ ansible_user_dir }}/src/git.openstack.org/openstack/requirements/upper-constraints.txt'

- job:
    name: build-openstack-api-ref
    parent: openstack-tox
    description: |
      Build api-ref document. This is only run on master branch of a
      project.
    success-url: html/
    post-run: playbooks/build-api-ref/post.yaml
    timeout: 1800
    vars:
      tox_envlist: api-ref
    # We only publish the master branch, so no need to run
    # for changes on other branches.
    branches: master
    files:
      - ^tox.ini$
      - ^api-ref/.*
      - ^doc/api_samples/.*
      - bindep.txt
      - other-requirements.txt

- job:
    name: build-openstack-api-guide
    parent: openstack-tox
    description: |
      Build api-guide document. This is only run for changes on master
      branch of a project.
    success-url: html/
    post-run: playbooks/build-api-guide/post.yaml
    timeout: 1800
    vars:
      tox_envlist: api-guide
    # We only publish the master branch, so no need to run
    # for changes on other branches.
    branches: master
    files:
      - ^tox.ini$
      - ^api-guide/.*
      - bindep.txt
      - other-requirements.txt

- job:
    name: build-openstack-deploy-guide
    parent: openstack-tox
    description: |
      Build deploy-guide document.
    success-url: html/
    post-run: playbooks/build-deploy-guide/post.yaml
    timeout: 1800
    vars:
      tox_envlist: deploy-guide
    files:
      - ^tox.ini$
      - ^deploy-guide/.*
      - bindep.txt
      - other-requirements.txt

- job:
    name: build-openstack-install-guide
    parent: openstack-tox
    description: |
      Build install-guide document.
    success-url: html/
    post-run: playbooks/build-install-guide/post.yaml
    timeout: 1800
    vars:
      tox_envlist: install-guide
    # This job runs only pre-pike, with pike the documents have been
    # integrated into normal builds.
    branches:
      - stable/newton
      - stable/ocata
    files:
      - ^tox.ini$
      - ^install-guide/.*
      - bindep.txt
      - other-requirements.txt

- job:
    name: build-placement-api-ref
    parent: openstack-tox
    description: |
      Build placement-api-ref document. This job runs only on master branch.
    success-url: html/
    post-run: playbooks/build-placement-api-ref/post.yaml
    timeout: 1800
    # We only publish the master branch, so no need to run
    # for changes on other branches.
    branches: master
    vars:
      tox_envlist: placement-api-ref
    files:
      - ^tox.ini$
      - ^placement-api-ref/.*
      - bindep.txt
      - other-requirements.txt

- job:
    name: legacy-base
    description: |
      Base job for autoconverted legacy jobs
    pre-run: playbooks/legacy/pre.yaml
    nodeset: legacy-ubuntu-xenial

- job:
    name: legacy-dsvm-base
    description: |
      Base job 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.
    nodeset: devstack-single-node
    pre-run: playbooks/legacy/pre.yaml
    required-projects:
      - openstack-dev/devstack
      - openstack-infra/devstack-gate
      - openstack-infra/tripleo-ci
      - openstack/ceilometer
      - openstack/ceilometermiddleware
      - openstack/cinder
      - openstack/django_openstack_auth
      - 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-lbaas
      - 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
      - openstack/requirements
      - openstack/swift
      - openstack/tempest
      - openstack/tempest-lib
      - openstack/tripleo-heat-templates
      - openstack/tripleo-image-elements
      - openstack/tripleo-incubator
      - openstack/zaqar

- job:
    name: legacy-dsvm-base-multinode
    parent: legacy-dsvm-base
    description: |
      Base job for multinode devstack jobs.

      Will setup firewall rules on all the nodes allowing them to talk to
      each other.
    roles:
      - zuul: openstack-infra/zuul-jobs
    pre-run: playbooks/legacy/multinode-networking/pre.yaml

- job:
    name: legacy-puppet-openstack-integration
    description: |
      Base job for autoconverted legacy puppet-openstack-integration

      This job runs provides the base required projects for
      puppet-openstack-integration jobs.
    nodeset: devstack-single-node
    pre-run: playbooks/legacy/pre.yaml
    required-projects:
      - openstack/puppet-aodh
      - openstack/puppet-barbican
      - openstack/puppet-ceilometer
      - openstack/puppet-ceph
      - openstack/puppet-cinder
      - openstack/puppet-cloudkitty
      - openstack/puppet-congress
      - openstack/puppet-designate
      - openstack/puppet-ec2api
      - openstack/puppet-glance
      - openstack/puppet-gnocchi
      - openstack/puppet-heat
      - openstack/puppet-horizon
      - openstack/puppet-ironic
      - openstack/puppet-keystone
      - openstack/puppet-manila
      - openstack/puppet-mistral
      - openstack/puppet-modulesync-configs
      - openstack/puppet-monasca
      - openstack/puppet-murano
      - openstack/puppet-neutron
      - openstack/puppet-nova
      - openstack/puppet-octavia
      - openstack/puppet-openstack-cookiecutter
      - openstack/puppet-openstack-integration
      - openstack/puppet-openstack_extras
      - openstack/puppet-openstacklib
      - openstack/puppet-oslo
      - openstack/puppet-ovn
      - openstack/puppet-panko
      - openstack/puppet-qdr
      - openstack/puppet-sahara
      - openstack/puppet-swift
      - openstack/puppet-tacker
      - openstack/puppet-tempest
      - openstack/puppet-trove
      - openstack/puppet-vswitch
      - openstack/puppet-vitrage
      - openstack/puppet-watcher
      - openstack/puppet-zaqar
      - openstack/tempest-horizon

- job:
    name: legacy-publish-openstack-artifacts
    parent: publish-openstack-artifacts
    description: |
      Base job for autoconverted legacy jobs that publish artifacts
    nodeset: devstack-single-node
    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
      - 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

- job:
    name: project-config-grafyaml
    parent: tox
    description: |
      Runs checks on grafyaml configuration with the ``grafyaml`` tox
      env.
    vars:
      tox_envlist: grafyaml
    required-projects:
      - openstack-infra/grafyaml
    files:
      - ^grafana/.*$
      - bindep.txt
      - other-requirements.txt
      - tools/grafyaml-validate.sh
      - 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
    files:
      - ^nodepool/nodepool.yaml
      - bindep.txt
      - other-requirements.txt
      - tox.ini

- job:
    name: build-openstack-specs-site
    parent: tox
    description: |
      Generates the index page of http://specs.openstack.org/.
    vars:
      tox_envlist: specs
    files:
      - bindep.txt
      - specs/.*
      - other-requirements.txt
      - tox.ini

- 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: tox
    description: |
      Generates the index page for https://docs.openstack.org/infra/.
    vars:
      tox_envlist: infra-docs
    files:
      - bindep.txt
      - docs-site/.*
      - other-requirements.txt
      - tox.ini

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

- job:
    name: legacy-kolla-kubernetes-base
    description: |
      This job runs provides the base required projects for
      legacy-kolla-kubernetes jobs.
    parent: legacy-base
    required-projects:
      - openstack/requirements

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