ddtrace 0.44.0 → 0.48.0

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.
Files changed (386) hide show
  1. checksums.yaml +4 -4
  2. data/.circleci/config.yml +183 -15
  3. data/.circleci/images/primary/Dockerfile-2.0.0 +11 -1
  4. data/.circleci/images/primary/Dockerfile-2.1.10 +11 -1
  5. data/.circleci/images/primary/Dockerfile-2.2.10 +11 -1
  6. data/.circleci/images/primary/Dockerfile-2.3.8 +10 -0
  7. data/.circleci/images/primary/Dockerfile-2.4.6 +10 -0
  8. data/.circleci/images/primary/Dockerfile-2.5.6 +10 -0
  9. data/.circleci/images/primary/Dockerfile-2.6.4 +10 -0
  10. data/.circleci/images/primary/Dockerfile-2.7.0 +10 -0
  11. data/.circleci/images/primary/Dockerfile-jruby-9.2-latest +88 -0
  12. data/.circleci/images/primary/{Dockerfile-jruby-9.2 → Dockerfile-jruby-9.2.0.0} +1 -5
  13. data/.circleci/images/primary/Dockerfile-truffleruby-21.0.0 +73 -0
  14. data/.github/workflows/create-next-milestone.yml +2 -2
  15. data/.gitlab-ci.yml +18 -18
  16. data/.rubocop.yml +269 -7
  17. data/.rubocop_todo.yml +438 -0
  18. data/.simplecov +6 -0
  19. data/Appraisals +87 -9
  20. data/CHANGELOG.md +238 -1
  21. data/Gemfile +63 -3
  22. data/LICENSE-3rdparty.csv +2 -0
  23. data/README.md +1 -0
  24. data/Rakefile +65 -25
  25. data/bin/ddtracerb +15 -0
  26. data/ddtrace.gemspec +9 -36
  27. data/docker-compose.yml +75 -7
  28. data/docs/DevelopmentGuide.md +28 -0
  29. data/docs/GettingStarted.md +162 -68
  30. data/docs/ProfilingDevelopment.md +88 -0
  31. data/integration/README.md +67 -0
  32. data/integration/apps/rack/.dockerignore +1 -0
  33. data/integration/apps/rack/.envrc.sample +1 -0
  34. data/integration/apps/rack/.gitignore +4 -0
  35. data/integration/apps/rack/.rspec +1 -0
  36. data/integration/apps/rack/Dockerfile +28 -0
  37. data/integration/apps/rack/Dockerfile-ci +11 -0
  38. data/integration/apps/rack/Gemfile +24 -0
  39. data/integration/apps/rack/README.md +93 -0
  40. data/integration/apps/rack/app/acme.rb +80 -0
  41. data/integration/apps/rack/app/datadog.rb +17 -0
  42. data/integration/apps/rack/bin/run +22 -0
  43. data/integration/apps/rack/bin/setup +17 -0
  44. data/integration/apps/rack/bin/test +24 -0
  45. data/integration/apps/rack/config.ru +6 -0
  46. data/integration/apps/rack/config/puma.rb +14 -0
  47. data/integration/apps/rack/config/unicorn.rb +23 -0
  48. data/integration/apps/rack/docker-compose.ci.yml +62 -0
  49. data/integration/apps/rack/docker-compose.yml +78 -0
  50. data/integration/apps/rack/script/build-images +38 -0
  51. data/integration/apps/rack/script/ci +50 -0
  52. data/integration/apps/rack/spec/integration/basic_spec.rb +10 -0
  53. data/integration/apps/rack/spec/spec_helper.rb +16 -0
  54. data/integration/apps/rack/spec/support/integration_helper.rb +22 -0
  55. data/integration/apps/rails-five/.dockerignore +1 -0
  56. data/integration/apps/rails-five/.env +3 -0
  57. data/integration/apps/rails-five/.envrc.sample +1 -0
  58. data/integration/apps/rails-five/.gitignore +30 -0
  59. data/integration/apps/rails-five/Dockerfile +25 -0
  60. data/integration/apps/rails-five/Dockerfile-ci +11 -0
  61. data/integration/apps/rails-five/Gemfile +104 -0
  62. data/integration/apps/rails-five/README.md +94 -0
  63. data/integration/apps/rails-five/Rakefile +6 -0
  64. data/integration/apps/rails-five/app/channels/application_cable/channel.rb +4 -0
  65. data/integration/apps/rails-five/app/channels/application_cable/connection.rb +4 -0
  66. data/integration/apps/rails-five/app/controllers/application_controller.rb +2 -0
  67. data/integration/apps/rails-five/app/controllers/basic_controller.rb +36 -0
  68. data/integration/apps/rails-five/app/controllers/concerns/.keep +0 -0
  69. data/integration/apps/rails-five/app/controllers/health_controller.rb +9 -0
  70. data/integration/apps/rails-five/app/controllers/jobs_controller.rb +12 -0
  71. data/integration/apps/rails-five/app/jobs/application_job.rb +2 -0
  72. data/integration/apps/rails-five/app/jobs/test_job.rb +12 -0
  73. data/integration/apps/rails-five/app/mailers/application_mailer.rb +4 -0
  74. data/integration/apps/rails-five/app/models/application_record.rb +3 -0
  75. data/integration/apps/rails-five/app/models/concerns/.keep +0 -0
  76. data/integration/apps/rails-five/app/models/test.rb +2 -0
  77. data/integration/apps/rails-five/app/views/layouts/mailer.html.erb +13 -0
  78. data/integration/apps/rails-five/app/views/layouts/mailer.text.erb +1 -0
  79. data/integration/apps/rails-five/bin/bundle +3 -0
  80. data/integration/apps/rails-five/bin/rails +9 -0
  81. data/integration/apps/rails-five/bin/rake +9 -0
  82. data/integration/apps/rails-five/bin/run +24 -0
  83. data/integration/apps/rails-five/bin/setup +27 -0
  84. data/integration/apps/rails-five/bin/spring +17 -0
  85. data/integration/apps/rails-five/bin/test +21 -0
  86. data/integration/apps/rails-five/bin/update +28 -0
  87. data/integration/apps/rails-five/config.ru +5 -0
  88. data/integration/apps/rails-five/config/application.rb +97 -0
  89. data/integration/apps/rails-five/config/boot.rb +4 -0
  90. data/integration/apps/rails-five/config/cable.yml +10 -0
  91. data/integration/apps/rails-five/config/credentials.yml.enc +1 -0
  92. data/integration/apps/rails-five/config/database.yml +28 -0
  93. data/integration/apps/rails-five/config/environment.rb +5 -0
  94. data/integration/apps/rails-five/config/environments/development.rb +51 -0
  95. data/integration/apps/rails-five/config/environments/production.rb +82 -0
  96. data/integration/apps/rails-five/config/environments/test.rb +43 -0
  97. data/integration/apps/rails-five/config/initializers/datadog.rb +18 -0
  98. data/integration/apps/rails-five/config/initializers/filter_parameter_logging.rb +4 -0
  99. data/integration/apps/rails-five/config/initializers/resque.rb +4 -0
  100. data/integration/apps/rails-five/config/initializers/rollbar.rb +5 -0
  101. data/integration/apps/rails-five/config/initializers/wrap_parameters.rb +14 -0
  102. data/integration/apps/rails-five/config/locales/en.yml +33 -0
  103. data/integration/apps/rails-five/config/puma.rb +24 -0
  104. data/integration/apps/rails-five/config/routes.rb +11 -0
  105. data/integration/apps/rails-five/config/spring.rb +6 -0
  106. data/integration/apps/rails-five/config/unicorn.rb +29 -0
  107. data/integration/apps/rails-five/db/migrate/20190927215052_create_tests.rb +11 -0
  108. data/integration/apps/rails-five/db/schema.rb +23 -0
  109. data/integration/apps/rails-five/db/seeds.rb +7 -0
  110. data/integration/apps/rails-five/docker-compose.ci.yml +98 -0
  111. data/integration/apps/rails-five/docker-compose.yml +100 -0
  112. data/integration/apps/rails-five/lib/tasks/.keep +0 -0
  113. data/integration/apps/rails-five/log/.keep +0 -0
  114. data/integration/apps/rails-five/public/robots.txt +1 -0
  115. data/integration/apps/rails-five/script/build-images +35 -0
  116. data/integration/apps/rails-five/script/ci +50 -0
  117. data/integration/apps/rails-five/spec/integration/basic_spec.rb +10 -0
  118. data/integration/apps/rails-five/spec/spec_helper.rb +16 -0
  119. data/integration/apps/rails-five/spec/support/integration_helper.rb +22 -0
  120. data/integration/apps/rails-five/storage/.keep +0 -0
  121. data/integration/apps/rails-five/tmp/.keep +0 -0
  122. data/integration/apps/rails-five/vendor/.keep +0 -0
  123. data/integration/apps/ruby/.dockerignore +1 -0
  124. data/integration/apps/ruby/.envrc.sample +1 -0
  125. data/integration/apps/ruby/.gitignore +2 -0
  126. data/integration/apps/ruby/Dockerfile +25 -0
  127. data/integration/apps/ruby/Dockerfile-ci +11 -0
  128. data/integration/apps/ruby/Gemfile +11 -0
  129. data/integration/apps/ruby/README.md +70 -0
  130. data/integration/apps/ruby/agent.yaml +3 -0
  131. data/integration/apps/ruby/app/datadog.rb +13 -0
  132. data/integration/apps/ruby/app/fibonacci.rb +58 -0
  133. data/integration/apps/ruby/bin/run +20 -0
  134. data/integration/apps/ruby/bin/setup +17 -0
  135. data/integration/apps/ruby/bin/test +21 -0
  136. data/integration/apps/ruby/docker-compose.ci.yml +51 -0
  137. data/integration/apps/ruby/docker-compose.yml +63 -0
  138. data/integration/apps/ruby/script/build-images +38 -0
  139. data/integration/apps/ruby/script/ci +50 -0
  140. data/integration/images/agent/Dockerfile +2 -0
  141. data/integration/images/agent/agent.yaml +3 -0
  142. data/integration/images/include/datadog/analyzer.rb +71 -0
  143. data/integration/images/include/datadog/demo_env.rb +101 -0
  144. data/integration/images/include/http-health-check +33 -0
  145. data/integration/images/ruby/2.0/Dockerfile +54 -0
  146. data/integration/images/ruby/2.1/Dockerfile +54 -0
  147. data/integration/images/ruby/2.2/Dockerfile +54 -0
  148. data/integration/images/ruby/2.3/Dockerfile +70 -0
  149. data/integration/images/ruby/2.4/Dockerfile +54 -0
  150. data/integration/images/ruby/2.5/Dockerfile +54 -0
  151. data/integration/images/ruby/2.6/Dockerfile +54 -0
  152. data/integration/images/ruby/2.7/Dockerfile +54 -0
  153. data/integration/images/ruby/3.0/Dockerfile +54 -0
  154. data/integration/images/wrk/Dockerfile +33 -0
  155. data/integration/images/wrk/scripts/entrypoint.sh +17 -0
  156. data/integration/images/wrk/scripts/scenarios/basic/default.lua +1 -0
  157. data/integration/images/wrk/scripts/scenarios/basic/fibonacci.lua +1 -0
  158. data/integration/script/build-images +43 -0
  159. data/lib/ddtrace.rb +8 -5
  160. data/lib/ddtrace/analytics.rb +2 -0
  161. data/lib/ddtrace/auto_instrument.rb +3 -0
  162. data/lib/ddtrace/auto_instrument_base.rb +6 -0
  163. data/lib/ddtrace/buffer.rb +4 -4
  164. data/lib/ddtrace/configuration.rb +121 -26
  165. data/lib/ddtrace/configuration/base.rb +1 -1
  166. data/lib/ddtrace/configuration/components.rb +87 -5
  167. data/lib/ddtrace/configuration/option_definition.rb +1 -3
  168. data/lib/ddtrace/configuration/options.rb +4 -7
  169. data/lib/ddtrace/configuration/settings.rb +48 -3
  170. data/lib/ddtrace/context.rb +5 -6
  171. data/lib/ddtrace/context_provider.rb +0 -1
  172. data/lib/ddtrace/contrib/action_cable/event.rb +1 -0
  173. data/lib/ddtrace/contrib/action_cable/integration.rb +7 -0
  174. data/lib/ddtrace/contrib/action_pack/action_controller/instrumentation.rb +1 -3
  175. data/lib/ddtrace/contrib/action_pack/integration.rb +7 -0
  176. data/lib/ddtrace/contrib/action_view/event.rb +1 -1
  177. data/lib/ddtrace/contrib/action_view/integration.rb +7 -0
  178. data/lib/ddtrace/contrib/action_view/utils.rb +1 -1
  179. data/lib/ddtrace/contrib/active_record/configuration/makara_resolver.rb +30 -0
  180. data/lib/ddtrace/contrib/active_record/configuration/resolver.rb +107 -18
  181. data/lib/ddtrace/contrib/active_record/integration.rb +7 -0
  182. data/lib/ddtrace/contrib/active_record/utils.rb +57 -20
  183. data/lib/ddtrace/contrib/active_support/integration.rb +7 -1
  184. data/lib/ddtrace/contrib/active_support/notifications/event.rb +2 -1
  185. data/lib/ddtrace/contrib/active_support/notifications/subscriber.rb +1 -0
  186. data/lib/ddtrace/contrib/active_support/notifications/subscription.rb +9 -5
  187. data/lib/ddtrace/contrib/auto_instrument.rb +49 -0
  188. data/lib/ddtrace/contrib/aws/patcher.rb +1 -0
  189. data/lib/ddtrace/contrib/aws/services.rb +2 -0
  190. data/lib/ddtrace/contrib/configurable.rb +63 -39
  191. data/lib/ddtrace/contrib/configuration/resolver.rb +70 -5
  192. data/lib/ddtrace/contrib/configuration/resolvers/pattern_resolver.rb +19 -20
  193. data/lib/ddtrace/contrib/configuration/settings.rb +7 -6
  194. data/lib/ddtrace/contrib/cucumber/configuration/settings.rb +0 -10
  195. data/lib/ddtrace/contrib/cucumber/ext.rb +0 -2
  196. data/lib/ddtrace/contrib/cucumber/formatter.rb +5 -11
  197. data/lib/ddtrace/contrib/cucumber/integration.rb +5 -0
  198. data/lib/ddtrace/contrib/dalli/patcher.rb +0 -38
  199. data/lib/ddtrace/contrib/delayed_job/plugin.rb +0 -1
  200. data/lib/ddtrace/contrib/elasticsearch/patcher.rb +1 -0
  201. data/lib/ddtrace/contrib/elasticsearch/quantize.rb +3 -2
  202. data/lib/ddtrace/contrib/ethon/easy_patch.rb +10 -9
  203. data/lib/ddtrace/contrib/excon/middleware.rb +2 -6
  204. data/lib/ddtrace/contrib/extensions.rb +53 -3
  205. data/lib/ddtrace/contrib/faraday/middleware.rb +1 -3
  206. data/lib/ddtrace/contrib/faraday/patcher.rb +0 -36
  207. data/lib/ddtrace/contrib/grape/endpoint.rb +8 -15
  208. data/lib/ddtrace/contrib/grape/patcher.rb +0 -42
  209. data/lib/ddtrace/contrib/grpc/datadog_interceptor.rb +8 -8
  210. data/lib/ddtrace/contrib/grpc/datadog_interceptor/server.rb +1 -0
  211. data/lib/ddtrace/contrib/grpc/patcher.rb +0 -36
  212. data/lib/ddtrace/contrib/http/circuit_breaker.rb +1 -3
  213. data/lib/ddtrace/contrib/http/instrumentation.rb +5 -5
  214. data/lib/ddtrace/contrib/httpclient/configuration/settings.rb +32 -0
  215. data/lib/ddtrace/contrib/httpclient/ext.rb +17 -0
  216. data/lib/ddtrace/contrib/httpclient/instrumentation.rb +147 -0
  217. data/lib/ddtrace/contrib/httpclient/integration.rb +43 -0
  218. data/lib/ddtrace/contrib/httpclient/patcher.rb +38 -0
  219. data/lib/ddtrace/contrib/httprb/instrumentation.rb +14 -20
  220. data/lib/ddtrace/contrib/httprb/patcher.rb +5 -2
  221. data/lib/ddtrace/contrib/mongodb/instrumentation.rb +2 -0
  222. data/lib/ddtrace/contrib/mongodb/subscribers.rb +2 -3
  223. data/lib/ddtrace/contrib/patchable.rb +18 -7
  224. data/lib/ddtrace/contrib/patcher.rb +9 -6
  225. data/lib/ddtrace/contrib/presto/patcher.rb +5 -2
  226. data/lib/ddtrace/contrib/qless/qless_job.rb +1 -0
  227. data/lib/ddtrace/contrib/qless/tracer_cleaner.rb +1 -0
  228. data/lib/ddtrace/contrib/que/ext.rb +19 -19
  229. data/lib/ddtrace/contrib/que/tracer.rb +1 -1
  230. data/lib/ddtrace/contrib/racecar/event.rb +1 -0
  231. data/lib/ddtrace/contrib/rack/configuration/settings.rb +3 -3
  232. data/lib/ddtrace/contrib/rack/integration.rb +7 -0
  233. data/lib/ddtrace/contrib/rack/middlewares.rb +6 -11
  234. data/lib/ddtrace/contrib/rack/patcher.rb +1 -3
  235. data/lib/ddtrace/contrib/rack/request_queue.rb +6 -1
  236. data/lib/ddtrace/contrib/rails/auto_instrument_railtie.rb +10 -0
  237. data/lib/ddtrace/contrib/rails/patcher.rb +6 -2
  238. data/lib/ddtrace/contrib/rails/utils.rb +4 -0
  239. data/lib/ddtrace/contrib/rake/instrumentation.rb +4 -2
  240. data/lib/ddtrace/contrib/rake/integration.rb +1 -1
  241. data/lib/ddtrace/contrib/redis/configuration/resolver.rb +11 -4
  242. data/lib/ddtrace/contrib/redis/quantize.rb +1 -0
  243. data/lib/ddtrace/contrib/redis/vendor/LICENSE +20 -0
  244. data/lib/ddtrace/contrib/redis/vendor/resolver.rb +6 -7
  245. data/lib/ddtrace/contrib/registry.rb +2 -2
  246. data/lib/ddtrace/contrib/resque/configuration/settings.rb +17 -1
  247. data/lib/ddtrace/contrib/resque/integration.rb +1 -1
  248. data/lib/ddtrace/contrib/resque/patcher.rb +4 -4
  249. data/lib/ddtrace/contrib/resque/resque_job.rb +24 -1
  250. data/lib/ddtrace/contrib/rest_client/request_patch.rb +1 -3
  251. data/lib/ddtrace/contrib/rspec/configuration/settings.rb +0 -10
  252. data/lib/ddtrace/contrib/rspec/example.rb +24 -10
  253. data/lib/ddtrace/contrib/rspec/ext.rb +0 -3
  254. data/lib/ddtrace/contrib/rspec/integration.rb +6 -1
  255. data/lib/ddtrace/contrib/rspec/patcher.rb +0 -2
  256. data/lib/ddtrace/contrib/sequel/utils.rb +5 -6
  257. data/lib/ddtrace/contrib/shoryuken/configuration/settings.rb +1 -0
  258. data/lib/ddtrace/contrib/shoryuken/tracer.rb +7 -4
  259. data/lib/ddtrace/contrib/sidekiq/server_tracer.rb +2 -7
  260. data/lib/ddtrace/contrib/sidekiq/tracing.rb +0 -1
  261. data/lib/ddtrace/contrib/sinatra/env.rb +1 -3
  262. data/lib/ddtrace/contrib/sinatra/headers.rb +1 -3
  263. data/lib/ddtrace/contrib/sinatra/tracer.rb +1 -3
  264. data/lib/ddtrace/contrib/sinatra/tracer_middleware.rb +3 -3
  265. data/lib/ddtrace/contrib/sneakers/ext.rb +11 -11
  266. data/lib/ddtrace/contrib/sneakers/tracer.rb +2 -4
  267. data/lib/ddtrace/contrib/status_code_matcher.rb +5 -3
  268. data/lib/ddtrace/correlation.rb +1 -0
  269. data/lib/ddtrace/diagnostics/environment_logger.rb +3 -2
  270. data/lib/ddtrace/distributed_tracing/headers/headers.rb +1 -0
  271. data/lib/ddtrace/distributed_tracing/headers/helpers.rb +1 -3
  272. data/lib/ddtrace/error.rb +2 -0
  273. data/lib/ddtrace/ext/ci.rb +43 -10
  274. data/lib/ddtrace/ext/distributed.rb +1 -1
  275. data/lib/ddtrace/ext/git.rb +0 -1
  276. data/lib/ddtrace/ext/http.rb +1 -1
  277. data/lib/ddtrace/ext/profiling.rb +52 -0
  278. data/lib/ddtrace/ext/runtime.rb +3 -1
  279. data/lib/ddtrace/ext/transport.rb +1 -0
  280. data/lib/ddtrace/forced_tracing.rb +2 -0
  281. data/lib/ddtrace/logger.rb +1 -1
  282. data/lib/ddtrace/metrics.rb +14 -6
  283. data/lib/ddtrace/opentracer/distributed_headers.rb +3 -0
  284. data/lib/ddtrace/opentracer/span.rb +2 -6
  285. data/lib/ddtrace/opentracer/thread_local_scope.rb +1 -0
  286. data/lib/ddtrace/patcher.rb +25 -4
  287. data/lib/ddtrace/pin.rb +8 -61
  288. data/lib/ddtrace/pipeline/span_filter.rb +1 -1
  289. data/lib/ddtrace/profiling.rb +54 -0
  290. data/lib/ddtrace/profiling/backtrace_location.rb +32 -0
  291. data/lib/ddtrace/profiling/buffer.rb +41 -0
  292. data/lib/ddtrace/profiling/collectors/stack.rb +253 -0
  293. data/lib/ddtrace/profiling/encoding/profile.rb +31 -0
  294. data/lib/ddtrace/profiling/event.rb +13 -0
  295. data/lib/ddtrace/profiling/events/stack.rb +102 -0
  296. data/lib/ddtrace/profiling/exporter.rb +23 -0
  297. data/lib/ddtrace/profiling/ext/cpu.rb +54 -0
  298. data/lib/ddtrace/profiling/ext/cthread.rb +134 -0
  299. data/lib/ddtrace/profiling/ext/forking.rb +97 -0
  300. data/lib/ddtrace/profiling/flush.rb +41 -0
  301. data/lib/ddtrace/profiling/pprof/builder.rb +121 -0
  302. data/lib/ddtrace/profiling/pprof/converter.rb +85 -0
  303. data/lib/ddtrace/profiling/pprof/message_set.rb +12 -0
  304. data/lib/ddtrace/profiling/pprof/payload.rb +18 -0
  305. data/lib/ddtrace/profiling/pprof/pprof.proto +212 -0
  306. data/lib/ddtrace/profiling/pprof/pprof_pb.rb +81 -0
  307. data/lib/ddtrace/profiling/pprof/stack_sample.rb +90 -0
  308. data/lib/ddtrace/profiling/pprof/string_table.rb +10 -0
  309. data/lib/ddtrace/profiling/pprof/template.rb +114 -0
  310. data/lib/ddtrace/profiling/preload.rb +3 -0
  311. data/lib/ddtrace/profiling/profiler.rb +28 -0
  312. data/lib/ddtrace/profiling/recorder.rb +87 -0
  313. data/lib/ddtrace/profiling/scheduler.rb +84 -0
  314. data/lib/ddtrace/profiling/tasks/setup.rb +77 -0
  315. data/lib/ddtrace/profiling/transport/client.rb +12 -0
  316. data/lib/ddtrace/profiling/transport/http.rb +122 -0
  317. data/lib/ddtrace/profiling/transport/http/api.rb +43 -0
  318. data/lib/ddtrace/profiling/transport/http/api/endpoint.rb +90 -0
  319. data/lib/ddtrace/profiling/transport/http/api/instance.rb +36 -0
  320. data/lib/ddtrace/profiling/transport/http/api/spec.rb +40 -0
  321. data/lib/ddtrace/profiling/transport/http/builder.rb +28 -0
  322. data/lib/ddtrace/profiling/transport/http/client.rb +33 -0
  323. data/lib/ddtrace/profiling/transport/http/response.rb +21 -0
  324. data/lib/ddtrace/profiling/transport/io.rb +30 -0
  325. data/lib/ddtrace/profiling/transport/io/client.rb +27 -0
  326. data/lib/ddtrace/profiling/transport/io/response.rb +16 -0
  327. data/lib/ddtrace/profiling/transport/parcel.rb +17 -0
  328. data/lib/ddtrace/profiling/transport/request.rb +15 -0
  329. data/lib/ddtrace/profiling/transport/response.rb +8 -0
  330. data/lib/ddtrace/propagation/grpc_propagator.rb +1 -0
  331. data/lib/ddtrace/propagation/http_propagator.rb +17 -2
  332. data/lib/ddtrace/quantization/http.rb +1 -0
  333. data/lib/ddtrace/runtime/cgroup.rb +2 -2
  334. data/lib/ddtrace/runtime/container.rb +32 -26
  335. data/lib/ddtrace/runtime/identity.rb +8 -0
  336. data/lib/ddtrace/sampler.rb +1 -1
  337. data/lib/ddtrace/sampling/rule_sampler.rb +4 -9
  338. data/lib/ddtrace/span.rb +7 -7
  339. data/lib/ddtrace/sync_writer.rb +12 -12
  340. data/lib/ddtrace/tasks/exec.rb +48 -0
  341. data/lib/ddtrace/tasks/help.rb +14 -0
  342. data/lib/ddtrace/tracer.rb +28 -5
  343. data/lib/ddtrace/transport/http.rb +15 -8
  344. data/lib/ddtrace/transport/http/adapters/net.rb +27 -8
  345. data/lib/ddtrace/transport/http/adapters/registry.rb +1 -0
  346. data/lib/ddtrace/transport/http/adapters/unix_socket.rb +2 -4
  347. data/lib/ddtrace/transport/http/builder.rb +7 -1
  348. data/lib/ddtrace/transport/http/env.rb +8 -0
  349. data/lib/ddtrace/transport/http/traces.rb +2 -3
  350. data/lib/ddtrace/transport/io.rb +1 -1
  351. data/lib/ddtrace/transport/io/client.rb +15 -8
  352. data/lib/ddtrace/transport/io/response.rb +1 -3
  353. data/lib/ddtrace/transport/io/traces.rb +6 -0
  354. data/lib/ddtrace/transport/parcel.rb +4 -0
  355. data/lib/ddtrace/transport/traces.rb +18 -1
  356. data/lib/ddtrace/utils/compression.rb +27 -0
  357. data/lib/ddtrace/utils/object_set.rb +41 -0
  358. data/lib/ddtrace/utils/only_once.rb +40 -0
  359. data/lib/ddtrace/utils/sequence.rb +17 -0
  360. data/lib/ddtrace/utils/string_table.rb +45 -0
  361. data/lib/ddtrace/utils/time.rb +32 -1
  362. data/lib/ddtrace/vendor/active_record/MIT-LICENSE +20 -0
  363. data/lib/ddtrace/vendor/multipart-post/LICENSE +11 -0
  364. data/lib/ddtrace/vendor/multipart-post/multipart.rb +12 -0
  365. data/lib/ddtrace/vendor/multipart-post/multipart/post.rb +8 -0
  366. data/lib/ddtrace/vendor/multipart-post/multipart/post/composite_read_io.rb +116 -0
  367. data/lib/ddtrace/vendor/multipart-post/multipart/post/multipartable.rb +57 -0
  368. data/lib/ddtrace/vendor/multipart-post/multipart/post/parts.rb +135 -0
  369. data/lib/ddtrace/vendor/multipart-post/multipart/post/version.rb +9 -0
  370. data/lib/ddtrace/vendor/multipart-post/net/http/post/multipart.rb +32 -0
  371. data/lib/ddtrace/version.rb +3 -1
  372. data/lib/ddtrace/workers.rb +5 -0
  373. data/lib/ddtrace/workers/async.rb +11 -3
  374. data/lib/ddtrace/workers/loop.rb +17 -3
  375. data/lib/ddtrace/workers/polling.rb +1 -0
  376. data/lib/ddtrace/workers/queue.rb +1 -0
  377. data/lib/ddtrace/workers/runtime_metrics.rb +14 -1
  378. data/lib/ddtrace/workers/trace_writer.rb +10 -10
  379. data/lib/ddtrace/writer.rb +7 -4
  380. metadata +213 -379
  381. data/lib/ddtrace/augmentation.rb +0 -13
  382. data/lib/ddtrace/augmentation/method_wrapper.rb +0 -20
  383. data/lib/ddtrace/augmentation/method_wrapping.rb +0 -38
  384. data/lib/ddtrace/augmentation/shim.rb +0 -102
  385. data/lib/ddtrace/contrib/rspec/example_group.rb +0 -61
  386. data/lib/ddtrace/monkey.rb +0 -58
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 9bab61fb7855f2281cbaa808536cc7f7f6fe857657c49f91b532e6780c05187f
4
- data.tar.gz: 463065e1f917522e19b2ace842cf117bfaf747b2e41e2bae405073080cf6f077
3
+ metadata.gz: 9418700e29312fa4efc67e04b7ff901950a5ee0d942cc7fe06a49adbf694f08a
4
+ data.tar.gz: 348acc764a300c51c3e99b02001b0dc238775c6afd7b07fd3ee4c31758e1e906
5
5
  SHA512:
