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
This commit is contained in:
Monty Taylor 2020-02-26 08:32:01 -06:00
parent b7e9e8870c
commit 5936a8f691
6 changed files with 57 additions and 1 deletions

1
.gitignore vendored
View File

@ -1,3 +1,4 @@
.tox
build_artifact
ansible_collections
galaxy.yml

View File

@ -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/

View File

@ -1,3 +1,4 @@
pbr
ansible
pycodestyle
flake8
@ -5,4 +6,4 @@ pylint
voluptuous
yamllint
rstcheck
ruamel.yaml

47
tools/build.py Executable file
View File

@ -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()

View File

@ -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"