cany 0.0.1
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/.gitignore +18 -0
- data/Gemfile +9 -0
- data/LICENSE.txt +22 -0
- data/README.md +115 -0
- data/Rakefile +5 -0
- data/bin/cany +19 -0
- data/cany.gemspec +24 -0
- data/lib/cany.rb +29 -0
- data/lib/cany/dpkg.rb +4 -0
- data/lib/cany/dpkg/builder.rb +37 -0
- data/lib/cany/dpkg/creator.rb +145 -0
- data/lib/cany/dpkg/deb_helper_recipe.rb +28 -0
- data/lib/cany/recipe.rb +128 -0
- data/lib/cany/recipes/bundler.rb +33 -0
- data/lib/cany/recipes/rails.rb +37 -0
- data/lib/cany/recipes/thin.rb +25 -0
- data/lib/cany/recipes/web_server.rb +28 -0
- data/lib/cany/specification.rb +21 -0
- data/lib/cany/specification/dsl.rb +39 -0
- data/lib/cany/version.rb +10 -0
- data/spec/cany/specification_spec.rb +79 -0
- data/spec/cany_spec.rb +20 -0
- data/spec/dpkg/builder_spec.rb +53 -0
- data/spec/dpkg/creator_spec.rb +221 -0
- data/spec/fixtures/multiple/one.canspec +0 -0
- data/spec/fixtures/multiple/two.canspec +0 -0
- data/spec/fixtures/single/single.canspec +3 -0
- data/spec/fixtures/testgem.lock +10 -0
- data/spec/spec_helper.rb +34 -0
- data/spec/support/file_matchers.rb +23 -0
- metadata +128 -0
@@ -0,0 +1,53 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'cany/recipes/bundler'
|
3
|
+
require 'cany/recipes/rails'
|
4
|
+
|
5
|
+
|
6
|
+
describe Cany::Dpkg::Builder do
|
7
|
+
let!(:dir) { Dir.mktmpdir }
|
8
|
+
after { FileUtils.remove_entry dir}
|
9
|
+
let(:spec) do
|
10
|
+
s = Cany::Specification.new do
|
11
|
+
name 'dpkg-creator-test'
|
12
|
+
version '0.1'
|
13
|
+
description 'Test Project'
|
14
|
+
maintainer_name 'Hans Otto'
|
15
|
+
maintainer_email 'hans.otto@example.org'
|
16
|
+
website 'http://example.org'
|
17
|
+
licence 'GPL-2+'
|
18
|
+
end
|
19
|
+
s.base_dir = dir
|
20
|
+
s
|
21
|
+
end
|
22
|
+
let(:builder) { Cany::Dpkg::Builder.new(spec) }
|
23
|
+
|
24
|
+
describe '#setup_recipes' do
|
25
|
+
it 'should always setup debhelper recipe' do
|
26
|
+
expect(Cany::Dpkg::DebHelperRecipe).to receive(:new).with(spec, nil)
|
27
|
+
builder.setup_recipes
|
28
|
+
end
|
29
|
+
|
30
|
+
it 'should instance any used recipes' do
|
31
|
+
spec.setup do
|
32
|
+
use :bundler
|
33
|
+
use :rails
|
34
|
+
end
|
35
|
+
expect(Cany::Dpkg::DebHelperRecipe).to receive(:new).ordered.with(spec, nil).and_call_original
|
36
|
+
expect(Cany::Recipes::Rails).to receive(:new).ordered.with(spec, kind_of(Cany::Dpkg::DebHelperRecipe)).and_call_original
|
37
|
+
expect(Cany::Recipes::Bundler).to receive(:new).ordered.with(spec, kind_of(Cany::Recipes::Rails)).and_call_original
|
38
|
+
builder.setup_recipes
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
describe '#run' do
|
43
|
+
it 'should setup recipes' do
|
44
|
+
expect(builder).to receive(:setup_recipes).and_call_original
|
45
|
+
builder.run 'clean'
|
46
|
+
end
|
47
|
+
|
48
|
+
it 'should call delegate the clean action to the loaded recipes' do
|
49
|
+
expect_any_instance_of(Cany::Dpkg::DebHelperRecipe).to receive(:clean)
|
50
|
+
builder.run 'clean'
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
@@ -0,0 +1,221 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Cany::Dpkg::Creator do
|
4
|
+
|
5
|
+
context '#run' do
|
6
|
+
let!(:dir) { Dir.mktmpdir }
|
7
|
+
after { FileUtils.remove_entry dir}
|
8
|
+
let(:spec) do
|
9
|
+
s = Cany::Specification.new do
|
10
|
+
name 'dpkg-creator-test'
|
11
|
+
version '0.1'
|
12
|
+
description 'Test Project'
|
13
|
+
maintainer_name 'Hans Otto'
|
14
|
+
maintainer_email 'hans.otto@example.org'
|
15
|
+
website 'http://example.org'
|
16
|
+
licence 'GPL-2+'
|
17
|
+
end
|
18
|
+
s.base_dir = dir
|
19
|
+
s
|
20
|
+
end
|
21
|
+
let(:run) { Cany::Dpkg::Creator.new(spec).run *(@run_args || []) }
|
22
|
+
|
23
|
+
context 'debian directory' do
|
24
|
+
subject { File.join dir, 'debian' }
|
25
|
+
|
26
|
+
it do
|
27
|
+
run
|
28
|
+
expect(subject).to be_a_directory
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
context 'source format file' do
|
33
|
+
subject { File.join dir, 'debian', 'source', 'format' }
|
34
|
+
|
35
|
+
it do
|
36
|
+
run
|
37
|
+
expect(subject).to be_a_file
|
38
|
+
expect(subject).to have_the_content '3.0 (native)'
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
context 'compat file' do
|
43
|
+
subject { File.join dir, 'debian', 'compat' }
|
44
|
+
|
45
|
+
it do
|
46
|
+
run
|
47
|
+
expect(subject).to be_a_file
|
48
|
+
expect(subject).to have_the_content '8'
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
context 'control file' do
|
53
|
+
let(:filename) { File.join dir, 'debian', 'control' }
|
54
|
+
subject { DebControl::ControlFileBase.read filename }
|
55
|
+
|
56
|
+
it do
|
57
|
+
run
|
58
|
+
expect(subject.paragraphs.size).to eq 2
|
59
|
+
source = subject.paragraphs.first
|
60
|
+
binary = subject.paragraphs[1]
|
61
|
+
|
62
|
+
expect(source).to eq({
|
63
|
+
'Source' => 'dpkg-creator-test',
|
64
|
+
'Section' => 'ruby',
|
65
|
+
'Priority' => 'optional',
|
66
|
+
'Maintainer' => 'Hans Otto <hans.otto@example.org>',
|
67
|
+
'Standards-Version' => '3.9.2',
|
68
|
+
'Build-Depends' => 'debhelper (>= 7.0.50~), ruby, ruby-dev',
|
69
|
+
'Homepage' => 'http://example.org'
|
70
|
+
})
|
71
|
+
|
72
|
+
expect(binary).to eq({
|
73
|
+
'Package' => 'dpkg-creator-test',
|
74
|
+
'Architecture' => 'any',
|
75
|
+
'Depends' => '${shlibs:Depends}, ${misc:Depends}, ruby',
|
76
|
+
'Description' => 'Test Project'
|
77
|
+
})
|
78
|
+
end
|
79
|
+
|
80
|
+
it 'use the specified ruby packages' do
|
81
|
+
@run_args = %w(--ruby-deb ruby2.0)
|
82
|
+
run
|
83
|
+
expect(subject.paragraphs.size).to eq 2
|
84
|
+
source = subject.paragraphs.first
|
85
|
+
binary = subject.paragraphs[1]
|
86
|
+
|
87
|
+
expect(source).to eq({
|
88
|
+
'Source' => 'dpkg-creator-test',
|
89
|
+
'Section' => 'ruby',
|
90
|
+
'Priority' => 'optional',
|
91
|
+
'Maintainer' => 'Hans Otto <hans.otto@example.org>',
|
92
|
+
'Standards-Version' => '3.9.2',
|
93
|
+
'Build-Depends' => 'debhelper (>= 7.0.50~), ruby2.0, ruby2.0-dev',
|
94
|
+
'Homepage' => 'http://example.org'
|
95
|
+
})
|
96
|
+
|
97
|
+
expect(binary).to eq({
|
98
|
+
'Package' => 'dpkg-creator-test',
|
99
|
+
'Architecture' => 'any',
|
100
|
+
'Depends' => '${shlibs:Depends}, ${misc:Depends}, ruby2.0',
|
101
|
+
'Description' => 'Test Project'
|
102
|
+
})
|
103
|
+
end
|
104
|
+
|
105
|
+
it 'use the specified ruby' do
|
106
|
+
@run_args = %w(--ruby ruby2.0)
|
107
|
+
run
|
108
|
+
expect(subject.paragraphs.size).to eq 2
|
109
|
+
source = subject.paragraphs.first
|
110
|
+
binary = subject.paragraphs[1]
|
111
|
+
|
112
|
+
expect(source).to eq({
|
113
|
+
'Source' => 'dpkg-creator-test',
|
114
|
+
'Section' => 'ruby',
|
115
|
+
'Priority' => 'optional',
|
116
|
+
'Maintainer' => 'Hans Otto <hans.otto@example.org>',
|
117
|
+
'Standards-Version' => '3.9.2',
|
118
|
+
'Build-Depends' => 'debhelper (>= 7.0.50~), ruby2.0, ruby2.0-dev',
|
119
|
+
'Homepage' => 'http://example.org'
|
120
|
+
})
|
121
|
+
|
122
|
+
expect(binary).to eq({
|
123
|
+
'Package' => 'dpkg-creator-test',
|
124
|
+
'Architecture' => 'any',
|
125
|
+
'Depends' => '${shlibs:Depends}, ${misc:Depends}, ruby2.0',
|
126
|
+
'Description' => 'Test Project'
|
127
|
+
})
|
128
|
+
end
|
129
|
+
|
130
|
+
it 'should add extra deps in specific gems are used' do
|
131
|
+
FileUtils.copy File.expand_path('../../fixtures/testgem.lock', __FILE__), File.join(dir, 'Gemfile.lock')
|
132
|
+
run
|
133
|
+
expect(subject.paragraphs.size).to eq 2
|
134
|
+
source =
|
135
|
+
binary = subject.paragraphs[1]
|
136
|
+
src_deps = subject.paragraphs.first['Build-Depends'].gsub(', ', ',').split(',')
|
137
|
+
bin_deps = subject.paragraphs[1]['Depends'].gsub(', ', ',').split(',')
|
138
|
+
|
139
|
+
expect(src_deps).to include('libpq-dev')
|
140
|
+
expect(bin_deps).to include('libpq5')
|
141
|
+
end
|
142
|
+
end
|
143
|
+
|
144
|
+
context 'copyright file' do
|
145
|
+
let(:filename) { File.join dir, 'debian', 'copyright' }
|
146
|
+
subject { DebControl::ControlFileBase.read filename }
|
147
|
+
|
148
|
+
it do
|
149
|
+
run
|
150
|
+
expect(subject.paragraphs.size).to eq 2
|
151
|
+
|
152
|
+
expect(subject.paragraphs.first).to eq({
|
153
|
+
'Format' => 'http://dep.debian.net/deps/dep5',
|
154
|
+
'Upstream-Name' => 'dpkg-creator-test',
|
155
|
+
})
|
156
|
+
|
157
|
+
expect(subject.paragraphs[1]).to eq({
|
158
|
+
'Files' => '*',
|
159
|
+
'Copyright' => "#{Time.now.year} Hans Otto",
|
160
|
+
'Licence' => "GPL-2+\n[LICENCE TEXT]"
|
161
|
+
})
|
162
|
+
end
|
163
|
+
end
|
164
|
+
|
165
|
+
context 'rules file' do
|
166
|
+
let(:filename) { File.join dir, 'debian', 'rules' }
|
167
|
+
subject { File.read filename }
|
168
|
+
|
169
|
+
it do
|
170
|
+
run
|
171
|
+
|
172
|
+
expect(filename).to be_executable
|
173
|
+
|
174
|
+
expect(subject).to start_with '#!/usr/bin/make -f'
|
175
|
+
expect(subject).to include "export PATH := debian/bin:${PATH}\n"
|
176
|
+
expect(subject).to include "export GEM_PATH := debian/gems:${GEM_PATH}\n"
|
177
|
+
expect(subject).to include "\truby -S cany dpkg-builder $@"
|
178
|
+
expect(subject).to include "\truby -cS cany >/dev/null || ruby -S gem install --no-ri --no-rdoc --install-dir debian/gems --bindir debian/bin $${CANY_GEM:-cany}"
|
179
|
+
expect(subject).to include "override_dh_prep:"
|
180
|
+
end
|
181
|
+
|
182
|
+
it 'should use the selected interpreter' do
|
183
|
+
@run_args = '--ruby-exe', 'ruby1.9.1'
|
184
|
+
run
|
185
|
+
|
186
|
+
expect(filename).to be_executable
|
187
|
+
|
188
|
+
expect(subject).to start_with '#!/usr/bin/make -f'
|
189
|
+
expect(subject).to include "\truby1.9.1 -S cany dpkg-builder $@"
|
190
|
+
expect(subject).to include "\truby1.9.1 -cS cany >/dev/null || ruby1.9.1 -S gem install --no-ri --no-rdoc --install-dir debian/gems --bindir debian/bin $${CANY_GEM:-cany}"
|
191
|
+
end
|
192
|
+
|
193
|
+
it 'should use the current ruby' do
|
194
|
+
@run_args = '--ruby', 'ruby1.9.1'
|
195
|
+
run
|
196
|
+
|
197
|
+
expect(filename).to be_executable
|
198
|
+
|
199
|
+
expect(subject).to start_with '#!/usr/bin/make -f'
|
200
|
+
expect(subject).to include "\truby1.9.1 -S cany dpkg-builder $@"
|
201
|
+
expect(subject).to include "\truby1.9.1 -cS cany >/dev/null || ruby1.9.1 -S gem install --no-ri --no-rdoc --install-dir debian/gems --bindir debian/bin $${CANY_GEM:-cany}"
|
202
|
+
end
|
203
|
+
end
|
204
|
+
|
205
|
+
context 'changelog file' do
|
206
|
+
let(:filename) { File.join dir, 'debian', 'changelog' }
|
207
|
+
subject { File.read filename }
|
208
|
+
|
209
|
+
it do
|
210
|
+
Timecop.freeze(Time.new(2013, 8, 14, 1, 18, 51, 2)) do
|
211
|
+
run
|
212
|
+
end
|
213
|
+
expect(subject).to eq 'dpkg-creator-test (0.1-1) unstable; urgency=low
|
214
|
+
|
215
|
+
* Build with cany
|
216
|
+
|
217
|
+
-- Hans Otto <hans.otto@example.org> Wed, 14 Aug 2013 01:18:51 +0000'
|
218
|
+
end
|
219
|
+
end
|
220
|
+
end
|
221
|
+
end
|
File without changes
|
File without changes
|
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1,34 @@
|
|
1
|
+
require 'bundler/setup'
|
2
|
+
|
3
|
+
require 'cany'
|
4
|
+
require 'deb_control'
|
5
|
+
require 'tmpdir'
|
6
|
+
require 'timecop'
|
7
|
+
|
8
|
+
Dir[File.expand_path('spec/support/**/*.rb')].each {|f| require f}
|
9
|
+
|
10
|
+
RSpec.configure do |config|
|
11
|
+
# ## Mock Framework
|
12
|
+
#
|
13
|
+
# If you prefer to use mocha, flexmock or RR, uncomment the appropriate line:
|
14
|
+
#
|
15
|
+
# config.mock_with :mocha
|
16
|
+
# config.mock_with :flexmock
|
17
|
+
# config.mock_with :rr
|
18
|
+
|
19
|
+
# Run specs in random order to surface order dependencies. If you find an
|
20
|
+
# order dependency and want to debug it, you can fix the order by providing
|
21
|
+
# the seed, which is printed after each run.
|
22
|
+
# --seed 1234
|
23
|
+
config.order = 'random'
|
24
|
+
|
25
|
+
config.expect_with :rspec do |c|
|
26
|
+
# Only allow expect syntax
|
27
|
+
c.syntax = :expect
|
28
|
+
end
|
29
|
+
|
30
|
+
config.before(:each) do
|
31
|
+
@executed_programs = []
|
32
|
+
allow_any_instance_of(Cany::Recipe).to receive(:exec) { |*args| @executed_programs << args }
|
33
|
+
end
|
34
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
RSpec::Matchers.define :be_a_directory do
|
2
|
+
match do |actual|
|
3
|
+
File.directory? actual.to_s
|
4
|
+
end
|
5
|
+
end
|
6
|
+
|
7
|
+
RSpec::Matchers.define :be_a_file do
|
8
|
+
match do |actual|
|
9
|
+
File.file? actual.to_s
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
RSpec::Matchers.define :have_the_content do |expected|
|
14
|
+
match do |actual|
|
15
|
+
File.read(actual.to_s) == expected
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
RSpec::Matchers.define :be_executable do
|
20
|
+
match do |actual|
|
21
|
+
File.executable? actual.to_s
|
22
|
+
end
|
23
|
+
end
|
metadata
ADDED
@@ -0,0 +1,128 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: cany
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Malte Swart
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2013-09-12 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: bundler
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ~>
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '1.3'
|
20
|
+
type: :development
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ~>
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '1.3'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: rake
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - '>='
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '0'
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - '>='
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: rspec
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - '>='
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '0'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - '>='
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
55
|
+
description: Canning your ruby applications
|
56
|
+
email:
|
57
|
+
- mswart@devtation.de
|
58
|
+
executables:
|
59
|
+
- cany
|
60
|
+
extensions: []
|
61
|
+
extra_rdoc_files: []
|
62
|
+
files:
|
63
|
+
- .gitignore
|
64
|
+
- Gemfile
|
65
|
+
- LICENSE.txt
|
66
|
+
- README.md
|
67
|
+
- Rakefile
|
68
|
+
- bin/cany
|
69
|
+
- cany.gemspec
|
70
|
+
- lib/cany.rb
|
71
|
+
- lib/cany/dpkg.rb
|
72
|
+
- lib/cany/dpkg/builder.rb
|
73
|
+
- lib/cany/dpkg/creator.rb
|
74
|
+
- lib/cany/dpkg/deb_helper_recipe.rb
|
75
|
+
- lib/cany/recipe.rb
|
76
|
+
- lib/cany/recipes/bundler.rb
|
77
|
+
- lib/cany/recipes/rails.rb
|
78
|
+
- lib/cany/recipes/thin.rb
|
79
|
+
- lib/cany/recipes/web_server.rb
|
80
|
+
- lib/cany/specification.rb
|
81
|
+
- lib/cany/specification/dsl.rb
|
82
|
+
- lib/cany/version.rb
|
83
|
+
- spec/cany/specification_spec.rb
|
84
|
+
- spec/cany_spec.rb
|
85
|
+
- spec/dpkg/builder_spec.rb
|
86
|
+
- spec/dpkg/creator_spec.rb
|
87
|
+
- spec/fixtures/multiple/one.canspec
|
88
|
+
- spec/fixtures/multiple/two.canspec
|
89
|
+
- spec/fixtures/single/single.canspec
|
90
|
+
- spec/fixtures/testgem.lock
|
91
|
+
- spec/spec_helper.rb
|
92
|
+
- spec/support/file_matchers.rb
|
93
|
+
homepage: https://github.com/mswart/cany
|
94
|
+
licenses:
|
95
|
+
- MIT
|
96
|
+
metadata: {}
|
97
|
+
post_install_message:
|
98
|
+
rdoc_options: []
|
99
|
+
require_paths:
|
100
|
+
- lib
|
101
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
102
|
+
requirements:
|
103
|
+
- - '>='
|
104
|
+
- !ruby/object:Gem::Version
|
105
|
+
version: '0'
|
106
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
107
|
+
requirements:
|
108
|
+
- - '>='
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: '0'
|
111
|
+
requirements: []
|
112
|
+
rubyforge_project:
|
113
|
+
rubygems_version: 2.0.3
|
114
|
+
signing_key:
|
115
|
+
specification_version: 4
|
116
|
+
summary: Canning your ruby applications
|
117
|
+
test_files:
|
118
|
+
- spec/cany/specification_spec.rb
|
119
|
+
- spec/cany_spec.rb
|
120
|
+
- spec/dpkg/builder_spec.rb
|
121
|
+
- spec/dpkg/creator_spec.rb
|
122
|
+
- spec/fixtures/multiple/one.canspec
|
123
|
+
- spec/fixtures/multiple/two.canspec
|
124
|
+
- spec/fixtures/single/single.canspec
|
125
|
+
- spec/fixtures/testgem.lock
|
126
|
+
- spec/spec_helper.rb
|
127
|
+
- spec/support/file_matchers.rb
|
128
|
+
has_rdoc:
|