# Shared jobs that are generally applicable to everyone
# Assumes a 'base' job defined elsewhere

- job:
    name: unittests
    abstract: true
    description: |
      Perform setup common to all unit test jobs.

      This performs basic host and general project setup tasks common
      to all types of unit test jobs.
    pre-run: playbooks/unittests/pre.yaml
    post-run: playbooks/unittests/post.yaml

- job:
    name: tox
    parent: unittests
    description: |
      Base job containing setup and teardown for tox-based test jobs.

      This performs basic host and general project setup tasks common
      to all tox unit test jobs.

      Responds to these variables:

      .. zuul:jobvar:: tox_envlist

         Use the specified tox environments (``ALL`` selects all).

      .. zuul:jobvar:: tox_environment

         List of user defined environmental variables to pass to bash
         shell.

      .. zuul:jobvar:: tox_extra_args

         String containing extra arguments to append to the tox command line.

      .. zuul:jobvar: tox_constraints_file

         Path to a pip constraints file. Will be provided to tox in the
         UPPER_CONSTRAINTS_FILE environment variable if it exists.

      .. zuul:jobvar: tox_install_siblings
         :default: true

         Override tox requirements that have corresponding zuul git repos
         on the node by installing the git versions into the tox virtualenv.
    run: playbooks/tox/run.yaml
    pre-run: playbooks/tox/pre.yaml
    post-run: playbooks/tox/post.yaml
    vars:
      tox_environment:
        NOSE_WITH_HTML_OUTPUT: 1
        NOSE_HTML_OUT_FILE: nose_results.html
        NOSE_WITH_XUNIT: 1

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

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

- job:
    name: tox-py34
    parent: tox
    description: |
      Run unit tests for a Python project under cPython version 3.4.

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

- job:
    name: tox-py35
    parent: tox
    description: |
      Run unit tests for a Python project under cPython version 3.5.

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

- job:
    name: tox-docs
    parent: tox
    description: |
      Run documentation unit tests.

      Uses tox with the ``docs`` environment.
    vars:
      tox_envlist: docs
    post-run: playbooks/tox/docs-post.yaml
    success-url: html/

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

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

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

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

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

      Uses tox with the ``cover`` environment.
    post-run: playbooks/tox/cover-post.yaml
    vars:
      tox_envlist: cover

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

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

- job:
    name: tox-nodejs-npm
    parent: tox
    description: |
      Run tests using tox but with the javascript toolchain installed
      and available as well. A combination of the tox and nodejs-npm
      jobs. By default will run npm before running the tox environment listed.

      Responds to these variables:

      .. zuul:jobvar:: tox_envlist

         Use the specified tox environments (``ALL`` selects all).

      .. zuul:jobvar:: tox_environment

         List of user defined environmental variables to pass to bash
         shell.

      .. zuul:jobvar:: tox_extra_args

         String containing extra arguments to append to the tox command line.

      .. zuul:jobvar: tox_constraints_file

         Path to a pip constraints file. Will be provided to tox in the
         UPPER_CONSTRAINTS_FILE environment variable if it exists.

      .. zuul:jobvar: tox_install_siblings
         :default: true

         Override tox requirements that have corresponding zuul git repos
         on the node by installing the git versions into the tox virtualenv.

      .. zuul:jobvar:: npm_command
         :default: build

         Command to pass to npm.

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

         The version of Node to use.


      .. zuul:jobvar: javascript_content_dir
         :default: dist

         Directory, relative to zuul_work_dir, holding build content.

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

         Path to operate in.
    pre-run: playbooks/javascript/pre.yaml
    run: playbooks/tox/npm.yaml
    post-run: playbooks/javascript/post.yaml
    vars:
      npm_command: build

- job:
    name: build-python-release
    description: |
      Build a source tarball and a bdist wheel for uploading.
    run: playbooks/python/release.yaml
    post-run: playbooks/python/tarball-post.yaml

- job:
    name: python-upload-pypi
    parent: build-python-release
    description: |
      Generate and upload a python source tarball and binary wheel

      Requires a variable ``pypi_info`` be set which is a dict containing
      at least a ``username`` and ``password`` attribute.
    post-run: playbooks/python/upload-pypi.yaml

