# Shared project-templates specific to the OpenStack Project

- project-template:
    name: system-required
    description: |
      Jobs that *every* project in OpenStack CI should have by default.
    merge-check:
      jobs:
        - noop

- project-template:
    name: build-openstack-sphinx-docs
    description: |
      Runs normal OpenStack PTI doc build without publication jobs.
    check:
      jobs:
        - build-openstack-sphinx-docs
    gate:
      jobs:
        - build-openstack-sphinx-docs

- project-template:
    name: build-openstack-sphinx-docs-python3
    description: |
      Runs normal OpenStack PTI doc build without publication jobs.

      Builds the docs using Sphinx with Python3.
    check:
      jobs:
        - build-openstack-sphinx-docs:
            vars:
              sphinx_python: python3
    gate:
      jobs:
        - build-openstack-sphinx-docs:
            vars:
              sphinx_python: python3

- project-template:
    name: publish-openstack-sphinx-docs
    description: |
      Runs normal OpenStack PTI doc build and publication jobs.
    check:
      jobs:
        - build-openstack-sphinx-docs
    gate:
      jobs:
        - build-openstack-sphinx-docs
    post:
      jobs:
        - publish-openstack-sphinx-docs

- project-template:
    name: publish-openstack-sphinx-docs-python3
    description: |
      Runs normal OpenStack PTI doc build and publication jobs.

      Builds the docs using Sphinx with Python3.
    check:
      jobs:
        - build-openstack-sphinx-docs:
            vars:
              sphinx_python: python3
    gate:
      jobs:
        - build-openstack-sphinx-docs:
            vars:
              sphinx_python: python3
    post:
      jobs:
        - publish-openstack-sphinx-docs-python3

- project-template:
    name: publish-openstack-sphinx-docs-horizon
    description: |
      Runs normal OpenStack PTI doc build and publication jobs with horizon
      added to required-projects for the various dashboard projects that
      need that.
    check:
      jobs:
        - build-openstack-sphinx-docs:
            required-projects:
              - openstack/horizon
    gate:
      jobs:
        - build-openstack-sphinx-docs:
            required-projects:
              - openstack/horizon
    post:
      jobs:
        - publish-openstack-sphinx-docs
          # Final job, we cannot modify it.
          #  required-projects:
          #    - openstack/horizon

- project-template:
    name: publish-openstack-sphinx-docs-neutron
    description: |
      Runs normal OpenStack PTI doc build and publication jobs with neutron
      added to required-projects for the various networking- projects that
      need that.
    check:
      jobs:
        - build-openstack-sphinx-docs:
            required-projects:
              - openstack/neutron
    gate:
      jobs:
        - build-openstack-sphinx-docs:
            required-projects:
              - openstack/neutron
    post:
      jobs:
        - publish-openstack-sphinx-docs
          # Final job, we cannot modify it.
          #  required-projects:
          #    - openstack/neutron


- project-template:
    name: publish-openstack-sphinx-docs-infra
    description: |
      Runs normal OpenStack PTI build jobs and publishes to the Infra
      docs location.
    check:
      jobs:
        - build-openstack-sphinx-docs
    gate:
      jobs:
        - build-openstack-sphinx-docs
    post:
      jobs:
        - publish-openstack-sphinx-docs-infra

- project-template:
    name: release-openstack-sphinx-docs-infra
    description: |
      Runs normal OpenStack PTI build jobs and publishes to the Infra
      docs location only on tagged releases.
    check:
      jobs:
        - build-openstack-sphinx-docs
    gate:
      jobs:
        - build-openstack-sphinx-docs
    release:
      jobs:
        - publish-openstack-sphinx-docs-infra

- project-template:
    name: puppet-release-jobs
    check:
      jobs:
        - build-openstack-puppet-tarball
    gate:
      jobs:
        - build-openstack-puppet-tarball
    pre-release:
      jobs:
        - release-openstack-puppet
        - announce-release:
            dependencies:
              - release-openstack-puppet
    release:
      jobs:
        - release-openstack-puppet
        - announce-release:
            dependencies:
              - release-openstack-puppet
    post:
      jobs:
        - publish-openstack-puppet-branch-tarball

- project-template:
    name: publish-to-pypi
    description: |
      Publish a Python package to PyPI, then send release announcement
      emails and propose updates to upper-constraints as needed.
    pre-release:
      jobs:
        - release-openstack-python
        - announce-release:
            dependencies:
              - release-openstack-python
        - propose-update-constraints:
            dependencies:
              - release-openstack-python
    release:
      jobs:
        - release-openstack-python
        - announce-release:
            dependencies:
              - release-openstack-python
        - propose-update-constraints:
            dependencies:
              - release-openstack-python

