From 5936a8f69131bd5158033659b65b0741edcde7fd Mon Sep 17 00:00:00 2001 From: Monty Taylor Date: Wed, 26 Feb 2020 08:32:01 -0600 Subject: [PATCH] Add a tool to build collections with pbr OpenStack in general uses git tags to drive versioning of artifacts. This is important because of our code review driven workflow, since patches don't necessarily land in a predictable sequence, so flows requiring a version number in a file to be updated at a specific time are problematic. By having pbr generate the correct version number then putting that into the galaxy.yml file, we can match the behavior without too much undue burden. Also ignore build_artifact directory. Change-Id: Id02fee682fb5a4b6fd6dcb0644848e6d1269e19b --- .gitignore | 1 + ci/run-ansible-tests-collection.sh | 1 + galaxy.yml => galaxy.yml.in | 0 test-requirements.txt | 3 +- tools/build.py | 47 ++++++++++++++++++++++++++++++ tox.ini | 6 ++++ 6 files changed, 57 insertions(+), 1 deletion(-) rename galaxy.yml => galaxy.yml.in (100%) create mode 100755 tools/build.py diff --git a/.gitignore b/.gitignore index f64eec70..0cab88a0 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,4 @@ .tox build_artifact ansible_collections +galaxy.yml diff --git a/ci/run-ansible-tests-collection.sh b/ci/run-ansible-tests-collection.sh index 54d6752b..594388c1 100755 --- a/ci/run-ansible-tests-collection.sh +++ b/ci/run-ansible-tests-collection.sh @@ -98,6 +98,7 @@ then fi # install collections +tox -ebuild ansible-galaxy collection build --force . --output-path ./build_artifact ansible-galaxy collection install $(ls build_artifact/openstack-cloud-*) --force pushd ci/ diff --git a/galaxy.yml b/galaxy.yml.in similarity index 100% rename from galaxy.yml rename to galaxy.yml.in diff --git a/test-requirements.txt b/test-requirements.txt index c8a6da75..4d5c6681 100644 --- a/test-requirements.txt +++ b/test-requirements.txt @@ -1,3 +1,4 @@ +pbr ansible pycodestyle flake8 @@ -5,4 +6,4 @@ pylint voluptuous yamllint rstcheck - +ruamel.yaml diff --git a/tools/build.py b/tools/build.py new file mode 100755 index 00000000..bfac5126 --- /dev/null +++ b/tools/build.py @@ -0,0 +1,47 @@ +#!/usr/bin/env python +# Copyright 2019 Red Hat, Inc. +# +# 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. + +# The next two lines are pointless for this file, but the collection +# linter freaks out if they are not there. +from __future__ import absolute_import, division, print_function +__metaclass__ = type + +import pbr.version + +from ruamel.yaml import YAML + + +def generate_version_info(): + version_info = pbr.version.VersionInfo('openstack-cloud') + semantic_version = version_info.semantic_version() + release_string = semantic_version._long_version('-') + + yaml = YAML() + yaml.explicit_start = True + yaml.indent(sequence=4, offset=2) + + config = yaml.load(open('galaxy.yml.in')) + config['version'] = release_string + + with open('galaxy.yml', 'w') as fp: + yaml.dump(config, fp) + + +def main(): + generate_version_info() + + +if __name__ == '__main__': + main() diff --git a/tox.ini b/tox.ini index 034c65d6..76b79efb 100644 --- a/tox.ini +++ b/tox.ini @@ -26,9 +26,15 @@ commands = stestr run {posargs} commands = flake8 +[testenv:build] +commands = + {toxinidir}/tools/build.py + ansible-galaxy collection build --force {toxinidir} --output-path {toxinidir}/build_artifact + [testenv:linters] passenv = * commands = + {toxinidir}/tools/build.py ansible-galaxy collection build --force {toxinidir} --output-path {toxinidir}/build_artifact /bin/bash -c "ansible-galaxy collection install $(ls {toxinidir}/build_artifact/openstack-cloud-*) --force -p {toxinidir}" /bin/bash -c "cd ansible_collections/openstack/cloud && ansible-test sanity"