pdksync 0.5.0 → 0.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
data/managed_modules.yml CHANGED
@@ -1,56 +1,51 @@
1
1
  ---
2
- ## windows team
3
- #- puppetlabs-acl
4
- #- puppetlabs-chocolatey
5
- #- puppetlabs-dsc
6
- #- puppetlabs-dsc_lite
7
- #- puppetlabs-iis
8
- #- puppetlabs-powershell
9
- #- puppetlabs-registry
10
- #- puppetlabs-reboot
11
- #- puppetlabs-scheduled_task
12
- #- puppetlabs-sqlserver
13
- #- puppetlabs-windows
14
- #- puppetlabs-wsus_client
15
- ## modules team
2
+ ## IA content team
3
+ #- cisco_ios
4
+ #- device_manager
5
+ #- provision
16
6
  #- puppetlabs-accounts
7
+ #- puppetlabs-acl
17
8
  #- puppetlabs-apache
18
9
  #- puppetlabs-apt
19
- #- puppetlabs-bootstrap
10
+ #- puppetlabs-chocolatey
20
11
  #- puppetlabs-concat
12
+ #- puppetlabs-docker
13
+ #- puppetlabs-dsc
14
+ #- puppetlabs-dsc_lite
21
15
  #- puppetlabs-exec
22
16
  #- puppetlabs-facter_task
23
17
  #- puppetlabs-firewall
24
18
  #- puppetlabs-haproxy
19
+ #- puppetlabs-helm
25
20
  #- puppetlabs-ibm_installation_manager
21
+ #- puppetlabs-iis
26
22
  #- puppetlabs-inifile
27
23
  #- puppetlabs-java
28
24
  #- puppetlabs-java_ks
25
+ #- puppetlabs-kubernetes
29
26
  #- puppetlabs-motd
30
27
  #- puppetlabs-mysql
31
28
  #- puppetlabs-ntp
32
29
  #- puppetlabs-package
30
+ #- puppetlabs-panos
33
31
  #- puppetlabs-postgresql
32
+ #- puppetlabs-powershell
34
33
  #- puppetlabs-puppet_conf
35
- #- puppetlabs-resource
34
+ #- puppetlabs-reboot
35
+ #- puppetlabs-registry
36
+ #- puppetlabs-rook
36
37
  #- puppetlabs-satellite_pe_tools
38
+ #- puppetlabs-scheduled_task
37
39
  #- puppetlabs-service
40
+ #- puppetlabs-sqlserver
38
41
  #- puppetlabs-stdlib
39
42
  #- puppetlabs-tagmail
40
43
  #- puppetlabs-tomcat
41
- #- puppetlabs-translate
42
44
  #- puppetlabs-vcsrepo
45
+ #- puppetlabs-vsphere
43
46
  #- puppetlabs-websphere_application_server
44
- ## networking team
45
- #- cisco_ios
46
- #- device_manager
47
- #- puppetlabs-panos
48
- #- puppetlabs-resource_api
47
+ #- puppetlabs-wsus_client
49
48
  ## testing only
50
49
  #- puppetlabs-testing
51
50
  #- puppetlabs-testing1
52
51
  #- puppetlabs-testing2
53
- ## cloud and containers team
54
- #- puppetlabs-kubernetes
55
- #- puppetlabs-helm
56
- #- puppetlabs-rook
data/pdksync.gemspec CHANGED
@@ -2,30 +2,33 @@ lib = File.expand_path('../lib', __FILE__)
2
2
  $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
3
3
 
4
4
  Gem::Specification.new do |spec|
