From 2fb73ee8fa223d116ace3910110038f0acc5424f Mon Sep 17 00:00:00 2001
From: Andreas Jaeger <aj@suse.com>
Date: Sat, 9 Feb 2019 11:13:08 +0100
Subject: [PATCH] Add linting jobs

Add usual linting job for this repo to have some basic testing.

Also, add the normal .gitignore to blacklist .tox and some other files.

Note this change is not self-testing since the repo is a config-project.

Change-Id: Ie54095f39f9bb4d10d6f809c573ea712f3885af6
---
 .gitignore            | 14 ++++++++++++
 test-requirements.txt | 19 ++++++++++++++++
 tox.ini               | 53 +++++++++++++++++++++++++++++++++++++++++++
 zuul.yaml             |  8 +++++++
 4 files changed, 94 insertions(+)
 create mode 100644 .gitignore
 create mode 100644 test-requirements.txt
 create mode 100644 tox.ini

diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..48bdfc8
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,14 @@
+*.pyc
+*~
+
+# Unit test / coverage reports
+.coverage
+.tox
+.stestr
+
+# Sphinx
+doc/build
+
+# pbr generates these
+AUTHORS
+ChangeLog
diff --git a/test-requirements.txt b/test-requirements.txt
new file mode 100644
index 0000000..7300381
--- /dev/null
+++ b/test-requirements.txt
@@ -0,0 +1,19 @@
+# The order of packages is significant, because pip processes them in the order
+# of appearance. Changing the order has an impact on the overall integration
+# process, which may cause wedges in the gate later.
+flake8
+zuul
+
+# We need to pin the ansible version directly here; per the
+# deprecation policy it should trail the version used by Zuul by 4
+# weeks to give people time to update before these roles start
+# depending on new features.  Also note we can't just include zuul
+# here to pull in ansible anyway; pip doesn't actually have a
+# dependency solver and the uncapped ansible requirement from
+# ansible-lint pull in the latest version.
+ansible>=2.5.1,<2.6 # https://review.openstack.org/567007
+# We need to pin ansible-lint to before 4.0 which blows up all over the place
+ansible-lint<4
+bashate>=0.2
+zuul-sphinx>=0.1.1
+stestr>=1.0.0 # Apache-2.0
diff --git a/tox.ini b/tox.ini
new file mode 100644
index 0000000..03a1ae4
--- /dev/null
+++ b/tox.ini
@@ -0,0 +1,53 @@
+[tox]
+minversion = 1.6
+skipsdist = True
+envlist = linters
+
+[testenv]
+basepython = python3
+install_command = pip install {opts} {packages}
+deps = -r{toxinidir}/test-requirements.txt
+commands = stestr run {posargs}
+           stestr slowest
+
+[testenv:py27]
+basepython = python2.7
+
+[testenv:docs]
+commands =
+  sphinx-build -E -W -d doc/build/doctrees -b html doc/source/ doc/build/html
+
+[testenv:linters]
+passenv =
+  # NOTE(pabelanger): if you'd like to run tox -elinters locally, you'll need
+  # to export ANSIBLE_ROLES_PATH pointing to the currect repos.
+  # see openstack-zuul-jobs-linters job for more information.
+  ANSIBLE_ROLES_PATH
+setenv =
+  ANSIBLE_LIBRARY= {envsitepackagesdir}/zuul/ansible/library
+  ANSIBLE_ACTION_PLUGINS = {envsitepackagesdir}/zuul/ansible/actiongeneral
+whitelist_externals = bash
+commands =
+  flake8 {posargs}
+  # Ansible lint
+  # [ANSIBLE0012] Commands should not change things if nothing needs doing
+  bash -c "find playbooks -type f -regex '.*.ya?ml' -print0 | \
+    xargs -t -n1 -0 ansible-lint -xANSIBLE0012"
+  bash -c 'find roles -maxdepth 1 -mindepth 1 -type d -printf "%p/\n" | \
+    xargs -t -n1 ansible-lint -xANSIBLE0012'
+  # Ansible Syntax Check
+  bash -c "find playbooks -type f -regex '.*.ya?ml' -exec \
+    ansible-playbook --syntax-check -i {toxinidir}/tests/inventory \{\} + > /dev/null"
+
+[testenv:venv]
+commands = {posargs}
+
+[flake8]
+# These are ignored intentionally in openstack-infra projects;
+# please don't submit patches that solely correct them or enable them.
+# E402 - ansible modules put documentation before imports. Align to ansible.
+# W504 - line break after binary operator, we cannot have both
+#        W503 and W504 enabled
+ignore = E125,E129,E402,E741,W504,H
+show-source = True
+exclude = .venv,.tox,dist,doc,build,*.egg
diff --git a/zuul.yaml b/zuul.yaml
index 9104d2b..78380ea 100644
--- a/zuul.yaml
+++ b/zuul.yaml
@@ -142,3 +142,11 @@
           label: ubuntu-xenial
     secrets:
       - site_logs
+
+- project:
+    check:
+      jobs:
+        - openstack-zuul-jobs-linters
+    gate:
+      jobs:
+        - openstack-zuul-jobs-linters