simplecov-s3 0.1.3 → 0.1.4

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: fd9cb36e71a3e0ba0af0873074af077bb96c92b8
4
- data.tar.gz: 53977763c8dbe8ea5476e9ed4fa9a0c6a8a09a41
3
+ metadata.gz: 1be02985d6dccbe11b92af4e97c018a3a2d40f8b
4
+ data.tar.gz: 4fda1155fdf6891ca9012d3cc8004e83489f4e1f
5
5
  SHA512:
6
- metadata.gz: 556747ea5527d9c5ec04afae92bad25a8feaeca9f66c7c329d37efae9a0d169db9c5019e717bdcfa779ff892bbfa517325065a45dda12912f8a56b20fcbc5cbc
7
- data.tar.gz: 3196d83cc74fde660ec40e6d9dfa421798b3da7ce6aea7caae17058aa317f006d118faa92cf34caefc516f2ebdbff7fb3a00724fe38a1a3e750edc5db962d5c0
6
+ metadata.gz: f76ff1bda128f0522921f2fda81d811c593d71af79f281832a366922b8717ab0855698f32adaa5759ea070f605dc2b11d67c1f35e683f81a5d4f7a479807b727
7
+ data.tar.gz: 4cacc8f463f1a0ac29dbcd756d963e0b9e1ef636defb66401e9e8256dc728b7749b689c0dd9833999fde52921ddf09ce8b9207b998e0dbc6de1e7c50a5ca7807
data/.gitignore CHANGED
@@ -3,6 +3,7 @@
3
3
  .bundle
4
4
  Gemfile.lock
5
5
  EYIntegratedGemfile.lock
