vault-tools 1.0.1 → 2.1.0

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
  SHA256:
3
- metadata.gz: fe49ccd1b29f332961d47073c6856e30b2505c27ecac92560683963d2835d370
4
- data.tar.gz: dd30f52a76a9cfdcbcd0f1e44a99b33b0677111ebd80819fa8986597cee0102d
3
+ metadata.gz: 30215f797eb0408bdb04fcef03f996e62742d53900ab541fa88778d3bd9c3bb7
4
+ data.tar.gz: 30dd62061f20a3f7c4d98485d33d2dfaed376ecd09d872a795879c3fa29e062a
5
5
  SHA512:
6
- metadata.gz: 975dca6c4728fbc1fde722298f5b55e874eca041e92e23c43ead2dd13bfd4a71718702f30a1de48c058fd93700302bf48fb0c26af4a1cc945f3fce77fbeafd28
7
- data.tar.gz: 64b8630df783acf88d09fc2c807f9b611626b3209679bdaf27d35f0afd99f8a9084931bc62c4e9f4cbdf5751e4e238f8e8c65faee6922ca90a483506f226cfeb
6
+ metadata.gz: 47006d1b43d504f4faeb5052485b4fcc899be520353c84d1bbf80091983a2406977166a4089807f4222d54baafce4d0ccf1c74264cde82fa35c798448deb4c27
7
+ data.tar.gz: 23e8a5878796fef48fb97f809e87d813d9c12943d34e3acec788735920391bab399f32dbf7a33b94d51f3867ca5cbc048f149ae3c183b31d0237cb171ee84390
@@ -0,0 +1,15 @@
1
+ version: 2.1
2
+
3
+ jobs:
4
+ build:
5
+ docker:
6
+ - image: circleci/ruby:2.7.1
7
+
8
+ steps:
9
+ - checkout
10
+ - run: export BUNDLE_GEMFILE=$PWD/Gemfile
11
+ - run: ruby --version
12
+ - run: gem update --system
13
+ - run: gem install bundler -v '< 2'
14
+ - run: bundle install --jobs=3 --retry=3 --path=${BUNDLE_PATH:-vendor/bundle}
15
+ - run: bundle exec rake
data/Gemfile CHANGED
@@ -4,12 +4,12 @@ source 'https://rubygems.org'
4
4
  gemspec
5
5
 
6
6
  group :development do
7
- gem 'rake', '~> 10.4'
7
+ gem 'rake', '~> 13.0'
8
8
  gem 'shotgun', '~> 0.9.2'
9
9
  gem 'yard-sinatra'
10
10
  end
11
11
 
12
12
  group :test do
13
- gem 'guard-minitest'
14
- gem 'vault-test-tools', '~> 0.4.2'
13
+ gem 'minitest-around'
14
+ gem 'vault-test-tools', '~> 1.1.0'
15
15
  end
data/Gemfile.lock CHANGED
@@ -1,113 +1,107 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- vault-tools (1.0.1)
5
- aws-sdk (~> 1.0)
4
+ vault-tools (2.1.0)
5
+ aws-sdk-s3 (~> 1.0)
6
6
  coderay
7
7
  excon
8
- fernet (= 2.0.rc2)
9
- heroku-api
8
+ fernet (= 2.0)
10
9
  rack (~> 2.0)
11
10
  rack-ssl-enforcer
12
- rollbar (~> 2.7.1)
11
+ rollbar (~> 2.18.2)
13
12
  scrolls (~> 0.9)
14
13
  sinatra (~> 2.0.4)
15
14
  uuidtools
16
- zipkin-tracer (~> 0.27)
17
15
 
18
16
  GEM
19
17
  remote: https://rubygems.org/
20
18
  specs:
21
- aws-sdk (1.67.0)
22
- aws-sdk-v1 (= 1.67.0)
23
- aws-sdk-v1 (1.67.0)
24
- json (~> 1.4)
25
- nokogiri (~> 1)
26
- coderay (1.1.2)
27
- concurrent-ruby (1.1.3)
28
- dotenv (2.5.0)
29
- excon (0.62.0)
30
- faraday (0.15.3)
31
- multipart-post (>= 1.2, < 3)
32
- fernet (2.0.rc2)
19
+ aws-eventstream (1.1.1)
20
+ aws-partitions (1.491.0)
21
+ aws-sdk-core (3.119.1)
22
+ aws-eventstream (~> 1, >= 1.0.2)
23
+ aws-partitions (~> 1, >= 1.239.0)
24
+ aws-sigv4 (~> 1.1)
25
+ jmespath (~> 1.0)
26
+ aws-sdk-kms (1.46.0)
27
+ aws-sdk-core (~> 3, >= 3.119.0)
28
+ aws-sigv4 (~> 1.1)
29
+ aws-sdk-s3 (1.99.0)
30
+ aws-sdk-core (~> 3, >= 3.119.0)
31
+ aws-sdk-kms (~> 1)
32
+ aws-sigv4 (~> 1.1)
33
+ aws-sigv4 (1.2.4)
34
+ aws-eventstream (~> 1, >= 1.0.2)
35
+ coderay (1.1.3)
36
+ dotenv (2.7.6)
37
+ excon (0.85.0)
38
+ fernet (2.0)
33
39
  valcro (= 0.1)
34
- finagle-thrift (1.4.2)
35
- thrift (~> 0.9.3)
36
- guard-compat (1.2.1)
37
- guard-minitest (2.4.6)
38
- guard-compat (~> 1.2)
39
- minitest (>= 3.0)
40
- heroku-api (0.4.3)
41
- excon (~> 0.45)
42
- multi_json (~> 1.8)
43
- json (1.8.6)
44
- logfmt (0.0.8)
45
- method_source (0.9.2)
46
- mini_portile2 (2.3.0)
47
- minitest (5.11.3)
48
- multi_json (1.13.1)
49
- multipart-post (2.0.0)
50
- mustermann (1.0.3)
51
- nokogiri (1.8.5)
52
- mini_portile2 (~> 2.3.0)
53
- pry (0.12.2)
54
- coderay (~> 1.1.0)
55
- method_source (~> 0.9.0)
56
- rack (2.0.6)
57
- rack-protection (2.0.4)
40
+ jmespath (1.4.0)
41
+ logfmt (0.0.9)
42
+ method_source (1.0.0)
43
+ mini_portile2 (2.6.1)
44
+ minitest (5.14.4)
45
+ minitest-around (0.5.0)
46
+ minitest (~> 5.0)
47
+ multi_json (1.15.0)
48
+ mustermann (1.1.1)
49
+ ruby2_keywords (~> 0.0.1)
50
+ nokogiri (1.12.3)
51
+ mini_portile2 (~> 2.6.1)
52
+ racc (~> 1.4)
53
+ pry (0.14.1)
54
+ coderay (~> 1.1)
55
+ method_source (~> 1.0)
56
+ racc (1.5.2)
57
+ rack (2.2.3)
58
+ rack-protection (2.0.8.1)
58
59
  rack
59
60
  rack-ssl-enforcer (0.2.9)
60
61
  rack-test (1.1.0)
61
62
  rack (>= 1.0, < 3)
62
- rake (10.5.0)
63
- rdoc (6.0.4)
64
- rollbar (2.7.1)
63
+ rake (13.0.6)
64
+ rdoc (6.3.2)
65
+ rollbar (2.18.2)
65
66
  multi_json
66
67
  rr (1.2.1)
67
- scrolls (0.9.0)
68
+ ruby2_keywords (0.0.5)
69
+ scrolls (0.9.1)
68
70
  shotgun (0.9.2)
69
71
  rack (>= 1.0)
70
- sinatra (2.0.4)
72
+ sinatra (2.0.8.1)
71
73
  mustermann (~> 1.0)
72
74
  rack (~> 2.0)
73
- rack-protection (= 2.0.4)
75
+ rack-protection (= 2.0.8.1)
74
76
  tilt (~> 2.0)
75
- sucker_punch (2.1.1)
76
- concurrent-ruby (~> 1.0)
77
- thrift (0.9.3.0)
78
- tilt (2.0.8)
79
- uuidtools (2.1.5)
77
+ tilt (2.0.10)
78
+ uuidtools (2.2.0)
80
79
  valcro (0.1)
81
- vault-test-tools (0.4.2)
80
+ vault-test-tools (1.1.0)
82
81
  logfmt
83
82
  minitest (~> 5.11)
84
83
  nokogiri
85
84
  rack-test (~> 1.1)
86
- rr
87
- scrolls (= 0.9)
88
- yard (0.9.16)
85
+ rr (~> 1.2)
86
+ scrolls
87
+ yard (0.9.26)
89
88
  yard-sinatra (1.0.0)