6
- metadata.gz: 688c0fb395d61cb53609eb872f32eba8337c810d7d83d4751822e31487a34cf5322284f025b512bc3e7251369406b77467754aecf327403dcf0128fcfebbdfc6
7
- data.tar.gz: a484ea8f729a3736209c8182ea729e7e2f9475eff4742d366f1824b8d50bf78ebd92d0eb4afbf0c6fc01e2bedcb0e553d11c246e2cbcfd299d64819e64902d99
6
+ metadata.gz: f1cdbcdef68b68901a5737c3bfae8797709448a6db0b92ee2f1a7e59c64c6610bf327b1d847bd2cd0d18e651807d9c6cead347516f258f7f62169ca71315d7e1
7
+ data.tar.gz: 4c9e69ff9418143fff7734c2fd7ae2973d230a58e5173e8a1a6e128733a5bdb3fda11874f63b87840fc7e60098c94c746dce7d527726166345e4ca1e4a4b95a2
data/.circleci/config.yml CHANGED
@@ -21,8 +21,13 @@ test_containers:
21
21
  description: Jit enabled?
22
22
  type: boolean
23
23
  default: false
24
+ resource_class_to_use:
25
+ description: Resource class to use
26
+ type: string
27
+ default: medium
24
28
  - &container_base_environment