6
+ knapsack_rspec_report.json
6
7
  pkg/*
7
8
  .rvmrc
8
9
  coverage
data/Gemfile CHANGED
@@ -2,6 +2,8 @@ source "http://rubygems.org"
2
2
 
3
3
  gemspec
4
4
 
5
+ gem 'mime-types'
6
+
5
7
  group :test do
6
8
  gem 'rake'
7
9
  gem 'pry'
data/lib/simplecov-s3.rb CHANGED
@@ -32,7 +32,10 @@ module SimpleCov
32
32
  @shared_secret = opts[:shared_secret]
33
33
  @assets_url = opts[:assets_url]
34
34
  @bucket_name = opts[:bucket_name]
35
- @build_units = opts[:build_units]
35
+ @build_units = opts[:build_units].to_i
36
+ if @build_units <= 1
37
+ raise "Missing build_units in config (need a value greater than 0)"
38
+ end
36
39
  @postback_url = opts[:postback_url]
37
40
  @build_unit = opts[:build_unit]
38
41
  @build_id = opts[:build_id]
@@ -41,7 +44,8 @@ module SimpleCov
41
44
  if @project_name.empty?
42
45
  @project_name = "unknown"
43
46
  end
44
- @history_limit = opts[:history_limit] || 15
47
+ @history_limit = opts[:history_limit] || (@build_units.to_i * 3)
48
+ @additional_artifacts_to_merge = opts[:additional_artifacts_to_merge] || []
45
49
  end
46
50
 
47
51
  def push_partial(opts = {})
@@ -49,6 +53,13 @@ module SimpleCov
49
53
  result = SimpleCov::ResultMerger.merged_result
50
54
  data_to_push = result.original_result.merge("BUILD_UNIT" => @build_unit).to_json
51
55
  put_file("#{@project_name}-#{commit_time}-coverageJSON/#{hashed_build_id}/#{@job_id}", data_to_push)
56
+ @additional_artifacts_to_merge.each do |artifact|
57
+ key = artifact[:key]
58
+ file = artifact[:file]
59
+ filedata = File.read(file)
60
+ puts "pushing additional artifact #{key} #{file} #{filedata[0,100]}"
61
+ put_file("#{@project_name}-#{commit_time}-#{key}/#{hashed_build_id}/#{@job_id}", filedata)
62
+ end
52
63
  rescue => e
53
64
  puts e.inspect
54
65
  puts e.backtrace
@@ -84,7 +95,28 @@ module SimpleCov
84
95
  merged = result.original_result.merge_resultset(merged)
85
96
  end
86
97
  result = SimpleCov::Result.new(merged)
87
- push_coverage_to("#{@project_name}-#{Time.now.to_i}-coverageRESULT/#{SecureRandom.urlsafe_base64(33)}", gen_body(result), result.covered_percent, @postback_url)
98
+ uniq_id = SecureRandom.urlsafe_base64(33)
99
+ push_coverage_to("#{@project_name}-#{Time.now.to_i}-coverageRESULT/#{uniq_id}", gen_body(result), result.covered_percent, @postback_url)
100
+ @additional_artifacts_to_merge.each do |artifact|
101
+ key = artifact[:key]
102
+ file = artifact[:file]
103
+ merge_with = artifact[:merge_with]
104
+ files = files_for_key(key).map do |f|
105
+ data = f.body
106
+ puts "merging additional artifact #{f.key} #{data[0,100]}"
107
+ data
108
+ end
109
+ while files.size > 1
110
+ a, b, *files = files
111
+ files << merge_with.call(a, b)
112
+ end
113
+ File.open(file, "w+"){|f| f.write(files.first)}
114
+ puts "Merged artifact #{key} contents:"
115
+ puts files.first
116
+ save_merged_artifact_in_s3_at = "#{@project_name}-#{Time.now.to_i}-#{key}/#{uniq_id}"
117
+ puts "Also saving in S3 at path: #{save_merged_artifact_in_s3_at}"
118
+ put_file(save_merged_artifact_in_s3_at, files.first)
119
+ end
88
120
  cleanup_files
89
121
  end
90
122
 
@@ -112,11 +144,15 @@ module SimpleCov
112
144
  @connection.directories.get(@bucket_name).files.create(:key => path, :body => data, :content_type => "text/html")
113
145
  end
114
146
 
115
- def json_files
116
- expected_dir = "#{@project_name}-#{commit_time}-coverageJSON/#{hashed_build_id}/"
147
+ def files_for_key(key)
148
+ expected_dir = "#{@project_name}-#{commit_time}-#{key}/#{hashed_build_id}/"
117
149
  @connection.directories.get(@bucket_name, :prefix => expected_dir).files
118
150
  end
119
151
 
152
+ def json_files
153
+ files_for_key("coverageJSON")
154
+ end
155
+
120
156
  def gen_body(result)
121
157
  Formatter.new.format(result).gsub("./assets",@assets_url)
122
158
  end
@@ -1,5 +1,5 @@
1
1
  module SimpleCov
2
2
  class S3
3
- VERSION = "0.1.3"
3
+ VERSION = "0.1.4"
4
4
  end
5
5
  end
data/spec/a_spec.rb CHANGED
@@ -18,6 +18,7 @@ describe SimpleCov::S3 do
18
18
  }
19
19
  s3conn = Fog::Storage.new(fog_opts)
20
20
  s3conn.directories.create(:key => "somebucket")
21
+ knapsack_rspec_report_path = File.expand_path("knapsack_rspec_report.json")
21
22
  cov_opts = {
22
23
  :fog => fog_opts,
23
24
  :project_name => "ey/simplecov-s3", #ENV["TRAVIS_REPO_SLUG"],
@@ -30,14 +31,22 @@ describe SimpleCov::S3 do
30
31
  :assets_url => "http://somebucket.s3-website-us-east-1.amazonaws.com/assets",
31
32
  :shared_secret => "XXXXXXXXXXXX", #used so build units can find each other, and for covereage postback
32
33
  :postback_url => "https://bot.example.org/coverage",
34
+ :additional_artifacts_to_merge => [{
35
+ key: "knapsack",
36
+ file: knapsack_rspec_report_path,
37
+ merge_with: Proc.new{|a,b| JSON.pretty_generate(JSON.parse(a).merge(JSON.parse(b))) }
38
+ }]
33
39
  }
40
+ File.open(knapsack_rspec_report_path, "w"){|fp| fp.write({foo: "bar"}.to_json)}
34
41
  cov = SimpleCov::S3.new(cov_opts)
35
42
  cov.push_partial(:debug => true)
36
43
  cov.pull_merge_and_push_full
44
+ File.open(knapsack_rspec_report_path, "w"){|fp| fp.write({bar: "baz"}.to_json)}
37
45
  cov2 = SimpleCov::S3.new(cov_opts.merge(:job_id => "457", :build_unit => "6"))
38
46
  cov2.push_partial(:debug => true)
39
47
  cov2.pull_merge_and_push_full
40
48
  cov2.push_full
49
+ expect(JSON.parse(File.read(knapsack_rspec_report_path))).to eq('foo' => 'bar', 'bar' => 'baz')
41
50
  #TODO: assert on the resulting contents of S3?
42
51
  end
43
52
 
metadata CHANGED
@@ -1,55 +1,55 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: simplecov-s3
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.3
4
+ version: 0.1.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jacob
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-02-12 00:00:00.000000000 Z
11
+ date: 2016-11-30 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rspec
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - '>='
17
+ - - ">="
18
18
  - !ruby/object:Gem::Version
19
19
  version: '0'
20
20
  type: :development
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - '>='
24
+ - - ">="
25
25
  - !ruby/object:Gem::Version
26
26
  version: '0'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: fog
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - '>='
31
+ - - ">="
32
32
  - !ruby/object:Gem::Version
33
33
  version: '0'
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
- - - '>='
38
+ - - ">="
39
39
  - !ruby/object:Gem::Version
40
40
  version: '0'
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: simplecov
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
- - - '>='
45
+ - - ">="
46
46
  - !ruby/object:Gem::Version
47
47
  version: '0'
48
48
  type: :runtime
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
- - - '>='
52
+ - - ">="
53
53
  - !ruby/object:Gem::Version
54
54
  version: '0'
55
55
  description: Merge simplecov outputs using S3 as shared storage (and publish the results
@@ -60,9 +60,9 @@ executables: []
60
60
  extensions: []
61
61
  extra_rdoc_files: []
62
62
  files:
63
- - .gitignore
64
- - .rspec
65
- - .travis.yml
63
+ - ".gitignore"
64
+ - ".rspec"
65
+ - ".travis.yml"
66
66
  - Gemfile
67
67
  - LICENSE
68
68
  - README.md
@@ -80,21 +80,20 @@ require_paths:
80
80
  - lib
81
81
  required_ruby_version: !ruby/object:Gem::Requirement
82
82
  requirements:
83
- - - '>='
83
+ - - ">="
84
84
  - !ruby/object:Gem::Version
85
85
  version: '0'
86
86
  required_rubygems_version: !ruby/object:Gem::Requirement
87
87
  requirements:
88
- - - '>='
88
+ - - ">="
89
89
  - !ruby/object:Gem::Version
90
90
  version: '0'
91
91
  requirements: []
92
92
  rubyforge_project:
93
- rubygems_version: 2.0.3
93
+ rubygems_version: 2.4.5.1
94
94
  signing_key:
95
95
  specification_version: 4
96
96
  summary: Merge simplecov outputs using S3 as shared storage (and publish the results
97
97
  as html to S3)
98
98
  test_files:
99
99
  - spec/a_spec.rb
100
- has_rdoc: