diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..2ff263c --- /dev/null +++ b/.gitignore @@ -0,0 +1,72 @@ +# Byte-compiled / optimized / DLL files +__pycache__/ +*.py[cod] + +# C extensions +*.so + +# Distribution / packaging +.Python +env/ +develop-eggs/ +dist/ +downloads/ +eggs/ +.eggs/ +lib/ +lib64/ +sdist/ +var/ +container_registry.egg-info/ +.installed.cfg +*.egg + +# PyInstaller +# Usually these files are written by a python script from a template +# before PyInstaller builds the exe, so as to inject date/other infos into it. +*.manifest +*.spec + +# Installer logs +pip-log.txt +pip-delete-this-directory.txt + +# Unit test / coverage reports +htmlcov/ +.tox/ +.coverage +.coverage.* +.cache +nosetests.xml +coverage.xml +*,cover + +# Translations +*.mo +*.pot + +# Django stuff: +*.log + +# Sphinx documentation +doc/build/ + +# PyBuilder +target/ + +# virtualenv +.venv/ + +# jenkins config +jenkins/config.ini +playbooks/debug.yml + +# Files created by releasenotes build +releasenotes/build + +# Editors +.*.sw[klmnop] + + +ansible_role_tripleo* +ansible-role-tripleo* diff --git a/ansible-requirements.txt b/ansible-requirements.txt new file mode 100644 index 0000000..a1b6838 --- /dev/null +++ b/ansible-requirements.txt @@ -0,0 +1,6 @@ +# These are required here because ansible can't be in global-requirements due +# to licensing conflicts. But we sill need to be able to pull them in for +# lint checks and want to document these as ansible specific things that may +# be required for this repository. +ansible +ansible-lint diff --git a/ci-scripts/ansible-lint.sh b/ci-scripts/ansible-lint.sh new file mode 100755 index 0000000..ca26e51 --- /dev/null +++ b/ci-scripts/ansible-lint.sh @@ -0,0 +1,24 @@ +#!/bin/bash + +# ANSIBLE0006: Using command rather than module +# we have a few use cases where we need to use curl and rsync +# ANSIBLE0007: Using command rather than an argument to e.g file +# we have a lot of 'rm' command and we should use file module instead +# ANSIBLE0010: Package installs should not use latest. +# Sometimes we need to update some packages. +# ANSIBLE0012: Commands should not change things if nothing needs doing +# ANSIBLE0013: Use Shell only when shell functionality is required +# ANSIBLE0016: Tasks that run when changed should likely be handlers +# this requires refactoring roles, skipping for now +SKIPLIST="ANSIBLE0006,ANSIBLE0007,ANSIBLE0010,ANSIBLE0012,ANSIBLE0013,ANSIBLE0016" + +# Generate the role from cookiecutter +cookiecutter --no-input . project_name=ci + +# Lint the role. +ansible-lint -vvv -x $SKIPLIST ./ansible-role-tripleo-ci|| lint_error=1 + +# exit with 1 if we had a least an error or warning. +if [[ -n "$lint_error" ]]; then + exit 1; +fi diff --git a/setup.cfg b/setup.cfg new file mode 100644 index 0000000..9ec71b7 --- /dev/null +++ b/setup.cfg @@ -0,0 +1,35 @@ +[metadata] +name = ansible-role-tripleo-cookiecutter +summary = ansible-role-tripleo-cookiecutter - Ansible cookiecutter role for the TripleO project. +description-file = + README.md +author = TripleO Team +author-email = jillr@redhat.com +home-page = https://git.openstack.org/cgit/openstack/ansible-role-tripleo-cookiecutter +classifier = + License :: OSI Approved :: Apache Software License + Development Status :: 4 - Beta + Intended Audience :: Developers + Intended Audience :: System Administrators + Intended Audience :: Information Technology + Topic :: Utilities + +[global] +setup-hooks = + pbr.hooks.setup_hook + +[files] +data_files = + share/ansible/roles/tripleo-cookiecutter/defaults = defaults/* + share/ansible/roles/tripleo-cookiecutter/meta = meta/* + share/ansible/roles/tripleo-cookiecutter/tasks = tasks/* + share/ansible/roles/tripleo-cookiecutter/templates = templates/* + share/ansible/roles/tripleo-cookiecutter/files = files/* + +[wheel] +universal = 1 + +[pbr] +skip_authors = True +skip_changelog = True + diff --git a/setup.py b/setup.py new file mode 100644 index 0000000..6a931a6 --- /dev/null +++ b/setup.py @@ -0,0 +1,19 @@ +# Copyright Red Hat, Inc. All Rights Reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); you may +# not use this file except in compliance with the License. You may obtain +# a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +# License for the specific language governing permissions and limitations +# under the License. + +import setuptools + +setuptools.setup( + setup_requires=['pbr'], + pbr=True) diff --git a/test-requirements.txt b/test-requirements.txt new file mode 100644 index 0000000..da508da --- /dev/null +++ b/test-requirements.txt @@ -0,0 +1,3 @@ +hacking!=0.13.0,<0.14,>=0.12.0 # Apache-2.0 +cookiecutter +ansible-lint diff --git a/tox.ini b/tox.ini new file mode 100644 index 0000000..911f80d --- /dev/null +++ b/tox.ini @@ -0,0 +1,61 @@ +[tox] +minversion = 1.6 +envlist = docs, linters +skipdist = True + +[testenv] +usedevelop = True +install_command = pip install -c{env:UPPER_CONSTRAINTS_FILE:https://git.openstack.org/cgit/openstack/requirements/plain/upper-constraints.txt} {opts} {packages} +setenv = VIRTUAL_ENV={envdir} +deps = -r{toxinidir}/test-requirements.txt +whitelist_externals = bash + +[testenv:bindep] +# Do not install any requirements. We want this to be fast and work even if +# system dependencies are missing, since it's used to tell you what system +# dependencies are missing! This also means that bindep must be installed +# separately, outside of the requirements files. +deps = bindep +commands = bindep test + +[testenv:pep8] +commands = + # Run hacking/flake8 check for all python files + bash -c "git ls-files | grep -v releasenotes | xargs grep --binary-files=without-match \ + --files-with-match '^.!.*python$' \ + --exclude-dir .tox \ + --exclude-dir .git \ + --exclude-dir .eggs \ + --exclude-dir *.egg-info \ + --exclude-dir dist \ + --exclude-dir *lib/python* \ + --exclude-dir doc \ + | xargs flake8 --verbose" + +[testenv:ansible-lint] +basepython=python3 +whitelist_externals = bash +commands = + bash ci-scripts/ansible-lint.sh + +[testenv:linters] +deps = + -r{toxinidir}/test-requirements.txt + -r{toxinidir}/ansible-requirements.txt +commands = + {[testenv:pep8]commands} + {[testenv:ansible-lint]commands} + +[testenv:releasenotes] +whitelist_externals = bash +commands = bash -c ci-scripts/releasenotes_tox.sh + +[testenv:venv] +commands = {posargs} + +[flake8] +# E123, E125 skipped as they are invalid PEP-8. +# E265 deals withs paces inside of comments +show-source = True +ignore = E123,E125,E265 +builtins = _ diff --git a/zuul.d/layout.yaml b/zuul.d/layout.yaml new file mode 100644 index 0000000..c55d26e --- /dev/null +++ b/zuul.d/layout.yaml @@ -0,0 +1,12 @@ +- project: + templates: + - release-openstack-server + check: + jobs: + - openstack-tox-linters + gate: + jobs: + - openstack-tox-linters + post: + jobs: + - publish-openstack-python-branch-tarball