25
29
  BUNDLE_GEMFILE: /app/Gemfile
30
+ JRUBY_OPTS: --dev # Faster JVM startup: https://github.com/jruby/jruby/wiki/Improving-startup-time#use-the---dev-flag
26
31
  - &container_parameters_environment
27
32
  - *container_base_environment
28
33
  - RUBY_OPT: <<# parameters.jit >>--jit<</ parameters.jit >>
@@ -43,28 +48,37 @@ test_containers:
43
48
  - POSTGRES_PASSWORD=postgres
44
49
  - POSTGRES_USER=postgres
45
50
  - POSTGRES_DB=postgres
51
+ - &postgres_port 5432
46
52
  - &container_presto
47
- image: prestosql/presto
53
+ # Move to trinodb/trino after https://github.com/treasure-data/presto-client-ruby/issues/64 is resolved.
54
+ image: starburstdata/presto:332-e.9
55
+ - &presto_port 8080
48
56
  - &container_mysql
49
57
  image: mysql:5.6
50
58
  environment:
51
59
  - MYSQL_ROOT_PASSWORD=root
52
60
  - MYSQL_PASSWORD=mysql
53
61
  - MYSQL_USER=mysql
62
+ - &mysql_port 3306
54
63
  - &container_elasticsearch
55
64
  image: elasticsearch:2.4
