instana 1.210.1 → 1.212.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 (76) hide show
  1. checksums.yaml +4 -4
  2. data/.circleci/config.yml +85 -38
  3. data/.github/ISSUE_TEMPLATE/bug.yml +1 -1
  4. data/.github/ISSUE_TEMPLATE/config.yml +1 -1
  5. data/.github/workflows/release-notification-on-slack.yml +34 -0
  6. data/Gemfile +3 -8
  7. data/README.md +4 -8
  8. data/Rakefile +21 -2
  9. data/bin/announce_release_on_slack.py +103 -0
  10. data/download.sh +85 -0
  11. data/gemfiles/aws_30.gemfile +7 -6
  12. data/gemfiles/aws_60.gemfile +19 -0
  13. data/gemfiles/coverage_merge.gemfile +9 -0
  14. data/gemfiles/cuba_30.gemfile +1 -1
  15. data/gemfiles/cuba_40.gemfile +1 -1
  16. data/gemfiles/dalli_20.gemfile +1 -1
  17. data/gemfiles/dalli_30.gemfile +1 -1
  18. data/gemfiles/dalli_32.gemfile +1 -1
  19. data/gemfiles/excon_02.gemfile +3 -2
  20. data/gemfiles/excon_021.gemfile +3 -1
  21. data/gemfiles/excon_079.gemfile +3 -2
  22. data/gemfiles/excon_100.gemfile +3 -2
  23. data/gemfiles/graphql_10.gemfile +1 -1
  24. data/gemfiles/graphql_20.gemfile +1 -1
  25. data/gemfiles/grpc_10.gemfile +1 -1
  26. data/gemfiles/mongo_216.gemfile +2 -2
  27. data/gemfiles/mongo_219.gemfile +15 -0
  28. data/gemfiles/net_http_01.gemfile +3 -2
  29. data/gemfiles/rack_16.gemfile +1 -1
  30. data/gemfiles/rack_20.gemfile +1 -1
  31. data/gemfiles/rack_30.gemfile +16 -0
  32. data/gemfiles/rails_42.gemfile +1 -1
  33. data/gemfiles/rails_50.gemfile +1 -1
  34. data/gemfiles/rails_52.gemfile +1 -1
  35. data/gemfiles/rails_60.gemfile +1 -1
  36. data/gemfiles/rails_61.gemfile +1 -1
  37. data/gemfiles/rails_70.gemfile +2 -2
  38. data/gemfiles/rails_71.gemfile +19 -0
  39. data/gemfiles/redis_40.gemfile +1 -1
  40. data/gemfiles/resque_122.gemfile +1 -1
  41. data/gemfiles/resque_20.gemfile +2 -2
  42. data/gemfiles/rest_client_16.gemfile +3 -2
  43. data/gemfiles/rest_client_20.gemfile +3 -2
  44. data/gemfiles/roda_20.gemfile +1 -1
  45. data/gemfiles/roda_30.gemfile +2 -2
  46. data/gemfiles/shoryuken_50.gemfile +2 -2
  47. data/gemfiles/shoryuken_60.gemfile +16 -0
  48. data/gemfiles/sidekiq_42.gemfile +1 -1
  49. data/gemfiles/sidekiq_50.gemfile +2 -2
  50. data/gemfiles/sidekiq_60.gemfile +2 -2
  51. data/gemfiles/sidekiq_65.gemfile +15 -0
  52. data/gemfiles/sidekiq_70.gemfile +2 -2
  53. data/gemfiles/sinatra_14.gemfile +2 -2
  54. data/gemfiles/sinatra_22.gemfile +15 -0
  55. data/gemfiles/sinatra_30.gemfile +15 -0
  56. data/lib/instana/activator.rb +20 -9
  57. data/lib/instana/activators/sidekiq_client.rb +1 -2
  58. data/lib/instana/activators/sidekiq_worker.rb +1 -2
  59. data/lib/instana/backend/serverless_agent.rb +1 -1
  60. data/lib/instana/instrumentation/sidekiq-client.rb +11 -2
  61. data/lib/instana/instrumentation/sidekiq-worker.rb +11 -2
  62. data/lib/instana/version.rb +1 -1
  63. data/test/activator_test.rb +20 -0
  64. data/test/backend/host_agent_reporting_observer_test.rb +5 -3
  65. data/test/instrumentation/aws_test.rb +5 -4
  66. data/test/instrumentation/rack_test.rb +13 -2
  67. data/test/instrumentation/rails_action_controller_test.rb +5 -1
  68. data/test/instrumentation/rails_action_view_test.rb +5 -1
  69. data/test/instrumentation/rails_active_record_database_missing_test.rb +5 -3
  70. data/test/instrumentation/sidekiq-client_test.rb +2 -18
  71. data/test/instrumentation/sidekiq-worker_test.rb +3 -45
  72. data/test/support/apps/http_endpoint/boot.rb +1 -1
  73. data/test/support/apps/sidekiq/worker.rb +8 -8
  74. data/test/test_helper.rb +8 -4
  75. data/test/tracing/custom_test.rb +64 -0
  76. metadata +14 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 7ebbf57e241468a0c39a150d3032f6d544c10263e54638a62e78b6b78bfcf176
