capsulecd 1.0.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.
- checksums.yaml +7 -0
- data/.coveralls.yml +2 -0
- data/.dockerignore +5 -0
- data/.gitignore +95 -0
- data/.rspec +3 -0
- data/.simplecov +9 -0
- data/Dockerfile +16 -0
- data/Dockerfile.chef +26 -0
- data/Dockerfile.javascript +7 -0
- data/Dockerfile.node +7 -0
- data/Dockerfile.python +7 -0
- data/Dockerfile.ruby +4 -0
- data/FEATURES.md +12 -0
- data/Gemfile +26 -0
- data/LICENSE.md +22 -0
- data/README.md +227 -0
- data/Rakefile +43 -0
- data/bin/capsulecd +4 -0
- data/capsulecd.gemspec +27 -0
- data/circle.yml +24 -0
- data/lib/capsulecd/base/common/git_utils.rb +90 -0
- data/lib/capsulecd/base/common/validation_utils.rb +22 -0
- data/lib/capsulecd/base/configuration.rb +151 -0
- data/lib/capsulecd/base/engine.rb +163 -0
- data/lib/capsulecd/base/runner/circleci.rb +37 -0
- data/lib/capsulecd/base/runner/default.rb +38 -0
- data/lib/capsulecd/base/source/github.rb +183 -0
- data/lib/capsulecd/base/transform_engine.rb +62 -0
- data/lib/capsulecd/chef/chef_engine.rb +172 -0
- data/lib/capsulecd/chef/chef_helper.rb +29 -0
- data/lib/capsulecd/cli.rb +64 -0
- data/lib/capsulecd/error.rb +51 -0
- data/lib/capsulecd/javascript/javascript_engine.rb +213 -0
- data/lib/capsulecd/node/node_engine.rb +141 -0
- data/lib/capsulecd/python/python_engine.rb +157 -0
- data/lib/capsulecd/ruby/ruby_engine.rb +191 -0
- data/lib/capsulecd/ruby/ruby_helper.rb +60 -0
- data/lib/capsulecd/version.rb +3 -0
- data/lib/capsulecd.rb +16 -0
- data/logo.svg +1 -0
- data/spec/fixtures/chef/cookbook_analogj_test/CHANGELOG.md +3 -0
- data/spec/fixtures/chef/cookbook_analogj_test/Gemfile +18 -0
- data/spec/fixtures/chef/cookbook_analogj_test/LICENSE +21 -0
- data/spec/fixtures/chef/cookbook_analogj_test/README.md +13 -0
- data/spec/fixtures/chef/cookbook_analogj_test/Rakefile +1 -0
- data/spec/fixtures/chef/cookbook_analogj_test/Thorfile +12 -0
- data/spec/fixtures/chef/cookbook_analogj_test/chefignore +94 -0
- data/spec/fixtures/chef/cookbook_analogj_test/metadata.rb +5 -0
- data/spec/fixtures/chef/cookbook_analogj_test/recipes/default.rb +6 -0
- data/spec/fixtures/incorrect_configuration.yml +4 -0
- data/spec/fixtures/javascript/javascript_analogj_test/LICENSE +21 -0
- data/spec/fixtures/javascript/javascript_analogj_test/README.md +2 -0
- data/spec/fixtures/javascript/javascript_analogj_test/package.json +19 -0
- data/spec/fixtures/node/npm_analogj_test/LICENSE +21 -0
- data/spec/fixtures/node/npm_analogj_test/README.md +2 -0
- data/spec/fixtures/node/npm_analogj_test/package.json +19 -0
- data/spec/fixtures/python/pip_analogj_test/LICENSE +21 -0
- data/spec/fixtures/python/pip_analogj_test/MANIFEST.in +1 -0
- data/spec/fixtures/python/pip_analogj_test/README.md +1 -0
- data/spec/fixtures/python/pip_analogj_test/VERSION +1 -0
- data/spec/fixtures/python/pip_analogj_test/setup.cfg +5 -0
- data/spec/fixtures/python/pip_analogj_test/setup.py +80 -0
- data/spec/fixtures/python/pip_analogj_test/tox.ini +14 -0
- data/spec/fixtures/ruby/gem_analogj_test/Gemfile +4 -0
- data/spec/fixtures/ruby/gem_analogj_test/LICENSE.txt +21 -0
- data/spec/fixtures/ruby/gem_analogj_test/README.md +41 -0
- data/spec/fixtures/ruby/gem_analogj_test/Rakefile +6 -0
- data/spec/fixtures/ruby/gem_analogj_test/bin/console +14 -0
- data/spec/fixtures/ruby/gem_analogj_test/bin/setup +8 -0
- data/spec/fixtures/ruby/gem_analogj_test/gem_analogj_test.gemspec +25 -0
- data/spec/fixtures/ruby/gem_analogj_test/lib/gem_analogj_test/version.rb +3 -0
- data/spec/fixtures/ruby/gem_analogj_test/lib/gem_analogj_test.rb +5 -0
- data/spec/fixtures/ruby/gem_analogj_test/spec/gem_analogj_test_spec.rb +7 -0
- data/spec/fixtures/ruby/gem_analogj_test/spec/spec_helper.rb +2 -0
- data/spec/fixtures/ruby/gem_analogj_test-0.1.4.gem +0 -0
- data/spec/fixtures/sample_chef_configuration.yml +8 -0
- data/spec/fixtures/sample_configuration.yml +7 -0
- data/spec/fixtures/sample_global_configuration.yml +23 -0
- data/spec/fixtures/sample_node_configuration.yml +7 -0
- data/spec/fixtures/sample_python_configuration.yml +8 -0
- data/spec/fixtures/sample_repo_configuration.yml +22 -0
- data/spec/fixtures/sample_ruby_configuration.yml +5 -0
- data/spec/fixtures/vcr_cassettes/chef_build_step.yml +636 -0
- data/spec/fixtures/vcr_cassettes/gem_build_step.yml +653 -0
- data/spec/fixtures/vcr_cassettes/gem_build_step_without_version_rb.yml +653 -0
- data/spec/fixtures/vcr_cassettes/integration_chef.yml +1399 -0
- data/spec/fixtures/vcr_cassettes/integration_node.yml +1388 -0
- data/spec/fixtures/vcr_cassettes/integration_python.yml +1388 -0
- data/spec/fixtures/vcr_cassettes/integration_ruby.yml +1377 -0
- data/spec/fixtures/vcr_cassettes/node_build_step.yml +647 -0
- data/spec/fixtures/vcr_cassettes/pip_build_step.yml +653 -0
- data/spec/lib/capsulecd/base/configuration_spec.rb +75 -0
- data/spec/lib/capsulecd/base/engine_spec.rb +51 -0
- data/spec/lib/capsulecd/base/source/github_spec.rb +253 -0
- data/spec/lib/capsulecd/base/transform_engine_spec.rb +55 -0
- data/spec/lib/capsulecd/chef/chef_engine_spec.rb +114 -0
- data/spec/lib/capsulecd/cli_spec.rb +57 -0
- data/spec/lib/capsulecd/node/node_engine_spec.rb +113 -0
- data/spec/lib/capsulecd/python/python_engine_spec.rb +118 -0
- data/spec/lib/capsulecd/ruby/ruby_engine_spec.rb +128 -0
- data/spec/spec_helper.rb +105 -0
- data/spec/support/file_system.rb +21 -0
- data/spec/support/package_types.rb +11 -0
- metadata +281 -0
|
@@ -0,0 +1,191 @@
|
|
|
1
|
+
require 'semverly'
|
|
2
|
+
require 'open3'
|
|
3
|
+
require 'bundler'
|
|
4
|
+
require_relative '../base/engine'
|
|
5
|
+
require_relative 'ruby_helper'
|
|
6
|
+
|
|
7
|
+
module CapsuleCD
|
|
8
|
+
module Ruby
|
|
9
|
+
class RubyEngine < Engine
|
|
10
|
+
def build_step
|
|
11
|
+
super
|
|
12
|
+
gemspec_path = CapsuleCD::Ruby::RubyHelper.get_gemspec_path(@source_git_local_path)
|
|
13
|
+
|
|
14
|
+
# check for/create required VERSION file
|
|
15
|
+
gemspec_data = CapsuleCD::Ruby::RubyHelper.load_gemspec_data(gemspec_path)
|
|
16
|
+
|
|
17
|
+
if !gemspec_data || !File.exist?(CapsuleCD::Ruby::RubyHelper.version_filepath(@source_git_local_path, gemspec_data.name))
|
|
18
|
+
fail CapsuleCD::Error::BuildPackageInvalid, 'version.rb file is required to process Ruby gem'
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
# bump up the version here.
|
|
22
|
+
# since there's no standardized way to bump up the version in the *.gemspec file, we're going to assume that the version
|
|
23
|
+
# is specified in a version file in the lib/<gem_name>/ directory, similar to how the bundler gem does it.
|
|
24
|
+
# ie. bundle gem <gem_name> will create a file: my_gem/lib/my_gem/version.rb with the following contents
|
|
25
|
+
# module MyGem
|
|
26
|
+
# VERSION = "0.1.0"
|
|
27
|
+
# end
|
|
28
|
+
#
|
|
29
|
+
# Jeweler and Hoe both do something similar.
|
|
30
|
+
# http://yehudakatz.com/2010/04/02/using-gemspecs-as-intended/
|
|
31
|
+
# http://timelessrepo.com/making-ruby-gems
|
|
32
|
+
# http://guides.rubygems.org/make-your-own-gem/
|
|
33
|
+
|
|
34
|
+
version_str = CapsuleCD::Ruby::RubyHelper.read_version_file(@source_git_local_path, gemspec_data.name)
|
|
35
|
+
next_version = bump_version(SemVer.parse(gemspec_data.version.to_s))
|
|
36
|
+
|
|
37
|
+
new_version_str = version_str.gsub(/(VERSION\s*=\s*['"])[0-9\.]+(['"])/, "\\1#{next_version}\\2")
|
|
38
|
+
CapsuleCD::Ruby::RubyHelper.write_version_file(@source_git_local_path, gemspec_data.name, new_version_str)
|
|
39
|
+
|
|
40
|
+
# check for/create any required missing folders/files
|
|
41
|
+
unless File.exist?(@source_git_local_path + '/Gemfile')
|
|
42
|
+
File.open(@source_git_local_path + '/Gemfile', 'w') { |file|
|
|
43
|
+
file.puts("source 'https://rubygems.org'")
|
|
44
|
+
file.puts('gemspec')
|
|
45
|
+
}
|
|
46
|
+
end
|
|
47
|
+
unless File.exist?(@source_git_local_path + '/Rakefile')
|
|
48
|
+
File.open(@source_git_local_path + '/Rakefile', 'w') { |file| file.write('task :default => :spec') }
|
|
49
|
+
end
|
|
50
|
+
unless File.exist?(@source_git_local_path + '/spec')
|
|
51
|
+
FileUtils.mkdir(@source_git_local_path + '/spec')
|
|
52
|
+
end
|
|
53
|
+
unless File.exist?(@source_git_local_path + '/.gitignore')
|
|
54
|
+
CapsuleCD::GitUtils.create_gitignore(@source_git_local_path, ['Ruby'])
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
# package the gem, make sure it builds correctly
|
|
58
|
+
Open3.popen3('gem build '+ File.basename(gemspec_path), chdir: @source_git_local_path) do |_stdin, stdout, stderr, external|
|
|
59
|
+
{ stdout: stdout, stderr: stderr }. each do |name, stream_buffer|
|
|
60
|
+
Thread.new do
|
|
61
|
+
until (line = stream_buffer.gets).nil?
|
|
62
|
+
puts "#{name} -> #{line}"
|
|
63
|
+
end
|
|
64
|
+
end
|
|
65
|
+
end
|
|
66
|
+
# wait for process
|
|
67
|
+
external.join
|
|
68
|
+
unless external.value.success?
|
|
69
|
+
fail CapsuleCD::Error::BuildPackageFailed, 'gem build failed. Check gemspec file and dependencies'
|
|
70
|
+
end
|
|
71
|
+
end
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
def test_step
|
|
75
|
+
super
|
|
76
|
+
|
|
77
|
+
gems = Dir.glob(@source_git_local_path + '/*.gem')
|
|
78
|
+
if gems.empty?
|
|
79
|
+
fail CapsuleCD::Error::TestDependenciesError, 'Ruby gem file could not be found'
|
|
80
|
+
end
|
|
81
|
+
gem_path = gems.first
|
|
82
|
+
|
|
83
|
+
# lets install the gem, and any dependencies
|
|
84
|
+
# http://guides.rubygems.org/make-your-own-gem/
|
|
85
|
+
Bundler.with_clean_env do
|
|
86
|
+
Open3.popen3('gem install ./' + File.basename(gem_path) + ' --ignore-dependencies', chdir: @source_git_local_path) do |_stdin, stdout, stderr, external|
|
|
87
|
+
{ stdout: stdout, stderr: stderr }. each do |name, stream_buffer|
|
|
88
|
+
Thread.new do
|
|
89
|
+
until (line = stream_buffer.gets).nil?
|
|
90
|
+
puts "#{name} -> #{line}"
|
|
91
|
+
end
|
|
92
|
+
end
|
|
93
|
+
end
|
|
94
|
+
# wait for process
|
|
95
|
+
external.join
|
|
96
|
+
unless external.value.success?
|
|
97
|
+
fail CapsuleCD::Error::TestDependenciesError, 'gem install failed. Check gemspec and gem dependencies'
|
|
98
|
+
end
|
|
99
|
+
end
|
|
100
|
+
|
|
101
|
+
Open3.popen3('bundle install', chdir: @source_git_local_path) do |_stdin, stdout, stderr, external|
|
|
102
|
+
{ stdout: stdout, stderr: stderr }. each do |name, stream_buffer|
|
|
103
|
+
Thread.new do
|
|
104
|
+
until (line = stream_buffer.gets).nil?
|
|
105
|
+
puts "#{name} -> #{line}"
|
|
106
|
+
end
|
|
107
|
+
end
|
|
108
|
+
end
|
|
109
|
+
# wait for process
|
|
110
|
+
external.join
|
|
111
|
+
unless external.value.success?
|
|
112
|
+
fail CapsuleCD::Error::TestDependenciesError, 'bundle install failed. Check Gemfile'
|
|
113
|
+
end
|
|
114
|
+
end
|
|
115
|
+
|
|
116
|
+
# run test command
|
|
117
|
+
test_cmd = @config.engine_cmd_test || 'rake spec'
|
|
118
|
+
Open3.popen3(test_cmd, chdir: @source_git_local_path) do |_stdin, stdout, stderr, external|
|
|
119
|
+
{ stdout: stdout, stderr: stderr }. each do |name, stream_buffer|
|
|
120
|
+
Thread.new do
|
|
121
|
+
until (line = stream_buffer.gets).nil?
|
|
122
|
+
puts "#{name} -> #{line}"
|
|
123
|
+
end
|
|
124
|
+
end
|
|
125
|
+
end
|
|
126
|
+
# wait for process
|
|
127
|
+
external.join
|
|
128
|
+
unless external.value.success?
|
|
129
|
+
fail CapsuleCD::Error::TestRunnerError, test_cmd + ' failed. Check log for exact error'
|
|
130
|
+
end
|
|
131
|
+
end unless @config.engine_disable_test
|
|
132
|
+
end
|
|
133
|
+
end
|
|
134
|
+
|
|
135
|
+
# run npm publish
|
|
136
|
+
def package_step
|
|
137
|
+
super
|
|
138
|
+
|
|
139
|
+
# commit changes to the cookbook. (test run occurs before this, and it should clean up any instrumentation files, created,
|
|
140
|
+
# as they will be included in the commmit and any release artifacts)
|
|
141
|
+
gemspec_data = CapsuleCD::Ruby::RubyHelper.get_gemspec_data(@source_git_local_path)
|
|
142
|
+
next_version = SemVer.parse(gemspec_data.version.to_s)
|
|
143
|
+
CapsuleCD::GitUtils.commit(@source_git_local_path, "(v#{next_version}) Automated packaging of release by CapsuleCD")
|
|
144
|
+
@source_release_commit = CapsuleCD::GitUtils.tag(@source_git_local_path, "v#{next_version}")
|
|
145
|
+
end
|
|
146
|
+
|
|
147
|
+
# this step should push the release to the package repository (ie. npm, chef supermarket, rubygems)
|
|
148
|
+
def release_step
|
|
149
|
+
super
|
|
150
|
+
|
|
151
|
+
unless @config.rubygems_api_key
|
|
152
|
+
fail CapsuleCD::Error::ReleaseCredentialsMissing, 'cannot deploy package to rubygems, credentials missing'
|
|
153
|
+
return
|
|
154
|
+
end
|
|
155
|
+
|
|
156
|
+
# write the config file.
|
|
157
|
+
rubygems_cred_path = File.expand_path('~/.gem')
|
|
158
|
+
|
|
159
|
+
FileUtils.mkdir_p(rubygems_cred_path)
|
|
160
|
+
File.open(rubygems_cred_path + '/credentials', 'w+', 0600) do |file|
|
|
161
|
+
file.write(<<-EOT.gsub(/^\s+/, '')
|
|
162
|
+
---
|
|
163
|
+
:rubygems_api_key: #{@config.rubygems_api_key}
|
|
164
|
+
EOT
|
|
165
|
+
)
|
|
166
|
+
end
|
|
167
|
+
|
|
168
|
+
# run gem push *.gem
|
|
169
|
+
gems = Dir.glob(@source_git_local_path + '/*.gem')
|
|
170
|
+
if gems.empty?
|
|
171
|
+
fail CapsuleCD::Error::TestDependenciesError, 'Ruby gem file could not be found'
|
|
172
|
+
end
|
|
173
|
+
gem_path = gems.first
|
|
174
|
+
Open3.popen3('gem push ' + File.basename(gem_path), chdir: @source_git_local_path) do |_stdin, stdout, stderr, external|
|
|
175
|
+
{ stdout: stdout, stderr: stderr }. each do |name, stream_buffer|
|
|
176
|
+
Thread.new do
|
|
177
|
+
until (line = stream_buffer.gets).nil?
|
|
178
|
+
puts "#{name} -> #{line}"
|
|
179
|
+
end
|
|
180
|
+
end
|
|
181
|
+
end
|
|
182
|
+
# wait for process
|
|
183
|
+
external.join
|
|
184
|
+
unless external.value.success?
|
|
185
|
+
fail CapsuleCD::Error::ReleasePackageError, 'Pushing gem to RubyGems.org using `gem push` failed. Check log for exact error'
|
|
186
|
+
end
|
|
187
|
+
end
|
|
188
|
+
end
|
|
189
|
+
end
|
|
190
|
+
end
|
|
191
|
+
end
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
require 'rubygems'
|
|
2
|
+
require 'thread'
|
|
3
|
+
module CapsuleCD
|
|
4
|
+
module Ruby
|
|
5
|
+
class RubyHelper
|
|
6
|
+
def self.version_filepath(repo_path, gem_name, version_filename = 'version.rb')
|
|
7
|
+
"#{repo_path}/lib/#{gem_name}/#{version_filename}"
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
def self.read_version_file(repo_path, gem_name, version_filename = 'version.rb')
|
|
11
|
+
File.read(self.version_filepath(repo_path, gem_name, version_filename))
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
def self.write_version_file(repo_path, gem_name, metadata_str, version_filename = 'version.rb')
|
|
15
|
+
File.open(self.version_filepath(repo_path, gem_name, version_filename), 'w') { |file| file.write(metadata_str) }
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
def self.get_gemspec_path(repo_path)
|
|
19
|
+
gemspecs = Dir.glob(repo_path + '/*.gemspec')
|
|
20
|
+
if gemspecs.empty?
|
|
21
|
+
fail CapsuleCD::Error::BuildPackageInvalid, '*.gemspec file is required to process Ruby gem'
|
|
22
|
+
end
|
|
23
|
+
gemspecs.first
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
def self.get_gemspec_data(repo_path)
|
|
27
|
+
self.load_gemspec_data(self.get_gemspec_path(repo_path))
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
# since the Gem::Specification class is basically eval'ing the gemspec file, and the gemspec file is doing a require
|
|
31
|
+
# to load the version.rb file, the version.rb file is cached in memory. We're going to try to get around that issue
|
|
32
|
+
# by parsing the gemspec file in a forked process.
|
|
33
|
+
# https://stackoverflow.com/questions/1076257/returning-data-from-forked-processes
|
|
34
|
+
def self.execute_in_child
|
|
35
|
+
read, write = IO.pipe
|
|
36
|
+
|
|
37
|
+
pid = fork do
|
|
38
|
+
read.close
|
|
39
|
+
result = yield
|
|
40
|
+
Marshal.dump(result, write)
|
|
41
|
+
exit!(0) # skips exit handlers.
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
write.close
|
|
45
|
+
result = read.read
|
|
46
|
+
Process.wait(pid)
|
|
47
|
+
raise "child failed" if result.empty?
|
|
48
|
+
Marshal.load(result)
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
def self.load_gemspec_data(gemspec_path)
|
|
52
|
+
return self.execute_in_child do
|
|
53
|
+
Gem::Specification::load(gemspec_path)
|
|
54
|
+
end
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
|
|
58
|
+
end
|
|
59
|
+
end
|
|
60
|
+
end
|
data/lib/capsulecd.rb
ADDED
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
module CapsuleCD
|
|
2
|
+
require 'capsulecd/base/engine'
|
|
3
|
+
require 'capsulecd/base/configuration'
|
|
4
|
+
require 'capsulecd/base/transform_engine'
|
|
5
|
+
|
|
6
|
+
require 'capsulecd/base/common/git_utils'
|
|
7
|
+
require 'capsulecd/base/common/validation_utils'
|
|
8
|
+
|
|
9
|
+
require 'capsulecd/base/runner/default'
|
|
10
|
+
require 'capsulecd/base/runner/circleci'
|
|
11
|
+
|
|
12
|
+
require 'capsulecd/base/source/github'
|
|
13
|
+
|
|
14
|
+
require 'capsulecd/version'
|
|
15
|
+
require 'capsulecd/error'
|
|
16
|
+
end
|
data/logo.svg
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" x="0px" y="0px" viewBox="0 0 100 100" enable-background="new 0 0 100 100" xml:space="preserve"><path fill="#000000" d="M62.748,19.414c-4.016,0-7.724,1.672-11.021,4.969l-1.734,1.734l-1.38-1.38 c-0.508-0.509-5.159-4.97-11.68-4.97c-4.015,0-7.724,1.672-11.022,4.97l-1.174,1.175c-4.562,4.562-8.327,14.373,0,22.7l1.38,1.38 l-1.749,1.749c-4.562,4.562-8.328,14.374,0.001,22.703l1.173,1.17c0.509,0.509,5.159,4.97,11.679,4.971c0,0,0,0.001,0,0.001 c4.016,0,7.723-1.673,11.021-4.971l1.748-1.748l1.396,1.396c0.509,0.509,5.158,4.97,11.679,4.97c4.016,0,7.725-1.672,11.022-4.971 l1.175-1.174c4.561-4.563,8.326-14.374,0-22.7l-1.396-1.396l1.733-1.733c0.287-0.287,2.843-2.918,4.175-6.916 c1.872-5.615,0.39-11.222-4.174-15.786l-1.175-1.174C73.918,23.875,69.269,19.414,62.748,19.414z M29.672,43.677 c-6.027-6.026-1.045-11.758,0-12.83l1.173-1.174c1.969-1.969,3.96-2.926,6.087-2.926c3.698,0,6.729,2.912,6.744,2.926l1.379,1.38 L31.052,45.058L29.672,43.677z M37.222,73.605c-3.7,0-6.731-2.912-6.746-2.927l-1.172-1.171c-6.029-6.028-1.045-11.76,0-12.833 l11.258-11.258c0.123,0.183,0.262,0.356,0.422,0.518L54.049,59c0.161,0.16,0.336,0.299,0.518,0.422L43.309,70.681 C41.339,72.648,39.349,73.605,37.222,73.605z M70.327,56.323c6.028,6.027,1.045,11.758,0,12.83l-1.173,1.174 c-1.969,1.969-3.96,2.926-6.088,2.926c-3.698,0-6.729-2.911-6.744-2.926l-1.396-1.396l14.005-14.004L70.327,56.323z M70.666,43.324 L59.407,54.582c-0.124-0.183-0.262-0.356-0.423-0.517L45.919,40.999c-0.161-0.16-0.335-0.299-0.518-0.422l11.26-11.259 c1.969-1.969,3.959-2.925,6.086-2.925c3.699,0,6.73,2.911,6.744,2.926l1.174,1.173C76.693,36.521,71.711,42.251,70.666,43.324z"></path></svg>
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
source 'https://rubygems.org'
|
|
2
|
+
|
|
3
|
+
gem 'berkshelf'
|
|
4
|
+
|
|
5
|
+
# Uncomment these lines if you want to live on the Edge:
|
|
6
|
+
#
|
|
7
|
+
# group :development do
|
|
8
|
+
# gem "berkshelf", github: "berkshelf/berkshelf"
|
|
9
|
+
# gem "vagrant", github: "mitchellh/vagrant", tag: "v1.6.3"
|
|
10
|
+
# end
|
|
11
|
+
#
|
|
12
|
+
# group :plugins do
|
|
13
|
+
# gem "vagrant-berkshelf", github: "berkshelf/vagrant-berkshelf"
|
|
14
|
+
# gem "vagrant-omnibus", github: "schisamo/vagrant-omnibus"
|
|
15
|
+
# end
|
|
16
|
+
|
|
17
|
+
gem "test-kitchen"
|
|
18
|
+
gem "kitchen-vagrant"
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
The MIT License (MIT)
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2016 Jason Kulatunga
|
|
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 all
|
|
13
|
+
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 THE
|
|
21
|
+
SOFTWARE.
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
task :test
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
|
|
3
|
+
require 'bundler'
|
|
4
|
+
require 'bundler/setup'
|
|
5
|
+
require 'berkshelf/thor'
|
|
6
|
+
|
|
7
|
+
begin
|
|
8
|
+
require "kitchen/thor_tasks"
|
|
9
|
+
Kitchen::ThorTasks.new
|
|
10
|
+
rescue LoadError
|
|
11
|
+
puts ">>>>> Kitchen gem not loaded, omitting tasks" unless ENV["CI"]
|
|
12
|
+
end
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
# Put files/directories that should be ignored in this file when uploading
|
|
2
|
+
# or sharing to the community site.
|
|
3
|
+
# Lines that start with '# ' are comments.
|
|
4
|
+
|
|
5
|
+
# OS generated files #
|
|
6
|
+
######################
|
|
7
|
+
.DS_Store
|
|
8
|
+
Icon?
|
|
9
|
+
nohup.out
|
|
10
|
+
ehthumbs.db
|
|
11
|
+
Thumbs.db
|
|
12
|
+
|
|
13
|
+
# SASS #
|
|
14
|
+
########
|
|
15
|
+
.sass-cache
|
|
16
|
+
|
|
17
|
+
# EDITORS #
|
|
18
|
+
###########
|
|
19
|
+
\#*
|
|
20
|
+
.#*
|
|
21
|
+
*~
|
|
22
|
+
*.sw[a-z]
|
|
23
|
+
*.bak
|
|
24
|
+
REVISION
|
|
25
|
+
TAGS*
|
|
26
|
+
tmtags
|
|
27
|
+
*_flymake.*
|
|
28
|
+
*_flymake
|
|
29
|
+
*.tmproj
|
|
30
|
+
.project
|
|
31
|
+
.settings
|
|
32
|
+
mkmf.log
|
|
33
|
+
|
|
34
|
+
## COMPILED ##
|
|
35
|
+
##############
|
|
36
|
+
a.out
|
|
37
|
+
*.o
|
|
38
|
+
*.pyc
|
|
39
|
+
*.so
|
|
40
|
+
*.com
|
|
41
|
+
*.class
|
|
42
|
+
*.dll
|
|
43
|
+
*.exe
|
|
44
|
+
*/rdoc/
|
|
45
|
+
|
|
46
|
+
# Testing #
|
|
47
|
+
###########
|
|
48
|
+
.watchr
|
|
49
|
+
.rspec
|
|
50
|
+
spec/*
|
|
51
|
+
spec/fixtures/*
|
|
52
|
+
test/*
|
|
53
|
+
features/*
|
|
54
|
+
Guardfile
|
|
55
|
+
Procfile
|
|
56
|
+
|
|
57
|
+
# SCM #
|
|
58
|
+
#######
|
|
59
|
+
.git
|
|
60
|
+
*/.git
|
|
61
|
+
.gitignore
|
|
62
|
+
.gitmodules
|
|
63
|
+
.gitconfig
|
|
64
|
+
.gitattributes
|
|
65
|
+
.svn
|
|
66
|
+
*/.bzr/*
|
|
67
|
+
*/.hg/*
|
|
68
|
+
*/.svn/*
|
|
69
|
+
|
|
70
|
+
# Berkshelf #
|
|
71
|
+
#############
|
|
72
|
+
cookbooks/*
|
|
73
|
+
tmp
|
|
74
|
+
|
|
75
|
+
# Cookbooks #
|
|
76
|
+
#############
|
|
77
|
+
CONTRIBUTING
|
|
78
|
+
CHANGELOG*
|
|
79
|
+
|
|
80
|
+
# Strainer #
|
|
81
|
+
############
|
|
82
|
+
Colanderfile
|
|
83
|
+
Strainerfile
|
|
84
|
+
.colander
|
|
85
|
+
.strainer
|
|
86
|
+
|
|
87
|
+
# Vagrant #
|
|
88
|
+
###########
|
|
89
|
+
.vagrant
|
|
90
|
+
Vagrantfile
|
|
91
|
+
|
|
92
|
+
# Travis #
|
|
93
|
+
##########
|
|
94
|
+
.travis.yml
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
The MIT License (MIT)
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2016 Jason Kulatunga
|
|
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 all
|
|
13
|
+
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 THE
|
|
21
|
+
SOFTWARE.
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "javascript_analogj_test",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"description": "test javascript package for capsulecd",
|
|
5
|
+
"main": "index.js",
|
|
6
|
+
"scripts": {
|
|
7
|
+
"test": "echo \"Error: no test specified\""
|
|
8
|
+
},
|
|
9
|
+
"repository": {
|
|
10
|
+
"type": "git",
|
|
11
|
+
"url": "git+https://github.com/AnalogJ/javascript_analogj_test.git"
|
|
12
|
+
},
|
|
13
|
+
"author": "",
|
|
14
|
+
"license": "MIT",
|
|
15
|
+
"bugs": {
|
|
16
|
+
"url": "https://github.com/AnalogJ/javascript_analogj_test/issues"
|
|
17
|
+
},
|
|
18
|
+
"homepage": "https://github.com/AnalogJ/javascript_analogj_test#readme"
|
|
19
|
+
}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
The MIT License (MIT)
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2016 Jason Kulatunga
|
|
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 all
|
|
13
|
+
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 THE
|
|
21
|
+
SOFTWARE.
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "npm_analogj_test",
|
|
3
|
+
"version": "1.0.8",
|
|
4
|
+
"description": "test javascript package for capsulecd",
|
|
5
|
+
"main": "index.js",
|
|
6
|
+
"scripts": {
|
|
7
|
+
"test": "echo \"Error: no test specified\""
|
|
8
|
+
},
|
|
9
|
+
"repository": {
|
|
10
|
+
"type": "git",
|
|
11
|
+
"url": "git+https://github.com/AnalogJ/npm_analogj_test.git"
|
|
12
|
+
},
|
|
13
|
+
"author": "",
|
|
14
|
+
"license": "MIT",
|
|
15
|
+
"bugs": {
|
|
16
|
+
"url": "https://github.com/AnalogJ/npm_analogj_test/issues"
|
|
17
|
+
},
|
|
18
|
+
"homepage": "https://github.com/AnalogJ/npm_analogj_test#readme"
|
|
19
|
+
}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
The MIT License (MIT)
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2016 Jason Kulatunga
|
|
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 all
|
|
13
|
+
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 THE
|
|
21
|
+
SOFTWARE.
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
include README.md LICENSE requirements.txt VERSION
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
1.0.6
|