65
+ - &elasticsearch_port 9200
56
66
  - &container_redis
57
67
  image: redis:3.0
68
+ - &redis_port 6379
58
69
  - &container_mongo
59
70
  image: mongo:3.5
71
+ - &mongo_port 27017
60
72
  - &container_memcached
61
73
  image: memcached:1.5-alpine
74
+ - &memcached_port 11211
62
75
  - &container_agent
63
76
  image: datadog/docker-dd-agent
64
77
  environment:
65
78
  - DD_APM_ENABLED=true
66
79
  - DD_BIND_HOST=0.0.0.0
67
80
  - DD_API_KEY=invalid_key_but_this_is_fine
81
+ - &agent_port 8126
68
82
 
69
83
  step_init_bundle_checksum: &step_init_bundle_checksum
70
84
  run:
@@ -96,7 +110,13 @@ step_compute_bundle_checksum: &step_compute_bundle_checksum
96
110
  step_run_all_tests: &step_run_all_tests
97
111
  run:
98
112
  name: Run tests
99
- command: bundle exec rake ci
113
+ command: |
114
+ echo "
115
+ --format=progress
116
+ --format=RspecJunitFormatter
117
+ --out='/tmp/rspec/-<%= ARGV.join.gsub('/', '-') %>.xml'
118
+ " > .rspec-local # Configure RSpec metadata exporter
119
+ bundle exec rake ci
100
120
  step_release_docs: &step_release_docs