4
- data.tar.gz: a4a009b702fbb44d3769558edecc91305262bc0a08172ee0e6e6751cb6ded284
3
+ metadata.gz: 332da83974279a02e0ebc35086a412aa2f8640d4e40dd38957bec22c0f8a9ed8
4
+ data.tar.gz: cb3528e5f55e0c76e5069c0d801033d800af6c184101484690d9ead1b9cf7088
5
5
  SHA512:
6
- metadata.gz: '07957983e122595a1e8c0e54babe3c832dda10bab8e4ca138a02868854e8dca861767f82196f01ed184883ac82c9c322c1dcb288b56869a818a64f3af9e8b33b'
7
- data.tar.gz: 17479e49ec7dcd01153c11c85186b6ef17056c3bd5a5fc81c86ce1e09569737994dedce8286d7815651fe060e3ae1003efc39af85a1eb60facc252a794cfa82a
6
+ metadata.gz: 4f372d7417bda356f6051fc6d8fb1ceb6f85537ac4c6841a9247f966350c9574335bf8c4fdc567b1c78d54ad95a8f3d0ce53b14126e964bb249c68d648616d11
7
+ data.tar.gz: 44ebe7c9b5716b7d323a619561c3732ba8b1145a600601ebbb6c797444db89a82486f94580ac2b20335f3f4877abaf35274abe9a14b740500c894c2b3aecffab
data/.circleci/config.yml CHANGED
@@ -1,5 +1,43 @@
1
1
  version: 2.1
2
2
 
3
+ library_gemfile: &library_gemfile
4
+ gemfile:
5
+ - "./gemfiles/aws_30.gemfile"
6
+ - "./gemfiles/aws_60.gemfile"
7
+ - "./gemfiles/cuba_30.gemfile"
8
+ - "./gemfiles/cuba_40.gemfile"
9
+ - "./gemfiles/dalli_20.gemfile"
10
+ - "./gemfiles/dalli_30.gemfile"
11
+ - "./gemfiles/dalli_32.gemfile"
12
+ - "./gemfiles/excon_02.gemfile"
13
+ - "./gemfiles/excon_079.gemfile"
14
+ - "./gemfiles/excon_100.gemfile"
15
+ - "./gemfiles/graphql_10.gemfile"
16
+ - "./gemfiles/graphql_20.gemfile"
17
+ - "./gemfiles/grpc_10.gemfile"
18
+ - "./gemfiles/net_http_01.gemfile"
19
+ - "./gemfiles/rack_16.gemfile"
20
+ - "./gemfiles/rack_20.gemfile"
21
+ - "./gemfiles/rack_30.gemfile"
22
+ - "./gemfiles/redis_40.gemfile"
23
+ - "./gemfiles/rest_client_16.gemfile"
24
+ - "./gemfiles/rest_client_20.gemfile"
25
+ - "./gemfiles/resque_122.gemfile"
26
+ - "./gemfiles/resque_20.gemfile"
27
+ - "./gemfiles/roda_20.gemfile"
28
+ - "./gemfiles/roda_30.gemfile"
29
+ - "./gemfiles/sidekiq_42.gemfile"
30
+ - "./gemfiles/sidekiq_50.gemfile"
31
+ - "./gemfiles/sidekiq_60.gemfile"
32
+ - "./gemfiles/sidekiq_65.gemfile"
33
+ - "./gemfiles/sidekiq_70.gemfile"
34
+ - "./gemfiles/sinatra_14.gemfile"
35
+ - "./gemfiles/sinatra_22.gemfile"
36
+ - "./gemfiles/sinatra_30.gemfile"
37
+ - "./gemfiles/shoryuken_50.gemfile"
38
+ - "./gemfiles/shoryuken_60.gemfile"
39
+ - "./gemfiles/mongo_216.gemfile"
40
+ - "./gemfiles/mongo_219.gemfile"
3
41
  executors:
4
42
  ruby_27:
5
43
  docker:
@@ -174,33 +212,55 @@ commands:
174
212
  bundler --version
175
213
  bundle config set path './vendor/bundle'
