octopus-serverspec-extensions 0.6.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: bfed5ab53aabecaa3e4f1d3456ee6a5d6f319ba1
4
+ data.tar.gz: 4f742c5038c75db738332bf47a62c773158e3464
5
+ SHA512:
6
+ metadata.gz: 8de409c5b768a1da9316fc711d13df8d2fb055b3f10a2fc4aa0acbc25c4e540e0e8c7f8da4c1eed95c8e54fed0543bc052fa6245abf51cba96e4e972a96c9191
7
+ data.tar.gz: 8159ab5d1678a4dd2961214a404e56664016b8b82b842863510a9a45fc18f36928d824c2c026efa962067f9861297b0884b48027f6ad5e6e20c29ea37dab11e7
data/.gitignore ADDED
@@ -0,0 +1,10 @@
1
+ /.bundle/
2
+ /.yardoc
3
+ /Gemfile.lock
4
+ /_yardoc/
5
+ /coverage/
6
+ /doc/
7
+ /pkg/
8
+ /spec/reports/
9
+ /tmp/
10
+ octopus-serverspec-extensions-*.gem
data/.rspec ADDED
@@ -0,0 +1,2 @@
1
+ --format documentation
2
+ --color
data/.travis.yml ADDED
@@ -0,0 +1,5 @@
1
+ sudo: false
2
+ language: ruby
3
+ rvm:
4
+ - 2.3.1
5
+ before_install: gem install bundler -v 1.13.6
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in octopus-serverspec-extensions.gemspec
4
+ gemspec
data/LICENSE.txt ADDED
@@ -0,0 +1,21 @@
1
+ The MIT License (MIT)
2
+
3
+ Copyright (c) 2016 Octopus Deploy
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in
13
+ all copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21
+ THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,39 @@
1
+ # Octopus::Serverspec::Extensions
2
+
3
+ SeverSpec extensions for Windows, adding support for chocolatey packages, npm packages, service accounts and more.
4
+
5
+ ## Installation
6
+
7
+ Add this line to your application's Gemfile:
8
+
9
+ ```ruby
10
+ gem 'octopus-serverspec-extensions'
11
+ ```
12
+
13
+ And then execute:
14
+
15
+ $ bundle
16
+
17
+ Or install it yourself as:
18
+
19
+ $ gem install octopus-serverspec-extensions
20
+
21
+ ## Usage
22
+
23
+ TODO: Write usage instructions here
24
+
25
+ ## Development
26
+
27
+ After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake spec` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
28
+
29
+ To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release`, which will create a git tag for the version, push git commits and tags, and push the `.gem` file to [rubygems.org](https://rubygems.org).
30
+
31
+ ## Contributing
32
+
33
+ Bug reports and pull requests are welcome on GitHub at https://github.com/octopus-deploy/octopus-serverspec-extensions.
34
+
35
+
36
+ ## License
37
+
38
+ The gem is available as open source under the terms of the [MIT License](http://opensource.org/licenses/MIT).
39
+
data/Rakefile ADDED
@@ -0,0 +1,6 @@
1
+ require "bundler/gem_tasks"
2
+ require "rspec/core/rake_task"
3
+
4
+ RSpec::Core::RakeTask.new(:spec)
5
+
6
+ task :default => :spec
data/bin/console ADDED
@@ -0,0 +1,14 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require "bundler/setup"
4
+ require "octopus/serverspec/extensions"
5
+
6
+ # You can add fixtures and/or initialization code here to make experimenting
7
+ # with your gem easier. You can also use a different console, if you like.
8
+
9
+ # (If you use this, don't forget to add pry to your Gemfile!)
10
+ # require "pry"
11
+ # Pry.start
12
+
13
+ require "irb"
14
+ IRB.start
data/bin/setup ADDED
@@ -0,0 +1,8 @@
1
+ #!/usr/bin/env bash
2
+ set -euo pipefail
3
+ IFS=$'\n\t'
4
+ set -vx
5
+
6
+ bundle install
7
+
8
+ # Do any other automated setup that you need to do here
@@ -0,0 +1,9 @@
1
+ require 'octopus_serverspec_extensions/type/chocolatey_package.rb'
2
+ require 'octopus_serverspec_extensions/type/npm_package.rb'
3
+ require 'octopus_serverspec_extensions/type/java_property_file.rb'
4
+ require 'octopus_serverspec_extensions/type/octopus_deploy_tentacle.rb'
5
+ require 'octopus_serverspec_extensions/matcher/have_version.rb'
6
+ require 'octopus_serverspec_extensions/matcher/run_under_account.rb'
7
+ require 'octopus_serverspec_extensions/matcher/have_windows_line_endings.rb'
8
+ require 'octopus_serverspec_extensions/matcher/have_linux_line_endings.rb'
9
+ require 'octopus_serverspec_extensions/version.rb'
@@ -0,0 +1,5 @@
1
+ RSpec::Matchers.define :have_linux_line_endings do
2
+ match do |file|
3
+ !file.content.include?("\r\n")
4
+ end
5
+ end
@@ -0,0 +1,23 @@
1
+ RSpec::Matchers.define :have_version do |version|
2
+ match do |file|
3
+ version_dll = Fiddle.dlopen('version.dll')
4
+
5
+ s=''
6
+ vsize = Fiddle::Function.new(version_dll['GetFileVersionInfoSize'],
7
+ [Fiddle::TYPE_VOIDP, Fiddle::TYPE_VOIDP],
8
+ Fiddle::TYPE_LONG).call(file.name, s)
9
+
10
+ raise 'Unable to determine the version number' unless vsize > 0
11
+
12
+ result = ' '*vsize
13
+ Fiddle::Function.new(version_dll['GetFileVersionInfo'],
14
+ [Fiddle::TYPE_VOIDP, Fiddle::TYPE_LONG,
15
+ Fiddle::TYPE_LONG, Fiddle::TYPE_VOIDP],
16
+ Fiddle::TYPE_VOIDP).call(file.name, 0, vsize, result)
17
+
18
+ rstring = result.unpack('v*').map{|s| s.chr if s<256}*''
19
+ r = /FileVersion..(.*?)\000/.match(rstring)
20
+
21
+ r[1] == version
22
+ end
23
+ end
@@ -0,0 +1,5 @@
1
+ RSpec::Matchers.define :have_windows_line_endings do
2
+ match do |file|
3
+ file.content.include?("\r\n")
4
+ end
5
+ end
@@ -0,0 +1,7 @@
1
+ RSpec::Matchers.define :run_under_account do |account_name|
2
+ match do |service|
3
+ Backend::PowerShell::Command.new do
4
+ exec "(Get-WmiObject win32_service | where-object { $_.Name -eq '#{service.name}' }).StartName -eq '#{account_name}"
5
+ end
6
+ end
7
+ end
@@ -0,0 +1,34 @@
1
+ require 'serverspec'
2
+ require 'serverspec/type/base'
3
+
4
+ module Serverspec::Type
5
+ class ChocolateyPackage < Base
6
+
7
+ def initialize(name)
8
+ @name = name
9
+ @runner = Specinfra::Runner
10
+ end
11
+
12
+ def installed?(provider, version)
13
+ command_result = @runner.run_command("choco list -l -r #{name}")
14
+
15
+ software = command_result.stdout.split("\r\n").each_with_object({}) do |s, h|
16
+ v, k = s.split('|')
17
+ h[String(v).strip.downcase] = String(k).strip.downcase
18
+ h
19
+ end
20
+
21
+ if (version.nil?)
22
+ !software[name.downcase].nil?
23
+ else
24
+ software[name.downcase] == version
25
+ end
26
+ end
27
+ end
28
+
29
+ def chocolatey_package(name)
30
+ ChocolateyPackage.new(name)
31
+ end
32
+ end
33
+
34
+ include Serverspec::Type
@@ -0,0 +1,29 @@
1
+ require 'serverspec'
2
+ require 'serverspec/type/base'
3
+
4
+ module Serverspec::Type
5
+ class JavaPropertyFile < Base
6
+
7
+ def initialize(name)
8
+ @name = name
9
+ @runner = Specinfra::Runner
10
+ end
11
+
12
+ def has_property?(propertyName, propertyValue)
13
+ properties = {}
14
+ IO.foreach(@name) do |line|
15
+ if (!line.start_with?('#'))
16
+ properties[$1.strip] = $2 if line =~ /([^=]*)=(.*)/
17
+ end
18
+ end
19
+
20
+ properties[propertyName] == propertyValue
21
+ end
22
+ end
23
+
24
+ def java_property_file(name)
25
+ JavaPropertyFile.new(name)
26
+ end
27
+ end
28
+
29
+ include Serverspec::Type
@@ -0,0 +1,37 @@
1
+ require 'serverspec'
2
+ require 'serverspec/type/base'
3
+
4
+ module Serverspec::Type
5
+ class NpmPackage < Base
6
+
7
+ def initialize(name)
8
+ @name = name
9
+ @runner = Specinfra::Runner
10
+ end
11
+
12
+ def installed?(provider, version)
13
+ command_result = @runner.run_command("npm list -g #{name}")
14
+
15
+ software = command_result.stdout.split("\n").each_with_object({}) do |s, h|
16
+ if s.include? "@"
17
+ package_name, package_version = s.split('@')
18
+ package_name = package_name.gsub(/.*? /, '')
19
+ h[String(package_name).strip.downcase] = String(package_version).strip.downcase
20
+ end
21
+ h
22
+ end
23
+
24
+ if (version.nil?)
25
+ !software[name.downcase].nil?
26
+ else
27
+ software[name.downcase] == version
28
+ end
29
+ end
30
+ end
31
+
32
+ def npm_package(name)
33
+ NpmPackage.new(name)
34
+ end
35
+ end
36
+
37
+ include Serverspec::Type
@@ -0,0 +1,122 @@
1
+ require 'serverspec'
2
+ require 'serverspec/type/base'
3
+ require 'net/http'
4
+ require 'json'
5
+
6
+ module Serverspec::Type
7
+ class OctopusDeployTentacle < Base
8
+ @machine = nil
9
+ @serverUrl = nil
10
+ @apiKey = nil
11
+
12
+ def initialize(serverUrl, apiKey, instance)
13
+ @name = "Octopus Deploy Tentacle #{instance}"
14
+ @runner = Specinfra::Runner
15
+ @serverUrl = serverUrl
16
+ @apiKey = apiKey
17
+
18
+ if (serverUrl.nil?)
19
+ puts "'serverUrl' was not provided. Unable to connect to Octopus server to validate configuration."
20
+ return
21
+ end
22
+ if (apiKey.nil?)
23
+ puts "'apiKey' was not provided. Unable to connect to Octopus server to validate configuration."
24
+ return
25
+ end
26
+
27
+ if (exists?)
28
+ thumbprint = `"c:\\program files\\Octopus Deploy\\Tentacle\\Tentacle.exe" --console --show-thumbprint --nologo --instance #{instance}`.strip.gsub('The thumbprint of this Tentacle is: ', '')
29
+ @machine = get_machine_via_api(serverUrl, apiKey, thumbprint)
30
+ end
31
+ end
32
+
33
+ def registered_with_the_server?
34
+ !@machine.nil?
35
+ end
36
+
37
+ def online?
38
+ return nil if @machine.nil?
39
+ @machine = poll_until_machine_has_completed_healthcheck(@serverUrl, @apiKey, @machine["Thumbprint"])
40
+ puts "Expected status 'Online|CalamariNeedsUpgrade|NeedsUpgrade' for Tentacle #{@name}, but got '#{@machine["Status"]}'" if (@machine["Status"] != "Online" && @machine["Status"] != "CalamariNeedsUpgrade")
41
+ @machine["Status"] == "Online" || @machine["Status"] == "CalamariNeedsUpgrade" || @machine["Status"] == "NeedsUpgrade"
42
+ end
43
+
44
+ def in_environment?(environment_name)
45
+ return false if @machine.nil?
46
+ url = "#{@serverUrl}/api/environments/all?api-key=#{@apiKey}"
47
+ resp = Net::HTTP.get_response(URI.parse(url))
48
+ environments = JSON.parse(resp.body)
49
+ environment_id = environments.select {|e| e["Name"] == environment_name}.first["Id"]
50
+ !@machine["EnvironmentIds"].select {|e| e == environment_id}.empty?
51
+ end
52
+
53
+ def has_role?(role_name)
54
+ return false if @machine.nil?
55
+ roles = @machine["Roles"]
56
+ !roles.select {|e| e == role_name}.empty?
57
+ end
58
+
59
+ def listening_tentacle?
60
+ return false if @machine.nil?
61
+ puts "Expected CommunicationStyle 'TentaclePassive' for Tentacle #{@name}, but got '#{@machine["EndPoint"]["CommunicationStyle"]}'" if (@machine["EndPoint"]["CommunicationStyle"] != "TentaclePassive")
62
+ @machine["EndPoint"]["CommunicationStyle"] == "TentaclePassive"
63
+ end
64
+
65
+ def polling_tentacle?
66
+ return false if @machine.nil?
67
+ puts "Expected CommunicationStyle 'TentacleActive' for Tentacle #{@name}, but got '#{@machine["EndPoint"]["CommunicationStyle"]}'" if (@machine["EndPoint"]["CommunicationStyle"] != "TentacleActive")
68
+ @machine["EndPoint"]["CommunicationStyle"] == "TentacleActive"
69
+ end
70
+
71
+ def exists?
72
+ ::File.exists?("c:\\program files\\Octopus Deploy\\Tentacle\\Tentacle.exe")
73
+ end
74
+ end
75
+
76
+ def octopus_deploy_tentacle(serverUrl, apiKey, instance)
77
+ OctopusDeployTentacle.new(serverUrl, apiKey, instance)
78
+ end
79
+
80
+ private
81
+
82
+ def poll_until_machine_has_completed_healthcheck(serverUrl, apiKey, thumbprint)
83
+ machine = nil
84
+ url = "#{serverUrl}/api/machines/all?api-key=#{apiKey}"
85
+
86
+ now = Time.now
87
+ counter = 1
88
+ loop do
89
+ machine = get_machine_via_api(serverUrl, apiKey, thumbprint)
90
+
91
+ break if machine.nil?
92
+ break if counter > 10
93
+ break if !machine_healthcheck_outstanding(machine)
94
+ puts "Machine health check for #{machine["Name"]} has not yet completed. Waiting 5 seconds to try again."
95
+ counter += 1
96
+ sleep 5
97
+ end
98
+
99
+ machine
100
+ end
101
+
102
+ def machine_healthcheck_outstanding(machine)
103
+ machine["StatusSummary"] == "This machine was recently added. Please perform a health check."
104
+ end
105
+
106
+ def get_machine_via_api(serverUrl, apiKey, thumbprint)
107
+ machine = nil
108
+ url = "#{serverUrl}/api/machines/all?api-key=#{apiKey}"
109
+
110
+ begin
111
+ resp = Net::HTTP.get_response(URI.parse(url))
112
+ body = JSON.parse(resp.body)
113
+ machine = body.select {|e| e["Thumbprint"] == thumbprint}.first unless body.nil?
114
+ rescue => e
115
+ puts "Unable to connect to #{url}: #{e}"
116
+ end
117
+
118
+ machine
119
+ end
120
+ end
121
+
122
+ include Serverspec::Type
@@ -0,0 +1,3 @@
1
+ module OctopusServerSpecExtensions
2
+ VERSION = "0.6.0"
3
+ end
@@ -0,0 +1,34 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'octopus_serverspec_extensions/version'
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = "octopus-serverspec-extensions"
8
+ spec.version = OctopusServerSpecExtensions::VERSION
9
+ spec.authors = ["Matt Richardson"]
10
+ spec.email = "devops@octopus.com"
11
+ spec.summary = %q{SeverSpec extensions for Windows}
12
+ spec.description = %q{SeverSpec extensions for Windows, adding support for chocolatey packages, npm packages, service accounts and more.}
13
+ spec.homepage = "https://github.com/octopus-deploy/octopus-serverspec-extensions"
14
+ spec.license = "MIT"
15
+
16
+ spec.files = `git ls-files -z`.split("\x0").reject do |f|
17
+ f.match(%r{^(test|spec|features)/})
18
+ end
19
+ spec.bindir = "exe"
20
+ spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
21
+ spec.require_paths = ["lib"]
22
+
23
+ spec.add_dependency "serverspec", "~> 2"
24
+ spec.add_dependency "specinfra", "~> 2"
25
+ spec.add_dependency 'rspec', '~> 3.0'
26
+ spec.add_dependency 'json', '~> 1.8', '>= 1.8.3'
27
+ spec.add_dependency 'fiddle', '~> 0.6.3'
28
+
29
+ spec.add_development_dependency "bundler", "~> 1.13"
30
+ spec.add_development_dependency "rake", "~> 10.0"
31
+ spec.add_development_dependency "rspec", "~> 3.0"
32
+ spec.add_development_dependency "rspec-teamcity", "~> 0.0.1"
33
+
34
+ end
metadata ADDED
@@ -0,0 +1,196 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: octopus-serverspec-extensions
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.6.0
5
+ platform: ruby
6
+ authors:
7
+ - Matt Richardson
8
+ autorequire:
9
+ bindir: exe
10
+ cert_chain: []
11
+ date: 2016-12-26 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: serverspec
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '2'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '2'
27
+ - !ruby/object:Gem::Dependency
28
+ name: specinfra
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '2'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '2'
41
+ - !ruby/object:Gem::Dependency
42
+ name: rspec
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '3.0'
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '3.0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: json
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: '1.8'
62
+ - - ">="
63
+ - !ruby/object:Gem::Version
64
+ version: 1.8.3
65
+ type: :runtime
66
+ prerelease: false
67
+ version_requirements: !ruby/object:Gem::Requirement
68
+ requirements:
69
+ - - "~>"
70
+ - !ruby/object:Gem::Version
71
+ version: '1.8'
72
+ - - ">="
73
+ - !ruby/object:Gem::Version
74
+ version: 1.8.3
75
+ - !ruby/object:Gem::Dependency
76
+ name: fiddle
77
+ requirement: !ruby/object:Gem::Requirement
78
+ requirements:
79
+ - - "~>"
80
+ - !ruby/object:Gem::Version
81
+ version: 0.6.3
82
+ type: :runtime
83
+ prerelease: false
84
+ version_requirements: !ruby/object:Gem::Requirement
85
+ requirements:
86
+ - - "~>"
87
+ - !ruby/object:Gem::Version
88
+ version: 0.6.3
89
+ - !ruby/object:Gem::Dependency
90
+ name: bundler
91
+ requirement: !ruby/object:Gem::Requirement
92
+ requirements:
93
+ - - "~>"
94
+ - !ruby/object:Gem::Version
95
+ version: '1.13'
96
+ type: :development
97
+ prerelease: false
98
+ version_requirements: !ruby/object:Gem::Requirement
99
+ requirements:
100
+ - - "~>"
101
+ - !ruby/object:Gem::Version
102
+ version: '1.13'
103
+ - !ruby/object:Gem::Dependency
104
+ name: rake
105
+ requirement: !ruby/object:Gem::Requirement
106
+ requirements:
107
+ - - "~>"
108
+ - !ruby/object:Gem::Version
109
+ version: '10.0'
110
+ type: :development
111
+ prerelease: false
112
+ version_requirements: !ruby/object:Gem::Requirement
113
+ requirements:
114
+ - - "~>"
115
+ - !ruby/object:Gem::Version
116
+ version: '10.0'
117
+ - !ruby/object:Gem::Dependency
118
+ name: rspec
119
+ requirement: !ruby/object:Gem::Requirement
120
+ requirements:
121
+ - - "~>"
122
+ - !ruby/object:Gem::Version
123
+ version: '3.0'
124
+ type: :development
125
+ prerelease: false
126
+ version_requirements: !ruby/object:Gem::Requirement
127
+ requirements:
128
+ - - "~>"
129
+ - !ruby/object:Gem::Version
130
+ version: '3.0'
131
+ - !ruby/object:Gem::Dependency
132
+ name: rspec-teamcity
133
+ requirement: !ruby/object:Gem::Requirement
134
+ requirements:
135
+ - - "~>"
136
+ - !ruby/object:Gem::Version
137
+ version: 0.0.1
138
+ type: :development
139
+ prerelease: false
140
+ version_requirements: !ruby/object:Gem::Requirement
141
+ requirements:
142
+ - - "~>"
143
+ - !ruby/object:Gem::Version
144
+ version: 0.0.1
145
+ description: SeverSpec extensions for Windows, adding support for chocolatey packages,
146
+ npm packages, service accounts and more.
147
+ email: devops@octopus.com
148
+ executables: []
149
+ extensions: []
150
+ extra_rdoc_files: []
151
+ files:
152
+ - ".gitignore"
153
+ - ".rspec"
154
+ - ".travis.yml"
155
+ - Gemfile
156
+ - LICENSE.txt
157
+ - README.md
158
+ - Rakefile
159
+ - bin/console
160
+ - bin/setup
161
+ - lib/octopus_serverspec_extensions.rb
162
+ - lib/octopus_serverspec_extensions/matcher/have_linux_line_endings.rb
163
+ - lib/octopus_serverspec_extensions/matcher/have_version.rb
164
+ - lib/octopus_serverspec_extensions/matcher/have_windows_line_endings.rb
165
+ - lib/octopus_serverspec_extensions/matcher/run_under_account.rb
166
+ - lib/octopus_serverspec_extensions/type/chocolatey_package.rb
167
+ - lib/octopus_serverspec_extensions/type/java_property_file.rb
168
+ - lib/octopus_serverspec_extensions/type/npm_package.rb
169
+ - lib/octopus_serverspec_extensions/type/octopus_deploy_tentacle.rb
170
+ - lib/octopus_serverspec_extensions/version.rb
171
+ - octopus-serverspec-extensions.gemspec
172
+ homepage: https://github.com/octopus-deploy/octopus-serverspec-extensions
173
+ licenses:
174
+ - MIT
175
+ metadata: {}
176
+ post_install_message:
177
+ rdoc_options: []
178
+ require_paths:
179
+ - lib
180
+ required_ruby_version: !ruby/object:Gem::Requirement
181
+ requirements:
182
+ - - ">="
183
+ - !ruby/object:Gem::Version
184
+ version: '0'
185
+ required_rubygems_version: !ruby/object:Gem::Requirement
186
+ requirements:
187
+ - - ">="
188
+ - !ruby/object:Gem::Version
189
+ version: '0'
190
+ requirements: []
191
+ rubyforge_project:
192
+ rubygems_version: 2.6.7
193
+ signing_key:
194
+ specification_version: 4
195
+ summary: SeverSpec extensions for Windows
196
+ test_files: []