101
121
  run:
102
122
  name: Upload release docs
@@ -118,6 +138,7 @@ orbs:
118
138
  jobs:
119
139
  build:
120
140
  <<: *test_job_default
141
+ resource_class: <<parameters.resource_class_to_use>>
121
142
  steps:
122
143
  - checkout
123
144
  - restore_cache:
@@ -147,6 +168,34 @@ orbs:
147
168
  key: bundle-{{ .Environment.CIRCLE_CACHE_VERSION }}-<<parameters.ruby_version>>-{{ checksum "lib/ddtrace/version.rb" }}-{{ .Branch }}-{{ checksum "Gemfile" }}-{{ checksum "Appraisals" }}-{{ checksum "ddtrace.gemspec" }}-{{ checksum ".circleci/bundle_checksum" }}'
148
169
  paths:
149
170
  - /usr/local/bundle
171
+ build_and_test_integration:
172
+ executor: docker-integration
173
+ parameters:
174
+ ruby_version:
175
+ description: Ruby version
176
+ type: string
177
+ integration_apps:
178
+ description: Integration apps
179
+ type: string
180
+ steps:
181
+ - checkout
182
+ - setup_remote_docker:
183
+ docker_layer_caching: true
184
+ - run:
185
+ name: Build integration base images
186
+ command: ./integration/script/build-images -v <<parameters.ruby_version>>
187
+ - run:
188
+ name: Build integration app images
189
+ command: |
190
+ for i in <<parameters.integration_apps>>; do
191
+ ./integration/apps/$i/script/build-images -v <<parameters.ruby_version>>
192
+ done
193
+ - run:
194
+ name: Test integration apps
195
+ command: |
196
+ for i in <<parameters.integration_apps>>; do
197
+ ./integration/apps/$i/script/ci -v <<parameters.ruby_version>>
198
+ done
150
199
  test:
