travis_bundle_cache 0.0.4 → 0.0.5
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 +4 -4
- checksums.yaml.gz.sig +1 -0
- data/.travis.yml +9 -0
- data/Gemfile +6 -0
- data/README.md +9 -1
- data/gem-public_cert.pem +21 -0
- data/lib/travis_bundle_cache/cache.rb +21 -7
- data/lib/travis_bundle_cache/version.rb +1 -1
- data/spec/spec_helper.rb +12 -0
- data/spec/travis_bundle_cache_spec.rb +127 -0
- data/travis_bundle_cache.gemspec +3 -0
- data.tar.gz.sig +0 -0
- metadata +31 -3
- metadata.gz.sig +0 -0
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 9823ea826bf7435fac84b37130e2bf5a2f4d918e
|
4
|
+
data.tar.gz: 0d3d8c0ac9d1993a046ae5121da984de30f1659a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 9664aad420c15f9175d93ea2807881bb14b333dc64154dda8ad49cf6b6258bbbb5f98179ad7557fb9e468ad91bc9aa614e83e71d72da13954575d05a6da5a1bb
|
7
|
+
data.tar.gz: 49539468671d40cc88ea6fa8b838614abfd73abd2c1dd5a332ea6b2dfe768a0d82f4d5601115f47e2ecd6f3fc46c91152d4221c037732875c24774cbdc04c034
|
checksums.yaml.gz.sig
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
���EL�ّC@-�$�|�=�����L��@0�Z E�_I!�#�C��ub�'"խ��փC�*��T�(��q�vӢ�䓖�9A�)���1a�Z����o�����#�uy�sQ��eR{4�B810u��Z��ds9g|S����~؉/9��Pf���l
|
data/.travis.yml
ADDED
data/Gemfile
CHANGED
data/README.md
CHANGED
@@ -1,7 +1,9 @@
|
|
1
1
|
Travis Bundle Cache
|
2
2
|
===================
|
3
3
|
[](http://badge.fury.io/rb/travis_bundle_cache)
|
4
|
+
[](https://travis-ci.org/collectiveidea/travis_bundle_cache)
|
4
5
|
[](https://codeclimate.com/github/collectiveidea/travis_bundle_cache)
|
6
|
+
[](https://coveralls.io/r/collectiveidea/travis_bundle_cache?branch=master)
|
5
7
|
[](https://gemnasium.com/collectiveidea/travis_bundle_cache)
|
6
8
|
|
7
9
|
The primary purpose of this gem is to make [this](http://randomerrata.com/post/45827813818/travis-s3) easier and slightly more maintainable.
|
@@ -29,7 +31,13 @@ Usage
|
|
29
31
|
|
30
32
|
before_install:
|
31
33
|
- 'echo ''gem: --no-ri --no-rdoc'' > ~/.gemrc'
|
32
|
-
|
34
|
+
# Better security (If only we could get Amazon to sign their gem)
|
35
|
+
- wget https://raw.github.com/collectiveidea/travis_bundle_cache/4753620b8f2bcfd0c5af85ccd68888c1f593a023/gem-public_cert.pem
|
36
|
+
- gem cert --add gem-public_cert.pem
|
37
|
+
- gem install aws-sdk
|
38
|
+
- gem install travis_bundle_cache -P HighSecurity
|
39
|
+
# Low security option
|
40
|
+
# - gem install travis_bundle_cache
|
33
41
|
|
34
42
|
install: travis_bundle_install
|
35
43
|
|
data/gem-public_cert.pem
ADDED
@@ -0,0 +1,21 @@
|
|
1
|
+
-----BEGIN CERTIFICATE-----
|
2
|
+
MIIDijCCAnKgAwIBAgIBATANBgkqhkiG9w0BAQUFADBFMQ4wDAYDVQQDDAVkYXZp
|
3
|
+
ZDEeMBwGCgmSJomT8ixkARkWDmNvbGxlY3RpdmVpZGVhMRMwEQYKCZImiZPyLGQB
|
4
|
+
GRYDY29tMB4XDTEzMDgwMjE0MjAwN1oXDTE0MDgwMjE0MjAwN1owRTEOMAwGA1UE
|
5
|
+
AwwFZGF2aWQxHjAcBgoJkiaJk/IsZAEZFg5jb2xsZWN0aXZlaWRlYTETMBEGCgmS
|
6
|
+
JomT8ixkARkWA2NvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAO+X
|
7
|
+
lpzbJojxB0O/2nTxK2NdfgOd2EsnOZaezBZsGDZq0Vbnjec/tNrnsHdUM12LvP1h
|
8
|
+
ZuIx/IrAZj4wlsyZgUsKAQs9GXQCDzmKuwo3kmYtUDv55TQJKwDhtdwliTD82FOT
|
9
|
+
IkTUEcRZNhtb7ymzpK17p5iHaHL+4BgNs1fbciTxqI1xhh9TGyDOht++9dCjJVDV
|
10
|
+
I5nU8VMV8gkAkxA8AlTXNf3hWQNN3tBuvY5EMaG3beN52v+YYDW8Ko4GL16M+aOA
|
11
|
+
PShN16CdA5Jjc/hwe6gK175Ma9UTHwIoWDX2WBztM+cU0E27vxFxbe+il9mHk9wG
|
12
|
+
BzedoP1o5yNUovdOhIsCAwEAAaOBhDCBgTAJBgNVHRMEAjAAMAsGA1UdDwQEAwIE
|
13
|
+
sDAdBgNVHQ4EFgQUozKz5aO8wO2w0VHWEbPR7x0nBlQwIwYDVR0RBBwwGoEYZGF2
|
14
|
+
aWRAY29sbGVjdGl2ZWlkZWEuY29tMCMGA1UdEgQcMBqBGGRhdmlkQGNvbGxlY3Rp
|
15
|
+
dmVpZGVhLmNvbTANBgkqhkiG9w0BAQUFAAOCAQEANGHG41mjDpWNsdtjMq7lp5Dw
|
16
|
+
xgnf3D3Bz1/t2e4QimdTqniwudSE/P/HD/8HkEn9JMI39xQFyXpfWCFwS5kwsGle
|
17
|
+
qr/LzRfLXV3B11TciP10uMYmHQ+46AJ4mL2iyvmRsIKFU45gBpU1/2zJ44GGzYU1
|
18
|
+
cSKuuZ0obmZRTI0Vn54e2ofKnWZtylW0SYa9uQplEJK/Ttu88DL99WgwOyNdMlqg
|
19
|
+
FJkL4MD3SK4X13qDUlr6YzTkvc8MMfaECuzUIM6KqSGQnyZ16D2zLdZTtr0GPzJZ
|
20
|
+
SdQ0gsTaFvafp6C7hh//UHFI92FnVtzpV01oGPDikn3a2qc8eUPvULa2NlJRFQ==
|
21
|
+
-----END CERTIFICATE-----
|
@@ -16,7 +16,7 @@ module TravisBundleCache
|
|
16
16
|
def install
|
17
17
|
run_command %(cd ~ && wget -O "remote_#{@file_name}" "#{storage[@file_name].url_for(:read)}" && tar -xf "remote_#{@file_name}")
|
18
18
|
run_command %(cd ~ && wget -O "remote_#{@file_name}.sha2" "#{storage[@digest_filename].url_for(:read)}")
|
19
|
-
run_command %(bundle install --without #{ENV['BUNDLE_WITHOUT'] || "development production"} --path=~/.bundle)
|
19
|
+
run_command %(bundle install --without #{ENV['BUNDLE_WITHOUT'] || "development production"} --path=~/.bundle), retry: true
|
20
20
|
end
|
21
21
|
|
22
22
|
def cache_bundle
|
@@ -48,7 +48,7 @@ module TravisBundleCache
|
|
48
48
|
end
|
49
49
|
|
50
50
|
puts "=> Preparing bundle archive"
|
51
|
-
|
51
|
+
run_command %(cd ~ && tar -cjf "#{@file_name}" .bundle), exit_on_error: true
|
52
52
|
|
53
53
|
puts "=> Uploading the bundle"
|
54
54
|
storage[@file_name].write(Pathname.new(@file_path), :reduced_redundancy => true)
|
@@ -61,12 +61,26 @@ module TravisBundleCache
|
|
61
61
|
|
62
62
|
protected
|
63
63
|
|
64
|
-
def run_command(cmd)
|
64
|
+
def run_command(cmd, opts = {})
|
65
|
+
tries = 1
|
65
66
|
puts "Running: #{cmd}"
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
67
|
+
while true
|
68
|
+
IO.popen(cmd) do |f|
|
69
|
+
begin
|
70
|
+
print f.readchar while true
|
71
|
+
rescue EOFError
|
72
|
+
end
|
73
|
+
end
|
74
|
+
|
75
|
+
if $?.exitstatus == 0
|
76
|
+
break
|
77
|
+
elsif opts[:retry] && tries < 3
|
78
|
+
tries += 1
|
79
|
+
puts "Retrying attempt #{tries} of 3"
|
80
|
+
elsif opts[:exit_on_error] || opts[:retry]
|
81
|
+
exit($?.exitstatus)
|
82
|
+
else
|
83
|
+
break
|
70
84
|
end
|
71
85
|
end
|
72
86
|
end
|
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1,12 @@
|
|
1
|
+
require "coveralls"
|
2
|
+
Coveralls.wear!
|
3
|
+
|
4
|
+
require "travis_bundle_cache"
|
5
|
+
|
6
|
+
require "fakefs/spec_helpers"
|
7
|
+
|
8
|
+
RSpec.configure do |config|
|
9
|
+
config.order = "random"
|
10
|
+
config.expect_with(:rspec) {|c| c.syntax = :expect }
|
11
|
+
config.include FakeFS::SpecHelpers
|
12
|
+
end
|
@@ -0,0 +1,127 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
|
3
|
+
describe TravisBundleCache::Cache do
|
4
|
+
before(:each) do
|
5
|
+
ENV["TRAVIS_REPO_SLUG"] = "owner/repo"
|
6
|
+
ENV["TRAVIS_BUILD_DIR"] = "/home/travis/owner/repo"
|
7
|
+
ENV["AWS_S3_KEY"] = "AN_ACCESS_KEY_ID"
|
8
|
+
ENV["AWS_S3_SECRET"] = "AN_SECRET_ACCESS_KEY"
|
9
|
+
ENV["AWS_S3_BUCKET"] = "a-bucket-name"
|
10
|
+
|
11
|
+
@uname = `uname -m`.strip
|
12
|
+
@cache = TravisBundleCache::Cache.new
|
13
|
+
end
|
14
|
+
|
15
|
+
describe 'install' do
|
16
|
+
before(:each) do
|
17
|
+
@cache.stub(:run_command)
|
18
|
+
end
|
19
|
+
|
20
|
+
it 'tries to download an available bundle archive' do
|
21
|
+
expect(@cache).to receive(:run_command).once.with(/\Acd ~ && wget -O "remote_owner-repo-#{@uname}\.tgz" "https:\/\/a-bucket-name\.s3\.amazonaws\.com\/owner-repo-#{@uname}.tgz\?AWSAccessKeyId=AN_ACCESS_KEY_ID&Expires=[0-9]+&Signature=[^"]+" && tar -xf "remote_owner-repo-#{@uname}\.tgz"\Z/)
|
22
|
+
|
23
|
+
@cache.install
|
24
|
+
end
|
25
|
+
|
26
|
+
it 'tries to download an available bundle archive signature' do
|
27
|
+
expect(@cache).to receive(:run_command).once.with(/\Acd ~ && wget -O "remote_owner-repo-#{@uname}\.tgz.sha2" "https:\/\/a-bucket-name\.s3\.amazonaws\.com\/owner-repo-#{@uname}.tgz.sha2\?AWSAccessKeyId=AN_ACCESS_KEY_ID&Expires=[0-9]+&Signature=[^"]+"\Z/)
|
28
|
+
|
29
|
+
@cache.install
|
30
|
+
end
|
31
|
+
|
32
|
+
it 'installs the bundle' do
|
33
|
+
expect(@cache).to receive(:run_command).once.with("bundle install --without development production --path=~\/.bundle", retry: true)
|
34
|
+
|
35
|
+
@cache.install
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
describe 'cache_bundle' do
|
40
|
+
before(:each) do
|
41
|
+
ENV['TRAVIS_PULL_REQUEST'] = 'false'
|
42
|
+
ENV['TRAVIS_BRANCH'] = 'master'
|
43
|
+
|
44
|
+
@cache.stub(:puts)
|
45
|
+
@cache.stub(:run_command)
|
46
|
+
AWS::S3::S3Object.any_instance.stub(:write)
|
47
|
+
|
48
|
+
FileUtils.mkdir_p(ENV["TRAVIS_BUILD_DIR"])
|
49
|
+
File.open(File.join(ENV["TRAVIS_BUILD_DIR"], 'Gemfile.lock'), 'w') {|f| f.puts "Some lock contents" }
|
50
|
+
end
|
51
|
+
|
52
|
+
it 'builds a new archive if one does not already exist' do
|
53
|
+
expect(@cache).to receive(:archive_and_upload_bundle).once.with(no_args)
|
54
|
+
|
55
|
+
@cache.cache_bundle
|
56
|
+
end
|
57
|
+
|
58
|
+
it 'builds a new archive if the sha has changed' do
|
59
|
+
FileUtils.mkdir_p("~/")
|
60
|
+
File.open(File.expand_path("~/remote_owner-repo-#{@uname}.tgz.sha2"), 'w') {|f| f.print "old sha hash" }
|
61
|
+
expect(@cache).to receive(:archive_and_upload_bundle).once.with(no_args)
|
62
|
+
|
63
|
+
@cache.cache_bundle
|
64
|
+
end
|
65
|
+
|
66
|
+
it 'does not build a new archive if the sha matches' do
|
67
|
+
FileUtils.mkdir_p("~/")
|
68
|
+
File.open(File.expand_path("~/remote_owner-repo-#{@uname}.tgz.sha2"), 'w') {|f| f.print "be7b966bd555fffd27c11f2557484501ad2ed482f1b6164457433800e163ae29" }
|
69
|
+
expect(@cache).to receive(:archive_and_upload_bundle).never
|
70
|
+
expect(@cache).to receive(:puts).with("=> There were no changes, doing nothing")
|
71
|
+
|
72
|
+
@cache.cache_bundle
|
73
|
+
end
|
74
|
+
|
75
|
+
it 'does not build a new archive for pull requests' do
|
76
|
+
ENV['TRAVIS_PULL_REQUEST'] = '1'
|
77
|
+
expect(@cache).to receive(:archive_and_upload_bundle).never
|
78
|
+
expect(@cache).to receive(:puts).with("=> This is a pull request, doing nothing")
|
79
|
+
|
80
|
+
@cache.cache_bundle
|
81
|
+
end
|
82
|
+
|
83
|
+
it 'does not build a new archive for a non master brnach' do
|
84
|
+
ENV['TRAVIS_BRANCH'] = 'not-master'
|
85
|
+
expect(@cache).to receive(:archive_and_upload_bundle).never
|
86
|
+
expect(@cache).to receive(:puts).with("=> This is not the master branch, doing nothing")
|
87
|
+
|
88
|
+
@cache.cache_bundle
|
89
|
+
end
|
90
|
+
end
|
91
|
+
|
92
|
+
describe 'archive_and_upload_bundle' do
|
93
|
+
before(:each) do
|
94
|
+
@cache.stub(:puts)
|
95
|
+
@cache.stub(:run_command)
|
96
|
+
AWS::S3::S3Object.any_instance.stub(:write)
|
97
|
+
|
98
|
+
@cache.instance_variable_set(:@bundle_digest, 'be7b966bd555fffd27c11f2557484501ad2ed482f1b6164457433800e163ae29')
|
99
|
+
end
|
100
|
+
|
101
|
+
it 'runs bundle clean if there was an old archive' do
|
102
|
+
@cache.instance_variable_set(:@old_digest, 'non-empty-string')
|
103
|
+
expect(@cache).to receive(:run_command).with("bundle clean")
|
104
|
+
|
105
|
+
@cache.archive_and_upload_bundle
|
106
|
+
end
|
107
|
+
|
108
|
+
it 'archives the current bundle directory' do
|
109
|
+
expect(@cache).to receive(:run_command).with(%{cd ~ && tar -cjf "owner-repo-#{@uname}.tgz" .bundle}, exit_on_error: true)
|
110
|
+
|
111
|
+
@cache.archive_and_upload_bundle
|
112
|
+
end
|
113
|
+
|
114
|
+
it 'sends the correct files to S3' do
|
115
|
+
storage = {
|
116
|
+
"owner-repo-#{@uname}.tgz" => double(AWS::S3::S3Object),
|
117
|
+
"owner-repo-#{@uname}.tgz.sha2" => double(AWS::S3::S3Object)
|
118
|
+
}
|
119
|
+
@cache.stub(:storage).and_return(storage)
|
120
|
+
|
121
|
+
expect(storage["owner-repo-#{@uname}.tgz"]).to receive(:write).with(Pathname.new(File.expand_path("~/owner-repo-#{@uname}.tgz")), reduced_redundancy: true)
|
122
|
+
expect(storage["owner-repo-#{@uname}.tgz.sha2"]).to receive(:write).with("be7b966bd555fffd27c11f2557484501ad2ed482f1b6164457433800e163ae29", content_type: 'text/plain', reduced_redundancy: true)
|
123
|
+
|
124
|
+
@cache.archive_and_upload_bundle
|
125
|
+
end
|
126
|
+
end
|
127
|
+
end
|
data/travis_bundle_cache.gemspec
CHANGED
@@ -19,6 +19,9 @@ Gem::Specification.new do |spec|
|
|
19
19
|
spec.require_paths = ["lib"]
|
20
20
|
spec.executables = ["travis_bundle_cache", "travis_bundle_install"]
|
21
21
|
|
22
|
+
spec.signing_key = File.expand_path("~/.gemcert/gem-private_key.pem")
|
23
|
+
spec.cert_chain = ['gem-public_cert.pem']
|
24
|
+
|
22
25
|
spec.add_dependency "bundler", "~> 1.3"
|
23
26
|
spec.add_dependency "aws-sdk"
|
24
27
|
end
|
data.tar.gz.sig
ADDED
Binary file
|
metadata
CHANGED
@@ -1,13 +1,35 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: travis_bundle_cache
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.5
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- David Genord II
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
|
-
cert_chain:
|
10
|
+
cert_chain:
|
11
|
+
- |
|
12
|
+
-----BEGIN CERTIFICATE-----
|
13
|
+
MIIDijCCAnKgAwIBAgIBATANBgkqhkiG9w0BAQUFADBFMQ4wDAYDVQQDDAVkYXZp
|
14
|
+
ZDEeMBwGCgmSJomT8ixkARkWDmNvbGxlY3RpdmVpZGVhMRMwEQYKCZImiZPyLGQB
|
15
|
+
GRYDY29tMB4XDTEzMDgwMjE0MjAwN1oXDTE0MDgwMjE0MjAwN1owRTEOMAwGA1UE
|
16
|
+
AwwFZGF2aWQxHjAcBgoJkiaJk/IsZAEZFg5jb2xsZWN0aXZlaWRlYTETMBEGCgmS
|
17
|
+
JomT8ixkARkWA2NvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAO+X
|
18
|
+
lpzbJojxB0O/2nTxK2NdfgOd2EsnOZaezBZsGDZq0Vbnjec/tNrnsHdUM12LvP1h
|
19
|
+
ZuIx/IrAZj4wlsyZgUsKAQs9GXQCDzmKuwo3kmYtUDv55TQJKwDhtdwliTD82FOT
|
20
|
+
IkTUEcRZNhtb7ymzpK17p5iHaHL+4BgNs1fbciTxqI1xhh9TGyDOht++9dCjJVDV
|
21
|
+
I5nU8VMV8gkAkxA8AlTXNf3hWQNN3tBuvY5EMaG3beN52v+YYDW8Ko4GL16M+aOA
|
22
|
+
PShN16CdA5Jjc/hwe6gK175Ma9UTHwIoWDX2WBztM+cU0E27vxFxbe+il9mHk9wG
|
23
|
+
BzedoP1o5yNUovdOhIsCAwEAAaOBhDCBgTAJBgNVHRMEAjAAMAsGA1UdDwQEAwIE
|
24
|
+
sDAdBgNVHQ4EFgQUozKz5aO8wO2w0VHWEbPR7x0nBlQwIwYDVR0RBBwwGoEYZGF2
|
25
|
+
aWRAY29sbGVjdGl2ZWlkZWEuY29tMCMGA1UdEgQcMBqBGGRhdmlkQGNvbGxlY3Rp
|
26
|
+
dmVpZGVhLmNvbTANBgkqhkiG9w0BAQUFAAOCAQEANGHG41mjDpWNsdtjMq7lp5Dw
|
27
|
+
xgnf3D3Bz1/t2e4QimdTqniwudSE/P/HD/8HkEn9JMI39xQFyXpfWCFwS5kwsGle
|
28
|
+
qr/LzRfLXV3B11TciP10uMYmHQ+46AJ4mL2iyvmRsIKFU45gBpU1/2zJ44GGzYU1
|
29
|
+
cSKuuZ0obmZRTI0Vn54e2ofKnWZtylW0SYa9uQplEJK/Ttu88DL99WgwOyNdMlqg
|
30
|
+
FJkL4MD3SK4X13qDUlr6YzTkvc8MMfaECuzUIM6KqSGQnyZ16D2zLdZTtr0GPzJZ
|
31
|
+
SdQ0gsTaFvafp6C7hh//UHFI92FnVtzpV01oGPDikn3a2qc8eUPvULa2NlJRFQ==
|
32
|
+
-----END CERTIFICATE-----
|
11
33
|
date: 2013-08-02 00:00:00.000000000 Z
|
12
34
|
dependencies:
|
13
35
|
- !ruby/object:Gem::Dependency
|
@@ -48,15 +70,19 @@ extensions: []
|
|
48
70
|
extra_rdoc_files: []
|
49
71
|
files:
|
50
72
|
- .gitignore
|
73
|
+
- .travis.yml
|
51
74
|
- Gemfile
|
52
75
|
- LICENSE.txt
|
53
76
|
- README.md
|
54
77
|
- Rakefile
|
55
78
|
- bin/travis_bundle_cache
|
56
79
|
- bin/travis_bundle_install
|
80
|
+
- gem-public_cert.pem
|
57
81
|
- lib/travis_bundle_cache.rb
|
58
82
|
- lib/travis_bundle_cache/cache.rb
|
59
83
|
- lib/travis_bundle_cache/version.rb
|
84
|
+
- spec/spec_helper.rb
|
85
|
+
- spec/travis_bundle_cache_spec.rb
|
60
86
|
- travis_bundle_cache.gemspec
|
61
87
|
homepage: https://github.com/collectiveidea/travis_bundle_cache
|
62
88
|
licenses:
|
@@ -82,4 +108,6 @@ rubygems_version: 2.0.3
|
|
82
108
|
signing_key:
|
83
109
|
specification_version: 4
|
84
110
|
summary: Cache the gem bundle for speedy travis builds
|
85
|
-
test_files:
|
111
|
+
test_files:
|
112
|
+
- spec/spec_helper.rb
|
113
|
+
- spec/travis_bundle_cache_spec.rb
|
metadata.gz.sig
ADDED
Binary file
|