- project-template:
    name: publish-to-pypi-neutron
    description: |
      Publish a Python package to PyPI with neutron added to required-projects
      for the various networking projects that need that, then send release
      announcement emails and propose updates to upper-constraints as needed.
    pre-release:
      jobs:
        - release-openstack-python:
            required-projects:
              - openstack/neutron
        - announce-release:
            dependencies:
              - release-openstack-python
        - propose-update-constraints:
            dependencies:
              - release-openstack-python
    release:
      jobs:
        - release-openstack-python:
            required-projects:
              - openstack/neutron
        - announce-release:
            dependencies:
              - release-openstack-python
        - propose-update-constraints:
            dependencies:
              - release-openstack-python

- project-template:
    name: publish-to-pypi-horizon
    description: |
      Publish a Python package to PyPI with horizon added to required-projects
      for the various dashboard projects that need that, then send release
      announcement emails and propose updates to upper-constraints as needed.
    pre-release:
      jobs:
        - release-openstack-python:
            required-projects:
              - openstack/horizon
        - announce-release:
            dependencies:
              - release-openstack-python
        - propose-update-constraints:
            dependencies:
              - release-openstack-python
    release:
      jobs:
        - release-openstack-python:
            required-projects:
              - openstack/horizon
        - announce-release:
            dependencies:
              - release-openstack-python
        - propose-update-constraints:
            dependencies:
              - release-openstack-python

- project-template:
    name: publish-xstatic-to-pypi
    description: |
      Publish an XStatic Python package to PyPI, then send release announcement
      emails and propose updates to upper-constraints as needed.
    pre-release:
      jobs:
        - xstatic-check-version
        - release-openstack-python:
            dependencies:
              - xstatic-check-version
        - announce-release:
            dependencies:
              - release-openstack-python
        - propose-update-constraints:
            dependencies:
              - release-openstack-python
    release:
      jobs:
        - xstatic-check-version
        - release-openstack-python:
            dependencies:
              - xstatic-check-version
        - announce-release:
            dependencies:
              - release-openstack-python
        - propose-update-constraints:
            dependencies:
              - release-openstack-python

- project-template:
    name: publish-to-pypi-quietly
    description: |
      Publish a Python package to PyPI but do not send announce emails or
      propose upper-constraints updates.
    pre-release:
      jobs:
        - release-openstack-python
    release:
      jobs:
        - release-openstack-python

- project-template:
    name: release-openstack-server
    description: |
      Release OpenStack server projects.
    pre-release:
      jobs:
        - release-openstack-python-without-pypi
        - announce-release:
            dependencies:
              - release-openstack-python-without-pypi
    release:
      jobs:
        - release-openstack-python-without-pypi
        - announce-release:
            dependencies:
              - release-openstack-python-without-pypi

- project-template:
    name: release-notes-jobs
    check:
      jobs:
        - build-openstack-releasenotes
    gate:
      jobs:
        - build-openstack-releasenotes
    post:
      jobs:
        - publish-openstack-releasenotes
    tag:
      jobs:
        - publish-openstack-releasenotes

- project-template:
    name: openstack-python-jobs
    check:
      jobs:
        - openstack-tox-pep8
        - openstack-tox-py27
    gate:
      jobs:
        - openstack-tox-pep8
        - openstack-tox-py27
    post:
      jobs:
        - publish-openstack-python-branch-tarball

- project-template:
    name: openstack-python-jobs-horizon
    description: |
      The standard openstack-python-jobs but with horizon added as a
      required-projects. The dashboard projects currently need this
      due to how the tox_install.sh zuul-cloner's horizon for them.
    check:
      jobs:
        - openstack-tox-pep8:
            required-projects:
              - openstack/horizon
        - openstack-tox-py27:
            required-projects:
              - openstack/horizon
    gate:
      jobs:
        - openstack-tox-pep8:
            required-projects:
              - openstack/horizon
        - openstack-tox-py27:
            required-projects:
              - openstack/horizon
    post:
      jobs:
        - publish-openstack-python-branch-tarball:
            required-projects:
              - openstack/horizon