151
200
  <<: *test_job_default
152
201
  docker:
@@ -172,7 +221,26 @@ orbs:
172
221
  command: |
173
222
  # Create a unique coverage directory for this job, to avoid conflicts when merging all results
174
223
  echo 'export COVERAGE_DIR="$COVERAGE_BASE_DIR/versions/$CIRCLE_JOB/$CIRCLE_NODE_INDEX"' >> $BASH_ENV
224
+ # Wait for containers to start
225
+ - docker-wait:
226
+ port: *postgres_port
227
+ - docker-wait:
228
+ port: *presto_port
229
+ - docker-wait:
230
+ port: *mysql_port
231
+ - docker-wait:
232
+ port: *elasticsearch_port
233
+ - docker-wait:
234
+ port: *redis_port
235
+ - docker-wait:
236
+ port: *mongo_port
237
+ - docker-wait:
238
+ port: *memcached_port
239
+ - docker-wait:
240
+ port: *agent_port
175
241
  - *step_run_all_tests
242
+ - store_test_results:
243
+ path: /tmp/rspec
176
244
  - persist_to_workspace:
177
245
  root: .
178
246
  paths:
@@ -251,7 +319,24 @@ orbs:
251
319
  echo "Please run 'bundle exec rake changelog:format' and commit the results."
252
320
  fi
253
321
  commands:
322
+ docker-wait:
323
+ description: Wait for containers to listen on a TCP port.
324
+ parameters:
325
+ port:
326
+ description: TCP port the container is listening on.
327
+ type: integer
328
+ timeout:
329
+ description: How long to wait for the port to be responsive.
330
+ type: string
331
+ default: 1m
332
+ steps:
333
+ - run:
334
+ name: Wait for container on port <<parameters.port>>
335
+ command: dockerize -wait 'tcp://localhost:<<parameters.port>>' -timeout '<<parameters.timeout>>'
254
336
  executors:
337
+ docker-integration:
338
+ docker:
339
+ - image: circleci/buildpack-deps:stretch
255
340
 
256
341
  jobs:
257
342
  "deploy release":
@@ -305,8 +390,10 @@ jobs:
305
390
  echo PRE=$PRE
306
391
  sed lib/ddtrace/version.rb -i -e "s/^\([\t ]*PRE\) *=*/\1 = \'${PRE}\' #/g"
307
392
  - run:
308
- name: Upload prereleas Gem and rebuild index
309
- command: S3_DIR=prerelease bundle exec rake release:gem
393
+ name: Upload prerelease Gem and rebuild index
394
+ # This was bumped from prerelease to prerelease-v2 to avoid the issue documented in
395
+ # https://github.com/DataDog/dd-trace-rb/pull/1358
396
+ command: S3_DIR=prerelease-v2 bundle exec rake release:gem
310
397
  - store_artifacts:
311
398
  path: pkg/
312
399
  destination: gem
@@ -355,10 +442,20 @@ job_configuration:
355
442
  image: marcotc/docker-library:ddtrace_rb_3.0.0
356
443
  jit: true
357
444
  # JRuby
358
- - &config-jruby-9_2
445
+ - &config-jruby-9_2_0_0 # Oldest supported version
446
+ <<: *filters_all_branches_and_tags
447
+ ruby_version: 'jruby-9.2.0.0'
448
+ image: marcotc/docker-library:ddtrace_rb_jruby_9_2_0_0
449
+ - &config-jruby-9_2-latest # More recent release of 9.2
359
450
  <<: *filters_all_branches_and_tags
360
- ruby_version: 'jruby-9.2'
361
- image: marcotc/docker-library:ddtrace_rb_jruby_9_2
451
+ ruby_version: 'jruby-9.2-latest'
452
+ image: marcotc/docker-library:ddtrace_rb_jruby_9_2_11_1
453
+ # TruffleRuby
454
+ - &config-truffleruby-21_0_0
455
+ <<: *filters_all_branches_and_tags
456
+ ruby_version: 'truffleruby-21.0.0'
457
+ image: ivoanjo/docker-library:ddtrace_rb_truffleruby_21_0_0
458
+ resource_class_to_use: large
362
459
 
363
460
  workflows:
364
461
  version: 2
@@ -382,7 +479,9 @@ workflows:
382
479
  - test-2.6
383
480
  - test-2.7
384
481
  - test-3.0
385
- - test-jruby-9.2
482
+ - test-jruby-9.2.0.0
483
+ - test-jruby-9.2-latest
484
+ # soon™️ - test-truffleruby-21.0.0
386
485
  - orb/changelog:
387
486
  <<: *config-2_7
388
487
  name: changelog
@@ -391,6 +490,53 @@ workflows:
391
490
  filters:
392
491
  branches:
393
492
  only: /bump_to_version_.*/
