mini_portile2 2.2.0.rc1 → 2.2.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.gitignore +2 -0
- data/.travis.yml +13 -10
- data/CHANGELOG.md +7 -2
- data/README.md +40 -1
- data/Rakefile +5 -1
- data/appveyor.yml +1 -0
- data/concourse/mini_portile.yml +160 -0
- data/concourse/tasks/rake-test/task.ps1 +13 -0
- data/concourse/tasks/rake-test/task.sh +13 -0
- data/lib/mini_portile2/mini_portile.rb +57 -19
- data/lib/mini_portile2/mini_portile_cmake.rb +7 -8
- data/lib/mini_portile2/version.rb +1 -1
- data/mini_portile2.gemspec +10 -5
- data/test/assets/gpg-fixtures/data +1 -0
- data/test/assets/gpg-fixtures/data.asc +9 -0
- data/test/assets/gpg-fixtures/data.invalid.asc +9 -0
- data/test/test_cook.rb +49 -3
- data/test/test_digest.rb +145 -0
- data/test/test_download.rb +11 -9
- data/test/test_proxy.rb +2 -2
- metadata +36 -13
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 2a300c53f89d0d5c33f152aedaf83c93fd7cf2da
|
4
|
+
data.tar.gz: ea999f1800170b0eca5d7d2f4ebc34b27ea1dcbd
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 47e8494cf606445724bf155bcd430568526c17142659a7dc4596dc0f8572f6b88ac2322565a63cf5323e9cb29a311cfd1c3ed866c323bec7c95e1e885142f5f9
|
7
|
+
data.tar.gz: '08246743bb302ab883fefa47657ea49d0b132bdeb2c59daf85d890c1b45aacc155111c1e7568e9f228a859150b20535169ad9281148cdf8278506cbfa4b84996'
|
data/.gitignore
CHANGED
data/.travis.yml
CHANGED
@@ -1,12 +1,15 @@
|
|
1
|
-
|
1
|
+
---
|
2
2
|
language: ruby
|
3
3
|
sudo: false
|
4
|
-
|
5
|
-
|
6
|
-
-
|
7
|
-
- 2.
|
8
|
-
- 2.
|
9
|
-
- 2.
|
10
|
-
-
|
11
|
-
-
|
12
|
-
|
4
|
+
matrix:
|
5
|
+
include:
|
6
|
+
- rvm: 1.9.3
|
7
|
+
- rvm: 2.0
|
8
|
+
- rvm: 2.1
|
9
|
+
- rvm: 2.2.5
|
10
|
+
- rvm: 2.3.1
|
11
|
+
- rvm: 2.4.0
|
12
|
+
env:
|
13
|
+
- RUBYOPT="--enable-frozen-string-literal --debug=frozen-string-literal"
|
14
|
+
- rvm: jruby-1.7
|
15
|
+
- rvm: jruby-9.1.5.0
|
data/CHANGELOG.md
CHANGED
@@ -1,8 +1,13 @@
|
|
1
|
-
### 2.2.0
|
1
|
+
### 2.2.0 / 2017-06-04
|
2
2
|
|
3
3
|
#### Enhancements
|
4
4
|
|
5
|
-
*
|
5
|
+
* Remove MD5 hashing of configure options, not avialbale in FIPS mode. (#78)
|
6
|
+
* Add experimental support for cmake-based projects.
|
7
|
+
* Retry on HTTP failures during downloads. [#63] (Thanks, @jtarchie and @jvshahid!)
|
8
|
+
* Support Ruby 2.4 frozen string literals.
|
9
|
+
* Support applying patches for users with misconfigured git worktree. [#69]
|
10
|
+
* Support gpg signature verification of download resources.
|
6
11
|
|
7
12
|
|
8
13
|
### 2.1.0 / 2016-01-06
|
data/README.md
CHANGED
@@ -147,7 +147,7 @@ task :libiconv do
|
|
147
147
|
recipe = MiniPortile.new("libiconv", "1.13.1")
|
148
148
|
recipe.files << {
|
149
149
|
url: "http://ftp.gnu.org/pub/gnu/libiconv/libiconv-1.13.1.tar.gz"],
|
150
|
-
|
150
|
+
sha256: "55a36168306089009d054ccdd9d013041bfc3ab26be7033d107821f1c4949a49"
|
151
151
|
}
|
152
152
|
checkpoint = ".#{recipe.name}-#{recipe.version}.installed"
|
153
153
|
|
@@ -174,6 +174,45 @@ The above example will:
|
|
174
174
|
As an exercise for the reader, you could specify the libiconv version
|
175
175
|
in an environment variable or a configuration file.
|
176
176
|
|
177
|
+
### Download verification
|
178
|
+
MiniPortile supports HTTPS, HTTP, FTP and FILE sources for download.
|
179
|
+
The integrity of the downloaded file can be verified per hash value or PGP signature.
|
180
|
+
This is particular important for untrusted sources (non-HTTPS).
|
181
|
+
|
182
|
+
#### Hash digest verification
|
183
|
+
MiniPortile can verify the integrity of the downloaded file per SHA256, SHA1 or MD5 hash digest.
|
184
|
+
|
185
|
+
```ruby
|
186
|
+
recipe.files << {
|
187
|
+
url: "http://your.host/file.tar.bz2",
|
188
|
+
sha256: "<32 byte hex value>",
|
189
|
+
}
|
190
|
+
```
|
191
|
+
|
192
|
+
#### PGP signature verification
|
193
|
+
MiniPortile can also verify the integrity of the downloaded file per PGP signature.
|
194
|
+
|
195
|
+
```ruby
|
196
|
+
public_key = <<-EOT
|
197
|
+
-----BEGIN PGP PUBLIC KEY BLOCK-----
|
198
|
+
Version: GnuPG v1
|
199
|
+
|
200
|
+
mQENBE7SKu8BCADQo6x4ZQfAcPlJMLmL8zBEBUS6GyKMMMDtrTh3Yaq481HB54oR
|
201
|
+
[...]
|
202
|
+
-----END PGP PUBLIC KEY BLOCK-----
|
203
|
+
EOT
|
204
|
+
|
205
|
+
recipe.files << {
|
206
|
+
url: "http://your.host/file.tar.bz2",
|
207
|
+
gpg: {
|
208
|
+
key: public_key,
|
209
|
+
signature_url: "http://your.host/file.tar.bz2.sig"
|
210
|
+
}
|
211
|
+
}
|
212
|
+
```
|
213
|
+
|
214
|
+
Please note, that the `gpg` executable is required to verify the signature.
|
215
|
+
It is therefore recommended to use the hash verification method instead of PGP, when used in `extconf.rb` while `gem install`.
|
177
216
|
|
178
217
|
### Native and/or Cross Compilation
|
179
218
|
|
data/Rakefile
CHANGED
@@ -1,10 +1,11 @@
|
|
1
1
|
require "rake/clean"
|
2
2
|
require 'bundler/gem_tasks'
|
3
|
+
require 'concourse'
|
3
4
|
|
4
5
|
namespace :test do
|
5
6
|
desc "Test MiniPortile by running unit tests"
|
6
7
|
task :unit do
|
7
|
-
sh "ruby -w -W2 -I. -Ilib -e \"#{Dir["test/test_*.rb"].map{|f| "require '#{f}';"}.join}\" -- -v"
|
8
|
+
sh "ruby -w -W2 -I. -Ilib -e \"#{Dir["test/test_*.rb"].map{|f| "require '#{f}';"}.join}\" -- #{ENV['TESTOPTS']} -v"
|
8
9
|
end
|
9
10
|
|
10
11
|
desc "Test MiniPortile by compiling examples"
|
@@ -23,3 +24,6 @@ desc "Run all tests"
|
|
23
24
|
task :test => ["test:unit", "test:examples"]
|
24
25
|
|
25
26
|
task :default => [:test]
|
27
|
+
|
28
|
+
|
29
|
+
Concourse.new("mini_portile").create_tasks!
|
data/appveyor.yml
CHANGED
@@ -0,0 +1,160 @@
|
|
1
|
+
% ruby_version = RUBIES[:mri].last
|
2
|
+
|
3
|
+
groups:
|
4
|
+
- name: master
|
5
|
+
jobs:
|
6
|
+
- ruby-<%= ruby_version %>
|
7
|
+
- windows-install-ruby-2.3
|
8
|
+
- ruby-2.3-devkit
|
9
|
+
|
10
|
+
- name: PRs
|
11
|
+
jobs:
|
12
|
+
- pr-pending
|
13
|
+
- ruby-<%= ruby_version %>-pr
|
14
|
+
- pr-success
|
15
|
+
|
16
|
+
resource_types:
|
17
|
+
- name: pull-request
|
18
|
+
type: docker-image
|
19
|
+
source:
|
20
|
+
repository: jtarchie/pr
|
21
|
+
|
22
|
+
resources:
|
23
|
+
- name: ci
|
24
|
+
type: git
|
25
|
+
source:
|
26
|
+
uri: https://github.com/flavorjones/mini_portile/
|
27
|
+
branch: master
|
28
|
+
disable_ci_skip: true # always get the latest pipeline configuration
|
29
|
+
|
30
|
+
- name: nokogiri-ci
|
31
|
+
type: git
|
32
|
+
source:
|
33
|
+
uri: https://github.com/sparklemotion/nokogiri/
|
34
|
+
branch: master
|
35
|
+
disable_ci_skip: true # always get the latest pipeline configuration
|
36
|
+
|
37
|
+
- name: mini_portile
|
38
|
+
type: git
|
39
|
+
source:
|
40
|
+
uri: https://github.com/flavorjones/mini_portile/
|
41
|
+
branch: master
|
42
|
+
ignore_paths:
|
43
|
+
- concourse/**
|
44
|
+
|
45
|
+
- name: mini_portile-pr
|
46
|
+
type: pull-request
|
47
|
+
source:
|
48
|
+
repo: flavorjones/mini_portile
|
49
|
+
access_token: {{github-repo-status-access-token}}
|
50
|
+
ignore_paths:
|
51
|
+
- concourse/**
|
52
|
+
|
53
|
+
jobs:
|
54
|
+
#
|
55
|
+
# master
|
56
|
+
#
|
57
|
+
- name: ruby-<%= ruby_version %>
|
58
|
+
public: true
|
59
|
+
plan:
|
60
|
+
- get: ci
|
61
|
+
- get: mini_portile
|
62
|
+
trigger: true
|
63
|
+
- task: rake-test
|
64
|
+
config:
|
65
|
+
platform: linux
|
66
|
+
image_resource:
|
67
|
+
type: docker-image
|
68
|
+
source: {repository: ruby, tag: "<%= ruby_version %>"}
|
69
|
+
inputs:
|
70
|
+
- name: ci
|
71
|
+
- name: mini_portile
|
72
|
+
run:
|
73
|
+
path: ci/concourse/tasks/rake-test/task.sh
|
74
|
+
|
75
|
+
- name: windows-install-ruby-2.3
|
76
|
+
public: true
|
77
|
+
serial_groups: [windows-configuration]
|
78
|
+
plan:
|
79
|
+
- get: nokogiri-ci
|
80
|
+
- get: mini_portile
|
81
|
+
trigger: true
|
82
|
+
- task: setup
|
83
|
+
config:
|
84
|
+
platform: windows
|
85
|
+
inputs:
|
86
|
+
- name: nokogiri-ci
|
87
|
+
path: ci
|
88
|
+
run:
|
89
|
+
path: powershell
|
90
|
+
args: ["-File", "ci/concourse/tasks/windows-config/install-ruby-and-devkit.ps1"]
|
91
|
+
|
92
|
+
- name: ruby-2.3-devkit
|
93
|
+
public: true
|
94
|
+
plan:
|
95
|
+
- get: ci
|
96
|
+
- get: nokogiri-ci
|
97
|
+
- get: mini_portile
|
98
|
+
trigger: true
|
99
|
+
passed: ["windows-install-ruby-2.3"]
|
100
|
+
- task: rake-test
|
101
|
+
config:
|
102
|
+
platform: windows
|
103
|
+
inputs:
|
104
|
+
- name: ci
|
105
|
+
- name: nokogiri-ci
|
106
|
+
- name: mini_portile
|
107
|
+
run:
|
108
|
+
path: powershell
|
109
|
+
args: ["-File", "ci/concourse/tasks/rake-test/task.ps1"]
|
110
|
+
|
111
|
+
#
|
112
|
+
# PRs
|
113
|
+
#
|
114
|
+
- name: pr-pending
|
115
|
+
public: true
|
116
|
+
plan:
|
117
|
+
- get: ci
|
118
|
+
- get: mini_portile-pr
|
119
|
+
trigger: true
|
120
|
+
version: every
|
121
|
+
- put: mini_portile-pr
|
122
|
+
params: {path: mini_portile-pr, status: pending}
|
123
|
+
|
124
|
+
- name: ruby-<%= ruby_version %>-pr
|
125
|
+
public: true
|
126
|
+
serial_groups: [pr]
|
127
|
+
plan:
|
128
|
+
- get: ci
|
129
|
+
- get: mini_portile-pr
|
130
|
+
trigger: true
|
131
|
+
version: every
|
132
|
+
passed: [pr-pending]
|
133
|
+
- task: rake-test
|
134
|
+
config:
|
135
|
+
platform: linux
|
136
|
+
image_resource:
|
137
|
+
type: docker-image
|
138
|
+
source: {repository: ruby, tag: "<%= ruby_version %>"}
|
139
|
+
inputs:
|
140
|
+
- name: ci
|
141
|
+
- name: mini_portile-pr
|
142
|
+
path: mini_portile
|
143
|
+
run:
|
144
|
+
path: ci/concourse/tasks/rake-test/task.sh
|
145
|
+
on_failure:
|
146
|
+
put: mini_portile-pr
|
147
|
+
params: {path: mini_portile-pr, status: failure}
|
148
|
+
|
149
|
+
- name: pr-success
|
150
|
+
public: true
|
151
|
+
serial_groups: [pr]
|
152
|
+
disable_manual_trigger: true
|
153
|
+
plan:
|
154
|
+
- get: mini_portile-pr
|
155
|
+
trigger: true
|
156
|
+
version: every
|
157
|
+
passed:
|
158
|
+
- ruby-<%= ruby_version %>-pr
|
159
|
+
- put: mini_portile-pr
|
160
|
+
params: {path: mini_portile-pr, status: success}
|
@@ -0,0 +1,13 @@
|
|
1
|
+
. "nokogiri-ci\concourse\shared\common.ps1"
|
2
|
+
. "c:\var\vcap\packages\windows-ruby-dev-tools\prelude.ps1"
|
3
|
+
|
4
|
+
prepend-path $ruby23_bin_path
|
5
|
+
$env:RUBYOPT = "-rdevkit"
|
6
|
+
|
7
|
+
push-location mini_portile
|
8
|
+
|
9
|
+
stream-cmd "gem" "install bundler"
|
10
|
+
stream-cmd "bundle" "install"
|
11
|
+
stream-cmd "bundle" "exec rake test"
|
12
|
+
|
13
|
+
pop-location
|
@@ -4,7 +4,7 @@ require 'net/https'
|
|
4
4
|
require 'net/ftp'
|
5
5
|
require 'fileutils'
|
6
6
|
require 'tempfile'
|
7
|
-
require 'digest
|
7
|
+
require 'digest'
|
8
8
|
require 'open-uri'
|
9
9
|
require 'cgi'
|
10
10
|
require 'rbconfig'
|
@@ -72,7 +72,7 @@ class MiniPortile
|
|
72
72
|
message "Running git apply with #{file}... "
|
73
73
|
# By --work-tree=. git-apply uses the current directory as
|
74
74
|
# the project root and will not search upwards for .git.
|
75
|
-
execute('patch', ["git", "--work-tree=.", "apply", "--whitespace=warn", file], :initial_message => false)
|
75
|
+
execute('patch', ["git", "--git-dir=.", "--work-tree=.", "apply", "--whitespace=warn", file], :initial_message => false)
|
76
76
|
}
|
77
77
|
when which('patch')
|
78
78
|
lambda { |file|
|
@@ -99,9 +99,8 @@ class MiniPortile
|
|
99
99
|
def configure
|
100
100
|
return if configured?
|
101
101
|
|
102
|
-
|
103
|
-
|
104
|
-
File.open(md5_file, "w") { |f| f.write digest }
|
102
|
+
cache_file = File.join(tmp_path, 'configure.options_cache')
|
103
|
+
File.open(cache_file, "w") { |f| f.write computed_options.to_s }
|
105
104
|
|
106
105
|
if RUBY_PLATFORM=~/mingw|mswin/
|
107
106
|
# Windows doesn't recognize the shebang.
|
@@ -131,12 +130,12 @@ class MiniPortile
|
|
131
130
|
def configured?
|
132
131
|
configure = File.join(work_path, 'configure')
|
133
132
|
makefile = File.join(work_path, 'Makefile')
|
134
|
-
|
133
|
+
cache_file = File.join(tmp_path, 'configure.options_cache')
|
135
134
|
|
136
|
-
|
137
|
-
|
135
|
+
stored_options = File.exist?(cache_file) ? File.read(cache_file) : ""
|
136
|
+
current_options = computed_options.to_s
|
138
137
|
|
139
|
-
(
|
138
|
+
(current_options == stored_options) && newer?(makefile, configure)
|
140
139
|
end
|
141
140
|
|
142
141
|
def installed?
|
@@ -251,16 +250,47 @@ private
|
|
251
250
|
end
|
252
251
|
end
|
253
252
|
|
253
|
+
KEYRING_NAME = "mini_portile_keyring.gpg"
|
254
|
+
|
254
255
|
def verify_file(file)
|
255
|
-
|
256
|
-
|
257
|
-
|
258
|
-
|
259
|
-
|
260
|
-
|
261
|
-
|
262
|
-
|
263
|
-
|
256
|
+
if file.has_key?(:gpg)
|
257
|
+
gpg = file[:gpg]
|
258
|
+
|
259
|
+
signature_url = gpg[:signature_url] || "#{file[:url]}.asc"
|
260
|
+
signature_file = file[:local_path] + ".asc"
|
261
|
+
# download the signature file
|
262
|
+
download_file(signature_url, signature_file)
|
263
|
+
|
264
|
+
gpg_exe = which('gpg2') || which('gpg') || raise("Neither GPG nor GPG2 is installed")
|
265
|
+
|
266
|
+
# import the key into our own keyring
|
267
|
+
gpg_status = IO.popen([gpg_exe, "--status-fd", "1", "--no-default-keyring", "--keyring", KEYRING_NAME, "--import"], "w+") do |io|
|
268
|
+
io.write gpg[:key]
|
269
|
+
io.close_write
|
270
|
+
io.read
|
271
|
+
end
|
272
|
+
raise "invalid gpg key provided" unless /\[GNUPG:\] IMPORT_OK \d+ (?<key_id>[0-9a-f]+)/i =~ gpg_status
|
273
|
+
|
274
|
+
# verify the signature against our keyring
|
275
|
+
gpg_status = IO.popen([gpg_exe, "--status-fd", "1", "--no-default-keyring", "--keyring", KEYRING_NAME, "--verify", signature_file, file[:local_path]], &:read)
|
276
|
+
|
277
|
+
# remove the key from our keyring
|
278
|
+
IO.popen([gpg_exe, "--batch", "--yes", "--no-default-keyring", "--keyring", KEYRING_NAME, "--delete-keys", key_id], &:read)
|
279
|
+
|
280
|
+
raise "unable to delete the imported key" unless $?.exitstatus==0
|
281
|
+
raise "signature mismatch" unless gpg_status.match(/^\[GNUPG:\] VALIDSIG/)
|
282
|
+
|
283
|
+
else
|
284
|
+
digest = case
|
285
|
+
when exp=file[:sha256] then Digest::SHA256
|
286
|
+
when exp=file[:sha1] then Digest::SHA1
|
287
|
+
when exp=file[:md5] then Digest::MD5
|
288
|
+
end
|
289
|
+
if digest
|
290
|
+
is = digest.file(file[:local_path]).hexdigest
|
291
|
+
unless is == exp.downcase
|
292
|
+
raise "Downloaded file '#{file[:local_path]}' has wrong hash: expected: #{exp} is: #{is}"
|
293
|
+
end
|
264
294
|
end
|
265
295
|
end
|
266
296
|
end
|
@@ -438,6 +468,7 @@ private
|
|
438
468
|
[proxy_uri, proxy_user, proxy_pass]
|
439
469
|
end
|
440
470
|
end
|
471
|
+
|
441
472
|
begin
|
442
473
|
OpenURI.open_uri(url, 'rb', params) do |io|
|
443
474
|
temp_file << io.read
|
@@ -446,8 +477,15 @@ private
|
|
446
477
|
rescue OpenURI::HTTPRedirect => redirect
|
447
478
|
raise "Too many redirections for the original URL, halting." if count <= 0
|
448
479
|
count = count - 1
|
449
|
-
return download_file(redirect.url, full_path, count
|
480
|
+
return download_file(redirect.url, full_path, count-1)
|
450
481
|
rescue => e
|
482
|
+
count = count - 1
|
483
|
+
puts "#{count} retrie(s) left for #{filename}"
|
484
|
+
if count > 0
|
485
|
+
sleep 1
|
486
|
+
return download_file_http(url, full_path, count)
|
487
|
+
end
|
488
|
+
|
451
489
|
output e.message
|
452
490
|
return false
|
453
491
|
end
|
@@ -16,9 +16,8 @@ class MiniPortileCMake < MiniPortile
|
|
16
16
|
def configure
|
17
17
|
return if configured?
|
18
18
|
|
19
|
-
|
20
|
-
|
21
|
-
File.open(md5_file, "w") { |f| f.write digest }
|
19
|
+
cache_file = File.join(tmp_path, 'configure.options_cache')
|
20
|
+
File.open(cache_file, "w") { |f| f.write computed_options.to_s }
|
22
21
|
|
23
22
|
execute('configure', %w(cmake) + computed_options + ["."])
|
24
23
|
end
|
@@ -26,16 +25,16 @@ class MiniPortileCMake < MiniPortile
|
|
26
25
|
def configured?
|
27
26
|
configure = File.join(work_path, 'configure')
|
28
27
|
makefile = File.join(work_path, 'CMakefile')
|
29
|
-
|
28
|
+
cache_file = File.join(tmp_path, 'configure.options_cache')
|
30
29
|
|
31
|
-
|
32
|
-
|
30
|
+
stored_options = File.exist?(cache_file) ? File.read(cache_file) : ""
|
31
|
+
current_options = computed_options.to_s
|
33
32
|
|
34
|
-
(
|
33
|
+
(current_options == stored_options) && newer?(makefile, configure)
|
35
34
|
end
|
36
35
|
|
37
36
|
def make_cmd
|
38
37
|
return "nmake" if MiniPortile.windows?
|
39
38
|
super
|
40
39
|
end
|
41
|
-
end
|
40
|
+
end
|
data/mini_portile2.gemspec
CHANGED
@@ -16,7 +16,11 @@ Gem::Specification.new do |spec|
|
|
16
16
|
spec.homepage = 'http://github.com/flavorjones/mini_portile'
|
17
17
|
spec.licenses = ['MIT']
|
18
18
|
|
19
|
-
|
19
|
+
begin
|
20
|
+
spec.files = `git ls-files -z`.split("\x0")
|
21
|
+
rescue Exception => e
|
22
|
+
warn "WARNING: could not set spec.files: #{e.class}: #{e}"
|
23
|
+
end
|
20
24
|
|
21
25
|
# omit the `examples` directory from the gem, because it's large and
|
22
26
|
# not necessary to be packaged in the gem.
|
@@ -28,10 +32,11 @@ Gem::Specification.new do |spec|
|
|
28
32
|
spec.require_paths = ["lib"]
|
29
33
|
|
30
34
|
spec.add_development_dependency "bundler", "~> 1.7"
|
31
|
-
spec.add_development_dependency "rake", "~>
|
32
|
-
spec.add_development_dependency "minitest", "~> 5.8
|
33
|
-
spec.add_development_dependency "minitest-hooks", "~> 1.4
|
34
|
-
spec.add_development_dependency "minitar", "~> 0.5
|
35
|
+
spec.add_development_dependency "rake", "~> 12.0"
|
36
|
+
spec.add_development_dependency "minitest", "~> 5.8"
|
37
|
+
spec.add_development_dependency "minitest-hooks", "~> 1.4"
|
38
|
+
spec.add_development_dependency "minitar", "~> 0.5"
|
39
|
+
spec.add_development_dependency "concourse", "~> 0.12"
|
35
40
|
|
36
41
|
spec.required_ruby_version = ">= 1.9.2"
|
37
42
|
end
|
@@ -0,0 +1 @@
|
|
1
|
+
test
|
@@ -0,0 +1,9 @@
|
|
1
|
+
-----BEGIN PGP SIGNATURE-----
|
2
|
+
Version: GnuPG v1
|
3
|
+
|
4
|
+
iJwEAAECAAYFAlcFOD8ACgkQZeg+SWTDcLNIswP/XvVRoJ+eQ2u2v+WjXdBBKBSW
|
5
|
+
pzM216aJPRBxPl98xNUUKjqga+tjKmIHJn5T4CIxHqis1toPxtE5tKnc6cVO1aqY
|
6
|
+
bCUfkWyt/A3qRHQuniRUWSBKZWdk+j3AopTpd3i/r/s0pDj3bMHJ7bDOTsEskNcM
|
7
|
+
KpgFfNM1ieFRQmIWPWg=
|
8
|
+
=kbKc
|
9
|
+
-----END PGP SIGNATURE-----
|
@@ -0,0 +1,9 @@
|
|
1
|
+
-----BEGIN PGP SIGNATURE-----
|
2
|
+
Version: GnuPG v1
|
3
|
+
|
4
|
+
iJwEAQECAAYFAlcFLEgACgkQZeg+SWTDcLPVwgQAg8KTI91Ryx38YplzgWV9tUPj
|
5
|
+
o7J7IEzb8faE7m2mgtq8m62DvA4h/PJzmbh1EJJ4VkO+A4O2LVh/bTgnyYXv+kMu
|
6
|
+
sEmvK35PnAC8r7pv98VSbMEXyV/rK3+uGhTvnXZYkULvMVYkN/EHIh2bCQJ3R14X
|
7
|
+
MY8El95QST8/dR/yBkw=
|
8
|
+
=qbod
|
9
|
+
-----END PGP SIGNATURE-----
|
data/test/test_cook.rb
CHANGED
@@ -8,8 +8,7 @@ class TestCook < TestCase
|
|
8
8
|
@assets_path = File.expand_path("../assets", __FILE__)
|
9
9
|
@tar_path = File.expand_path("../../tmp/test mini portile-1.0.0.tar.gz", __FILE__)
|
10
10
|
|
11
|
-
# remove any previous test files
|
12
|
-
FileUtils.rm_rf("tmp")
|
11
|
+
FileUtils.rm_rf("tmp") # remove any previous test files
|
13
12
|
|
14
13
|
create_tar(@tar_path, @assets_path, "test mini portile-1.0.0")
|
15
14
|
start_webrick(File.dirname(@tar_path))
|
@@ -28,7 +27,7 @@ class TestCook < TestCase
|
|
28
27
|
def after_all
|
29
28
|
super
|
30
29
|
stop_webrick
|
31
|
-
#
|
30
|
+
FileUtils.rm_rf("tmp") # remove test files
|
32
31
|
end
|
33
32
|
|
34
33
|
def test_download
|
@@ -67,3 +66,50 @@ class TestCook < TestCase
|
|
67
66
|
assert_equal( ["install"].inspect, IO.read(txt).chomp )
|
68
67
|
end
|
69
68
|
end
|
69
|
+
|
70
|
+
class TestCookWithBrokenGitDir < TestCase
|
71
|
+
#
|
72
|
+
# this is a test for #69
|
73
|
+
# https://github.com/flavorjones/mini_portile/issues/69
|
74
|
+
#
|
75
|
+
attr_accessor :assets_path, :tar_path, :recipe
|
76
|
+
|
77
|
+
def before_all
|
78
|
+
super
|
79
|
+
@assets_path = File.expand_path("../assets", __FILE__)
|
80
|
+
@tar_path = File.expand_path("../../tmp/test-mini-portile-1.0.0.tar.gz", __FILE__)
|
81
|
+
|
82
|
+
@git_dir = File.join(@assets_path, "git-broken")
|
83
|
+
FileUtils.rm_rf @git_dir
|
84
|
+
FileUtils.mkdir_p @git_dir
|
85
|
+
Dir.chdir(@git_dir) do
|
86
|
+
File.open ".git", "w" do |f|
|
87
|
+
f.write "gitdir: /nonexistent"
|
88
|
+
end
|
89
|
+
end
|
90
|
+
|
91
|
+
create_tar(@tar_path, @assets_path, "test mini portile-1.0.0")
|
92
|
+
|
93
|
+
@recipe = MiniPortile.new("test mini portile", "1.0.0").tap do |recipe|
|
94
|
+
recipe.files << "file://#{@tar_path}"
|
95
|
+
recipe.patch_files << File.join(@assets_path, "patch 1.diff")
|
96
|
+
recipe.configure_options << "--option=\"path with 'space'\""
|
97
|
+
end
|
98
|
+
|
99
|
+
Dir.chdir(@git_dir) do
|
100
|
+
@recipe.cook
|
101
|
+
end
|
102
|
+
end
|
103
|
+
|
104
|
+
def after_all
|
105
|
+
FileUtils.rm_rf @git_dir
|
106
|
+
end
|
107
|
+
|
108
|
+
def test_patch
|
109
|
+
Dir.chdir(@git_dir) do
|
110
|
+
patch1 = File.join(work_dir, "patch 1.txt")
|
111
|
+
assert File.exist?(patch1), patch1
|
112
|
+
assert_match( /^\tchange 1/, IO.read(patch1) )
|
113
|
+
end
|
114
|
+
end
|
115
|
+
end
|
data/test/test_digest.rb
CHANGED
@@ -66,5 +66,150 @@ class TestDigest < TestCase
|
|
66
66
|
def test_wrong_md5
|
67
67
|
download_with_wrong_digest(:md5)
|
68
68
|
end
|
69
|
+
|
70
|
+
def public_key
|
71
|
+
<<-KEY
|
72
|
+
-----BEGIN PGP PUBLIC KEY BLOCK-----
|
73
|
+
Version: GnuPG v1
|
74
|
+
|
75
|
+
mI0EVwUhJQEEAMYxFhgaAdM2Ul5r+XfpqAaI7SOxB14eRjhFjhchy4ylgVxetyLq
|
76
|
+
di3zeANXBIHsLBl7quYTlnmhJr/+GQRkCnXWiUp0tJsBVzGM3puK7c534gakEUH6
|
77
|
+
AlDtj5p3IeygzSyn8u7KORv+ainXfhwkvTO04mJmxAb2uT8ngKYFdPa1ABEBAAG0
|
78
|
+
J1Rlc3QgTWluaXBvcnRpbGUgPHRlc3RAbWluaXBvcnRpbGUub3JnPoi4BBMBAgAi
|
79
|
+
BQJXBSElAhsDBgsJCAcDAgYVCAIJCgsEFgIDAQIeAQIXgAAKCRBl6D5JZMNwswAK
|
80
|
+
A/90Cdb+PX21weBR2Q6uR06M/alPexuXXyJL8ZcwbQMJ/pBBgcS5/h1+rQkBI/CN
|
81
|
+
qpXdDlw2Xys2k0sNwdjIw3hmYRzBrddXlCSW3Sifq/hS+kfPZ1snQmIjCgy1Xky5
|
82
|
+
QGCcPUxBUxzmra88LakkDO+euKK3hcrfeFIi611lTum1NLiNBFcFISUBBADoyY6z
|
83
|
+
2PwH3RWUbqv0VX1s3/JO3v3xMjCRKPlFwsNwLTBtZoWfR6Ao1ajeCuZKfzNKIQ2I
|
84
|
+
rn86Rcqyrq4hTj+7BTWjkIPOBthjiL1YqbEBtX7jcYRkYvdQz/IG2F4zVV6X4AAR
|
85
|
+
Twx7qaXNt67ArzbHCe5gLNRUK6e6OArkahMv7QARAQABiJ8EGAECAAkFAlcFISUC
|
86
|
+
GwwACgkQZeg+SWTDcLNFiwP/TR33ClqWOz0mpjt0xPEoZ0ORmV6fo4sjjzgQoHH/
|
87
|
+
KTdsabJbGp8oLQGW/mx3OxgbsAkyZymb5H5cjaF4HtSd4cxI5t1C9ZS/ytN8pqfR
|
88
|
+
e29SBje8DAAJn2l57s2OddXLPQ0DUwCcdNEaqgHwSk/Swxc7K+IpfvjLKHKUZZBP
|
89
|
+
4Ko=
|
90
|
+
=SVWi
|
91
|
+
-----END PGP PUBLIC KEY BLOCK-----
|
92
|
+
KEY
|
93
|
+
end
|
94
|
+
|
95
|
+
def test_with_valid_gpg_signature
|
96
|
+
data_file = File.expand_path(File.join(File.dirname(__FILE__), 'assets', 'gpg-fixtures', 'data'))
|
97
|
+
|
98
|
+
@recipe.files << {
|
99
|
+
:url => "file://#{data_file}",
|
100
|
+
:gpg => {
|
101
|
+
:key => public_key,
|
102
|
+
:signature_url => "file://#{data_file}.asc"
|
103
|
+
}
|
104
|
+
}
|
105
|
+
@recipe.download
|
106
|
+
end
|
107
|
+
|
108
|
+
def test_optional_gpg_signature_url
|
109
|
+
data_file = File.expand_path(File.join(File.dirname(__FILE__), 'assets', 'gpg-fixtures', 'data'))
|
110
|
+
|
111
|
+
@recipe.files << {
|
112
|
+
:url => "file://#{data_file}",
|
113
|
+
:gpg => {
|
114
|
+
:key => public_key
|
115
|
+
}
|
116
|
+
}
|
117
|
+
@recipe.download
|
118
|
+
end
|
119
|
+
|
120
|
+
def test_with_invalid_gpg_signature
|
121
|
+
data_file = File.expand_path(File.join(File.dirname(__FILE__), 'assets', 'gpg-fixtures', 'data'))
|
122
|
+
|
123
|
+
@recipe.files << {
|
124
|
+
:url => "file://#{data_file}",
|
125
|
+
:gpg => {
|
126
|
+
:key => public_key,
|
127
|
+
:signature_url => "file://#{data_file}.invalid.asc"
|
128
|
+
}
|
129
|
+
}
|
130
|
+
exception = assert_raises(RuntimeError){
|
131
|
+
@recipe.download
|
132
|
+
}
|
133
|
+
assert_equal("signature mismatch", exception.message)
|
134
|
+
end
|
135
|
+
|
136
|
+
def test_with_invalid_key
|
137
|
+
data_file = File.expand_path(File.join(File.dirname(__FILE__), 'assets', 'gpg-fixtures', 'data'))
|
138
|
+
|
139
|
+
@recipe.files << {
|
140
|
+
:url => "file://#{data_file}",
|
141
|
+
:gpg => {
|
142
|
+
:key => "thisisaninvalidkey",
|
143
|
+
:signature_url => "file://#{data_file}.asc"
|
144
|
+
}
|
145
|
+
}
|
146
|
+
exception = assert_raises(RuntimeError){ @recipe.download }
|
147
|
+
assert_equal("invalid gpg key provided", exception.message)
|
148
|
+
end
|
149
|
+
|
150
|
+
def test_with_different_key_than_one_used_to_sign
|
151
|
+
puts "################"
|
152
|
+
|
153
|
+
key = <<-KEY
|
154
|
+
-----BEGIN PGP PUBLIC KEY BLOCK-----
|
155
|
+
Version: GnuPG v1
|
156
|
+
|
157
|
+
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
|
198
|
+
=4JAR
|
199
|
+
-----END PGP PUBLIC KEY BLOCK-----
|
200
|
+
KEY
|
201
|
+
|
202
|
+
data_file = File.expand_path(File.join(File.dirname(__FILE__), 'assets', 'gpg-fixtures', 'data'))
|
203
|
+
|
204
|
+
@recipe.files << {
|
205
|
+
:url => "file://#{data_file}",
|
206
|
+
:gpg => {
|
207
|
+
:key => key,
|
208
|
+
:signature_url => "file://#{data_file}.asc"
|
209
|
+
}
|
210
|
+
}
|
211
|
+
exception = assert_raises(RuntimeError){ @recipe.download }
|
212
|
+
assert_equal("signature mismatch", exception.message)
|
213
|
+
end
|
69
214
|
end
|
70
215
|
|
data/test/test_download.rb
CHANGED
@@ -5,22 +5,24 @@ describe "recipe download" do
|
|
5
5
|
|
6
6
|
attr :recipe
|
7
7
|
|
8
|
-
def server_must_receive_connection &block
|
8
|
+
def server_must_receive_connection(connections = 3, &block)
|
9
9
|
request_count = 0
|
10
10
|
|
11
11
|
server = TCPServer.open('localhost', TestCase::HTTP_PORT)
|
12
12
|
thread = Thread.new do
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
13
|
+
connections.times do
|
14
|
+
conn = server.accept
|
15
|
+
request_count += 1
|
16
|
+
conn.puts "CONNECTION SUCESSFULLY MADE" rescue SystemCallError
|
17
|
+
conn.close
|
18
|
+
end
|
17
19
|
end
|
18
20
|
|
19
21
|
block.call
|
20
22
|
|
21
23
|
thread.kill
|
22
24
|
server.close
|
23
|
-
|
25
|
+
|
24
26
|
request_count.must_be :>, 0
|
25
27
|
end
|
26
28
|
|
@@ -32,21 +34,21 @@ describe "recipe download" do
|
|
32
34
|
describe "urls" do
|
33
35
|
it "ftp" do
|
34
36
|
@recipe.files << "ftp://localhost:#{TestCase::HTTP_PORT}/foo"
|
35
|
-
server_must_receive_connection do
|
37
|
+
server_must_receive_connection 1 do
|
36
38
|
@recipe.download
|
37
39
|
end
|
38
40
|
end
|
39
41
|
|
40
42
|
it "handles http" do
|
41
43
|
@recipe.files << "http://localhost:#{TestCase::HTTP_PORT}/foo"
|
42
|
-
server_must_receive_connection do
|
44
|
+
server_must_receive_connection 3 do
|
43
45
|
@recipe.download
|
44
46
|
end
|
45
47
|
end
|
46
48
|
|
47
49
|
it "handles https" do
|
48
50
|
@recipe.files << "https://localhost:#{TestCase::HTTP_PORT}/foo"
|
49
|
-
server_must_receive_connection do
|
51
|
+
server_must_receive_connection 3 do
|
50
52
|
@recipe.download
|
51
53
|
end
|
52
54
|
end
|
data/test/test_proxy.rb
CHANGED
@@ -10,7 +10,7 @@ class TestProxy < TestCase
|
|
10
10
|
s = gs.accept
|
11
11
|
gs.close
|
12
12
|
begin
|
13
|
-
req = ''
|
13
|
+
req = ''.dup
|
14
14
|
while (l=s.gets) && !l.chomp.empty?
|
15
15
|
req << l
|
16
16
|
end
|
@@ -25,7 +25,7 @@ class TestProxy < TestCase
|
|
25
25
|
else
|
26
26
|
yield "http://localhost:#{gs.addr[1]}"
|
27
27
|
end
|
28
|
-
|
28
|
+
|
29
29
|
# Set timeout for reception of the request
|
30
30
|
Thread.new do
|
31
31
|
sleep 1
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: mini_portile2
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.2.0
|
4
|
+
version: 2.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Luis Lavena
|
@@ -10,7 +10,7 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
|
-
date:
|
13
|
+
date: 2017-06-05 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: bundler
|
@@ -32,56 +32,70 @@ dependencies:
|
|
32
32
|
requirements:
|
33
33
|
- - "~>"
|
34
34
|
- !ruby/object:Gem::Version
|
35
|
-
version: '
|
35
|
+
version: '12.0'
|
36
36
|
type: :development
|
37
37
|
prerelease: false
|
38
38
|
version_requirements: !ruby/object:Gem::Requirement
|
39
39
|
requirements:
|
40
40
|
- - "~>"
|
41
41
|
- !ruby/object:Gem::Version
|
42
|
-
version: '
|
42
|
+
version: '12.0'
|
43
43
|
- !ruby/object:Gem::Dependency
|
44
44
|
name: minitest
|
45
45
|
requirement: !ruby/object:Gem::Requirement
|
46
46
|
requirements:
|
47
47
|
- - "~>"
|
48
48
|
- !ruby/object:Gem::Version
|
49
|
-
version: 5.8
|
49
|
+
version: '5.8'
|
50
50
|
type: :development
|
51
51
|
prerelease: false
|
52
52
|
version_requirements: !ruby/object:Gem::Requirement
|
53
53
|
requirements:
|
54
54
|
- - "~>"
|
55
55
|
- !ruby/object:Gem::Version
|
56
|
-
version: 5.8
|
56
|
+
version: '5.8'
|
57
57
|
- !ruby/object:Gem::Dependency
|
58
58
|
name: minitest-hooks
|
59
59
|
requirement: !ruby/object:Gem::Requirement
|
60
60
|
requirements:
|
61
61
|
- - "~>"
|
62
62
|
- !ruby/object:Gem::Version
|
63
|
-
version: 1.4
|
63
|
+
version: '1.4'
|
64
64
|
type: :development
|
65
65
|
prerelease: false
|
66
66
|
version_requirements: !ruby/object:Gem::Requirement
|
67
67
|
requirements:
|
68
68
|
- - "~>"
|
69
69
|
- !ruby/object:Gem::Version
|
70
|
-
version: 1.4
|
70
|
+
version: '1.4'
|
71
71
|
- !ruby/object:Gem::Dependency
|
72
72
|
name: minitar
|
73
73
|
requirement: !ruby/object:Gem::Requirement
|
74
74
|
requirements:
|
75
75
|
- - "~>"
|
76
76
|
- !ruby/object:Gem::Version
|
77
|
-
version: 0.5
|
77
|
+
version: '0.5'
|
78
78
|
type: :development
|
79
79
|
prerelease: false
|
80
80
|
version_requirements: !ruby/object:Gem::Requirement
|
81
81
|
requirements:
|
82
82
|
- - "~>"
|
83
83
|
- !ruby/object:Gem::Version
|
84
|
-
version: 0.5
|
84
|
+
version: '0.5'
|
85
|
+
- !ruby/object:Gem::Dependency
|
86
|
+
name: concourse
|
87
|
+
requirement: !ruby/object:Gem::Requirement
|
88
|
+
requirements:
|
89
|
+
- - "~>"
|
90
|
+
- !ruby/object:Gem::Version
|
91
|
+
version: '0.12'
|
92
|
+
type: :development
|
93
|
+
prerelease: false
|
94
|
+
version_requirements: !ruby/object:Gem::Requirement
|
95
|
+
requirements:
|
96
|
+
- - "~>"
|
97
|
+
- !ruby/object:Gem::Version
|
98
|
+
version: '0.12'
|
85
99
|
description: Simplistic port-like solution for developers. It provides a standard
|
86
100
|
and simplified way to compile against dependency libraries without messing up your
|
87
101
|
system.
|
@@ -99,12 +113,18 @@ files:
|
|
99
113
|
- README.md
|
100
114
|
- Rakefile
|
101
115
|
- appveyor.yml
|
116
|
+
- concourse/mini_portile.yml
|
117
|
+
- concourse/tasks/rake-test/task.ps1
|
118
|
+
- concourse/tasks/rake-test/task.sh
|
102
119
|
- lib/mini_portile2.rb
|
103
120
|
- lib/mini_portile2/mini_portile.rb
|
104
121
|
- lib/mini_portile2/mini_portile_cmake.rb
|
105
122
|
- lib/mini_portile2/version.rb
|
106
123
|
- mini_portile2.gemspec
|
107
124
|
- test/assets/git/config
|
125
|
+
- test/assets/gpg-fixtures/data
|
126
|
+
- test/assets/gpg-fixtures/data.asc
|
127
|
+
- test/assets/gpg-fixtures/data.invalid.asc
|
108
128
|
- test/assets/patch 1.diff
|
109
129
|
- test/assets/test mini portile-1.0.0/configure
|
110
130
|
- test/assets/test-cmake-1.0/CMakeLists.txt
|
@@ -131,17 +151,20 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
131
151
|
version: 1.9.2
|
132
152
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
133
153
|
requirements:
|
134
|
-
- - "
|
154
|
+
- - ">="
|
135
155
|
- !ruby/object:Gem::Version
|
136
|
-
version:
|
156
|
+
version: '0'
|
137
157
|
requirements: []
|
138
158
|
rubyforge_project:
|
139
|
-
rubygems_version: 2.
|
159
|
+
rubygems_version: 2.6.10
|
140
160
|
signing_key:
|
141
161
|
specification_version: 4
|
142
162
|
summary: Simplistic port-like solution for developers
|
143
163
|
test_files:
|
144
164
|
- test/assets/git/config
|
165
|
+
- test/assets/gpg-fixtures/data
|
166
|
+
- test/assets/gpg-fixtures/data.asc
|
167
|
+
- test/assets/gpg-fixtures/data.invalid.asc
|
145
168
|
- test/assets/patch 1.diff
|
146
169
|
- test/assets/test mini portile-1.0.0/configure
|
147
170
|
- test/assets/test-cmake-1.0/CMakeLists.txt
|