176
214
  - run:
177
- name: Install Depdendecies
215
+ name: Install Dependencies
178
216
  command: |
179
217
  bundle check || bundle install
180
218
  run_sonarqube:
181
219
  steps:
182
220
  - run:
183
- name: Install Java
221
+ name: Install Java for the SonarQube tool
184
222
  command: |
185
223
  sudo apt-get update
186
224
  sudo apt-get install openjdk-11-jdk
225
+ - run:
226
+ name: Install dependencies for coverage merge
227
+ command: |
228
+ bundler --version
229
+ bundle config set path './vendor/bundle'
230
+ bundle check || bundle install
231
+ environment:
232
+ BUNDLE_GEMFILE: './gemfiles/coverage_merge.gemfile'
233
+ - run:
234
+ name: Fetching partial coverage reports from workflow jobs
235
+ command: |
236
+ ./download.sh
237
+ - run:
238
+ name: Merging partial coverage reports for reporting
239
+ command: |
240
+ bundle exec rake coverage:merge_reports --trace
241
+ environment:
242
+ BUNDLE_GEMFILE: './gemfiles/coverage_merge.gemfile'
187
243
  - run:
188
244
  name: Run SonarQube to capture coverage
189
245
  command: |
190
- wget -O /tmp/sonar-scanner-cli.zip https://binaries.sonarsource.com/Distribution/sonar-scanner-cli/sonar-scanner-cli-4.6.2.2472.zip
246
+ wget -O /tmp/sonar-scanner-cli.zip https://binaries.sonarsource.com/Distribution/sonar-scanner-cli/sonar-scanner-cli-4.8.1.3023.zip
191
247
  unzip -d /tmp /tmp/sonar-scanner-cli.zip
192
248
  if [[ -n "${CIRCLE_PR_NUMBER}" ]]; then
193
- /tmp/sonar-scanner-4.6.2.2472/bin/sonar-scanner \
249
+ /tmp/sonar-scanner-4.8.1.3023/bin/sonar-scanner \
194
250
  -Dsonar.host.url="${SONARQUBE_URL}" \
195
251
  -Dsonar.login="${SONARQUBE_LOGIN}" \
196
252
  -Dsonar.pullrequest.key="${CIRCLE_PR_NUMBER}" \
197
253
  -Dsonar.pullrequest.branch="${CIRCLE_BRANCH}"
198
254
  else
199
- /tmp/sonar-scanner-4.6.2.2472/bin/sonar-scanner \
255
+ /tmp/sonar-scanner-4.8.1.3023/bin/sonar-scanner \
200
256
  -Dsonar.host.url="${SONARQUBE_URL}" \
201
257
  -Dsonar.login="${SONARQUBE_LOGIN}" \
202
258
  -Dsonar.branch.name="${CIRCLE_BRANCH}"
203
259
  fi
260
+ - store_artifacts:
261
+ path: partial_coverage_results
262
+ - store_artifacts:
263
+ path: coverage
204
264
  run_tests:
205
265
  steps:
206
266
  - run:
@@ -210,6 +270,8 @@ commands:
210
270
  bundle exec rake
211
271
  - store_test_results:
212
272
  path: ~/project/_junit
273
+ - store_artifacts:
274
+ path: coverage
213
275
  run_rubocop:
214
276
  steps:
215
277
  - run:
@@ -262,6 +324,10 @@ jobs:
262
324
  - checkout
263
325
  - setup
264
326
  - run_rubocop
327
+ report_coverage:
328
+ executor: ruby_32
329
+ steps:
330
+ - checkout
265
331
  - run_sonarqube
266
332
  publish:
267
333
  executor: ruby_27
@@ -290,46 +356,16 @@ workflows:
290
356
  - ruby_30
291
357
  - ruby_31
292
358
  - ruby_32
293
- libraries:
359
+ libraries_ruby_3:
294
360
  jobs:
295
361
  - test_apprisal:
296
362
  matrix:
297
363
  parameters:
298
364
  stack:
299
- - ruby_27
300
365
  - ruby_30
301
366
  - ruby_31
302
367
  - ruby_32