- job:
    name: build-sphinx-docs
    description: |
      Build documentation using Sphinx

      Additional requirements can be provided in a project in either the
      file ``doc/requirements.txt`` or ``test-requirements.txt``. (The first
      file found in that order will be the one used) Non-python distro
      requirements can be specified in ``bindep.txt`` using the ``doc`` tag.

      Runs `whereto https://docs.openstack.org/whereto/latest/` after the build
      if it is installed.

      Responds to these variables:

      .. zuul:jobvar:: constraints_file

         Optional path to a pip constraints file for installing python
         libraries.

      .. zuul:jobvar:: sphinx_python
          :default: python2

         Version of python to use, either ``python2`` or ``python3``.

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

         Directory to operate in.
    success-url: html/
    pre-run: playbooks/sphinx/pre.yaml
    run: playbooks/sphinx/run.yaml
    post-run: playbooks/sphinx/post.yaml

- job:
    name: build-reno-releasenotes
    description: |
      Build releasenotes using reno

      Additional requirements can be provided in a project in either the
      file ``doc/requirements.txt`` or ``test-requirements.txt``. (The first
      file found in that order will be the one used) Non-python distro
      requirements can be specified in ``bindep.txt`` using the ``doc`` tag.

      Responds to these variables:

      .. zuul:jobvar:: constraints_file

         Optional path to a pip constraints file for installing python
         libraries.

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

         Directory to operate in.
    success-url: html/
    # Release notes always build on master.
    override-checkout: master
    pre-run: playbooks/releasenotes/pre.yaml
    run: playbooks/releasenotes/run.yaml
    post-run: playbooks/releasenotes/post.yaml
    files:
      - ^releasenotes/.*
      - bindep.txt
      - doc/requirements.txt
      - test-requirements.txt

- job:
    name: trigger-readthedocs
    description: Send a trigger to the readthedocs url to tell it to build docs
    nodeset:
      nodes: []
    run: playbooks/python/readthedocs.yaml

- job:
    name: multinode
    abstract: true
    description: |
      Do additional setup needed for multi-node jobs such as setting up
      overlay networks and setting up known-hosts and ssh keys
    pre-run: playbooks/multinode/pre.yaml

- job:
    name: nodejs-npm
    parent: unittests
    description: |
      Base job for javascript operations

      Responds to these variables:

      .. zuul:jobvar:: npm_command
         :default: build

         Command to pass to npm.

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

      .. zuul:jobvar: javascript_content_dir
         :default: dist

         Directory, relative to zuul_work_dir, holding build content.
    pre-run: playbooks/javascript/pre.yaml
    run: playbooks/javascript/run.yaml
    post-run: playbooks/javascript/post.yaml
    vars:
      npm_command: build

- job:
    name: build-javascript-tarball
    parent: nodejs-npm
    description: |
      Build a 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.

      .. zuul:jobvar: javascript_content_dir
         :default: dist

         Directory, relative to zuul_work_dir, holding build content.
    vars:
      npm_command: pack

- job:
    name: build-javascript-content
    parent: nodejs-npm
    description: |
      Build javascript web content as it should be deployed.

      Responds to these variables:

      .. zuul:jobvar:: npm_command
         :default: build

         Command to pass to npm.

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

      .. zuul:jobvar: javascript_content_dir
         :default: dist

         Directory, relative to zuul_work_dir, holding build content.
    success-url: npm/html/

- job:
    name: nodejs-npm-run-test
    parent: nodejs-npm
    description: |
      Run test using nodejs. This test also starts Xvfb for run time
      tests.

      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.

      .. zuul:jobvar: javascript_content_dir
         :default: dist

         Directory, relative to zuul_work_dir, holding build content.
    pre-run: playbooks/javascript/pre-test.yaml
    vars:
      npm_command: test

- job:
    name: nodejs-npm-run-lint
    parent: nodejs-npm
    description: |
      Run lint using nodejs.

      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.

      .. zuul:jobvar: javascript_content_dir
         :default: dist

         Directory, relative to zuul_work_dir, holding build content.
    vars:
      npm_command: lint

- job:
    name: nodejs-npm-run-docs
    parent: nodejs-npm
    description: |
      Run docs using nodejs.

      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.
    post-run: playbooks/tox/docs-post.yaml
    success-url: html/
    vars:
      npm_command: docs

- job:
    name: run-test-command
    parent: unittests
    description: |
      Run simple command as test.

      To use this, set the ``test_command`` variable.
    run: playbooks/run-test-command/run.yaml
    vars:
      test_command: "exit 1"