5
- spec.name = 'pdksync'
6
- spec.version = '0.5.0'
7
- spec.authors = ['Puppet']
8
- spec.email = ['']
9
- spec.summary = 'Puppet Module PDK Synchronizer'
10
- spec.description = 'Utility to synchronize common files across puppet modules using PDK Update.'
11
- spec.homepage = 'http://github.com/puppetlabs/pdksync'
12
- spec.license = 'Apache-2.0'
5
+ spec.name = 'pdksync'
6
+ spec.version = '0.6.0'
7
+ spec.authors = ['Puppet']
8
+ spec.email = ['']
9
+ spec.summary = 'Puppet Module PDK Synchronizer'
10
+ spec.description = 'Utility to synchronize common files across puppet modules using PDK Update.'
11
+ spec.homepage = 'http://github.com/puppetlabs/pdksync'
12
+ spec.license = 'Apache-2.0'
13
13
  spec.required_ruby_version = '>= 2.0.0'
14
14
 
15
- spec.files = `git ls-files -z`.split("\x0")
16
- spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
17
- spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
15
+ spec.files = `git ls-files -z`.split("\x0")
16
+ spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
17
+ spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
18
18
  spec.require_paths = ['lib']
19
19
 
20
- spec.add_development_dependency 'bundler', '~> 1.15'
20
+ spec.add_development_dependency 'bundler'
21
+ spec.add_development_dependency 'codecov'
22
+ spec.add_development_dependency 'pry'
21
23
  spec.add_development_dependency 'rspec'
22
24
  spec.add_development_dependency 'rubocop', '~> 0.50.0'
23
- spec.add_development_dependency 'pry'
24
-
25
+ spec.add_development_dependency 'simplecov'
26
+ spec.add_development_dependency 'simplecov-console'
27
+ spec.add_runtime_dependency 'pdk', '>= 1.14.1'
25
28
  spec.add_runtime_dependency 'git', '~>1.3'
26
- spec.add_runtime_dependency 'pdk', '>= 1.4.1'
27
29
  spec.add_runtime_dependency 'rake'
28
30
  spec.add_runtime_dependency 'gitlab'
29
31
  spec.add_runtime_dependency 'octokit'
30
32
  spec.add_runtime_dependency 'colorize'
33
+ spec.add_runtime_dependency 'jenkins_api_client'
31
34
  end