303
- gemfile:
304
- - "./gemfiles/aws_30.gemfile"
305
- - "./gemfiles/cuba_30.gemfile"
306
- - "./gemfiles/cuba_40.gemfile"
307
- - "./gemfiles/dalli_20.gemfile"
308
- - "./gemfiles/dalli_30.gemfile"
309
- - "./gemfiles/dalli_32.gemfile"
310
- - "./gemfiles/excon_02.gemfile"
311
- - "./gemfiles/excon_079.gemfile"
312
- - "./gemfiles/excon_100.gemfile"
313
- - "./gemfiles/graphql_10.gemfile"
314
- - "./gemfiles/graphql_20.gemfile"
315
- - "./gemfiles/grpc_10.gemfile"
316
- - "./gemfiles/net_http_01.gemfile"
317
- - "./gemfiles/rack_16.gemfile"
318
- - "./gemfiles/rack_20.gemfile"
319
- - "./gemfiles/redis_40.gemfile"
320
- - "./gemfiles/rest_client_16.gemfile"
321
- - "./gemfiles/rest_client_20.gemfile"
322
- - "./gemfiles/resque_122.gemfile"
323
- - "./gemfiles/resque_20.gemfile"
324
- - "./gemfiles/roda_20.gemfile"
325
- - "./gemfiles/roda_30.gemfile"
326
- - "./gemfiles/sidekiq_42.gemfile"
327
- - "./gemfiles/sidekiq_50.gemfile"
328
- - "./gemfiles/sidekiq_60.gemfile"
329
- - "./gemfiles/sidekiq_70.gemfile"
330
- - "./gemfiles/sinatra_14.gemfile"
331
- - "./gemfiles/shoryuken_50.gemfile"
332
- - "./gemfiles/mongo_216.gemfile"
368
+ <<: *library_gemfile
333
369
  exclude:
334
370
  # Currently rest-client 1.6 gemfile pulls in mime-types 2.99.3
335
371
  # and adaptation to mime-type 3.0 is only available in rest-client 2.0:
@@ -349,7 +385,14 @@ workflows:
349
385
  # https://www.ruby-lang.org/en/news/2022/11/11/ruby-3-2-0-preview3-released/
350
386
  - stack: ruby_32
351
387
  gemfile: "./gemfiles/sinatra_14.gemfile"
352
-
388
+ libraries_ruby_2:
389
+ jobs:
390
+ - test_apprisal:
391
+ matrix:
392
+ parameters:
393
+ stack:
394
+ - ruby_27
395
+ <<: *library_gemfile
353
396
  rails_ruby_2:
354
397
  jobs:
355
398
  - test_apprisal:
@@ -381,3 +424,7 @@ workflows:
381
424
  gemfile:
382
425
  - "./gemfiles/rails_61.gemfile"
383
426
  - "./gemfiles/rails_70.gemfile"
427
+ - "./gemfiles/rails_71.gemfile"
428
+ report_coverage:
429
+ jobs:
430
+ - report_coverage
@@ -6,7 +6,7 @@ body:
6
6
  - type: markdown
7
7
  attributes:
8
8
  value: |
