travis-gemcache 0.0.1 → 0.0.2
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.
- data/lib/tasks/bundle.rake +91 -0
- data/lib/travis-gemcache/railtie.rb +6 -4
- data/lib/travis-gemcache/version.rb +5 -0
- metadata +36 -2
@@ -0,0 +1,91 @@
|
|
1
|
+
require 'digest'
|
2
|
+
require 'fog'
|
3
|
+
|
4
|
+
namespace :ci do
|
5
|
+
namespace :travis do
|
6
|
+
desc "Caching"
|
7
|
+
task :bundle_cache do
|
8
|
+
bucket_name = ENV["AWS_S3_BUCKET"]
|
9
|
+
architecture = `uname -m`.strip
|
10
|
+
|
11
|
+
file_name = "#{ENV['BUNDLE_ARCHIVE']}-#{architecture}.tgz"
|
12
|
+
file_path = File.expand_path("~/#{file_name}")
|
13
|
+
lock_file = File.join(File.expand_path(ENV["TRAVIS_BUILD_DIR"]), "Gemfile.lock")
|
14
|
+
digest_filename = "#{file_name}.sha2"
|
15
|
+
old_digest = File.expand_path("~/remote_#{digest_filename}")
|
16
|
+
|
17
|
+
puts "Checking for changes"
|
18
|
+
bundle_digest = Digest::SHA2.file(lock_file).hexdigest
|
19
|
+
old_digest = File.exists?(old_digest) ? File.read(old_digest) : ""
|
20
|
+
|
21
|
+
if bundle_digest == old_digest
|
22
|
+
puts "=> There were no changes, doing nothing"
|
23
|
+
else
|
24
|
+
if old_digest == ""
|
25
|
+
puts "=> There was no existing digest, uploading a new version of the archive"
|
26
|
+
else
|
27
|
+
puts "=> There were changes, uploading a new version of the archive"
|
28
|
+
puts " => Old checksum: #{old_digest}"
|
29
|
+
puts " => New checksum: #{bundle_digest}"
|
30
|
+
end
|
31
|
+
|
32
|
+
puts "=> Preparing bundle archive"
|
33
|
+
`cd ~ && tar -cjf #{file_name} .bundle && split -b 5m -a 3 #{file_name} #{file_name}.`
|
34
|
+
|
35
|
+
parts_pattern = File.expand_path(File.join("~", "#{file_name}.*"))
|
36
|
+
parts = Dir.glob(parts_pattern).sort
|
37
|
+
|
38
|
+
storage = Fog::Storage.new({
|
39
|
+
:provider => "AWS",
|
40
|
+
:aws_access_key_id => ENV["AWS_S3_KEY"],
|
41
|
+
:aws_secret_access_key => ENV["AWS_S3_SECRET"],
|
42
|
+
:region => ENV["AWS_S3_REGION"] || "us-east-1"
|
43
|
+
})
|
44
|
+
|
45
|
+
puts "=> Uploading the bundle"
|
46
|
+
puts " => Beginning multipart upload"
|
47
|
+
response = storage.initiate_multipart_upload bucket_name, file_name, { "x-amz-acl" => "public-read" }
|
48
|
+
upload_id = response.body['UploadId']
|
49
|
+
puts " => Upload ID: #{upload_id}"
|
50
|
+
|
51
|
+
part_ids = []
|
52
|
+
|
53
|
+
puts " => Uploading #{parts.length} parts"
|
54
|
+
parts.each_with_index do |part, index|
|
55
|
+
part_number = (index + 1).to_s
|
56
|
+
puts " => Uploading #{part}"
|
57
|
+
File.open part do |part_file|
|
58
|
+
response = storage.upload_part bucket_name, file_name, upload_id, part_number, part_file
|
59
|
+
part_ids << response.headers['ETag']
|
60
|
+
puts " => Uploaded"
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
64
|
+
puts " => Completing multipart upload"
|
65
|
+
storage.complete_multipart_upload bucket_name, file_name, upload_id, part_ids
|
66
|
+
|
67
|
+
puts "=> Uploading the digest file"
|
68
|
+
bucket = storage.directories.new(key: bucket_name)
|
69
|
+
bucket.files.create({
|
70
|
+
:body => bundle_digest,
|
71
|
+
:key => digest_filename,
|
72
|
+
:public => true,
|
73
|
+
:content_type => "text/plain"
|
74
|
+
})
|
75
|
+
end
|
76
|
+
|
77
|
+
puts "All done now."
|
78
|
+
end
|
79
|
+
|
80
|
+
desc "Instaling"
|
81
|
+
task :install do
|
82
|
+
arch = `uname -m`.strip!
|
83
|
+
file_name = "#{ENV['BUNDLE_ARCHIVE']}-#{arch}.tgz"
|
84
|
+
Dir.chdir "~" do
|
85
|
+
%x{ wget -O "remote_#{file_name}" "https://#{ENV['AWS_S3_BUCKET']}.s3.amazonaws.com/#{file_name}" }
|
86
|
+
%x{ tar -xf "remote_#{file_name}" }
|
87
|
+
%x{ wget -O "remote_#{file_name}.sha2" "https://#{file_name}.s3.amazonaws.com/#{file_name}.sha2" }
|
88
|
+
end
|
89
|
+
end
|
90
|
+
end
|
91
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: travis-gemcache
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.2
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -10,14 +10,48 @@ autorequire:
|
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
12
|
date: 2013-05-01 00:00:00.000000000 Z
|
13
|
-
dependencies:
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: multi_json
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
17
|
+
none: false
|
18
|
+
requirements:
|
19
|
+
- - '='
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: 1.7.4
|
22
|
+
type: :runtime
|
23
|
+
prerelease: false
|
24
|
+
version_requirements: !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
26
|
+
requirements:
|
27
|
+
- - '='
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: 1.7.4
|
30
|
+
- !ruby/object:Gem::Dependency
|
31
|
+
name: fog
|
32
|
+
requirement: !ruby/object:Gem::Requirement
|
33
|
+
none: false
|
34
|
+
requirements:
|
35
|
+
- - '='
|
36
|
+
- !ruby/object:Gem::Version
|
37
|
+
version: 1.11.1
|
38
|
+
type: :runtime
|
39
|
+
prerelease: false
|
40
|
+
version_requirements: !ruby/object:Gem::Requirement
|
41
|
+
none: false
|
42
|
+
requirements:
|
43
|
+
- - '='
|
44
|
+
- !ruby/object:Gem::Version
|
45
|
+
version: 1.11.1
|
14
46
|
description: Rake tasks to cache the ./gems directory
|
15
47
|
email: vincent@siebert.im
|
16
48
|
executables: []
|
17
49
|
extensions: []
|
18
50
|
extra_rdoc_files: []
|
19
51
|
files:
|
52
|
+
- lib/tasks/bundle.rake
|
20
53
|
- lib/travis-gemcache/railtie.rb
|
54
|
+
- lib/travis-gemcache/version.rb
|
21
55
|
- lib/travis-gemcache.rb
|
22
56
|
- LICENSE
|
23
57
|
- README.md
|