@@ -0,0 +1,56 @@
1
+ require 'spec_helper'
2
+ require 'pdksync/configuration'
3
+
4
+ RSpec.describe 'configuration' do
5
+ before(:each) do
6
+ allow(ENV).to receive(:[]).with('HOME').and_return('./')
7
+ allow(ENV).to receive(:[]).with('GITHUB_TOKEN').and_return('blah')
8
+ allow(ENV).to receive(:[]).with('PDKSYNC_CONFIG_PATH').and_return(nil)
9
+ end
10
+
11
+ let(:instance) do
12
+ PdkSync::Configuration.new
13
+ end
14
+
15
+ it '#new' do
16
+ expect(instance).to be_a PdkSync::Configuration
17
+ end
18
+
19
+ it 'passes when token is provided' do
20
+ expect(instance).to be_a PdkSync::Configuration
21
+ end
22
+
23
+ it 'raises error without token' do
24
+ allow(ENV).to receive(:[]).with('GITHUB_TOKEN').and_return(nil)
25
+ expect { instance }.to raise_error(ArgumentError)
26
+ end
27
+
28
+ it '#custom_config' do
29
+ expect(instance.custom_config).to be_a Hash
30
+ end
31
+
32
+ it '#custom_config does not exist' do
33
+ expect(instance.custom_config('/tmp/blah')).to be_a Hash
34
+ end
35
+
36
+ it '#custom_config exists' do
37
+ config = File.join(fixtures_dir, 'pdksync.yml')
38
+ data = instance.custom_config(config)
39
+ expect(data).to be_a Hash
40
+ expect(data[:namespace]).to eq('voxpupuli')
41
+ end
42
+
43
+ it '#locate_config_path' do
44
+ expect(instance.local_config_path).to be_nil
45
+ end
46
+
47
+ it '#locate_config_path with value' do
48
+ config = File.join(fixtures_dir, 'pdksync.yml')
49
+ expect(instance.locate_config_path(config)).to eq(config)
50
+ end
51
+
52
+ it 'gets a different config file path when variable is used' do
53
+ allow(ENV).to receive(:[]).with('PDKSYNC_CONFIG_PATH').and_return(File.join(fixtures_dir, 'pdksync.yml'))
54
+ expect(instance.locate_config_path(ENV['PDKSYNC_CONFIG_PATH'])).to eq(File.join(fixtures_dir, 'pdksync.yml'))
55
+ end
56
+ end
@@ -0,0 +1,2 @@
1
+ ---
2
+ - puppetlabs/puppetlabs-testing
@@ -0,0 +1,2 @@
1
+ ---
2
+ namespace: voxpupuli
@@ -0,0 +1,44 @@
1
+ require 'spec_helper'
2
+ require 'pdksync/logger'
3
+
4
+ RSpec.describe 'logger' do
5
+ before(:each) do
6
+ allow(ENV).to receive(:[]).with('PDKSYNC_LOG_FILENAME').and_return('dev/')
7
+ allow(ENV).to receive(:[]).with('LOG_LEVEL').and_return(nil)
8
+ # allow(PdkSync::Logger).to receive(:logger).and_return(PdkSync::Logger.logger($stderr))
9
+ end
10
+
11
+ let(:logger) do
12
+ PdkSync::Logger.instance_variable_set('@logger', nil)
13
+ PdkSync::Logger.logger
14
+ end
15
+
16
+ it '#self.logger' do
17
+ expect(PdkSync::Logger.logger).to be_a Logger
18
+ end
19
+
20
+ it '#self.debug' do
21
+ allow(ENV).to receive(:[]).with('LOG_LEVEL').and_return('debug')
22
+ expect(logger.debug('this is a debug')).to be_truthy
23
+ # wasn't able to capture stdout with rspec, no idea why
24
+ # expect { logger.debug("this is a debug") }.to output(/DEBUG - PdkSync: this is a debug/).to_stdout
25
+ end
26
+
27
+ it '#self.warn' do
28
+ allow(ENV).to receive(:[]).with('LOG_LEVEL').and_return('warn')
29
+ # wasn't able to capture stdout with rspec, no idea why
30
+ expect(logger.warn('this is a warning')).to be_truthy # output(/WARN - PdkSync: this is a warning/).to_stdout
31
+ end
32
+
33
+ it '#self.info' do
34
+ allow(ENV).to receive(:[]).with('LOG_LEVEL').and_return('info')
35
+ # wasn't able to capture stdout with rspec, no idea why
36
+ expect(logger.info('this is a info')).to be_truthy # output(/INFO - PdkSync: this is a info/).to_stderr
37
+ end
38
+
39
+ it '#self.fatal' do
40
+ allow(ENV).to receive(:[]).with('LOG_LEVEL').and_return('error')
41
+ # wasn't able to capture stdout with rspec, no idea why
42
+ expect(logger.fatal('this is a fatal')).to be_truthy # output(/FATAL - PdkSync: this is a fatal/).to_stderr
43
+ end
44
+ end
@@ -0,0 +1,185 @@
1
+ require 'pdksync'
2
+ require 'spec_helper'
3
+ require 'git'
4
+ require 'fileutils'
5
+ require 'octokit'
6
+
7
+ describe PdkSync do
8
+ before(:all) do
9
+ @pdksync_dir = './modules_pdksync'
10
+ @pdksync_gem_dir = './gems_pdksync'
11
+ module_name = 'puppetlabs-testing'
12
+ gem_name = 'puppet-module-gems'
13
+ @module_names = ['puppetlabs-testing']
14
+ @output_path_module = "#{@pdksync_dir}/#{module_name}"
15
+ @output_path_gem = "#{@pdksync_gem_dir}/#{gem_name}"
16
+ @folder = Dir.pwd
17
+ # Make changes to modules_managed.yaml file
18
+ text = File.read('managed_modules.yml')
19
+ new_contents = text.gsub(%r{#- puppetlabs-testing$}, '- puppetlabs-testing')
20
+ File.open('managed_modules.yml', 'w') { |file| file.puts new_contents }
21
+ end
22
+
23
+ let(:platform) { Object.new }
24
+
25
+ before(:each) do
26
+ allow(ENV).to receive(:[]).with('HOME').and_return('./')
27
+ allow(ENV).to receive(:[]).with('GIT_DIR').and_return(nil)
28
+ allow(ENV).to receive(:[]).with('GIT_WORK_TREE').and_return(nil)
29
+ allow(ENV).to receive(:[]).with('GIT_INDEX_FILE').and_return(nil)
30
+ allow(ENV).to receive(:[]).with('PDKSYNC_LOG_FILENAME').and_return(nil)
31
+ allow(ENV).to receive(:[]).with('LOG_LEVEL').and_return(nil)
32
+ allow(ENV).to receive(:[]).with('GIT_SSH').and_return(nil)
33
+ allow(ENV).to receive(:[]).with('GIT_PATH').and_return(nil)
34
+ allow(ENV).to receive(:[]).with('GITHUB_TOKEN').and_return('blah')
35
+ allow(ENV).to receive(:[]).with('GEMFURY_TOKEN').and_return('blah')
36
+ allow(ENV).to receive(:[]).with('PDKSYNC_VERSION_CHECK').and_return(nil)
37
+ allow(ENV).to receive(:[]).with('http_proxy').and_return(nil)
38
+ allow(ENV).to receive(:[]).with('HTTP_PROXY').and_return(nil)
39
+ allow(ENV).to receive(:[]).with('PDKSYNC_CONFIG_PATH').and_return(nil)
40
+ allow(ENV).to receive(:[]).with('TERM').and_return(nil)
41
+ allow(ENV).to receive(:[]).with('NO_COLOR').and_return(nil)
42
+ allow(PdkSync::Utils).to receive(:return_modules).and_return(@module_names)
43
+ allow(PdkSync::Utils).to receive(:validate_modules_exist).and_return(@module_names)
44
+ allow(PdkSync::Utils).to receive(:setup_client).and_return(git_client)
45
+ Dir.chdir(@folder)
46
+ allow(PdkSync::GitPlatformClient).to receive(:new).and_return(platform)
47
+ allow(Octokit).to receive(:tags).with('puppetlabs/pdk').and_return([{ name: '1' }])
48
+ allow(PdkSync::Utils.configuration).to receive(:git_base_uri).and_return('https://github.com')
49
+ end
50
+
51
+ let(:git_client) do
52
+ double(PdkSync::GitPlatformClient)
53
+ end
54
+
55
+ context 'main method' do
56
+ it 'runs clone sucessfully' do
57
+ allow(PdkSync::Utils).to receive(:setup_client).and_return(git_client)
58
+ FileUtils.rm_rf(@pdksync_dir)
59
+ PdkSync::Utils.create_filespace
60
+ PdkSync.main(steps: [:clone])
61
+ expect(Dir.exist?(@pdksync_dir)).to be(true)
62
+ expect(Dir.exist?(@output_path_module)).to be(true)
63
+ end
64
+
65
+ it 'runs pdk convert, and files have changed' do
66
+ PdkSync.main(steps: [:pdk_convert])
67
+ File.exist?("#{@output_path_module}/convert_report.txt")
68
+ end
69
+
70
+ it 'raise when running a command with no argument' do
71
+ expect { PdkSync.main(steps: [:run_a_command]) }.to raise_error(RuntimeError, %r{"run_a_command" requires an argument to run.})
72
+ end
73
+
74
+ it 'runs a command "touch cat.meow"' do
75
+ PdkSync.main(steps: [:run_a_command], args: { command: 'touch cat.meow' })
76
+ expect File.exist?("#{@output_path_module}/cat.meow")
77
+ end
78
+
79
+ it 'raise when create_commit with no arguments' do
80
+ expect { PdkSync.main(steps: [:create_commit]) }.to raise_error(RuntimeError, %r{Needs a branch_name and commit_message})
81
+ end
82
+
83
+ it 'raise when create_pr with no arguments' do
84
+ expect { PdkSync.main(steps: [:create_pr]) }.to raise_error(RuntimeError, %r{Needs a pr_title})
85
+ end
86
+
87
+ it 'create_pr with 1 argument' do
88
+ expect { PdkSync.main(steps: [:create_pr], args: { pr_title: 'some title' }) }.to_not raise_error
89
+ end
90
+
91
+ it 'raise when clean_branches with no arguments' do
92
+ expect { PdkSync.main(steps: [:clean_branches]) }.to raise_error(RuntimeError, %r{Needs a branch_name, and the branch name contains the string pdksync})
93
+ end
94
+
95
+ it 'raise when gem_file_update with no arguments' do
96
+ expect { PdkSync.main(steps: [:gem_file_update]) }.to raise_error(NoMethodError)
97
+ end
98
+ it 'gem_file_update runs with invalid gem_line given' do
99
+ expect { PdkSync.main(steps: [:gem_file_update], args: { gem_to_test: 'puppet_litmus', gem_line: "gem 'puppet_litmus'\, git: 'https://github.com/test/puppet_litmus.git'" }) }. to raise_error(Errno::ENOENT) # rubocop:disable Metrics/LineLength
100
+ end
101
+ it 'gem_file_update runs with invalid gem_sha_replacer' do
102
+ expect { PdkSync.main(steps: [:gem_file_update], args: { gem_to_test: 'puppet_litmus', gem_sha_finder: 'jsjsjsjsjsjsjs', gem_sha_replacer: 'abcdefgjhkk' }) }.to raise_error(RuntimeError) # , ("Couldn't find sha: abcdefgjhkk in your repository: puppet_litmus")) # rubocop:disable Metrics/LineLength
103
+ end
104
+ it 'gem_file_update runs with invalid gem_version_replacer' do
105
+ expect { PdkSync.main(steps: [:gem_file_update], args: { gem_to_test: 'puppet_litmus', gem_version_finder: '<= 0.4.9', gem_version_replacer: '<= 1.4.11' }) }.to raise_error(RuntimeError) # , ("Couldn't find version: 1.4.11 in your repository: puppet_litmus")) # rubocop:disable Metrics/LineLength
106
+ end
107
+ it 'gem_file_update runs with invalid gem_branch_replacer' do
108
+ expect { PdkSync.main(steps: [:gem_file_update], args: { gem_to_test: 'puppet_litmus', gem_branch_finder: 'jsjsjsjsjsjsjs', gem_branch_replacer: 'abcdefgjhkk' }) }.to raise_error(RuntimeError) # , "Couldn't find branch: abcdefgjhkk in your repository: puppet_litmus") # rubocop:disable Metrics/LineLength
109
+ end
110
+ it 'raise when run_tests with no arguments' do
111
+ expect { PdkSync.main(steps: [:run_tests_locally]) }.to raise_error(NoMethodError) # , %r{run_tests" requires arguments (module_type) to run.})
112
+ end
113
+ it 'raise when run_tests_jenkins with no arguments' do
114
+ allow(ENV).to receive(:[]).with('JENKINS_USERNAME').and_return('JENKINS_USERNAME')
115
+ allow(ENV).to receive(:[]).with('JENKINS_PASSWORD').and_return('JENKINS_PASSWORD')
116
+ expect { PdkSync.main(steps: [:run_tests_jenkins], args: {}) }.to raise_error(RuntimeError) # , "run_tests_jenkins requires arguments (github_repo, github_branch) to run"
117
+ end
118
+ it 'raise errors without jenkins credentials' do
119
+ allow(ENV).to receive(:[]).with('JENKINS_USERNAME').and_return(nil)
120
+ allow(ENV).to receive(:[]).with('JENKINS_PASSWORD').and_return(nil)
121
+ expect { PdkSync.main(steps: [:run_tests_jenkins], args: { jenkins_server_url: 'https//jenkins.com', github_repo: 'test', github_branch: 'test' }) }.to raise_error(RuntimeError, %r{Jenkins access token for Jenkins not set})
122
+ end
123
+
124
+ describe 'gem_file_update with valid values' do
125
+ before(:all) do
126
+ PdkSync.main(steps: [:gem_file_update], args: {
127
+ gem_to_test: 'puppet_litmus',
128
+ gem_line: "gem 'puppet_litmus'\, git: 'https://github.com/puppetlabs/puppet_litmus.git'\, branch: 'main'\, ref: '04da90638f5b5fd7f007123c8c0cc551c8cb3e54'\, '=0.1.0'"
129
+ })
130
+ end
131
+ it 'gem_file_update with valid gem_branch_replacer' do
132
+ PdkSync.main(steps: [:gem_file_update], args: { gem_to_test: 'puppet_litmus',
133
+ gem_branch_finder: 'master', gem_branch_replacer: 'main' })
134
+ expect(File.read('Gemfile')).to match(%r{main})
135
+ end
136
+ it 'gem_file_update runs, and contains the gem_sha given' do
137
+ PdkSync.main(steps: [:gem_file_update], args: { gem_to_test: 'puppet_litmus',
138
+ gem_sha_finder: '04da90638f5b5fd7f007123c8c0cc551c8cb3e54', gem_sha_replacer: '95ed1c62ffcf89003eb0fe9d66989caa45884538' })
139
+ expect(File.read('Gemfile')).to match(%r{95ed1c62ffcf89003eb0fe9d66989caa45884538})
140
+ end
141
+ it 'gem_file_update runs, and contains the gem_version given' do
142
+ PdkSync.main(steps: [:gem_file_update], args: { gem_to_test: 'puppet_litmus',
143
+ gem_version_finder: '=0.1.0', gem_version_replacer: '<=0.3.0' })
144
+ expect(File.read('Gemfile')).to match(%r{0.3.0})
145
+ end
146
+ it 'gem_file_update with valid gem_line' do
147
+ PdkSync.main(steps: [:gem_file_update], args: { gem_to_test: 'puppet_litmus',
148
+ gem_line: "gem 'puppet_litmus'\, git: 'https://github.com/puppetlabs/puppet_litmus.git'" })
149
+ expect(File.read('Gemfile')).to match(%r{gem 'puppet_litmus', git: 'https://github.com/puppetlabs/puppet_litmus.git'})
150
+ end
151
+ it 'multigem updated in the module gemfile' do
152
+ PdkSync.main(steps: [:multi_gemfile_update], args: { gem_name: 'puppet-module', gemfury_username: 'tester' })
153
+ expect File.exist?("#{@output_path_module}/Gemfile")
154
+ end
155
+ end
156
+ end
157
+ context 'main method' do
158
+ let(:platform) { Object.new }
159
+
160
+ it 'runs clone gem sucessfully' do
161
+ allow(PdkSync::Utils).to receive(:setup_client).and_return(git_client)
162
+ FileUtils.rm_rf(@pdksync_gem_dir)
163
+ PdkSync::Utils.create_filespace_gem
164
+ PdkSync.main(steps: [:clone_gem], args: { gem_name: 'puppet-module-gems' })
165
+ expect(Dir.exist?(@pdksync_dir)).to be(true)
166
+ expect(Dir.exist?(@pdksync_gem_dir)).to be(true)
167
+ expect(Dir.exist?(@output_path_gem)).to be(true)
168
+ end
169
+ it 'raise when running a command with no argument' do
170
+ expect { PdkSync.main(steps: [:multi_gem_testing]) }.to raise_error(RuntimeError, %r{"multi_gem_testing" requires arguments to run version_file and build_gem})
171
+ end
172
+ it 'runs a command for updating the version and building the gem' do
173
+ allow(Octokit).to receive(:tags).with('puppetlabs/puppet-module-gems').and_return([{ name: '1' }])
174
+ PdkSync.main(steps: [:multi_gem_testing], args: { gem_name: 'puppet-module-gems', version_file: 'config/info.yml', build_gem: 'exe/build-gems.rb', gem_path: 'pkg', gem_username: 'tester' })
175
+ expect File.exist?("#{@output_path_gem}/pkg")
176
+ end
177
+ end
178
+ after(:all) do
179
+ # Make changes to modules_managed.yaml file
180
+ Dir.chdir(@folder)
181
+ text = File.read('managed_modules.yml')
182
+ new_contents = text.gsub(%r{- puppetlabs-testing$}, '#- puppetlabs-testing')
183
+ File.open('managed_modules.yml', 'w') { |file| file.puts new_contents }
184
+ end
185
+ end
@@ -0,0 +1,74 @@
1
+ # frozen_string_literal: true
2
+
3
+ if ENV['SIMPLECOV'] == 'yes'
4
+ begin
5
+ require 'simplecov'
6
+ require 'simplecov-console'
7
+ require 'codecov'
8
+
9
+ SimpleCov.formatters = [
10
+ SimpleCov::Formatter::HTMLFormatter,
11
+ SimpleCov::Formatter::Console,
12
+ SimpleCov::Formatter::Codecov
13
+ ]
14
+ SimpleCov.start do
15
+ track_files 'lib/**/*.rb'
16
+ add_filter '/spec'
17
+
18
+ # do not track vendored files
19
+ add_filter '/vendor'
20
+ add_filter '/.vendor'
21
+
22
+ # do not track gitignored files
23
+ # this adds about 4 seconds to the coverage check
24
+ # this could definitely be optimized
25
+ add_filter do |f|
26
+ # system returns true if exit status is 0, which with git-check-ignore means file is ignored
27
+ system("git check-ignore --quiet #{f.filename}")
28
+ end
29
+ end
30
+ rescue LoadError
31
+ raise 'Add the simplecov, simplecov-console, codecov gems to Gemfile to enable this task'
32
+ end
33
+ end
34
+
35
+ require 'rspec'
36
+ require 'git'
37
+ require 'fileutils'
38
+
39
+ def pupmods_dir
40
+ @pupmods_dir ||= begin
41
+ p = File.join(fixtures_dir, 'puppetlabs')
42
+ FileUtils.mkdir_p(p) unless File.exist?(p)
43
+ p
44
+ end
45
+ end
46
+
47
+ def remote_testing_repo
48
+ File.join(pupmods_dir, 'puppetlabs-testing.git')
49
+ end
50
+
51
+ # localizes the remote repo for faster testing, download once and use the local machine as the remote repo
52
+ def setup_fake_module
53
+ Git.clone('https://github.com/puppetlabs/puppetlabs-testing.git', remote_testing_repo) unless Dir.exist?(File.join(remote_testing_repo, '.git'))
54
+ end
55
+
56
+ def destroy_fake_modules
57
+ FileUtils.rm_rf(pupmods_dir)
58
+ end
59
+
60
+ def fixtures_dir
61
+ @fixtures_dir ||= File.join(__dir__, 'fixtures')
62
+ end
63
+
64
+ RSpec.configure do |config|
65
+ config.before(:suite) do
66
+ setup_fake_module
67
+ # provide a fake github token for the tests
68
+ ENV['GITHUB_TOKEN'] = 'github-token'
69
+ end
70
+ config.before(:each) do
71
+ allow(PdkSync::Utils.configuration).to receive(:git_base_uri).and_return("file://#{fixtures_dir}")
72
+ end
73
+ config.after(:suite) { FileUtils.rm_rf(pupmods_dir) }
74
+ end