- project-template:
    name: openstack-python-jobs-neutron
    description: |
      The standard openstack-python-jobs but with neutron added as a
      required-projects. The neutron stadium projects currently need this
      due to how the tox_install.sh zuul-cloner's neutron for them.
    check:
      jobs:
        - openstack-tox-pep8:
            required-projects:
              - openstack/neutron
        - openstack-tox-py27:
            required-projects:
              - openstack/neutron
    gate:
      jobs:
        - openstack-tox-pep8:
            required-projects:
              - openstack/neutron
        - openstack-tox-py27:
            required-projects:
              - openstack/neutron
    post:
      jobs:
        - publish-openstack-python-branch-tarball:
            required-projects:
              - openstack/neutron

- project-template:
    name: openstack-python35-jobs
    check:
      jobs:
        - openstack-tox-py35
    gate:
      jobs:
        - openstack-tox-py35

- project-template:
    name: openstack-python35-jobs-horizon
    description: |
      The standard openstack-python35-jobs but with horizon added as a
      required-projects. The dashboard projects currently need this
      due to how the tox_install.sh zuul-cloner's horizon for them.
    check:
      jobs:
        - openstack-tox-py35:
            required-projects:
              - openstack/horizon
    gate:
      jobs:
        - openstack-tox-py35:
            required-projects:
              - openstack/horizon

- project-template:
    name: openstack-python35-jobs-neutron
    description: |
      The standard openstack-python35-jobs but with neutron added as a
      required-projects. The neutron stadium projects currently need this
      due to how the tox_install.sh zuul-cloner's neutron for them.
    check:
      jobs:
        - openstack-tox-py35:
            required-projects:
              - openstack/neutron
    gate:
      jobs:
        - openstack-tox-py35:
            required-projects:
              - openstack/neutron

- project-template:
    name: openstack-python35-jobs-nonvoting
    check:
      jobs:
        - openstack-tox-py35:
            voting: false

- project-template:
    name: openstack-python-jobs-no-constraints
    description: |
      Runs the OpenStack PTI jobs for python, but uses the versions of them
      that do not use constraints.
    check:
      jobs:
        - tox-pep8
        - tox-py27
    gate:
      jobs:
        - tox-pep8
        - tox-py27
    post:
      jobs:
        - publish-openstack-python-branch-tarball

- project-template:
    name: openstack-python35-jobs-no-constraints
    description: |
      Runs the OpenStack PTI jobs for python3.5, but uses the versions of them
      that do not use constraints.
    check:
      jobs:
        - tox-py35
    gate:
      jobs:
        - tox-py35
    post:
      jobs:
        - publish-openstack-python-branch-tarball

- project-template:
    name: openstack-pypy-jobs
    check:
      jobs:
        - openstack-tox-pypy
    gate:
      jobs:
        - openstack-tox-pypy

- project-template:
    name: openstack-pypy-jobs-nonvoting
    check:
      jobs:
        - openstack-tox-pypy:
            voting: false

- project-template:
    name: openstack-python-jobs-trusty
    check:
      jobs:
        - openstack-tox-pep8:
            nodeset: ubuntu-trusty
        - openstack-tox-py27:
            nodeset: ubuntu-trusty
    gate:
      jobs:
        - openstack-tox-pep8:
            nodeset: ubuntu-trusty
        - openstack-tox-py27:
            nodeset: ubuntu-trusty

- project-template:
    name: docs-on-readthedocs
    description: |
      Runs normal OpenStack PTI build jobs but publishes to readthedocs
      instead of docs.openstack.org. This is intended for projects that are
      aiming to follow the PTI but are not official.
    check:
      jobs:
        - build-openstack-sphinx-docs
    gate:
      jobs:
        - build-openstack-sphinx-docs
    post:
      jobs:
        - trigger-readthedocs
    pre-release:
      jobs:
        - trigger-readthedocs
    release:
      jobs:
        - trigger-readthedocs

- project-template:
    name: nodejs4-publish-to-npm
    release:
      jobs:
        - publish-openstack-javascript-tarball:
            vars:
              node_version: 4
        - release-openstack-javascript:
            vars:
              node_version: 4
        - announce-release:
            dependencies:
              - release-openstack-javascript
              - publish-openstack-javascript-tarball

- project-template:
    name: nodejs6-publish-to-npm
    release:
      jobs:
        - publish-openstack-javascript-tarball:
            vars:
              node_version: 6
        - release-openstack-javascript:
            vars:
              node_version: 6
        - announce-release:
            dependencies:
              - release-openstack-javascript
              - publish-openstack-javascript-tarball

- project-template:
    name: translation-jobs
    description: |
      Sync translations to translation server and back again.

      This is intented for official OpenStack projects that have
      translations set up.
    post:
      jobs:
        - upstream-translation-update
    periodic:
      jobs:
        - propose-translation-update:
            branches: master