493
+ # Integration
494
+ - orb/build_and_test_integration:
495
+ name: build_and_test_integration-2.0
496
+ integration_apps: 'ruby rack'
497
+ ruby_version: '2.0'
498
+ <<: *filters_all_branches_and_tags
499
+ - orb/build_and_test_integration:
500
+ name: build_and_test_integration-2.1
501
+ integration_apps: 'ruby rack'
502
+ ruby_version: '2.1'
503
+ <<: *filters_all_branches_and_tags
504
+ - orb/build_and_test_integration:
505
+ name: build_and_test_integration-2.2
506
+ integration_apps: 'ruby rack'
507
+ ruby_version: '2.2'
508
+ <<: *filters_all_branches_and_tags
509
+ - orb/build_and_test_integration:
510
+ name: build_and_test_integration-2.3
511
+ integration_apps: 'ruby rack rails-five'
512
+ ruby_version: '2.3'
513
+ <<: *filters_all_branches_and_tags
514
+ - orb/build_and_test_integration:
515
+ name: build_and_test_integration-2.4
516
+ integration_apps: 'ruby rack rails-five'
517
+ ruby_version: '2.4'
518
+ <<: *filters_all_branches_and_tags
519
+ - orb/build_and_test_integration:
520
+ name: build_and_test_integration-2.5
521
+ integration_apps: 'ruby rack rails-five'
522
+ ruby_version: '2.5'
523
+ <<: *filters_all_branches_and_tags
524
+ - orb/build_and_test_integration:
525
+ name: build_and_test_integration-2.6
526
+ integration_apps: 'ruby rack rails-five'
527
+ ruby_version: '2.6'
528
+ <<: *filters_all_branches_and_tags
529
+ - orb/build_and_test_integration:
530
+ name: build_and_test_integration-2.7
531
+ integration_apps: 'ruby rack rails-five'
532
+ ruby_version: '2.7'
533
+ <<: *filters_all_branches_and_tags
534
+ - orb/build_and_test_integration:
535
+ name: build_and_test_integration-3.0
536
+ # TODO: Get Rack & Rails apps working with Ruby 3.0
537
+ integration_apps: 'ruby'
538
+ ruby_version: '3.0'
539
+ <<: *filters_all_branches_and_tags
394
540
  # MRI
395
541
  - orb/build:
396
542
  <<: *config-2_0
@@ -479,13 +625,31 @@ workflows:
479
625
  - build-3.0-jit
480
626
  # JRuby
481
627
  - orb/build:
482
- <<: *config-jruby-9_2
483
- name: build-jruby-9.2
628
+ <<: *config-jruby-9_2_0_0
629
+ name: build-jruby-9.2.0.0
630
+ - orb/test:
631
+ <<: *config-jruby-9_2_0_0
632
+ name: test-jruby-9.2.0.0
633
+ requires:
634
+ - build-jruby-9.2.0.0
635
+ - orb/build:
636
+ <<: *config-jruby-9_2-latest
637
+ name: build-jruby-9.2-latest
484
638
  - orb/test:
485
- <<: *config-jruby-9_2
486
- name: test-jruby-9.2
639
+ <<: *config-jruby-9_2-latest
640
+ name: test-jruby-9.2-latest
487
641
  requires:
488
- - build-jruby-9.2
642
+ - build-jruby-9.2-latest
643
+ # TruffleRuby
644
+ # soon™️
645
+ # - orb/build:
646
+ # <<: *config-truffleruby-21_0_0
647
+ # name: build-truffleruby-21.0.0
648
+ # - orb/test:
649
+ # <<: *config-truffleruby-21_0_0
650
+ # name: test-truffleruby-21.0.0
651
+ # requires:
652
+ # - build-truffleruby-21.0.0
489
653
  # Release jobs
490
654
  - "deploy prerelease Gem":
491
655
  <<: *filters_all_branches_and_tags
@@ -501,7 +665,9 @@ workflows:
501
665
  - test-2.7
502
666
  - test-3.0
503
667
  - test-3.0-jit
504
- - test-jruby-9.2
668
+ - test-jruby-9.2.0.0
669
+ - test-jruby-9.2-latest
670
+ # soon™️ - test-truffleruby-21.0.0
505
671
  - "deploy release":
506
672
  <<: *filters_only_release_tags
507
673
  requires:
@@ -516,4 +682,6 @@ workflows:
516
682
  - test-2.7
517
683
  - test-3.0
518
684
  - test-3.0-jit
519
- - test-jruby-9.2
685
+ - test-jruby-9.2.0.0
686
+ - test-jruby-9.2-latest
687
+ # soon™️ - test-truffleruby-21.0.0
@@ -15,7 +15,7 @@ ENV DEBIAN_FRONTEND=noninteractive
15
15
  RUN set -ex; \
16
16
  apt-get update; \
17
17
  mkdir -p /usr/share/man/man1; \
18
- apt-get install -y --no-install-recommends \
18
+ apt-get install --force-yes --no-install-recommends \
19
19
  git mercurial xvfb \
20
20
  locales sudo openssh-client ca-certificates tar gzip parallel \
21
21
  net-tools netcat unzip zip bzip2 gnupg curl wget \
@@ -62,6 +62,16 @@ RUN DOCKERIZE_URL="https://circle-downloads.s3.amazonaws.com/circleci-images/cac
62
62
  && rm -rf /tmp/dockerize-linux-amd64.tar.gz \
63
63
  && dockerize --version
64
64
 
