travis-gemcache 0.0.1 → 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
@@ -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
@@ -1,7 +1,9 @@
1
- module TravisGemcache
2
- class Railtie < Rails::Railtie
3
- rake_tasks do
4
- load "./tasks"
1
+ module Travis
2
+ module Gemcache
3
+ class Railtie < Rails::Railtie
4
+ rake_tasks do
5
+ load "./tasks"
6
+ end
5
7
  end
6
8
  end
7
9
  end
@@ -0,0 +1,5 @@
1
+ module Travis
2
+ module Gemcache
3
+ VERSION = '0.0.2'
4
+ end
5
+ 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.1
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