9
- Thank you for taking the time to fill out this report. Remember that these issues are public and if you need to discuss implementation specific issues securely, please [use our support portal](https://support.instana.com/hc/en-us).
9
+ Thank you for taking the time to fill out this report. Remember that these issues are public and if you need to discuss implementation specific issues securely, please [use our support portal](https://www.ibm.com/mysupport).
10
10
  - type: textarea
11
11
  id: problem-description
12
12
  attributes:
@@ -1,7 +1,7 @@
1
1
  blank_issues_enabled: false
2
2
  contact_links:
3
3
  - name: Instana Support Portal
4
- url: https://support.instana.com
4
+ url: https://www.ibm.com/mysupport
5
5
  about: Please ask questions related to your installation there.
6
6
  - name: Feature Requests
7
7
   url: https://automation-management.ideas.ibm.com/?project=INSTANA
@@ -0,0 +1,34 @@
1
+ name: Slack Post
2
+ on:
3
+ workflow_dispatch: # Manual trigger
4
+ inputs:
5
+ github_ref:
6
+ description: 'Manually provided value for GITHUB_RELEASE_TAG of a release'
7
+ required: true
8
+ type: string
9
+
10
+ # https://docs.github.com/en/actions/using-workflows/events-that-trigger-workflows#release
11
+ release:
12
+ types: [published]
13
+ jobs:
14
+ build:
15
+ name: Slack Post
16
+ runs-on: ubuntu-latest
17
+ steps:
18
+ - name: 'Checkout the needed file only ./bin/announce_release_on_slack.py'
19
+ uses: actions/checkout@v3
20
+ - run: |
21
+ if [[ ${{ github.event_name == 'workflow_dispatch' }} == true ]]; then
22
+ export GITHUB_RELEASE_TAG=${{ inputs.github_ref }}
23
+ else # release event
24
+ export GITHUB_RELEASE_TAG=$(basename ${GITHUB_REF})
25
+ fi
26
+ echo "New release published ${GITHUB_RELEASE_TAG}"
27
+ pip3 install PyGithub
28
+ echo $PWD
29
+ ls -lah
30
+ ./bin/announce_release_on_slack.py
31
+ env:
32
+ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
33
+ SLACK_BOT_TOKEN: ${{ secrets.SLACK_BOT_TOKEN }}
34
+ SLACK_CHANNEL_ID_RELEASES: ${{ secrets.SLACK_CHANNEL_ID_RELEASES }}
data/Gemfile CHANGED
@@ -4,20 +4,15 @@
4
4
  source 'https://rubygems.org'
5
5
 
6
6
  gem 'rake'
7
- gem 'minitest', '5.9.1'
7
+ gem 'minitest', '5.20.0'
8
8
  gem 'minitest-reporters'
9
9
  gem 'webmock'
10
10
  gem 'puma'
11
11
 
12
12
  gem 'rubocop', '~> 1.9'
13
13
 
14
- # Rack v2 dropped support for Ruby 2.2 and higher.
15
- if RUBY_VERSION < '2.2'
16
- gem 'rack', '<3.0.0', '~> 1.6'
17
- else
18
- gem 'rack', '<3.0.0'
19
- # gem 'rackup'
20
- end
14
+ gem 'rack'
15
+ gem 'rackup'
21
16
  gem 'rack-test'
22
17
 
23
18
  gem 'simplecov', '~> 0.21.2'
data/README.md CHANGED
@@ -1,7 +1,3 @@
1
- <div align="center">
2
- <img src="https://disznc.s3.amazonaws.com/Ruby-Dashboard-2020-02-10-at-2.31.36-PM.png"/>
3
- </div>
4
-
5
1
  # Instana
6
2
 
7
3
  The `instana` gem provides Ruby metrics and traces (request, queue & cross-host) for [Instana](https://www.instana.com/).
@@ -46,21 +42,21 @@ The `instana` gem is a zero configuration tool that will automatically collect k
46
42
 
47
43
  ## Configuration
48
44
 
49
- Although the gem has no configuration required for out of the box metrics and tracing, components can be configured if needed. See our [Configuration](https://docs.instana.io/ecosystem/ruby/configuration/) page.
45
+ Although the gem has no configuration required for out of the box metrics and tracing, components can be configured if needed. See our [Configuration](https://www.ibm.com/docs/en/instana-observability/current?topic=ruby-configuration-configuring-instana-gem) page.
50
46
 
51
47
  ## Tracing
52
48
 
53
- This Ruby gem provides a simple API for tracing and also supports [OpenTracing](http://opentracing.io/). See the [Ruby Tracing SDK](https://docs.instana.io/ecosystem/ruby/tracing-sdk/) and [OpenTracing](https://docs.instana.io/ecosystem/ruby/opentracing/) pages for details.
49
+ This Ruby gem provides a simple API for tracing and also supports [OpenTracing](http://opentracing.io/). See the [Ruby Tracing SDK](https://www.ibm.com/docs/en/instana-observability/current?topic=ruby-tracing-sdk) and [OpenTracing](https://www.ibm.com/docs/en/instana-observability/current?topic=ruby-opentracing) pages for details.
54
50
 
55
51
  ## Documentation
56
52
 
57
- You can find more documentation covering supported components and minimum versions in the Instana [documentation portal](https://docs.instana.io/ecosystem/ruby/).
53
+ You can find more documentation covering supported components and minimum versions in the Instana [documentation portal](https://www.ibm.com/docs/en/instana-observability/current?topic=technologies-monitoring-ruby).
58
54
 
59
55
  ## Want End User Monitoring (EUM)?
60
56
 
61
57
  Instana provides deep end user monitoring that links server side traces with browser events to give you a complete view from server to browser.
62
58
 
63
- See the [End User Monitoring](/products/website_monitoring/#configuration) page for more information.
59
+ See the [End User Monitoring](https://www.ibm.com/docs/en/instana-observability/current?topic=instana-monitoring-websites) page for more information.
64
60
 
65
61
  ## Development
66
62
 
data/Rakefile CHANGED
@@ -13,11 +13,11 @@ Rake::TestTask.new(:test) do |t|
13
13
 
14
14
  t.libs << "test"
15
15
  t.libs << "lib"
16
-
16
+
17
17
  if ENV['APPRAISAL_INITIALIZED']
18
18
  appraised_group = File.basename(ENV['BUNDLE_GEMFILE']).split(/_[0-9]+\./).first
19
19
  suite_files = Dir['test/{instrumentation,frameworks}/*_test.rb']
20
-
20
+
21
21
  t.test_files = suite_files.select { |f| File.basename(f).start_with?(appraised_group) }
22
22
  else
23
23
  t.test_files = Dir[
@@ -27,4 +27,23 @@ Rake::TestTask.new(:test) do |t|
27
27
  end
28
28
  end
29
29
 
30
+ namespace :coverage do
31
+ task :merge_reports do
32
+ require 'simplecov'
33
+ require 'simplecov_json_formatter'
34
+
35
+ SimpleCov.start do
36
+ enable_coverage :branch
37
+ SimpleCov.collate Dir["partial_coverage_results/.resultset-*.json"] do
38
+ formatter SimpleCov::Formatter::MultiFormatter.new(
39
+ [
40
+ SimpleCov::Formatter::SimpleFormatter,
41
+ SimpleCov::Formatter::JSONFormatter
42
+ ]
43
+ )
44
+ end
45
+ end
46
+ end
47
+ end
48
+
30
49
  task :default => :test
@@ -0,0 +1,103 @@
1
+ #!/usr/bin/env python3
2
+
3
+ # (c) Copyright IBM Corp. 2023
4
+
5
+ import json
6
+ import logging
7
+ import os
8
+ import re
9
+ import requests
10
+ import sys
11
+
12
+ from github import Github
13
+
14
+
15
+ def ensure_environment_variables_are_present():
16
+ required_env_vars = ('GITHUB_RELEASE_TAG', 'GITHUB_TOKEN',
17
+ 'SLACK_BOT_TOKEN', 'SLACK_CHANNEL_ID_RELEASES')
18
+
19
+ for v in required_env_vars:
20
+ if not os.environ.get(v):
21
+ logging.fatal("A required environment variable is missing: %s", v)
22
+ sys.exit(1)
23
+
24
+
25
+ def get_gh_release_info_text_with_token(release_tag, access_token):
26
+ g = Github(access_token)
27
+ repo_name = "instana/ruby-sensor"
28
+ repo = g.get_repo(repo_name)
29
+ release = repo.get_release(release_tag)
30
+
31
+ logging.info("GH Release fetched successfully %s", release)
32
+
33
+ msg = (
34
+ f":mega: :package: A new version is released in {repo_name}\n"
35
+ f"Name: {release.title}\n"
36
+ f"Tag: {release.tag_name}\n"
37
+ f"Created at: {release.created_at}\n"
38
+ f"Published at: {release.published_at}\n"
39
+ f"{release.body}\n")
40
+
41
+ logging.info(msg)
42
+ return msg
43
+
44
+
45
+ def reformat_github_md_to_slack_markup(msg):
46
+ # Based on:
47
+ # https://github.com/atomist/slack-messages/blob
48
+ # /c938c67e957345ba6a0015ca3ace1fd779d0979c/lib/Markdown.ts#LL111C1-L116C44
49
+
50
+ msg = re.sub(r'^(\s*)[-*](\s+)', r'\1•\2', msg, flags=re.MULTILINE)
51
+ msg = re.sub(r'(\*|_)\1(\S|\S.*?\S)\1\1(?!\1)', r'<bdmkd>\2</bdmkd>', msg)
52
+ msg = re.sub(r'(\*|_)(?!\1)(\S|\S.*?\S)\1(?!\1)', r'<itmkd>\2</itmkd>', msg)
53
+ msg = msg.replace('<bdmkd>', '*').replace('<itmkd>', '_')
54
+ msg = re.sub(r'^([#]+)\s+([\S ]+)$', r'*\2*', msg, flags=re.MULTILINE)
55
+
56
+ # TODO: The message text has to have a partial entity encoding
57
+ # https://api.slack.com/reference/surfaces/formatting#escaping
58
+ # Validate it if we can?
59
+ # A naive replace like this is not enough, because
60
+ # it might already be encoded and then we would encode again.
61
+ #s = s.replace('&', '&amp;')
62
+ #s = s.replace('<', '&lt;')
63
+ #s = s.replace('>', '&gt;')
64
+
65
+ # Use the tester here:
66
+ # https://api.slack.com/methods/chat.postMessage/test
67
+ return msg
68
+
69
+
70
+ def post_on_slack_channel(slack_token, slack_channel_id, message_text):
71
+ api_url = "https://slack.com/api/chat.postMessage"
72
+
73
+ headers = {"Authorization": f"Bearer {slack_token}",
74
+ "Content-Type": "application/json"}
75
+ body = {"channel": slack_channel_id, "text": message_text}
76
+
77
+ response = requests.post(api_url, headers=headers, data=json.dumps(body))
78
+ response_data = json.loads(response.text)
79
+
80
+ if response_data["ok"]:
81
+ logging.info("Message sent successfully!")
82
+ else:
83
+ logging.fatal("Error sending message: %s", response_data['error'])
84
+
85
+
86
+ def main():
87
+ # Setting this globally to DEBUG will also debug PyGithub,
88
+ # which will produce even more log output
89
+ logging.basicConfig(level=logging.INFO)
90
+ ensure_environment_variables_are_present()
91
+
92
+ msg = get_gh_release_info_text_with_token(os.environ['GITHUB_RELEASE_TAG'],
93
+ os.environ['GITHUB_TOKEN'])
94
+
95
+ slack_formatted_msg = reformat_github_md_to_slack_markup(msg)
96
+
97
+ post_on_slack_channel(os.environ['SLACK_BOT_TOKEN'],
98
+ os.environ['SLACK_CHANNEL_ID_RELEASES'],
99
+ slack_formatted_msg)
100
+
101
+
102
+ if __name__ == "__main__":
103
+ main()
data/download.sh ADDED
@@ -0,0 +1,85 @@
1
+ #!/usr/bin/env bash
2
+
3
+ if [[ -z ${CIRCLE_TOKEN} ]]
4
+ then
5
+ echo "ERROR: The CIRCLE_TOKEN variable is missing"
6
+ exit 255
7
+ fi
8
+
9
+ PROJECT_SLUG='https://circleci.com/api/v2/project/gh/instana/ruby-sensor'
10
+ PIPELINE_SLUG='https://circleci.com/api/v2/pipeline/'
11
+ WORKFLOW_SLUG='https://circleci.com/api/v2/workflow/'
12
+
13
+ echo "Getting Pipeline ID"
14
+ PIPELINE_ID=$(curl -s \
15
+ -H "Circle-Token: ${CIRCLE_TOKEN}" \
16
+ "${PROJECT_SLUG}/job/${CIRCLE_BUILD_NUM}" \
17
+ | jq -rj '.pipeline.id')
18
+
19
+
20
+ echo "Received Pipeline ID is: ${PIPELINE_ID}"
21
+
22
+ echo "Getting Workflows for Pipeline ID"
23
+ WORKFLOW_IDS=$(curl -s \
24
+ -H "Circle-Token: ${CIRCLE_TOKEN}" \
25
+ "${PIPELINE_SLUG}/${PIPELINE_ID}/workflow" \
26
+ | jq -r '.items[] | select(.name!="report_coverage") | .id')
27
+
28
+ echo "Received Workflow IDs are: ${WORKFLOW_IDS}"
29
+
30
+ for workflow_id in ${WORKFLOW_IDS}
31
+ do
32
+ echo "Waiting for workflow ${workflow_id} to finish"
33
+ while true
34
+ do
35
+ STATUS=$(curl -s \
36
+ -H "Circle-Token: ${CIRCLE_TOKEN}" \
37
+ "${WORKFLOW_SLUG}/${workflow_id}" \
38
+ | jq -r '.status')
39
+ if [[ ${STATUS} != "running" && ${STATUS} != "on_hold" ]]
40
+ then
41
+ break
42
+ else
43
+ echo "Workflow ${workflow_id} has not finished yet. Status is: ${STATUS}"
44
+ sleep 10
45
+ fi
46
+ done
47
+
48
+ if [[ "${STATUS}" != "success" ]]
49
+ then
50
+ echo "ERROR: Workflow ${workflow_id} did not succeed! Status is: ${STATUS}"
51
+ exit 254
52
+ else
53
+ echo "Workflow ${workflow_id} has finished successfully! Status is: ${STATUS}"
54
+ fi
55
+ done
56
+
57
+
58
+ echo "All workflows have successfully finished, downloading artifacts."
59
+
60
+ mkdir partial_coverage_results
61
+ for workflow_id in ${WORKFLOW_IDS}
62
+ do
63
+ JOB_NUMBERS=$(curl -s \
64
+ -H "Circle-Token: ${CIRCLE_TOKEN}" \
65
+ "${WORKFLOW_SLUG}/${workflow_id}/job" \
66
+ | jq -r '.items[] | .job_number' \
67
+ | tr '\n' ' ')
68
+
69
+ for job in ${JOB_NUMBERS}
70
+ do
71
+ ARTIFACT_DOWNLOAD_LINK=$(curl -s \
72
+ -H "Circle-Token: ${CIRCLE_TOKEN}" \
73
+ "${PROJECT_SLUG}/${job}/artifacts" \
74
+ | jq -r \
75
+ '.items[] | select(.path=="coverage/.resultset.json") | .url')
76
+ #'.items[] | select(.path=="coverage/coverage.json" or .path=="coverage/.resultset.json") | .url')
77
+ curl -s \
78
+ -L \
79
+ -H "Circle-Token: ${CIRCLE_TOKEN}" \
80
+ "${ARTIFACT_DOWNLOAD_LINK}" \
81
+ -o partial_coverage_results/.resultset-${job}.json
82
+ done
83
+ done
84
+
85
+ echo "All artifacts have been successfully downloaded."
@@ -6,17 +6,18 @@
6
6
  source "https://rubygems.org"
7
7
 
8
8
  gem "rake"
9
- gem "minitest", "5.9.1"
9
+ gem "minitest", "5.20.0"
10
10
  gem "minitest-reporters"
11
11
  gem "webmock"
12
+ gem "webrick"
12
13
  gem "puma"
13
14
  gem "rubocop", "~> 1.9"
14
15
  gem "rack-test"
15
16
  gem "simplecov", "~> 0.21.2"
16
- gem "aws-sdk-dynamodb", "~> 1.59"
17
- gem "aws-sdk-s3", "~> 1.59"
18
- gem "aws-sdk-sns", "~> 1.38"
19
- gem "aws-sdk-sqs", "~> 1.36"
20
- gem "aws-sdk-lambda", "~> 1.62"
17
+ gem "aws-sdk-dynamodb", ">= 1.59", "< 1.99"
18
+ gem "aws-sdk-s3", ">= 1.59", "< 1.60"
19
+ gem "aws-sdk-sns", ">= 1.38", "< 1.59"
20
+ gem "aws-sdk-sqs", ">= 1.36", "< 1.59"
21
+ gem "aws-sdk-lambda", ">= 1.62", "< 1.80"
21
22
 
22
23
  gemspec path: "../"
@@ -0,0 +1,19 @@
1
+ # (c) Copyright IBM Corp. 2023
2
+
3
+ source "https://rubygems.org"
4
+
5
+ gem "rake"
6
+ gem "minitest", "5.20.0"
7
+ gem "minitest-reporters"
8
+ gem "webmock"
9
+ gem "puma"
10
+ gem "rubocop", "~> 1.9"
11
+ gem "rack-test"
12
+ gem "simplecov", "~> 0.21.2"
13
+ gem "aws-sdk-dynamodb", ">= 1.90"
14
+ gem "aws-sdk-s3", ">= 1.127"
15
+ gem "aws-sdk-sns", ">= 1.63"
16
+ gem "aws-sdk-sqs", ">= 1.59"
17
+ gem "aws-sdk-lambda", ">= 1.101"
18
+
19
+ gemspec path: "../"
@@ -0,0 +1,9 @@
1
+ # (c) Copyright IBM Corp. 2023
2
+
3
+ source "https://rubygems.org"
4
+
5
+ gem "rake"
6
+ gem "minitest", "5.20.0"
7
+ gem "minitest-reporters"
8
+ gem "rack-test"
9
+ gem "simplecov", "~> 0.21.2"
@@ -7,7 +7,7 @@ source "https://rubygems.org"
7
7
 
8
8
  gem "rack", "<3.0.0"
9
9
  gem "rake"
10
- gem "minitest", "5.9.1"
10
+ gem "minitest", "5.20.0"
11
11
  gem "minitest-reporters"
12
12
  gem "webmock"
13
13
  gem "puma"
@@ -4,7 +4,7 @@ source "https://rubygems.org"
4
4
 
5
5
  gem "rack", ">=3.0.0"
6
6
  gem "rake"
7
- gem "minitest", "5.9.1"
7
+ gem "minitest", "5.20.0"
8
8
  gem "minitest-reporters"
9
9
  gem "webmock"
10
10
  gem "puma"
@@ -6,7 +6,7 @@
6
6
  source "https://rubygems.org"
7
7
 
8
8
  gem "rake"
9
- gem "minitest", "5.9.1"
9
+ gem "minitest", "5.20.0"
10
10
  gem "minitest-reporters"
11
11
  gem "webmock"
12
12
  gem "puma"
@@ -3,7 +3,7 @@
3
3
  source "https://rubygems.org"
4
4
 
5
5
  gem "rake"
6
- gem "minitest", "5.9.1"
6
+ gem "minitest", "5.20.0"
7
7
  gem "minitest-reporters"
8
8
  gem "webmock"
9
9
  gem "puma"
@@ -3,7 +3,7 @@
3
3
  source "https://rubygems.org"
4
4
 
5
5
  gem "rake"
6
- gem "minitest", "5.9.1"
6
+ gem "minitest", "5.20.0"
7
7
  gem "minitest-reporters"
8
8
  gem "webmock"
9
9
  gem "puma"