- project-template:
    name: translation-jobs-ocata
    description: |
      Sync translations from translation server for ocata branch.
    periodic:
      jobs:
        - propose-translation-update:
            branches: stable/ocata

- project-template:
    name: translation-jobs-pike
    description: |
      Sync translations from translation server for pike branch.
    periodic:
      jobs:
        - propose-translation-update:
            branches: stable/pike

- project-template:
    name: openstack-specs-jobs
    description: |
      Runs jobs to build and publish documents for a specs repository.
    check:
      jobs:
        - build-openstack-sphinx-docs
    gate:
      jobs:
        - build-openstack-sphinx-docs
    post:
      jobs:
        - publish-openstack-specs

- project-template:
    name: api-guide-jobs
    check:
      jobs:
        - build-openstack-api-guide
    gate:
      jobs:
        - build-openstack-api-guide
    post:
      jobs:
        - publish-api-guide

- project-template:
    name: api-ref-jobs
    check:
      jobs:
        - build-openstack-api-ref
    gate:
      jobs:
        - build-openstack-api-ref
    post:
      jobs:
        - publish-api-ref

- project-template:
    name: deploy-guide-jobs
    check:
      jobs:
        - build-openstack-deploy-guide
    gate:
      jobs:
        - build-openstack-deploy-guide
    post:
      jobs:
        - publish-deploy-guide

- project-template:
    name: install-guide-jobs
    check:
      jobs:
        - build-openstack-install-guide
    gate:
      jobs:
        - build-openstack-install-guide
    post:
      jobs:
        - publish-install-guide

- project-template:
    name: periodic-stable-jobs
    description: |
      Runs periodic jobs on stable branches.
    periodic-stable:
      jobs:
        - build-openstack-sphinx-docs:
            branches:
              - stable/ocata
              - stable/pike
        - openstack-tox-py27:
            branches:
              - stable/ocata
              - stable/pike

- project-template:
    name: periodic-stable-jobs-neutron
    periodic-stable:
      jobs:
        - build-openstack-sphinx-docs:
            branches:
              - stable/ocata
              - stable/pike
            required-projects:
              - openstack/neutron
        - openstack-tox-py27:
            branches:
              - stable/ocata
              - stable/pike
            required-projects:
              - openstack/neutron

- project-template:
    name: python-charm-layer-jobs
    check:
      jobs:
        - openstack-tox-pep8
        - openstack-tox-build
    gate:
      jobs:
        - openstack-tox-pep8
        - openstack-tox-build

- project-template:
    name: python35-charm-jobs
    description: |
      Run tox-pep8 and tox-py35 check and gate jobs, plus publish.
    check:
      jobs:
        - openstack-tox-pep8
        - openstack-tox-py35
    gate:
      jobs:
        - openstack-tox-pep8
        - openstack-tox-py35
    post:
      jobs:
        - publish-openstack-python-branch-tarball

- project-template:
    name: nodejs4-jobs
    description: |
      Run lint and test jobs using Node 4.
    check:
      jobs:
        - nodejs-npm-run-lint:
            vars:
              node_version: 4
        - nodejs-npm-run-test:
            vars:
              node_version: 4
    gate:
      jobs:
        - nodejs-npm-run-lint:
            vars:
              node_version: 4
        - nodejs-npm-run-test:
            vars:
              node_version: 4

- project-template:
    name: nodejs6-jobs
    description: |
      Run lint and test jobs using Node 6.
    check:
      jobs:
        - nodejs-npm-run-lint:
            vars:
              node_version: 6
        - nodejs-npm-run-test:
            vars:
              node_version: 6
        - build-javascript-tarball:
            files:
              - npm-shrinkwrap.json
              - package.json
    gate:
      jobs:
        - nodejs-npm-run-lint:
            vars:
              node_version: 6
        - nodejs-npm-run-test:
            vars:
              node_version: 6
        - build-javascript-tarball:
            files:
              - npm-shrinkwrap.json
              - package.json

- project-template:
    name: nodejs4-docs
    description: |
      Run docs jobs using Node 4.
    check:
      jobs:
        - nodejs-npm-run-docs:
            vars:
              node_version: 4
    gate:
      jobs:
        - nodejs-npm-run-docs:
            vars:
              node_version: 4

- project-template:
    name: nodejs6-docs
    description: |
      Run docs jobs using Node 6.
    check:
      jobs:
        - nodejs-npm-run-docs:
            vars:
              node_version: 6
    gate:
      jobs:
        - nodejs-npm-run-docs:
            vars:
              node_version: 6