├── .gitignore ├── .gitreview ├── .zuul.yaml ├── CHANGELOG.md ├── LICENSE ├── README.md ├── bindep.txt ├── doc └── requirements.txt ├── functions ├── lib └── puppet-openstack_spec_helper │ ├── defaults.rb │ ├── facts.rb │ ├── litmus_spec_helper.rb │ ├── rake_tasks.rb │ ├── support │ ├── helpers │ │ └── smoke_test.rb │ └── matchers │ │ ├── have_array_of_instances_hash.rb │ │ └── include_regexp.rb │ └── version.rb ├── puppet-openstack_spec_helper.gemspec ├── releasenotes ├── notes │ ├── first_note-7f8231673c6bcd05.yaml │ ├── gemdeps-fb6a4dddc76b9e5b.yaml │ ├── os_worker-fact-764238b986c566dd.yaml │ ├── puppetfile_extras-f49799b6edbe69a2.yaml │ └── rspec-puppet-facts-improvements-3ad5c3addcf088f8.yaml └── source │ ├── 2023.1.rst │ ├── 2023.2.rst │ ├── 2024.1.rst │ ├── 2024.2.rst │ ├── 2025.1.rst │ ├── _static │ └── .placeholder │ ├── conf.py │ ├── index.rst │ ├── mitaka.rst │ ├── newton.rst │ ├── ocata.rst │ ├── pike.rst │ ├── rocky.rst │ ├── stein.rst │ ├── train.rst │ ├── unreleased.rst │ ├── ussuri.rst │ ├── victoria.rst │ ├── wallaby.rst │ ├── xena.rst │ ├── yoga.rst │ └── zed.rst ├── run_lint_tests.sh ├── run_litmus_tests.sh ├── run_syntax_tests.sh ├── run_unit_tests.sh ├── setup.cfg ├── setup.py └── tox.ini /.gitignore: -------------------------------------------------------------------------------- 1 | # Add patterns in here to exclude files created by tools integrated with this 2 | # repository, such as test frameworks from the project's recommended workflow, 3 | # rendered documentation and package builds. 4 | # 5 | # Don't add patterns to exclude files created by preferred personal tools 6 | # (editors, IDEs, your operating system itself even). These should instead be 7 | # maintained outside the repository, for example in a ~/.gitignore file added 8 | # with: 9 | # 10 | # git config --global core.excludesfile '~/.gitignore' 11 | 12 | # Files created by releasenotes build 13 | releasenotes/build 14 | .tox 15 | -------------------------------------------------------------------------------- /.gitreview: -------------------------------------------------------------------------------- 1 | [gerrit] 2 | host=review.opendev.org 3 | port=29418 4 | project=openstack/puppet-openstack_spec_helper.git 5 | -------------------------------------------------------------------------------- /.zuul.yaml: -------------------------------------------------------------------------------- 1 | - project: 2 | templates: 3 | - puppet-openstack-library-jobs 4 | - release-notes-jobs-python3 5 | -------------------------------------------------------------------------------- /CHANGELOG.md: -------------------------------------------------------------------------------- 1 | Release notes are published on 2 | [docs.openstack.org](http://docs.openstack.org/releasenotes/puppet-openstack_spec_helper/). 3 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | 2 | Apache License 3 | Version 2.0, January 2004 4 | http://www.apache.org/licenses/ 5 | 6 | TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 7 | 8 | 1. Definitions. 9 | 10 | "License" shall mean the terms and conditions for use, reproduction, 11 | and distribution as defined by Sections 1 through 9 of this document. 12 | 13 | "Licensor" shall mean the copyright owner or entity authorized by 14 | the copyright owner that is granting the License. 15 | 16 | "Legal Entity" shall mean the union of the acting entity and all 17 | other entities that control, are controlled by, or are under common 18 | control with that entity. For the purposes of this definition, 19 | "control" means (i) the power, direct or indirect, to cause the 20 | direction or management of such entity, whether by contract or 21 | otherwise, or (ii) ownership of fifty percent (50%) or more of the 22 | outstanding shares, or (iii) beneficial ownership of such entity. 23 | 24 | "You" (or "Your") shall mean an individual or Legal Entity 25 | exercising permissions granted by this License. 26 | 27 | "Source" form shall mean the preferred form for making modifications, 28 | including but not limited to software source code, documentation 29 | source, and configuration files. 30 | 31 | "Object" form shall mean any form resulting from mechanical 32 | transformation or translation of a Source form, including but 33 | not limited to compiled object code, generated documentation, 34 | and conversions to other media types. 35 | 36 | "Work" shall mean the work of authorship, whether in Source or 37 | Object form, made available under the License, as indicated by a 38 | copyright notice that is included in or attached to the work 39 | (an example is provided in the Appendix below). 40 | 41 | "Derivative Works" shall mean any work, whether in Source or Object 42 | form, that is based on (or derived from) the Work and for which the 43 | editorial revisions, annotations, elaborations, or other modifications 44 | represent, as a whole, an original work of authorship. For the purposes 45 | of this License, Derivative Works shall not include works that remain 46 | separable from, or merely link (or bind by name) to the interfaces of, 47 | the Work and Derivative Works thereof. 48 | 49 | "Contribution" shall mean any work of authorship, including 50 | the original version of the Work and any modifications or additions 51 | to that Work or Derivative Works thereof, that is intentionally 52 | submitted to Licensor for inclusion in the Work by the copyright owner 53 | or by an individual or Legal Entity authorized to submit on behalf of 54 | the copyright owner. For the purposes of this definition, "submitted" 55 | means any form of electronic, verbal, or written communication sent 56 | to the Licensor or its representatives, including but not limited to 57 | communication on electronic mailing lists, source code control systems, 58 | and issue tracking systems that are managed by, or on behalf of, the 59 | Licensor for the purpose of discussing and improving the Work, but 60 | excluding communication that is conspicuously marked or otherwise 61 | designated in writing by the copyright owner as "Not a Contribution." 62 | 63 | "Contributor" shall mean Licensor and any individual or Legal Entity 64 | on behalf of whom a Contribution has been received by Licensor and 65 | subsequently incorporated within the Work. 66 | 67 | 2. Grant of Copyright License. Subject to the terms and conditions of 68 | this License, each Contributor hereby grants to You a perpetual, 69 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable 70 | copyright license to reproduce, prepare Derivative Works of, 71 | publicly display, publicly perform, sublicense, and distribute the 72 | Work and such Derivative Works in Source or Object form. 73 | 74 | 3. Grant of Patent License. Subject to the terms and conditions of 75 | this License, each Contributor hereby grants to You a perpetual, 76 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable 77 | (except as stated in this section) patent license to make, have made, 78 | use, offer to sell, sell, import, and otherwise transfer the Work, 79 | where such license applies only to those patent claims licensable 80 | by such Contributor that are necessarily infringed by their 81 | Contribution(s) alone or by combination of their Contribution(s) 82 | with the Work to which such Contribution(s) was submitted. If You 83 | institute patent litigation against any entity (including a 84 | cross-claim or counterclaim in a lawsuit) alleging that the Work 85 | or a Contribution incorporated within the Work constitutes direct 86 | or contributory patent infringement, then any patent licenses 87 | granted to You under this License for that Work shall terminate 88 | as of the date such litigation is filed. 89 | 90 | 4. Redistribution. You may reproduce and distribute copies of the 91 | Work or Derivative Works thereof in any medium, with or without 92 | modifications, and in Source or Object form, provided that You 93 | meet the following conditions: 94 | 95 | (a) You must give any other recipients of the Work or 96 | Derivative Works a copy of this License; and 97 | 98 | (b) You must cause any modified files to carry prominent notices 99 | stating that You changed the files; and 100 | 101 | (c) You must retain, in the Source form of any Derivative Works 102 | that You distribute, all copyright, patent, trademark, and 103 | attribution notices from the Source form of the Work, 104 | excluding those notices that do not pertain to any part of 105 | the Derivative Works; and 106 | 107 | (d) If the Work includes a "NOTICE" text file as part of its 108 | distribution, then any Derivative Works that You distribute must 109 | include a readable copy of the attribution notices contained 110 | within such NOTICE file, excluding those notices that do not 111 | pertain to any part of the Derivative Works, in at least one 112 | of the following places: within a NOTICE text file distributed 113 | as part of the Derivative Works; within the Source form or 114 | documentation, if provided along with the Derivative Works; or, 115 | within a display generated by the Derivative Works, if and 116 | wherever such third-party notices normally appear. The contents 117 | of the NOTICE file are for informational purposes only and 118 | do not modify the License. You may add Your own attribution 119 | notices within Derivative Works that You distribute, alongside 120 | or as an addendum to the NOTICE text from the Work, provided 121 | that such additional attribution notices cannot be construed 122 | as modifying the License. 123 | 124 | You may add Your own copyright statement to Your modifications and 125 | may provide additional or different license terms and conditions 126 | for use, reproduction, or distribution of Your modifications, or 127 | for any such Derivative Works as a whole, provided Your use, 128 | reproduction, and distribution of the Work otherwise complies with 129 | the conditions stated in this License. 130 | 131 | 5. Submission of Contributions. Unless You explicitly state otherwise, 132 | any Contribution intentionally submitted for inclusion in the Work 133 | by You to the Licensor shall be under the terms and conditions of 134 | this License, without any additional terms or conditions. 135 | Notwithstanding the above, nothing herein shall supersede or modify 136 | the terms of any separate license agreement you may have executed 137 | with Licensor regarding such Contributions. 138 | 139 | 6. Trademarks. This License does not grant permission to use the trade 140 | names, trademarks, service marks, or product names of the Licensor, 141 | except as required for reasonable and customary use in describing the 142 | origin of the Work and reproducing the content of the NOTICE file. 143 | 144 | 7. Disclaimer of Warranty. Unless required by applicable law or 145 | agreed to in writing, Licensor provides the Work (and each 146 | Contributor provides its Contributions) on an "AS IS" BASIS, 147 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or 148 | implied, including, without limitation, any warranties or conditions 149 | of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A 150 | PARTICULAR PURPOSE. You are solely responsible for determining the 151 | appropriateness of using or redistributing the Work and assume any 152 | risks associated with Your exercise of permissions under this License. 153 | 154 | 8. Limitation of Liability. In no event and under no legal theory, 155 | whether in tort (including negligence), contract, or otherwise, 156 | unless required by applicable law (such as deliberate and grossly 157 | negligent acts) or agreed to in writing, shall any Contributor be 158 | liable to You for damages, including any direct, indirect, special, 159 | incidental, or consequential damages of any character arising as a 160 | result of this License or out of the use or inability to use the 161 | Work (including but not limited to damages for loss of goodwill, 162 | work stoppage, computer failure or malfunction, or any and all 163 | other commercial damages or losses), even if such Contributor 164 | has been advised of the possibility of such damages. 165 | 166 | 9. Accepting Warranty or Additional Liability. While redistributing 167 | the Work or Derivative Works thereof, You may choose to offer, 168 | and charge a fee for, acceptance of support, warranty, indemnity, 169 | or other liability obligations and/or rights consistent with this 170 | License. However, in accepting such obligations, You may act only 171 | on Your own behalf and on Your sole responsibility, not on behalf 172 | of any other Contributor, and only if You agree to indemnify, 173 | defend, and hold each Contributor harmless for any liability 174 | incurred by, or claims asserted against, such Contributor by reason 175 | of your accepting any such warranty or additional liability. 176 | 177 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | Team and repository tags 2 | ======================== 3 | 4 | [![Team and repository tags](https://governance.openstack.org/tc/badges/puppet-openstack_spec_helper.svg)](https://governance.openstack.org/tc/reference/tags/index.html) 5 | 6 | 7 | 8 | Puppet-OpenStack Spec Helper 9 | ============================ 10 | 11 | This gem provides helper utilities for running rspec tests in the 12 | [OpenStack Puppet Modules](https://wiki.openstack.org/wiki/Puppet). 13 | 14 | Usage 15 | ----- 16 | 17 | Include this gem in your Gemfile: 18 | 19 | ``` 20 | gem 'puppet-openstack_spec_helper', 21 | :git => 'https://opendev.org/openstack/puppet-openstack_spec_helper', 22 | :require => false 23 | ``` 24 | 25 | In your Rakefile, require the rake\_tasks library: 26 | 27 | ``` 28 | require 'puppet-openstack_spec_helper/rake_tasks' 29 | ``` 30 | 31 | Release notes for the project can be found at: 32 | https://docs.openstack.org/releasenotes/puppet-openstack_spec_helper 33 | 34 | The project source code repository is located at: 35 | https://opendev.org/openstack/puppet-openstack_spec_helper 36 | 37 | Contributors for the project can be found at: 38 | https://github.com/openstack/puppet-openstack_spec_helper/graphs/contributors 39 | 40 | Developer documentation for the entire puppet-openstack project can be found at: 41 | https://docs.openstack.org/puppet-openstack-guide/latest/ 42 | -------------------------------------------------------------------------------- /bindep.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openstack/puppet-openstack_spec_helper/bac294d5fb12cfc408a4e57b8496f6200223f8bc/bindep.txt -------------------------------------------------------------------------------- /doc/requirements.txt: -------------------------------------------------------------------------------- 1 | # This is required for the docs build jobs 2 | sphinx>=3.5.1 # BSD 3 | openstackdocstheme>=2.2.7 # Apache-2.0 4 | 5 | # This is required for the releasenotes build jobs 6 | reno>=3.2.0 # Apache-2.0 7 | -------------------------------------------------------------------------------- /functions: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # 3 | # functions - puppet-openstack_spec_helper specific functions 4 | # 5 | 6 | install_gems() { 7 | mkdir .bundled_gems 8 | export GEM_HOME=`pwd`/.bundled_gems 9 | export GEM_BIN_DIR=$GEM_HOME/bin 10 | 11 | # use puppet-nova to test the gem 12 | if [ -d /home/zuul/src/opendev.org/openstack/puppet-nova ]; then 13 | [ ! -d openstack ] && mkdir openstack 14 | cp -R /home/zuul/src/opendev.org/openstack/puppet-nova openstack/puppet-nova 15 | else 16 | git clone https://opendev.org/openstack/puppet-nova openstack/puppet-nova 17 | fi 18 | cd openstack/puppet-nova 19 | 20 | # Install dependencies 21 | ruby < '', 7 | :os_workers => 2, 8 | :os_workers_heat_engine => 2, 9 | :os_workers_keystone => 4, 10 | :puppetversion => Puppet.version, 11 | :concat_basedir => '/dne' 12 | }.merge(extra_facts) 13 | end 14 | 15 | def self.get_supported_os 16 | [ 17 | { 'operatingsystem' => 'CentOS', 18 | 'operatingsystemrelease' => [ '9' ] }, 19 | { 'operatingsystem' => 'Ubuntu', 20 | 'operatingsystemrelease' => [ '24.04' ] }, 21 | { 'operatingsystem' => 'Debian', 22 | 'operatingsystemrelease' => [ '12' ] } 23 | ] 24 | end 25 | end 26 | 27 | # Make sure we include any helpers for spec tests. 28 | Dir[File.dirname(__FILE__) + '/support/**/*.rb'].each { |f| require f } 29 | -------------------------------------------------------------------------------- /lib/puppet-openstack_spec_helper/facts.rb: -------------------------------------------------------------------------------- 1 | require 'rspec-puppet-facts' 2 | require 'rspec-puppet-utils' 3 | require 'puppet-openstack_spec_helper/defaults' 4 | include RspecPuppetFacts 5 | 6 | RSpec.configure do |c| 7 | # add custom facts globally for anyone using rspec-puppet-facts 8 | add_custom_fact :os_service_default, '' 9 | add_custom_fact :os_workers, '2' 10 | add_custom_fact :os_workers_heat_engine, '2' 11 | add_custom_fact :os_workers_keystone, '4' 12 | end 13 | -------------------------------------------------------------------------------- /lib/puppet-openstack_spec_helper/litmus_spec_helper.rb: -------------------------------------------------------------------------------- 1 | # Function for spec_helper_acceptance.rb goes here 2 | require 'puppet_litmus' 3 | include PuppetLitmus 4 | 5 | PuppetLitmus.configure! 6 | -------------------------------------------------------------------------------- /lib/puppet-openstack_spec_helper/rake_tasks.rb: -------------------------------------------------------------------------------- 1 | # Function for Rakefile goes here 2 | require 'puppetlabs_spec_helper/rake_tasks' 3 | require 'puppet-lint/tasks/puppet-lint' 4 | require 'puppet-syntax/tasks/puppet-syntax' 5 | require 'metadata-json-lint/rake_task' 6 | require 'puppet_litmus/rake_tasks' 7 | require 'json' 8 | 9 | modname = JSON.parse(open('metadata.json').read)['name'].split('-')[1] 10 | 11 | PuppetSyntax.exclude_paths ||= [] 12 | PuppetSyntax.exclude_paths << "spec/fixtures/**/*" 13 | PuppetSyntax.exclude_paths << "pkg/**/*" 14 | PuppetSyntax.exclude_paths << "vendor/**/*" 15 | PuppetSyntax.fail_on_deprecation_notices = false 16 | 17 | Rake::Task[:lint].clear 18 | PuppetLint::RakeTask.new :lint do |config| 19 | config.ignore_paths = ["spec/**/*.pp", "vendor/**/*.pp"] 20 | config.fail_on_warnings = true 21 | config.log_format = '%{path}:%{line}:%{KIND}: %{message}' 22 | config.disable_checks = [ 23 | "80chars", 24 | "class_inherits_from_params_class", 25 | "only_variable_string", 26 | "check_unsafe_interpolations" 27 | ] 28 | end 29 | 30 | desc "Run acceptance tests" 31 | RSpec::Core::RakeTask.new(:acceptance) do |t| 32 | t.pattern = 'spec/acceptance' 33 | end 34 | 35 | Rake::Task[:spec_prep].clear 36 | desc 'Create the fixtures directory' 37 | task :spec_prep do 38 | # Allow to test the module with custom dependencies 39 | # like you could do with .fixtures file 40 | if ENV['PUPPETFILE'] 41 | puppetfile = ENV['PUPPETFILE'] 42 | if ENV['GEM_HOME'] 43 | gem_home = ENV['GEM_HOME'] 44 | gem_bin_dir = "#{gem_home}" + '/bin/' 45 | else 46 | gem_bin_dir = '' 47 | end 48 | r10k += ["#{gem_bin_dir}r10k"] 49 | r10k += ['-v', 'DEBUG', 'puppetfile', 'install'] 50 | r10k += ["--puppetfile", "#{puppetfile}"] 51 | r10k += ["--moduledir", "#{Dir.pwd}/spec/fixtures/modules"] 52 | sh(*r10k) 53 | else 54 | # otherwise, use official OpenStack Puppetfile 55 | zuul_branch = ENV['ZUUL_BRANCH'] || 'master' 56 | repo = 'openstack/puppet-openstack-integration' 57 | rm_rf(repo) 58 | if File.directory?("/home/zuul/src/opendev.org/#{repo}") 59 | sh("mkdir openstack || true") 60 | sh("cp -R /home/zuul/src/opendev.org/#{repo} #{repo}") 61 | else 62 | sh("git clone https://opendev.org/#{repo} #{repo}") 63 | end 64 | # Allow to a repository to have extra modules that are not 65 | # in puppet-openstack-integration 66 | if File.exist?("#{Dir.pwd}/Puppetfile_extras") 67 | sh("cat #{Dir.pwd}/Puppetfile_extras >> #{repo}/Puppetfile") 68 | end 69 | script = ['env'] 70 | script += ["PUPPETFILE_DIR=#{Dir.pwd}/spec/fixtures/modules"] 71 | script += ["ZUUL_BRANCH=#{zuul_branch}"] 72 | script += ['bash', "#{repo}/install_modules_unit.sh"] 73 | sh(*script) 74 | end 75 | rm_rf("spec/fixtures/modules/#{modname}") 76 | ln_s(Dir.pwd, "spec/fixtures/modules/#{modname}") 77 | mkdir_p('spec/fixtures/manifests') 78 | touch('spec/fixtures/manifests/site.pp') 79 | end 80 | 81 | Rake::Task[:spec_clean].clear 82 | desc 'Clean up the fixtures directory' 83 | task :spec_clean do 84 | rm_rf('spec/fixtures/modules') 85 | rm_rf('openstack') 86 | if File.zero?('spec/fixtures/manifests/site.pp') 87 | rm_f('spec/fixtures/manifests/site.pp') 88 | end 89 | end 90 | -------------------------------------------------------------------------------- /lib/puppet-openstack_spec_helper/support/helpers/smoke_test.rb: -------------------------------------------------------------------------------- 1 | module PuppetOpenstackSpecHelpers 2 | module SmokeTest 3 | def smoke_test_named(file) 4 | smoke_manifest_file = example_file(file) 5 | File.read(smoke_manifest_file) 6 | end 7 | 8 | def project_root_directory 9 | RSpec::Core::RubyProject.root 10 | end 11 | 12 | private 13 | def example_file(file) 14 | smoke_manifest_file = '' 15 | found = true 16 | ['examples', 'tests'].each do |ex_dir| 17 | smoke_dir = File.join(project_root_directory, ex_dir) 18 | smoke_manifest_file = File.join(smoke_dir, 19 | file.sub(/\.pp$/, '') + '.pp') 20 | break if File.exist?(smoke_manifest_file) 21 | found = false 22 | end 23 | unless found 24 | raise ArgumentError, 25 | "Cannot find smoke manifest file '#{file}' in 'tests' or 'examples' directory" 26 | end 27 | smoke_manifest_file 28 | end 29 | end 30 | end 31 | -------------------------------------------------------------------------------- /lib/puppet-openstack_spec_helper/support/matchers/have_array_of_instances_hash.rb: -------------------------------------------------------------------------------- 1 | RSpec::Matchers.define :have_array_of_instances_hash do |expected| 2 | expected_array = expected.dup 3 | match do |actual| 4 | if actual.count != expected_array.count 5 | return false 6 | end 7 | actual_array = actual.map { |i| i.instance_variable_get('@property_hash') } 8 | expected_array.each do |e| 9 | actual_array.each do |a| 10 | if e == a 11 | actual_array.delete(a) 12 | end 13 | end 14 | end 15 | actual_array.empty? 16 | end 17 | end 18 | -------------------------------------------------------------------------------- /lib/puppet-openstack_spec_helper/support/matchers/include_regexp.rb: -------------------------------------------------------------------------------- 1 | RSpec::Matchers.define :include_regexp do |expected| 2 | regexps = expected.dup 3 | regexps = [regexps] unless regexps.is_a?(Array) 4 | expected_count = regexps.count 5 | count = 0 6 | match do |actual| 7 | output = actual 8 | output = output.split("\n") unless output.is_a?(Array) 9 | output.each do |line| 10 | regexps.each_with_index do |regex, regexp_idx| 11 | if line.match(regex) 12 | count += 1 13 | regexps.delete_at(regexp_idx) 14 | break 15 | end 16 | end 17 | end 18 | expected_count == count 19 | end 20 | end 21 | -------------------------------------------------------------------------------- /lib/puppet-openstack_spec_helper/version.rb: -------------------------------------------------------------------------------- 1 | module PuppetOpenstackSpecHelper 2 | module Version 3 | STRING = '20.0.0' 4 | end 5 | end 6 | -------------------------------------------------------------------------------- /puppet-openstack_spec_helper.gemspec: -------------------------------------------------------------------------------- 1 | lib = File.expand_path('../lib', __FILE__) 2 | $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib) 3 | require 'puppet-openstack_spec_helper/version' 4 | 5 | Gem::Specification.new do |spec| 6 | spec.name = "puppet-openstack_spec_helper" 7 | spec.version = PuppetOpenstackSpecHelper::Version::STRING 8 | spec.authors = ["OpenStack Puppet Modules Team"] 9 | spec.description = %q{Helpers for OpenStack module testing} 10 | spec.summary = %q{Puppet-OpenStack spec helper} 11 | spec.homepage = "" 12 | spec.license = "Apache-2.0" 13 | 14 | spec.files = `git ls-files`.split($/) 15 | spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) } 16 | spec.test_files = spec.files.grep(%r{^(test|spec|features)/}) 17 | spec.require_paths = ["lib"] 18 | 19 | # dependencies that are needed to run puppet-lint and rspec-puppet 20 | spec.add_dependency 'puppet-lint' 21 | spec.add_dependency 'puppetlabs_spec_helper' 22 | spec.add_dependency 'rake' 23 | spec.add_dependency 'minitest' 24 | 25 | puppetversion = ENV.key?('PUPPET_GEM_VERSION') ? ENV['PUPPET_GEM_VERSION'] : ['>= 7.0'] 26 | spec.add_dependency 'puppet', puppetversion 27 | 28 | if ENV.key?('RSPEC_PUPPET_VERSION') 29 | rspec_puppet_version = ENV['RSPEC_PUPPET_VERSION'] 30 | spec.add_dependency 'rspec-puppet', rspec_puppet_version 31 | else 32 | spec.add_dependency 'rspec-puppet' 33 | end 34 | 35 | spec.add_dependency 'rspec-puppet-facts' 36 | spec.add_dependency 'rspec-puppet-utils' 37 | 38 | spec.add_dependency 'metadata-json-lint' 39 | spec.add_dependency 'puppet-lint-param-docs' 40 | spec.add_dependency 'puppet-lint-unquoted_string-check' 41 | spec.add_dependency 'puppet-lint-absolute_classname-check' 42 | spec.add_dependency 'puppet-lint-leading_zero-check' 43 | 44 | spec.add_dependency 'json' 45 | spec.add_dependency 'webmock' 46 | 47 | spec.add_dependency 'r10k', ['>= 3.0.0'] 48 | 49 | spec.add_dependency 'bolt' 50 | spec.add_dependency 'puppet_litmus' 51 | spec.add_dependency 'serverspec' 52 | 53 | spec.add_dependency 'ruby-augeas' 54 | end 55 | -------------------------------------------------------------------------------- /releasenotes/notes/first_note-7f8231673c6bcd05.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | prelude: > 3 | This is a first release of openstack_spec_helper. 4 | This gem provides helper utilities for running rspec tests in the 5 | OpenStack Puppet Modules. 6 | features: 7 | - Add beaker spec helper. 8 | - Add Rake tasks. 9 | - Add Defaults facts. 10 | - Add shared_examples_acceptance. 11 | -------------------------------------------------------------------------------- /releasenotes/notes/gemdeps-fb6a4dddc76b9e5b.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | features: 3 | - Manage Gems dependencies from all Puppet OpenStack modules in gemspec file, 4 | so we have a single place where we can deal with the gems. 5 | -------------------------------------------------------------------------------- /releasenotes/notes/os_worker-fact-764238b986c566dd.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | features: 3 | - Added a default value of '2' for os_workers fact for spec tests. 4 | -------------------------------------------------------------------------------- /releasenotes/notes/puppetfile_extras-f49799b6edbe69a2.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | features: 3 | - If Puppetfile_extras file does exist in a Puppet module, the spec_helper will copy 4 | its content to the end of Puppet OpenStack Puppetfile. It will allow external modules 5 | (for example puppet-tripleo) to re-use Puppet OpenStack tooling, but adding more modules 6 | in the tests. 7 | -------------------------------------------------------------------------------- /releasenotes/notes/rspec-puppet-facts-improvements-3ad5c3addcf088f8.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | features: 3 | - Added a new facts module that can be pulled in by the other 4 | puppet modules to be able to manage the inclusion of 5 | rspec-puppet-facts and the related default facts in a single 6 | inclusion. 7 | other: 8 | - Require a minimum of rspec-puppet-facts 1.7.0 due to the addition 9 | of the add_custom_fact function which was not available until this 10 | version. 11 | -------------------------------------------------------------------------------- /releasenotes/source/2023.1.rst: -------------------------------------------------------------------------------- 1 | =========================== 2 | 2023.1 Series Release Notes 3 | =========================== 4 | 5 | .. release-notes:: 6 | :branch: unmaintained/2023.1 7 | -------------------------------------------------------------------------------- /releasenotes/source/2023.2.rst: -------------------------------------------------------------------------------- 1 | =========================== 2 | 2023.2 Series Release Notes 3 | =========================== 4 | 5 | .. release-notes:: 6 | :branch: stable/2023.2 7 | -------------------------------------------------------------------------------- /releasenotes/source/2024.1.rst: -------------------------------------------------------------------------------- 1 | =========================== 2 | 2024.1 Series Release Notes 3 | =========================== 4 | 5 | .. release-notes:: 6 | :branch: stable/2024.1 7 | -------------------------------------------------------------------------------- /releasenotes/source/2024.2.rst: -------------------------------------------------------------------------------- 1 | =========================== 2 | 2024.2 Series Release Notes 3 | =========================== 4 | 5 | .. release-notes:: 6 | :branch: stable/2024.2 7 | -------------------------------------------------------------------------------- /releasenotes/source/2025.1.rst: -------------------------------------------------------------------------------- 1 | =========================== 2 | 2025.1 Series Release Notes 3 | =========================== 4 | 5 | .. release-notes:: 6 | :branch: stable/2025.1 7 | -------------------------------------------------------------------------------- /releasenotes/source/_static/.placeholder: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openstack/puppet-openstack_spec_helper/bac294d5fb12cfc408a4e57b8496f6200223f8bc/releasenotes/source/_static/.placeholder -------------------------------------------------------------------------------- /releasenotes/source/conf.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | # Licensed under the Apache License, Version 2.0 (the "License"); 3 | # you may not use this file except in compliance with the License. 4 | # You may obtain a copy of the License at 5 | # 6 | # http://www.apache.org/licenses/LICENSE-2.0 7 | # 8 | # Unless required by applicable law or agreed to in writing, software 9 | # distributed under the License is distributed on an "AS IS" BASIS, 10 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or 11 | # implied. 12 | # See the License for the specific language governing permissions and 13 | # limitations under the License. 14 | # 15 | 16 | # If extensions (or modules to document with autodoc) are in another directory, 17 | # add these directories to sys.path here. If the directory is relative to the 18 | # documentation root, use os.path.abspath to make it absolute, like shown here. 19 | #sys.path.insert(0, os.path.abspath('.')) 20 | 21 | # -- General configuration ------------------------------------------------ 22 | 23 | 24 | # If your documentation needs a minimal Sphinx version, state it here. 25 | #needs_sphinx = '1.0' 26 | 27 | # Add any Sphinx extension module names here, as strings. They can be 28 | # extensions coming with Sphinx (named 'sphinx.ext.*') or your custom 29 | # ones. 30 | extensions = [ 31 | 'openstackdocstheme', 32 | 'reno.sphinxext', 33 | ] 34 | 35 | # Add any paths that contain templates here, relative to this directory. 36 | templates_path = ['_templates'] 37 | 38 | # The suffix of source filenames. 39 | source_suffix = '.rst' 40 | 41 | # The encoding of source files. 42 | #source_encoding = 'utf-8-sig' 43 | 44 | # The master toctree document. 45 | master_doc = 'index' 46 | 47 | # General information about the project. 48 | copyright = '2016, Puppet OpenStack Developers' 49 | 50 | # Release do not need a version number in the title, they 51 | # cover multiple versions. 52 | # The short X.Y version. 53 | version = '' 54 | # The full version, including alpha/beta/rc tags. 55 | release = '' 56 | 57 | # The language for content autogenerated by Sphinx. Refer to documentation 58 | # for a list of supported languages. 59 | #language = None 60 | 61 | # There are two options for replacing |today|: either, you set today to some 62 | # non-false value, then it is used: 63 | #today = '' 64 | # Else, today_fmt is used as the format for a strftime call. 65 | #today_fmt = '%B %d, %Y' 66 | 67 | # List of patterns, relative to source directory, that match files and 68 | # directories to ignore when looking for source files. 69 | exclude_patterns = [] 70 | 71 | # The reST default role (used for this markup: `text`) to use for all 72 | # documents. 73 | #default_role = None 74 | 75 | # If true, '()' will be appended to :func: etc. cross-reference text. 76 | #add_function_parentheses = True 77 | 78 | # If true, the current module name will be prepended to all description 79 | # unit titles (such as .. function::). 80 | #add_module_names = True 81 | 82 | # If true, sectionauthor and moduleauthor directives will be shown in the 83 | # output. They are ignored by default. 84 | #show_authors = False 85 | 86 | # The name of the Pygments (syntax highlighting) style to use. 87 | pygments_style = 'native' 88 | 89 | # A list of ignored prefixes for module index sorting. 90 | #modindex_common_prefix = [] 91 | 92 | # If true, keep warnings as "system message" paragraphs in the built documents. 93 | #keep_warnings = False 94 | 95 | 96 | # -- Options for HTML output ---------------------------------------------- 97 | 98 | # The theme to use for HTML and HTML Help pages. See the documentation for 99 | # a list of builtin themes. 100 | html_theme = 'openstackdocs' 101 | 102 | # Theme options are theme-specific and customize the look and feel of a theme 103 | # further. For a list of options available for each theme, see the 104 | # documentation. 105 | #html_theme_options = {} 106 | 107 | # Add any paths that contain custom themes here, relative to this directory. 108 | # html_theme_path = [] 109 | 110 | # The name for this set of Sphinx documents. If None, it defaults to 111 | # " v documentation". 112 | #html_title = None 113 | 114 | # A shorter title for the navigation bar. Default is the same as html_title. 115 | #html_short_title = None 116 | 117 | # The name of an image file (relative to this directory) to place at the top 118 | # of the sidebar. 119 | #html_logo = None 120 | 121 | # The name of an image file (within the static path) to use as favicon of the 122 | # docs. This file should be a Windows icon file (.ico) being 16x16 or 32x32 123 | # pixels large. 124 | #html_favicon = None 125 | 126 | # Add any paths that contain custom static files (such as style sheets) here, 127 | # relative to this directory. They are copied after the builtin static files, 128 | # so a file named "default.css" will overwrite the builtin "default.css". 129 | html_static_path = ['_static'] 130 | 131 | # Add any extra paths that contain custom files (such as robots.txt or 132 | # .htaccess) here, relative to this directory. These files are copied 133 | # directly to the root of the documentation. 134 | #html_extra_path = [] 135 | 136 | # If not '', a 'Last updated on:' timestamp is inserted at every page bottom, 137 | # using the given strftime format. 138 | 139 | # If true, SmartyPants will be used to convert quotes and dashes to 140 | # typographically correct entities. 141 | #html_use_smartypants = True 142 | 143 | # Custom sidebar templates, maps document names to template names. 144 | #html_sidebars = {} 145 | 146 | # Additional templates that should be rendered to pages, maps page names to 147 | # template names. 148 | #html_additional_pages = {} 149 | 150 | # If false, no module index is generated. 151 | #html_domain_indices = True 152 | 153 | # If false, no index is generated. 154 | #html_use_index = True 155 | 156 | # If true, the index is split into individual pages for each letter. 157 | #html_split_index = False 158 | 159 | # If true, links to the reST sources are added to the pages. 160 | #html_show_sourcelink = True 161 | 162 | # If true, "Created using Sphinx" is shown in the HTML footer. Default is True. 163 | #html_show_sphinx = True 164 | 165 | # If true, "(C) Copyright ..." is shown in the HTML footer. Default is True. 166 | #html_show_copyright = True 167 | 168 | # If true, an OpenSearch description file will be output, and all pages will 169 | # contain a tag referring to it. The value of this option must be the 170 | # base URL from which the finished HTML is served. 171 | #html_use_opensearch = '' 172 | 173 | # This is the file name suffix for HTML files (e.g. ".xhtml"). 174 | #html_file_suffix = None 175 | 176 | # Output file base name for HTML help builder. 177 | htmlhelp_basename = 'puppet-openstack_spec_helperReleaseNotesdoc' 178 | 179 | 180 | # -- Options for LaTeX output --------------------------------------------- 181 | 182 | # Grouping the document tree into LaTeX files. List of tuples 183 | # (source start file, target name, title, 184 | # author, documentclass [howto, manual, or own class]). 185 | latex_documents = [ 186 | ('index', 'puppet-openstack_spec_helperReleaseNotes.tex', 'puppet-openstack_spec_helper Release Notes Documentation', 187 | '2016, Puppet OpenStack Developers', 'manual'), 188 | ] 189 | 190 | # The name of an image file (relative to this directory) to place at the top of 191 | # the title page. 192 | #latex_logo = None 193 | 194 | # For "manual" documents, if this is true, then toplevel headings are parts, 195 | # not chapters. 196 | #latex_use_parts = False 197 | 198 | # If true, show page references after internal links. 199 | #latex_show_pagerefs = False 200 | 201 | # If true, show URL addresses after external links. 202 | #latex_show_urls = False 203 | 204 | # Documents to append as an appendix to all manuals. 205 | #latex_appendices = [] 206 | 207 | # If false, no module index is generated. 208 | #latex_domain_indices = True 209 | 210 | 211 | # -- Options for manual page output --------------------------------------- 212 | 213 | # One entry per manual page. List of tuples 214 | # (source start file, name, description, authors, manual section). 215 | man_pages = [ 216 | ('index', 'puppet-openstack_spec_helperreleasenotes', 'puppet-openstack_spec_helper Release Notes Documentation', 217 | ['2016, Puppet OpenStack Developers'], 1) 218 | ] 219 | 220 | # If true, show URL addresses after external links. 221 | #man_show_urls = False 222 | 223 | 224 | # -- Options for Texinfo output ------------------------------------------- 225 | 226 | # Grouping the document tree into Texinfo files. List of tuples 227 | # (source start file, target name, title, author, 228 | # dir menu entry, description, category) 229 | texinfo_documents = [ 230 | ('index', 'puppet-openstack_spec_helperReleaseNotes', 'puppet-openstack_spec_helper Release Notes Documentation', 231 | '2016, Puppet OpenStack Developers', 'puppet-openstack_spec_helperReleaseNotes', 'One line description of project.', 232 | 'Miscellaneous'), 233 | ] 234 | 235 | # Documents to append as an appendix to all manuals. 236 | #texinfo_appendices = [] 237 | 238 | # If false, no module index is generated. 239 | #texinfo_domain_indices = True 240 | 241 | # How to display URL addresses: 'footnote', 'no', or 'inline'. 242 | #texinfo_show_urls = 'footnote' 243 | 244 | # If true, do not generate a @detailmenu in the "Top" node's menu. 245 | #texinfo_no_detailmenu = False 246 | 247 | # -- Options for Internationalization output ------------------------------ 248 | locale_dirs = ['locale/'] 249 | 250 | # openstackdocstheme options 251 | openstackdocs_repo_name = 'openstack/puppet-openstack_spec_helper' 252 | openstackdocs_auto_name = False 253 | -------------------------------------------------------------------------------- /releasenotes/source/index.rst: -------------------------------------------------------------------------------- 1 | ====================================================== 2 | Welcome to puppet-openstack_spec_helper Release Notes! 3 | ====================================================== 4 | 5 | Contents 6 | ======== 7 | 8 | .. toctree:: 9 | :maxdepth: 2 10 | 11 | unreleased 12 | 2025.1 13 | 2024.2 14 | 2024.1 15 | 2023.2 16 | 2023.1 17 | zed 18 | yoga 19 | xena 20 | wallaby 21 | victoria 22 | ussuri 23 | train 24 | stein 25 | rocky 26 | pike 27 | ocata 28 | newton 29 | mitaka 30 | 31 | 32 | Indices and tables 33 | ================== 34 | 35 | * :ref:`genindex` 36 | * :ref:`search` 37 | -------------------------------------------------------------------------------- /releasenotes/source/mitaka.rst: -------------------------------------------------------------------------------- 1 | =========================== 2 | Mitaka Series Release Notes 3 | =========================== 4 | 5 | .. release-notes:: 6 | :branch: origin/stable/mitaka 7 | -------------------------------------------------------------------------------- /releasenotes/source/newton.rst: -------------------------------------------------------------------------------- 1 | =================================== 2 | Newton Series Release Notes 3 | =================================== 4 | 5 | .. release-notes:: 6 | :branch: origin/stable/newton 7 | 8 | -------------------------------------------------------------------------------- /releasenotes/source/ocata.rst: -------------------------------------------------------------------------------- 1 | =================================== 2 | Ocata Series Release Notes 3 | =================================== 4 | 5 | .. release-notes:: 6 | :branch: origin/stable/ocata 7 | 8 | -------------------------------------------------------------------------------- /releasenotes/source/pike.rst: -------------------------------------------------------------------------------- 1 | =================================== 2 | Pike Series Release Notes 3 | =================================== 4 | 5 | .. release-notes:: 6 | :branch: origin/stable/pike 7 | 8 | -------------------------------------------------------------------------------- /releasenotes/source/rocky.rst: -------------------------------------------------------------------------------- 1 | =================================== 2 | Rocky Series Release Notes 3 | =================================== 4 | 5 | .. release-notes:: 6 | :branch: stable/rocky 7 | -------------------------------------------------------------------------------- /releasenotes/source/stein.rst: -------------------------------------------------------------------------------- 1 | =================================== 2 | Stein Series Release Notes 3 | =================================== 4 | 5 | .. release-notes:: 6 | :branch: stable/stein 7 | -------------------------------------------------------------------------------- /releasenotes/source/train.rst: -------------------------------------------------------------------------------- 1 | ========================== 2 | Train Series Release Notes 3 | ========================== 4 | 5 | .. release-notes:: 6 | :branch: stable/train 7 | -------------------------------------------------------------------------------- /releasenotes/source/unreleased.rst: -------------------------------------------------------------------------------- 1 | ============================== 2 | Current Series Release Notes 3 | ============================== 4 | 5 | .. release-notes:: 6 | -------------------------------------------------------------------------------- /releasenotes/source/ussuri.rst: -------------------------------------------------------------------------------- 1 | =========================== 2 | Ussuri Series Release Notes 3 | =========================== 4 | 5 | .. release-notes:: 6 | :branch: stable/ussuri 7 | -------------------------------------------------------------------------------- /releasenotes/source/victoria.rst: -------------------------------------------------------------------------------- 1 | ============================= 2 | Victoria Series Release Notes 3 | ============================= 4 | 5 | .. release-notes:: 6 | :branch: stable/victoria 7 | -------------------------------------------------------------------------------- /releasenotes/source/wallaby.rst: -------------------------------------------------------------------------------- 1 | ============================ 2 | Wallaby Series Release Notes 3 | ============================ 4 | 5 | .. release-notes:: 6 | :branch: unmaintained/wallaby 7 | -------------------------------------------------------------------------------- /releasenotes/source/xena.rst: -------------------------------------------------------------------------------- 1 | ========================= 2 | Xena Series Release Notes 3 | ========================= 4 | 5 | .. release-notes:: 6 | :branch: unmaintained/xena 7 | -------------------------------------------------------------------------------- /releasenotes/source/yoga.rst: -------------------------------------------------------------------------------- 1 | ========================= 2 | Yoga Series Release Notes 3 | ========================= 4 | 5 | .. release-notes:: 6 | :branch: unmaintained/yoga 7 | -------------------------------------------------------------------------------- /releasenotes/source/zed.rst: -------------------------------------------------------------------------------- 1 | ======================== 2 | Zed Series Release Notes 3 | ======================== 4 | 5 | .. release-notes:: 6 | :branch: unmaintained/zed 7 | -------------------------------------------------------------------------------- /run_lint_tests.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash -ex 2 | # Copyright 2016 Red Hat, Inc. 3 | # 4 | # Licensed under the Apache License, Version 2.0 (the "License"); you may 5 | # not use this file except in compliance with the License. You may obtain 6 | # a copy of the License at 7 | # 8 | # http://www.apache.org/licenses/LICENSE-2.0 9 | # 10 | # Unless required by applicable law or agreed to in writing, software 11 | # distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 12 | # WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 13 | # License for the specific language governing permissions and limitations 14 | # under the License. 15 | 16 | export SCRIPT_DIR=$(cd `dirname $0` && pwd -P) 17 | source $SCRIPT_DIR/functions 18 | 19 | install_gems 20 | 21 | # run unit tests 22 | $GEM_HOME/bin/bundle exec rake lint 23 | -------------------------------------------------------------------------------- /run_litmus_tests.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash -ex 2 | 3 | export SCRIPT_DIR=$(cd `dirname $0` && pwd -P) 4 | source $SCRIPT_DIR/functions 5 | 6 | install_gems 7 | 8 | # run litmus tests 9 | export RSPEC_DEBUG=true 10 | $GEM_HOME/bin/bundle exec rake litmus:acceptance:localhost 11 | -------------------------------------------------------------------------------- /run_syntax_tests.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash -ex 2 | # Copyright 2015 Red Hat, Inc. 3 | # 4 | # Licensed under the Apache License, Version 2.0 (the "License"); you may 5 | # not use this file except in compliance with the License. You may obtain 6 | # a copy of the License at 7 | # 8 | # http://www.apache.org/licenses/LICENSE-2.0 9 | # 10 | # Unless required by applicable law or agreed to in writing, software 11 | # distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 12 | # WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 13 | # License for the specific language governing permissions and limitations 14 | # under the License. 15 | 16 | export SCRIPT_DIR=$(cd `dirname $0` && pwd -P) 17 | source $SCRIPT_DIR/functions 18 | 19 | export PUPPET_VERSION=${PUPPET_VERSION:-7} 20 | PUPPET_MAJOR_VERSION=`echo $PUPPET_VERSION | cut -c 1` 21 | export PUPPET_GEM_VERSION="~> $PUPPET_MAJOR_VERSION" 22 | 23 | install_gems 24 | 25 | # run unit tests 26 | $GEM_HOME/bin/bundle exec rake syntax 27 | -------------------------------------------------------------------------------- /run_unit_tests.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash -ex 2 | # Copyright 2015 Red Hat, Inc. 3 | # 4 | # Licensed under the Apache License, Version 2.0 (the "License"); you may 5 | # not use this file except in compliance with the License. You may obtain 6 | # a copy of the License at 7 | # 8 | # http://www.apache.org/licenses/LICENSE-2.0 9 | # 10 | # Unless required by applicable law or agreed to in writing, software 11 | # distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 12 | # WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 13 | # License for the specific language governing permissions and limitations 14 | # under the License. 15 | 16 | export SCRIPT_DIR=$(cd `dirname $0` && pwd -P) 17 | source $SCRIPT_DIR/functions 18 | 19 | install_gems 20 | 21 | # run unit tests 22 | $GEM_HOME/bin/bundle exec rake spec SPEC_OPTS='--format documentation' 23 | -------------------------------------------------------------------------------- /setup.cfg: -------------------------------------------------------------------------------- 1 | [metadata] 2 | name = puppet-openstack_spec_helper 3 | summary = Puppet module for OpenStack Openstack_spec_helper 4 | description_file = 5 | README.md 6 | author = OpenStack 7 | author_email = openstack-discuss@lists.openstack.org 8 | home_page = http://www.openstack.org/ 9 | license = Apache License, Version 2.0 10 | classifier = 11 | Intended Audience :: Developers 12 | Intended Audience :: Information Technology 13 | Intended Audience :: System Administrators 14 | License :: OSI Approved :: Apache Software License 15 | Operating System :: POSIX :: Linux 16 | -------------------------------------------------------------------------------- /setup.py: -------------------------------------------------------------------------------- 1 | # Copyright (c) 2013 Hewlett-Packard Development Company, L.P. 2 | # 3 | # Licensed under the Apache License, Version 2.0 (the "License"); 4 | # you may not use this file except in compliance with the License. 5 | # You may obtain a copy of the License at 6 | # 7 | # http://www.apache.org/licenses/LICENSE-2.0 8 | # 9 | # Unless required by applicable law or agreed to in writing, software 10 | # distributed under the License is distributed on an "AS IS" BASIS, 11 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or 12 | # implied. 13 | # See the License for the specific language governing permissions and 14 | # limitations under the License. 15 | 16 | import setuptools 17 | 18 | setuptools.setup( 19 | setup_requires=['pbr>=2.0.0'], 20 | py_modules=[], 21 | pbr=True) 22 | -------------------------------------------------------------------------------- /tox.ini: -------------------------------------------------------------------------------- 1 | [tox] 2 | minversion = 3.1 3 | skipsdist = True 4 | envlist = releasenotes 5 | ignore_basepython_conflict = True 6 | 7 | [testenv] 8 | basepython = python3 9 | 10 | [testenv:releasenotes] 11 | deps = -c{env:TOX_CONSTRAINTS_FILE:https://releases.openstack.org/constraints/upper/master} 12 | -r{toxinidir}/doc/requirements.txt 13 | commands = sphinx-build -a -E -W -d releasenotes/build/doctrees -b html releasenotes/source releasenotes/build/html 14 | --------------------------------------------------------------------------------