90
89
  yard (~> 0.7)
91
- zipkin-tracer (0.29.1)
92
- faraday (~> 0.8)
93
- finagle-thrift (~> 1.4.2)
94
- rack (>= 1.0)
95
- sucker_punch (~> 2.0)
96
90
 
97
91
  PLATFORMS
98
92
  ruby
99
93
 
100
94
  DEPENDENCIES
101
95
  dotenv
102
- guard-minitest
96
+ minitest-around
103
97
  pry
104
- rake (~> 10.4)
98
+ rake (~> 13.0)
105
99
  rdoc
106
100
  shotgun (~> 0.9.2)
107
- vault-test-tools (~> 0.4.2)
101
+ vault-test-tools (~> 1.1.0)
108
102
  vault-tools!
109
103
  yard
110
104
  yard-sinatra
111
105
 
112
106
  BUNDLED WITH
113
- 1.17.1
107
+ 2.2.26
data/README.md CHANGED
@@ -3,7 +3,7 @@
3
3
  Tools is the English word for ツール. Tooling for the Heroku Vault
4
4
  team to enable faster bootstrapping for Ruby projects.
5
5
 
6
- [![Build Status](https://travis-ci.org/heroku/vault-tools.png?branch=master)](https://travis-ci.org/heroku/vault-tools)
6
+ [![CircleCI](https://circleci.com/gh/heroku/vault-tools/tree/master.svg?style=shield&circle-token=39ec638ab252a4440ca919f9b09dc258b4459c58)](_https://circleci.com/gh/heroku/vault-tools/tree/master_)
7
7
 
8
8
  ## Installation
9
9
 
@@ -26,9 +26,6 @@ calling `Vault.setup` will:
26
26
  - if the `CONFIG_APP` environment variable is defined and this is
27
27
  the production environment, it will attempt to use the Heroku API
28
28
  to load the config vars from another app into `Vault::Config`
29
- - enable distributed tracing via Zipkin, if the [required config
30
- vars](#configs-for-tracing) are set
31
-
32
29
 
33
30
  ### `Vault::Config`
34
31
 
@@ -93,16 +90,10 @@ Generate the API documentation:
93
90
 
94
91
  vendor/bin/d
95
92
 
96
- ## Configs for tracing
97
-
98
- The following are config vars to be set in the consumer app for tracing with
99
- Zipkin:
100
- * `APP_NAME` (required) what the trace will show up as in the Zipkin interface.
101
- * `ZIPKIN_ENABLED` (required) must be set to `true` to start tracing.
102
- * `ZIPKIN_API_HOST` (required) where to post traces to. URL must contain the
103
- basic auth creds from the Tools team.
104
- * `ZIPKIN_SAMPLE_RATE` defaults to `0.1`.
105
-
106
93
  ## Releasing
107
94
 
108
95
  > bundle exec rake release
96
+
97
+ ## Release Notes
98
+ Version 2.1.0 (2021-08-26):
99
+ guard-minitest was removed due to it causing problems with the ruby version upgrade. Was not actively used anymore. Hasn't been updated in a long time.
@@ -5,7 +5,7 @@ module Vault
5
5
  ID_CAPTURE = /\Aapp(\d+)\@[\w\.]+com\z/
6
6
  # Convert a core app ID into a Heroku app ID.
7
7
  #
8
- # @param app_id [Fixnum] A core app ID.
8
+ # @param app_id [Integer] A core app ID.
9
9
  # @return [String] A Heroku ID that uniquely represents the app.
10
10
  def self.id_to_hid(app_id)
11
11
  "app#{app_id}@heroku.com"
@@ -13,7 +13,7 @@ module Vault
13
13
 
14
14
  # Convert a core app ID into a v5 UUID.
15
15
  #
16
- # @param app_id [Fixnum] An app ID.
16
+ # @param app_id [Integer] An app ID.
17
17
  # @return [String] A v5 UUID that uniquely represents the app.
18
18
  def self.id_to_uuid(app_id)
19
19
  url = "https://vault.heroku.com/apps/#{app_id}"
@@ -24,7 +24,7 @@ module Vault
24
24
  #
25
25
  # @param heroku_id [String] A Heroku app ID, such as `app1234@heroku.com`.
26
26
  # @raise [ArgumentError] Raised if a malformed Heroku ID is provided.
27
- # @return [Fixnum] The core app ID that uniquely represents the app.
27
+ # @return [Integer] The core app ID that uniquely represents the app.
28
28
  def self.hid_to_id(heroku_id)
29
29
  if app_id = heroku_id.slice(ID_CAPTURE, 1)
30
30
  app_id.to_i
@@ -32,30 +32,12 @@ module Vault
32
32
  ENV[var_name] || @@shared[var_name] || @@defaults[default_name]
33
33
  end
34
34
 
35
- # Loads config from another app.
36
- def self.load_shared!(app = nil)
37
- heroku = Heroku::API.new
38
- @@shared = heroku.get_config_vars(app).body
39
- end
40
-
41
35
  # Reset defaults and shared values
42
36
  def self.reset!
43
37
  @@defaults = {}
44
38
  @@shared = {}
45
39
  end
46
40
 
47
- # An environment variable from another app.
48
- #
49
- # @param app [String] The name of the app to get the value from.
50
- # @param name [String] The name of the environment variable to fetch a
51
- # value for.
52
- # @return [String] The value of an environment variable from another
53
- # Heroku app or nil if no match is available.
54
- def self.remote_env(app, name)
55
- heroku = Heroku::API.new
56
- heroku.get_config_vars(app).body[name]
57
- end
58
-
59
41
  # An environment variable.
60
42
  #
61
43
  # @param name [String] The name of the environment variable to fetch a
@@ -126,7 +108,7 @@ module Vault
126
108
 
127
109
  # The port to listen on for web requests.
128
110
  #
129
- # @return [Fixnum] The port to listen on for web requests.
111
+ # @return [Integer] The port to listen on for web requests.
130
112
  def self.port
131
113
  env!("PORT").to_i
132
114
  end
@@ -148,12 +130,12 @@ module Vault
148
130
  !bool?('VAULT_TOOLS_DISABLE_SSL')
149
131
  end
150
132
 
151
- # An environment variable converted to a Fixnum.
133
+ # An environment variable converted to a Integer.
152
134
  #
153
135
  # @param name [String] The name of the environment variable to fetch a
154
- # Fixnum for.
155
- # @return [Fixnum] The number or nil if the value couldn't be coerced to a
156
- # Fixnum.
136
+ # Integer for.
137
+ # @return [Integer] The number or nil if the value couldn't be coerced to a
138
+ # Integer.
157
139
  def self.int(name)
158
140
  self[name] && self[name].to_i
159
141
  end
@@ -194,7 +176,7 @@ module Vault
194
176
 
195
177
  # The number of threads to use in Sidekiq workers.
196
178
  #
197
- # @return [Fixnum] The number of threads from the `SIDEKIQ_CONCURRENCY`
179
+ # @return [Integer] The number of threads from the `SIDEKIQ_CONCURRENCY`
198
180
  # environment variable or 25 if no variable is defined.
199
181
  def self.sidekiq_concurrency
200
182
  int('SIDEKIQ_CONCURRENCY') || 25
@@ -19,9 +19,9 @@ module Vault
19
19
  # This makes it possible to easily measure individual HTTP status codes as
20
20
  # well as classes of HTTP status codes.
21
21
  #
22
- # @param status [Fixnum] The HTTP status code to record.
23
- def self.count_status(status)
24
- count("http.#{status}")
22
+ # @param status [Integer] The HTTP status code to record.
23
+ def self.count_status(status, data)
24
+ count("http.#{status}", 1, data)
25
25
  if status_prefix = status.to_s.match(/\d/)[0]
26
26
  count("http.#{status_prefix}xx")
27
27
  end
@@ -39,7 +39,7 @@ module Vault
39
39
  # Log a timing metric.
40
40
  #
41
41
  # @param name [String] A Sinatra-formatted route URL.
42
- # @param duration [Fixnum] The duration to record, in milliseconds.
42
+ # @param duration [Integer] The duration to record, in milliseconds.
43
43
  def self.time(name, duration)
44
44
  if name
45
45
  name.gsub(/\/:\w+/, ''). # Remove param names from path.
@@ -16,11 +16,11 @@ module Vault
16
16
  class Pipeline
17
17
  def self.use(*args)
18
18
  @filters ||= []
19
- @filters.push *args
19
+ @filters.push(*args)
20
20
  end
21
21
 
22
22
  def self.filters
23
- @filters
23
+ @filters ||= nil
24
24
  end
25
25
 
26
26
  def self.process(thing)
@@ -1,4 +1,4 @@
1
- require 'aws-sdk'
1
+ require 'aws-sdk-s3'
2
2
 
3
3
  module S3
4
4
  extend self
@@ -10,7 +10,7 @@ module S3
10
10
  # @param value [String]
11
11
  def write(bucket, key, value)
12
12
  Vault::Log.log(:fn => __method__, :key => key) do
13
- s3.buckets[bucket].objects[key].write(value)
13
+ s3.put_object({bucket: bucket, key: key, body: value})
14
14
  end
15
15
  end
16
16
 
@@ -20,17 +20,17 @@ module S3
20
20
  # @param key [String]
21
21
  def read(bucket, key)
22
22
  Vault::Log.log(:fn => __method__, :key => key) do
23
- s3.buckets[bucket].objects[key].read
23
+ s3.get_object({bucket: bucket, key: key}).body.read
24
24
  end
25
25
  end
26
26
 
27
- # Get the underlying AWS::S3 instance, creating it using environment vars
28
- # if necessary.
27
+ # Get the underlying AWS::S3::Client instance, creating it using environment
28
+ # vars if necessary.
29
29
  def s3
30
- @s3 ||= AWS::S3.new(
31
- :access_key_id => Config.env('AWS_ACCESS_KEY_ID'),
32
- :secret_access_key => Config.env('AWS_SECRET_ACCESS_KEY'),
33
- :use_ssl => true
30
+ @s3 ||= Aws::S3::Client.new(
31
+ credentials: Aws::Credentials.new(Config.env('AWS_ACCESS_KEY_ID'),
32
+ Config.env('AWS_SECRET_ACCESS_KEY')),
33
+ region: Config.env('AWS_REGION')
34
34
  )
35
35
  end
36
36
 
@@ -2,8 +2,9 @@ module Vault
2
2
  # The StatementStore knows how to save and retrieve invoices from S3
3
3
  class StatementStore
4
4
  def initialize(opts = {})
5
- @key_id = opts.fetch(:key_id, ENV['AWS_ACCESS_KEY_ID'])
6
- @key = opts.fetch(:key, ENV['AWS_SECRET_ACCESS_KEY'])
5
+ @credentials = Aws::Credentials.new(opts.fetch(:key_id, Config[:aws_access_key_id]),
6
+ opts.fetch(:key, Config[:aws_secret_access_key]))
7
+ @region = opts.fetch(:region, Config[:aws_region])
7
8
  end
8
9
 
9
10
  # Retrieve invoice JSON from S3
@@ -34,20 +35,24 @@ module Vault
34
35
 
35
36
  # Retrieve the contents in a given format of a given file from S3
36
37
  def retrieve(format, opts)
37
- s3.buckets[bucket_for(format, opts)].objects[path_for(opts)].read
38
+ s3.get_object({
39
+ bucket: bucket_for(format, opts),
40
+ key: path_for(opts)
41
+ }).body.read
38
42
  end
39
43
 
40
44
  # Write the contents in the given format to S3
41
45
  def write(format, opts)
42
- obj = s3.buckets[bucket_for(format, opts)].objects[path_for(opts)]
43
- obj.write(opts[:contents])
44
- obj
46
+ s3.put_object({
47
+ bucket: bucket_for(format, opts),
48
+ key: path_for(opts),
49
+ body: opts[:contents]
50
+ })
45
51
  end
46
52
 
47
53
  # Get an instance of the S3 client to work with
48
54
  def s3
49
- @s3 ||= AWS::S3.new(access_key_id: @key_id, secret_access_key: @key,
50
- use_ssl: true)
55
+ @s3 ||= Aws::S3::Client.new(credentials: @credentials, region: @region)
51
56
  end
52
57
 
53
58
  # Determine which bucket an invoice should live in
@@ -73,10 +78,11 @@ module Vault
73
78
  private
74
79
 
75
80
  def validate_path_opts(opts)
81
+ user = opts[:user_hid] || opts[:user_id]
82
+
76
83
  fail(ArgumentError, 'start_time required!') unless opts[:start_time]
77
84
  fail(ArgumentError, 'stop_time required!') unless opts[:stop_time]
78
85
  fail(ArgumentError, 'version required!') unless opts[:version]
79
- user = opts[:user_hid] || opts[:user_id]
80
86
  fail(ArgumentError, 'user_hid or or user_id required!') unless user
81
87
  end
82
88
  end