summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--.pre-commit-config.yaml11
-rw-r--r--README.rst3
-rw-r--r--doc/source/conf.py127
-rw-r--r--setup.cfg7
-rw-r--r--test-requirements.txt1
-rw-r--r--tests/base.py11
-rw-r--r--tests/multibranch/fixtures/scm_bitbucket_full.yaml1
-rw-r--r--tests/parameters/fixtures/node-label001.yaml2
-rw-r--r--tests/parameters/fixtures/node-label002.yaml2
-rw-r--r--tests/parameters/fixtures/node-label003.yaml2
-rw-r--r--tests/yamlparser/fixtures/folders/folders001.xml1
-rw-r--r--tox.ini10
12 files changed, 98 insertions, 80 deletions
diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml
new file mode 100644
index 00000000..ff6899ac
--- /dev/null
+++ b/.pre-commit-config.yaml
@@ -0,0 +1,11 @@
+# See https://pre-commit.com for more information
+# See https://pre-commit.com/hooks.html for more hooks
+repos:
+- repo: https://github.com/pre-commit/pre-commit-hooks
+ rev: v1.2.1-1
+ hooks:
+ - id: check-added-large-files
+ - id: end-of-file-fixer
+ - id: flake8
+ args: ['--config=setup.cfg']
+ - id: trailing-whitespace
diff --git a/README.rst b/README.rst
index 632e295a..bc270ac0 100644
--- a/README.rst
+++ b/README.rst
@@ -29,6 +29,9 @@ Cloning::
git clone https://git.openstack.org/openstack-infra/jenkins-job-builder
+Install pre-commit from https://pre-commit.com/#intro in order to run some
+minimal testing on your commits.
+
A virtual environment is recommended for development. For example, Jenkins
Job Builder may be installed from the top level directory::
diff --git a/doc/source/conf.py b/doc/source/conf.py
index 3a5e6d32..c4f01a14 100644
--- a/doc/source/conf.py
+++ b/doc/source/conf.py
@@ -3,7 +3,7 @@
# Jenkins Job Builder documentation build configuration file, created by
# sphinx-quickstart on Mon Sep 10 19:36:21 2012.
#
-# This file is execfile()d with the current directory set to its containing dir.
+# This file is execfile()d with the current directory set to its containing dir
#
# Note that not all possible configuration values are present in this
# autogenerated file.
@@ -11,7 +11,9 @@
# All configuration values have a default; values that are commented out
# serve to show the default.
-import sys, os
+import os
+import sys
+from jenkins_jobs.version import version_info as jenkins_jobs_version
# If extensions (or modules to document with autodoc) are in another directory,
# add these directories to sys.path here. If the directory is relative to the
@@ -19,13 +21,13 @@ import sys, os
sys.path.insert(0, os.path.abspath('../..'))
sys.path.insert(0, os.path.abspath('../../jenkins_jobs/modules'))
-# -- General configuration -----------------------------------------------------
+# -- General configuration ----------------------------------------------------
# If your documentation needs a minimal Sphinx version, state it here.
-#needs_sphinx = '1.0'
+# needs_sphinx = '1.0'
-# Add any Sphinx extension module names here, as strings. They can be extensions
-# coming with Sphinx (named 'sphinx.ext.*') or your custom ones.
+# Add any Sphinx extension module names here, as strings. They can be
+# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom ones.
extensions = ['sphinx.ext.autodoc', 'sphinx.ext.coverage',
'jenkins_jobs.sphinx.yaml', 'sphinxcontrib.programoutput',
'sphinx.ext.extlinks']
@@ -37,7 +39,7 @@ templates_path = ['_templates']
source_suffix = '.rst'
# The encoding of source files.
-#source_encoding = 'utf-8-sig'
+# source_encoding = 'utf-8-sig'
# The master toctree document.
master_doc = 'index'
@@ -51,47 +53,46 @@ copyright = u'2012, Jenkins Job Builder Maintainers'
# built documents.
#
# Version info
-from jenkins_jobs.version import version_info as jenkins_jobs_version
release = jenkins_jobs_version.version_string_with_vcs()
# The short X.Y version.
version = jenkins_jobs_version.canonical_version_string()
# The language for content autogenerated by Sphinx. Refer to documentation
# for a list of supported languages.
-#language = None
+# language = None
# There are two options for replacing |today|: either, you set today to some
# non-false value, then it is used:
-#today = ''
+# today = ''
# Else, today_fmt is used as the format for a strftime call.
-#today_fmt = '%B %d, %Y'
+# today_fmt = '%B %d, %Y'
# List of patterns, relative to source directory, that match files and
# directories to ignore when looking for source files.
exclude_patterns = []
-# The reST default role (used for this markup: `text`) to use for all documents.
-#default_role = None
+# The reST default role (used for this markup: `text`) to use for all documents
+# default_role = None
# If true, '()' will be appended to :func: etc. cross-reference text.
-#add_function_parentheses = True
+# add_function_parentheses = True
# If true, the current module name will be prepended to all description
# unit titles (such as .. function::).
-#add_module_names = True
+# add_module_names = True
# If true, sectionauthor and moduleauthor directives will be shown in the
# output. They are ignored by default.
-#show_authors = False
+# show_authors = False
# The name of the Pygments (syntax highlighting) style to use.
pygments_style = 'sphinx'
# A list of ignored prefixes for module index sorting.
-#modindex_common_prefix = []
+# modindex_common_prefix = []
-# -- Options for HTML output ---------------------------------------------------
+# -- Options for HTML output --------------------------------------------------
# The theme to use for HTML and HTML Help pages. See the documentation for
# a list of builtin themes.
@@ -100,116 +101,117 @@ html_theme = 'default'
# Theme options are theme-specific and customize the look and feel of a theme
# further. For a list of options available for each theme, see the
# documentation.
-#html_theme_options = {}
+# html_theme_options = {}
# Add any paths that contain custom themes here, relative to this directory.
-#html_theme_path = []
+# html_theme_path = []
# The name for this set of Sphinx documents. If None, it defaults to
# "<project> v<release> documentation".
-#html_title = None
+# html_title = None
# A shorter title for the navigation bar. Default is the same as html_title.
-#html_short_title = None
+# html_short_title = None
# The name of an image file (relative to this directory) to place at the top
# of the sidebar.
-#html_logo = None
+# html_logo = None
# The name of an image file (within the static path) to use as favicon of the
# docs. This file should be a Windows icon file (.ico) being 16x16 or 32x32
# pixels large.
-#html_favicon = None
+# html_favicon = None
# Add any paths that contain custom static files (such as style sheets) here,
# relative to this directory. They are copied after the builtin static files,
# so a file named "default.css" will overwrite the builtin "default.css".
-#html_static_path = ['_static']
+# html_static_path = ['_static']
# If not '', a 'Last updated on:' timestamp is inserted at every page bottom,
# using the given strftime format.
-#html_last_updated_fmt = '%b %d, %Y'
+# html_last_updated_fmt = '%b %d, %Y'
# If true, SmartyPants will be used to convert quotes and dashes to
# typographically correct entities.
-#html_use_smartypants = True
+# html_use_smartypants = True
# Custom sidebar templates, maps document names to template names.
-#html_sidebars = {}
+# html_sidebars = {}
# Additional templates that should be rendered to pages, maps page names to
# template names.
-#html_additional_pages = {}
+# html_additional_pages = {}
# If false, no module index is generated.
-#html_domain_indices = True
+# html_domain_indices = True
# If false, no index is generated.
-#html_use_index = True
+# html_use_index = True
# If true, the index is split into individual pages for each letter.
-#html_split_index = False
+# html_split_index = False
# If true, links to the reST sources are added to the pages.
-#html_show_sourcelink = True
+# html_show_sourcelink = True
# If true, "Created using Sphinx" is shown in the HTML footer. Default is True.
-#html_show_sphinx = True
+# html_show_sphinx = True
# If true, "(C) Copyright ..." is shown in the HTML footer. Default is True.
-#html_show_copyright = True
+# html_show_copyright = True
# If true, an OpenSearch description file will be output, and all pages will
# contain a <link> tag referring to it. The value of this option must be the
# base URL from which the finished HTML is served.
-#html_use_opensearch = ''
+# html_use_opensearch = ''
# This is the file name suffix for HTML files (e.g. ".xhtml").
-#html_file_suffix = None
+# html_file_suffix = None
# Output file base name for HTML help builder.
htmlhelp_basename = 'JenkinsJobBuilderdoc'
-# -- Options for LaTeX output --------------------------------------------------
+# -- Options for LaTeX output -------------------------------------------------
latex_elements = {
-# The paper size ('letterpaper' or 'a4paper').
-#'papersize': 'letterpaper',
+ # The paper size ('letterpaper' or 'a4paper').
+ # 'papersize': 'letterpaper',
-# The font size ('10pt', '11pt' or '12pt').
-#'pointsize': '10pt',
+ # The font size ('10pt', '11pt' or '12pt').
+ # 'pointsize': '10pt',
-# Additional stuff for the LaTeX preamble.
-#'preamble': '',
+ # Additional stuff for the LaTeX preamble.
+ # 'preamble': '',
}
# Grouping the document tree into LaTeX files. List of tuples
-# (source start file, target name, title, author, documentclass [howto/manual]).
+# (source start file, target name, title, author, documentclass
+# [howto/manual]).
latex_documents = [
- ('index', 'JenkinsJobBuilder.tex', u'Jenkins Job Builder Documentation',
- u'Jenkins Job Builder Maintainers', 'manual'),
+ ('index', 'JenkinsJobBuilder.tex', u'Jenkins Job Builder Documentation',
+ u'Jenkins Job Builder Maintainers', 'manual'),
]
# The name of an image file (relative to this directory) to place at the top of
# the title page.
-#latex_logo = None
+# latex_logo = None
# For "manual" documents, if this is true, then toplevel headings are parts,
# not chapters.
-#latex_use_parts = False
+# latex_use_parts = False
# If true, show page references after internal links.
-#latex_show_pagerefs = False
+# latex_show_pagerefs = False
# If true, show URL addresses after external links.
-#latex_show_urls = False
+# latex_show_urls = False
# Documents to append as an appendix to all manuals.
-#latex_appendices = []
+# latex_appendices = []
# If false, no module index is generated.
-#latex_domain_indices = True
+# latex_domain_indices = True
# -- Options for linkcheck ----------------------------------------------------
@@ -218,7 +220,7 @@ latex_documents = [
linkcheck_timeout = 15
-# -- Options for manual page output --------------------------------------------
+# -- Options for manual page output ------------------------------------------
# One entry per manual page. List of tuples
# (source start file, name, description, authors, manual section).
@@ -228,28 +230,29 @@ man_pages = [
]
# If true, show URL addresses after external links.
-#man_show_urls = False
+# man_show_urls = False
-# -- Options for Texinfo output ------------------------------------------------
+# -- Options for Texinfo output -----------------------------------------------
# Grouping the document tree into Texinfo files. List of tuples
# (source start file, target name, title, author,
# dir menu entry, description, category)
texinfo_documents = [
- ('index', 'JenkinsJobBuilder', u'Jenkins Job Builder Documentation',
- u'Jenkins Job Builder Maintainers', 'JenkinsJobBuilder', 'One line description of project.',
- 'Miscellaneous'),
+ ('index', 'JenkinsJobBuilder', u'Jenkins Job Builder Documentation',
+ u'Jenkins Job Builder Maintainers',
+ 'JenkinsJobBuilder', 'One line description of project.',
+ 'Miscellaneous'),
]
# Documents to append as an appendix to all manuals.
-#texinfo_appendices = []
+# texinfo_appendices = []
# If false, no module index is generated.
-#texinfo_domain_indices = True
+# texinfo_domain_indices = True
# How to display URL addresses: 'footnote', 'no', or 'inline'.
-#texinfo_show_urls = 'footnote'
+# texinfo_show_urls = 'footnote'
extlinks = {'jenkins-wiki': ('https://wiki.jenkins.io/display/JENKINS/%s',
None)}
diff --git a/setup.cfg b/setup.cfg
index d0bb95c2..82caa887 100644
--- a/setup.cfg
+++ b/setup.cfg
@@ -97,3 +97,10 @@ jenkins_jobs.modules =
triggers=jenkins_jobs.modules.triggers:Triggers
wrappers=jenkins_jobs.modules.wrappers:Wrappers
zuul=jenkins_jobs.modules.zuul:Zuul
+
+[flake8]
+# These are ignored intentionally in openstack-infra projects; please
+# don't submit patches that solely correct them or enable them.
+ignore = E125,E128,H
+show-source = True
+exclude = .virtualenv,.venv,.tox,dist,build,*.egg,.test
diff --git a/test-requirements.txt b/test-requirements.txt
index 0869b2c4..da8910be 100644
--- a/test-requirements.txt
+++ b/test-requirements.txt
@@ -13,3 +13,4 @@ stestr>=2.0.0 # Apache-2.0/BSD
tox>=2.9.1 # MIT
mock>=2.0 # BSD
sphinxcontrib-programoutput
+pre-commit
diff --git a/tests/base.py b/tests/base.py
index 740e2239..1f233b0a 100644
--- a/tests/base.py
+++ b/tests/base.py
@@ -246,7 +246,8 @@ class SingleJobTestCase(BaseScenariosTestCase):
def test_yaml_snippet(self):
config = self._get_config()
- expected_xml = self._read_utf8_content().strip()
+ expected_xml = self._read_utf8_content().strip() \
+ .replace('<BLANKLINE>', '').replace('\n\n', '\n')
parser = YamlParser(config)
parser.parse(self.in_filename)
@@ -290,14 +291,14 @@ class SingleJobTestCase(BaseScenariosTestCase):
# Prettify generated XML
pretty_xml = u"\n".join(job.output().decode('utf-8')
- for job in xml_jobs).strip()
+ for job in xml_jobs) \
+ .strip().replace('\n\n', '\n')
self.assertThat(
pretty_xml,
testtools.matchers.DocTestMatches(expected_xml,
- doctest.ELLIPSIS |
- doctest.REPORT_NDIFF)
- )
+ doctest.ELLIPSIS |
+ doctest.REPORT_NDIFF))
class JsonTestCase(BaseScenariosTestCase):
diff --git a/tests/multibranch/fixtures/scm_bitbucket_full.yaml b/tests/multibranch/fixtures/scm_bitbucket_full.yaml
index effee2c9..592b63c7 100644
--- a/tests/multibranch/fixtures/scm_bitbucket_full.yaml
+++ b/tests/multibranch/fixtures/scm_bitbucket_full.yaml
@@ -11,4 +11,3 @@ scm:
head-filter-regex: 'master|\d+\.\d+'
discover-pr-origin: headOnly
discover-branch: all
-
diff --git a/tests/parameters/fixtures/node-label001.yaml b/tests/parameters/fixtures/node-label001.yaml
index 3028d1a4..4037805b 100644
--- a/tests/parameters/fixtures/node-label001.yaml
+++ b/tests/parameters/fixtures/node-label001.yaml
@@ -3,4 +3,4 @@ parameters:
name: EXAMPLE LABEL 1
description: "EXAMPLE LABEL DESCRIPTION 1"
matching-label: "success"
- node-eligibility: "all" \ No newline at end of file
+ node-eligibility: "all"
diff --git a/tests/parameters/fixtures/node-label002.yaml b/tests/parameters/fixtures/node-label002.yaml
index 4b61f8f3..878fd69f 100644
--- a/tests/parameters/fixtures/node-label002.yaml
+++ b/tests/parameters/fixtures/node-label002.yaml
@@ -3,4 +3,4 @@ parameters:
name: EXAMPLE LABEL 2
description: "EXAMPLE LABEL DESCRIPTION 2"
matching-label: "unstable"
- node-eligibility: "ignore-offline" \ No newline at end of file
+ node-eligibility: "ignore-offline"
diff --git a/tests/parameters/fixtures/node-label003.yaml b/tests/parameters/fixtures/node-label003.yaml
index 93d6f4c9..65d015e0 100644
--- a/tests/parameters/fixtures/node-label003.yaml
+++ b/tests/parameters/fixtures/node-label003.yaml
@@ -3,4 +3,4 @@ parameters:
name: EXAMPLE LABEL 3
description: "EXAMPLE LABEL DESCRIPTION 3"
matching-label: "allCases"
- node-eligibility: "ignore-temp-offline" \ No newline at end of file
+ node-eligibility: "ignore-temp-offline"
diff --git a/tests/yamlparser/fixtures/folders/folders001.xml b/tests/yamlparser/fixtures/folders/folders001.xml
index 1d2494f8..0570e10a 100644
--- a/tests/yamlparser/fixtures/folders/folders001.xml
+++ b/tests/yamlparser/fixtures/folders/folders001.xml
@@ -13,4 +13,3 @@
<publishers/>
<buildWrappers/>
</project>
-
diff --git a/tox.ini b/tox.ini
index 7631bcf3..da193c0e 100644
--- a/tox.ini
+++ b/tox.ini
@@ -46,7 +46,8 @@ commands =
[testenv:pep8]
basepython = python3
-commands = flake8
+commands =
+ python -m pre_commit run --all
[testenv:pyflakes]
deps = pyflakes
@@ -72,10 +73,3 @@ commands = python setup.py build_sphinx -b linkcheck
[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.
-ignore = E125,E128,H
-show-source = True
-exclude = .virtualenv,.venv,.tox,dist,doc,build,*.egg,.test