65
+ # Install Protobuf compiler
66
+ RUN export PROTOC_URL="https://github.com/protocolbuffers/protobuf/releases/download/v3.6.1/protoc-3.6.1-linux-x86_64.zip" \
67
+ && echo Protoc URL: $PROTOC_URL \
68
+ && curl --silent --show-error --location --fail --retry 3 --output /tmp/protoc.zip "${PROTOC_URL}" \
69
+ && ls -lha /tmp/protoc.zip \
70
+ && unzip /tmp/protoc.zip -d /tmp/protoc \
71
+ && mv /tmp/protoc/bin/* /usr/bin \
72
+ && rm -rf /tmp/protoc /tmp/protoc.zip \
73
+ && protoc --version
74
+
65
75
  # Install RubyGems
66
76
  RUN gem update --system 2.7.9
67
77
  RUN gem install bundler -v '1.17.3'
@@ -15,7 +15,7 @@ ENV DEBIAN_FRONTEND=noninteractive
15
15
  RUN set -ex; \
16
16
  apt-get update; \
17
17
  mkdir -p /usr/share/man/man1; \
18
- apt-get install -y --no-install-recommends \
18
+ apt-get install --force-yes --no-install-recommends \
19
19
  git mercurial xvfb \
20
20
  locales sudo openssh-client ca-certificates tar gzip parallel \
21
21
  net-tools netcat unzip zip bzip2 gnupg curl wget \
@@ -62,6 +62,16 @@ RUN DOCKERIZE_URL="https://circle-downloads.s3.amazonaws.com/circleci-images/cac
62
62
  && rm -rf /tmp/dockerize-linux-amd64.tar.gz \
63
63
  && dockerize --version
64
64
 
65
+ # Install Protobuf compiler
66
+ RUN export PROTOC_URL="https://github.com/protocolbuffers/protobuf/releases/download/v3.6.1/protoc-3.6.1-linux-x86_64.zip" \
67
+ && echo Protoc URL: $PROTOC_URL \
68
+ && curl --silent --show-error --location --fail --retry 3 --output /tmp/protoc.zip "${PROTOC_URL}" \
69
+ && ls -lha /tmp/protoc.zip \
70
+ && unzip /tmp/protoc.zip -d /tmp/protoc \
71
+ && mv /tmp/protoc/bin/* /usr/bin \
72
+ && rm -rf /tmp/protoc /tmp/protoc.zip \
73
+ && protoc --version
74
+
65
75
  # Install RubyGems
66
76
  RUN gem update --system 2.7.9
67
77
  RUN gem install bundler -v '1.17.3'
@@ -15,7 +15,7 @@ ENV DEBIAN_FRONTEND=noninteractive
15
15
  RUN set -ex; \
16
16
  apt-get update; \
17
17
  mkdir -p /usr/share/man/man1; \
18
- apt-get install -y --no-install-recommends \
18
+ apt-get install --force-yes --no-install-recommends \
19
19
  git mercurial xvfb \
20
20
  locales sudo openssh-client ca-certificates tar gzip parallel \
21
21
  net-tools netcat unzip zip bzip2 gnupg curl wget \
@@ -62,6 +62,16 @@ RUN DOCKERIZE_URL="https://circle-downloads.s3.amazonaws.com/circleci-images/cac
62
62
  && rm -rf /tmp/dockerize-linux-amd64.tar.gz \
63
63
  && dockerize --version
64
64
 
65
+ # Install Protobuf compiler
66
+ RUN export PROTOC_URL="https://github.com/protocolbuffers/protobuf/releases/download/v3.6.1/protoc-3.6.1-linux-x86_64.zip" \
67
+ && echo Protoc URL: $PROTOC_URL \
68
+ && curl --silent --show-error --location --fail --retry 3 --output /tmp/protoc.zip "${PROTOC_URL}" \
69
+ && ls -lha /tmp/protoc.zip \
70
+ && unzip /tmp/protoc.zip -d /tmp/protoc \
71
+ && mv /tmp/protoc/bin/* /usr/bin \
72
+ && rm -rf /tmp/protoc /tmp/protoc.zip \
73
+ && protoc --version
74
+
65
75
  # Install RubyGems
66
76
  RUN gem update --system 2.7.9
67
77
  RUN gem install bundler -v '1.17.3'
@@ -58,6 +58,16 @@ RUN DOCKERIZE_URL="https://circle-downloads.s3.amazonaws.com/circleci-images/cac
58
58
  && rm -rf /tmp/dockerize-linux-amd64.tar.gz \
59
59
  && dockerize --version
60
60
 
61
+ # Install Protobuf compiler
62
+ RUN export PROTOC_URL=$(curl -s https://api.github.com/repos/protocolbuffers/protobuf/releases/latest | grep browser_download_url | cut -d '"' -f 4 | grep -e 'protoc-[.0-9]*-linux-x86_64\.zip' | sort -r | head -n 1) \
63
+ && echo Protoc URL: $PROTOC_URL \
64
+ && curl --silent --show-error --location --fail --retry 3 --output /tmp/protoc.zip "${PROTOC_URL}" \
65
+ && ls -lha /tmp/protoc.zip \
66
+ && unzip /tmp/protoc.zip -d /tmp/protoc \
67
+ && mv /tmp/protoc/bin/* /usr/bin \
68
+ && rm -rf /tmp/protoc /tmp/protoc.zip \
69
+ && protoc --version
70
+
61
71
  # Install RubyGems
62
72
  RUN gem update --system
63
73
  RUN mkdir -p "$GEM_HOME" && chmod -R 777 "$GEM_HOME"
@@ -58,6 +58,16 @@ RUN DOCKERIZE_URL="https://circle-downloads.s3.amazonaws.com/circleci-images/cac
58
58
  && rm -rf /tmp/dockerize-linux-amd64.tar.gz \
59
59
  && dockerize --version
60
60
 
61
+ # Install Protobuf compiler
62
+ RUN export PROTOC_URL=$(curl -s https://api.github.com/repos/protocolbuffers/protobuf/releases/latest | grep browser_download_url | cut -d '"' -f 4 | grep -e 'protoc-[.0-9]*-linux-x86_64\.zip' | sort -r | head -n 1) \
63
+ && echo Protoc URL: $PROTOC_URL \
64
+ && curl --silent --show-error --location --fail --retry 3 --output /tmp/protoc.zip "${PROTOC_URL}" \
65
+ && ls -lha /tmp/protoc.zip \
66
+ && unzip /tmp/protoc.zip -d /tmp/protoc \
67
+ && mv /tmp/protoc/bin/* /usr/bin \
68
+ && rm -rf /tmp/protoc /tmp/protoc.zip \
69
+ && protoc --version
70
+
61
71
  # Install RubyGems
62
72
  RUN gem update --system
63
73
  RUN mkdir -p "$GEM_HOME" && chmod -R 777 "$GEM_HOME"
@@ -58,6 +58,16 @@ RUN DOCKERIZE_URL="https://circle-downloads.s3.amazonaws.com/circleci-images/cac
58
58
  && rm -rf /tmp/dockerize-linux-amd64.tar.gz \
59
59
  && dockerize --version
60
60
 
61
+ # Install Protobuf compiler
62
+ RUN export PROTOC_URL=$(curl -s https://api.github.com/repos/protocolbuffers/protobuf/releases/latest | grep browser_download_url | cut -d '"' -f 4 | grep -e 'protoc-[.0-9]*-linux-x86_64\.zip' | sort -r | head -n 1) \
63
+ && echo Protoc URL: $PROTOC_URL \
64
+ && curl --silent --show-error --location --fail --retry 3 --output /tmp/protoc.zip "${PROTOC_URL}" \
65
+ && ls -lha /tmp/protoc.zip \
66
+ && unzip /tmp/protoc.zip -d /tmp/protoc \
67
+ && mv /tmp/protoc/bin/* /usr/bin \
68
+ && rm -rf /tmp/protoc /tmp/protoc.zip \
69
+ && protoc --version
70
+
61
71
  # Install RubyGems
62
72
  RUN gem update --system
63
73
  RUN mkdir -p "$GEM_HOME" && chmod -R 777 "$GEM_HOME"