instana 1.215.0 → 1.216.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 (38) hide show
  1. checksums.yaml +4 -4
  2. data/.circleci/config.yml +83 -3
  3. data/.tekton/.currency/resources/requirements.txt +0 -1
  4. data/.tekton/.currency/resources/table.json +13 -13
  5. data/.tekton/.currency/scripts/generate_report.py +37 -130
  6. data/.tekton/README.md +278 -0
  7. data/.tekton/github-pr-eventlistener.yaml +1 -1
  8. data/.tekton/pipeline.yaml +96 -2
  9. data/.tekton/pipelinerun.yaml +2 -2
  10. data/.tekton/ruby-tracer-prepuller.yaml +4 -0
  11. data/.tekton/run_unittests.sh +27 -6
  12. data/.tekton/scheduled-eventlistener.yaml +1 -1
  13. data/.tekton/task.yaml +72 -0
  14. data/gemfiles/rails_61.gemfile +1 -0
  15. data/gemfiles/rails_70.gemfile +1 -0
  16. data/gemfiles/rails_71.gemfile +1 -0
  17. data/gemfiles/sequel_56.gemfile +16 -0
  18. data/gemfiles/sequel_57.gemfile +16 -0
  19. data/gemfiles/sequel_58.gemfile +16 -0
  20. data/instana.gemspec +2 -0
  21. data/lib/instana/activators/sequel.rb +20 -0
  22. data/lib/instana/backend/host_agent.rb +5 -1
  23. data/lib/instana/config.rb +1 -0
  24. data/lib/instana/instrumentation/sequel.rb +42 -0
  25. data/lib/instana/tracing/span.rb +2 -2
  26. data/lib/instana/version.rb +1 -1
  27. data/test/activator_test.rb +1 -1
  28. data/test/backend/host_agent_test.rb +2 -0
  29. data/test/instrumentation/rails_active_record_test.rb +1 -1
  30. data/test/instrumentation/sequel_test.rb +105 -0
  31. data/test/tracing/span_test.rb +2 -2
  32. data/test/tracing/tracer_test.rb +1 -3
  33. metadata +39 -8
  34. data/.tekton/.currency/currency-pipeline.yaml +0 -36
  35. data/.tekton/.currency/currency-pipelinerun.yaml +0 -20
  36. data/.tekton/.currency/currency-rbac.yaml +0 -29
  37. data/.tekton/.currency/currency-scheduled-eventlistener.yaml +0 -56
  38. data/.tekton/.currency/currency-tasks.yaml +0 -94
data/.tekton/README.md ADDED
@@ -0,0 +1,278 @@
1
+ # Tekton CI for Instana Ruby Tracer
2
+
3
+ ## Basic Tekton setup
4
+
5
+ ### Get a cluster
6
+
7
+ What you will need:
8
+ * Full administrator access
9
+ * Enough RAM and CPU on a cluster node to run all the pods of a single Pipelinerun on a single node.
10
+ Multiple nodes increase the number of parallel `PipelineRun` instances.
11
+ Currently one `PipelineRun` instance is capable of saturating a 8vCPU - 16GB RAM worker node.
12
+
13
+ ### Setup Tekton on your cluster
14
+
15
+ 1. Install latest stable Tekton Pipeline release
16
+ ```bash
17
+ kubectl apply --filename https://storage.googleapis.com/tekton-releases/pipeline/latest/release.yaml
18
+ ```
19
+
20
+ 2. Install Tekton Dashboard Full (the normal is read only, and doesn't allow for example to re-run).
21
+
22
+ ````bash
23
+ kubectl apply --filename https://storage.googleapis.com/tekton-releases/dashboard/latest/release-full.yaml
24
+ ````
25
+
26
+ 3. Access the dashboard
27
+
28
+ ```bash
29
+ kubectl proxy
30
+ ```
31
+
32
+ Once the proxy is active, navigate your browser to the [dashboard url](
33
+ http://localhost:8001/api/v1/namespaces/tekton-pipelines/services/tekton-dashboard:http/proxy/)
34
+
35
+ ### Setup the ruby-tracer-ci-pipeline
36
+
37
+ ````bash
38
+ kubectl apply --filename task.yaml && kubectl apply --filename pipeline.yaml
39
+ ````
40
+
41
+ ### Run the pipeline manually
42
+
43
+ #### From the Dashboard
44
+ Navigate your browser to the [pipelineruns section of the dashboard](
45
+ http://localhost:8001/api/v1/namespaces/tekton-pipelines/services/tekton-dashboard:http/proxy/#/pipelineruns)
46
+
47
+ 1. Click `Create`
48
+ 2. Select the `Namespace` (where the `Pipeline` resource is created by default it is `default`)
49
+ 3. Select the `Pipeline` created in the `pipeline.yaml` right now it is `ruby-tracer-ci-pipeline`
50
+ 4. Fill in `Params`. The `revision` should be `master` for the `master` branch
51
+ 4. Select the `ServiceAccount` set to `default`
52
+ 5. Optionally, enter a `PipelineRun name` for example `my-master-test-pipeline`,
53
+ but if you don't then the Dashboard will generate a unique one for you.
54
+ 6. As long as [the known issue with Tekton Dashboard Workspace binding](
55
+ https://github.com/tektoncd/dashboard/issues/1283), is not resolved.
56
+ You have to go to `YAML Mode` and insert the workspace definition at the end of the file,
57
+ with the exact same indentation:
58
+
59
+ ````yaml
60
+ workspaces:
61
+ - name: ruby-tracer-ci-pipeline-pvc-$(params.revision)
62
+ volumeClaimTemplate:
63
+ spec:
64
+ accessModes:
65
+ - ReadWriteOnce
66
+ resources:
67
+ requests:
68
+ storage: 200Mi
69
+
70
+ ````
71
+ 7. Click `Create` at the bottom of the page
72
+
73
+
74
+ #### From kubectl CLI
75
+ As an alternative to using the Dashboard, you can manually edit `pipelinerun.yaml` and create it with:
76
+ ````bash
77
+ kubectl apply --filename pipelinerun.yaml
78
+ ````
79
+
80
+ ### Clanup PipelineRun and associated PV resources
81
+
82
+ `PipelineRuns` and workspace `PersistentVolume` resources by default are kept indefinitely,
83
+ and repeated runs might exhaust the available resources, therefore they need to be cleaned up either
84
+ automatically or manually.
85
+
86
+ #### Manully from the Dashboard
87
+
88
+ Navigate to `PipelineRuns` and check the checkbox next to the pipelinerun
89
+ and then click `Delete` in the upper right corner.
90
+
91
+ #### Manually from the CLI
92
+
93
+ You can use either `kubectl`
94
+ ````bash
95
+ kubectl get pipelinerun
96
+ kubectl delete pipelinerun <selected-pipelinerun-here>
97
+ ````
98
+
99
+ or `tkn` cli
100
+ ````bash
101
+ tkn pipelinerun list
102
+ tkn pipelinerun delete <selected-pipelinerun-here>
103
+ ````
104
+
105
+ #### Automatic cleanup with a cronjob
106
+
107
+ Install and configure resources from https://github.com/3scale-ops/tekton-pipelinerun-cleaner
108
+
109
+
110
+ ## Integrate with GitHub
111
+
112
+ ### GitHub PR Trigger & PR Check API integration
113
+
114
+ The GitHub integration requires further Tekton Triggers and Interceptors to be installed
115
+ ````bash
116
+ kubectl apply --filename \
117
+ https://storage.googleapis.com/tekton-releases/triggers/latest/release.yaml
118
+ kubectl apply --filename \
119
+ https://storage.googleapis.com/tekton-releases/triggers/latest/interceptors.yaml
120
+ ````
121
+ #### Create a ServiceAccount
122
+
123
+ Our future GitHub PR Event listener needs a service account,
124
+ `tekton-triggers-eventlistener-serviceaccount` which authorizes it to
125
+ perform operations specified in eventlistener `Role` and `ClusteRole`.
126
+ Create the service account with the needed role bindings:
127
+
128
+ ````bash
129
+ kubectl apply --filename tekton-triggers-eventlistener-serviceaccount.yaml
130
+ ````
131
+
132
+ #### Create the Secret for the GitHub repository webhook
133
+
134
+ In order to authorize the incoming webhooks into our cluster, we need to share
135
+ a secret between our webhook listener, and the GitHub repo.
136
+ Generate a long, strong and random generated token, put it into `github-interceptor-secret.yaml`.
137
+ Create the secret resource:
138
+ ````bash
139
+ kubectl apply --filename github-interceptor-secret.yaml
140
+ ````
141
+
142
+ #### Create the Task and token to report PR Check status to GitHub
143
+
144
+ The GitHub PR specific Tekton pipeline will want to send data to report the `PR Check Status`.
145
+ That [GitHub API](https://docs.github.com/en/rest/commits/statuses?apiVersion=2022-11-28#create-a-commit-status
146
+ ) requires authentication, and therefore we need a token.
147
+ The user which generates the token has to have `Write` access in the target repo,
148
+ as part of the organisation. Check the repo access for this repo under
149
+ https://github.com/instana/ruby-sensor/settings/access.
150
+
151
+ With the proper user:
152
+ 1. Navigate to https://github.com/settings/tokens
153
+ 2. Click on `Generate new token` dropdown `Generate new token (classic)`.
154
+ 3. Fill in `Note` with for example `Tekton commit status`,
155
+ 4. Make sure if you set an expiration, than you remember to renew the token after expiry.
156
+ 5. Under `Select scopes` find `repo` and below that only select the checkbox next to `repo:status` - `Access commit status`.
157
+ click `Generate token`
158
+ 6. Create the kubernetes secret with the token:
159
+
160
+ ````bash
161
+ kubectl create secret generic githubtoken --from-literal token="MY_TOKEN"
162
+ ````
163
+
164
+ And we also make an HTTP POST with the status update data to GitHub.
165
+ This is done in a `Task` called `github-set-status`, create it as such:
166
+ ````bash
167
+ kubectl apply -f github-set-status-task.yaml
168
+ ````
169
+
170
+ #### Create the GitHub PR pipeline
171
+
172
+ Create the new pipeline, which executes the previously created `ruby-tracer-ci-pipeline`,
173
+ removes the currency report tasks and wraps the unittest jobs with GitHub Check status reporting tasks.
174
+ As long as [Pipelines in Pipelines](
175
+ https://tekton.dev/docs/pipelines/pipelines-in-pipelines/), remains an
176
+ unimplemented `alpha` feature in Tekton,
177
+ we will need the [yq](https://github.com/mikefarah/yq) (at least `4.0`)
178
+ to pull the tasks from our previous `ruby-tracer-ci-pipeline` into the
179
+ new pipeline `github-pr-ruby-tracer-ci-pipeline`.
180
+
181
+ ````bash
182
+ (cat github-pr-pipeline.yaml.part && yq '{"a": {"b": .spec.tasks}}' pipeline.yaml| tail --lines=+3| head --lines=-16) | kubectl apply -f -
183
+ ````
184
+
185
+ #### Create the GitHub PR Event Listener, TriggerTemplate and TriggerBinding
186
+
187
+ Once the new GitHub specific pipeline is created, we need a listener which starts
188
+ a new `PipelineRun` based on GitHub events.
189
+ For security reasons the listener will only trigger if the PR owner is a
190
+ repo owner. PRs from non-repo owners can be allowed in by owners after an initial review
191
+ with a comment on the pull request that contains `/ok-to-test`.
192
+ More abou this feature in the [tekton triggers documentsion](
193
+ https://github.com/tektoncd/triggers/blob/main/docs/interceptors.md#owners-validation-for-pull-requests).
194
+
195
+ ````bash
196
+ kubectl apply --filename github-pr-eventlistener.yaml
197
+ ````
198
+
199
+ After this ensure that there is a pod and a service created:
200
+
201
+ ````bash
202
+ kubectl get pod | grep -i el-github-pr-eventlistener
203
+ kubectl get svc | grep -i el-github-pr-eventlistener
204
+ ````
205
+
206
+ Do not continue if any of these missing.
207
+
208
+ #### Create the Ingress for the GitHub Webhook to come through
209
+
210
+ You will need an ingress controller for this.
211
+ On IKS you might want to read these resources:
212
+ * [managed ingress](https://cloud.ibm.com/docs/containers?topic=containers-managed-ingress-about)
213
+ * Or unmanaged [ingress controller howto](
214
+ https://github.com/IBM-Cloud/iks-ingress-controller/blob/master/docs/installation.md
215
+ ).
216
+
217
+ 1. Check the available `ingressclass` resources on your cluster
218
+
219
+ ````bash
220
+ kubectl get ingressclass
221
+ ````
222
+
223
+ * On `IKS` it will be `public-iks-k8s-nginx`.
224
+ * On `EKS` with the `ALB` ingress controller, it might be just `alb`
225
+ * On self hosted [nginx controller](https://kubernetes.github.io/ingress-nginx/deploy/)
226
+ this might just be `nginx`.
227
+
228
+ Edit and save the value of `ingressClassName:` in `github-webhook-ingress.yaml`.
229
+
230
+ 2. Find out your Ingress domain or subdomain name.
231
+
232
+ * On `IKS`, go to `Clusters` select your cluster and then click `Overview`.
233
+ The domain name is listed under `Ingress subdomain`.
234
+
235
+ and create the resource:
236
+
237
+ ````bash
238
+ kubectl apply --filename github-webhook-ingress.yaml
239
+ ````
240
+
241
+ Make sure that you can use the ingress with the `/hooks` path via `https`:
242
+ ````bash
243
+ curl https://<INGRESS_DOMAIN_NAME>/hooks
244
+ ````
245
+
246
+ At this point this should respond this:
247
+ ```json
248
+ {
249
+ "eventListener":"github-pr-eventlistener",
250
+ "namespace":"default",
251
+ "eventListenerUID":"",
252
+ "errorMessage":"Invalid event body format : unexpected end of JSON input"
253
+ }
254
+ ```
255
+
256
+ #### Setup the webhook on GitHub
257
+
258
+ In the GitHub repo go to `Settings` -> `Webhooks` and click `Add Webhook`.
259
+ The fields we need to set are:
260
+ * `Payload URL`: `https://<INGRESS_DOMAIN_NAME>/hooks`
261
+ * `Content type`: application/json
262
+ * `Secret`: XXXXXXX (the secret token from github-interceptor-secret.yaml)
263
+
264
+ Under `SSL verification` select the radio button for `Enable SSL verification`.
265
+ Under `Which events would you like to trigger this webhook?` select
266
+ the radio button for `Let me select individual events.` and thick the checkbox next to
267
+ `Pull requests` and ensure that the rest are unthicked.
268
+
269
+ Click `Add webhook`.
270
+
271
+ If the webhook has been set up correctly, then GitHub sends a ping message.
272
+ Ensure that the ping is received from GitHub, and that it is filtered out so
273
+ a simple ping event does not trigger any `PipelineRun` unnecessarily.
274
+
275
+ ````bash
276
+ eventlistener_pod=$(kubectl get pods -o jsonpath='{range .items[*]}{.metadata.name}{"\n"}{end}' | grep el-github-pr-ruby)
277
+ kubectl logs "${eventlistener_pod}" | grep 'event type ping is not allowed'
278
+ ````
@@ -38,7 +38,7 @@ spec:
38
38
  - ReadWriteOnce
39
39
  resources:
40
40
  requests:
41
- storage: 100Mi
41
+ storage: 200Mi
42
42
  ---
43
43
  apiVersion: triggers.tekton.dev/v1beta1
44
44
  kind: TriggerBinding
@@ -53,6 +53,8 @@ spec:
53
53
  - "sha256:007d2edd515f9cfc8c5c571486aca4fc4a25c903d004decee302961bb8c636ed"
54
54
  # 3.3.1-bookworm
55
55
  - "sha256:5cf0004738f54bd67e4c4316394208ca38a6726eda7a1b0586d95601aad86e5d"
56
+ # 3.4.0-preview1-bookworm
57
+ - "sha256:2690af2a931469abe513b22a083b5ae0b56d4feffc0d3496eb6378723ab203e7"
56
58
  - name: gemfile
57
59
  value:
58
60
  - "./Gemfile"
@@ -217,9 +219,47 @@ spec:
217
219
  workspaces:
218
220
  - name: task-pvc
219
221
  workspace: ruby-tracer-ci-pipeline-pvc
220
- - name: unittest-mongo
222
+ - name: unittest-default-ruby-34
221
223
  runAfter:
222
224
  - unittest-default-ruby-33
225
+ matrix:
226
+ params:
227
+ - name: imageDigest
228
+ value:
229
+ # 3.4.0-preview1-bookworm
230
+ - "sha256:2690af2a931469abe513b22a083b5ae0b56d4feffc0d3496eb6378723ab203e7"
231
+ - name: gemfile
232
+ value:
233
+ - "./gemfiles/cuba_30.gemfile"
234
+ - "./gemfiles/cuba_40.gemfile"
235
+ - "./gemfiles/excon_02.gemfile"
236
+ - "./gemfiles/excon_079.gemfile"
237
+ - "./gemfiles/excon_100.gemfile"
238
+ - "./gemfiles/graphql_10.gemfile"
239
+ - "./gemfiles/graphql_20.gemfile"
240
+ - "./gemfiles/grpc_10.gemfile"
241
+ - "./gemfiles/net_http_01.gemfile"
242
+ - "./gemfiles/rack_20.gemfile"
243
+ - "./gemfiles/rack_30.gemfile"
244
+ - "./gemfiles/rest_client_20.gemfile"
245
+ - "./gemfiles/roda_20.gemfile"
246
+ - "./gemfiles/roda_30.gemfile"
247
+ - "./gemfiles/sinatra_22.gemfile"
248
+ - "./gemfiles/sinatra_30.gemfile"
249
+ - "./gemfiles/sinatra_40.gemfile"
250
+ - "./gemfiles/shoryuken_50.gemfile"
251
+ - "./gemfiles/shoryuken_60.gemfile"
252
+ - name: configuration
253
+ value:
254
+ - "libraries"
255
+ taskRef:
256
+ name: ruby-tracer-unittest-default-libraries-task
257
+ workspaces:
258
+ - name: task-pvc
259
+ workspace: ruby-tracer-ci-pipeline-pvc
260
+ - name: unittest-mongo
261
+ runAfter:
262
+ - unittest-default-ruby-34
223
263
  matrix:
224
264
  params:
225
265
  - name: imageDigest
@@ -232,6 +272,8 @@ spec:
232
272
  - "sha256:007d2edd515f9cfc8c5c571486aca4fc4a25c903d004decee302961bb8c636ed"
233
273
  # 3.3.1-bookworm
234
274
  - "sha256:5cf0004738f54bd67e4c4316394208ca38a6726eda7a1b0586d95601aad86e5d"
275
+ # 3.4.0-preview1-bookworm
276
+ - "sha256:2690af2a931469abe513b22a083b5ae0b56d4feffc0d3496eb6378723ab203e7"
235
277
  - name: gemfile
236
278
  value:
237
279
  - "./gemfiles/mongo_216.gemfile"
@@ -256,6 +298,8 @@ spec:
256
298
  - "sha256:007d2edd515f9cfc8c5c571486aca4fc4a25c903d004decee302961bb8c636ed"
257
299
  # 3.3.1-bookworm
258
300
  - "sha256:5cf0004738f54bd67e4c4316394208ca38a6726eda7a1b0586d95601aad86e5d"
301
+ # 3.4.0-preview1-bookworm
302
+ - "sha256:2690af2a931469abe513b22a083b5ae0b56d4feffc0d3496eb6378723ab203e7"
259
303
  - name: gemfile
260
304
  value:
261
305
  - "./gemfiles/dalli_20.gemfile"
@@ -281,6 +325,8 @@ spec:
281
325
  - "sha256:007d2edd515f9cfc8c5c571486aca4fc4a25c903d004decee302961bb8c636ed"
282
326
  # 3.3.1-bookworm
283
327
  - "sha256:5cf0004738f54bd67e4c4316394208ca38a6726eda7a1b0586d95601aad86e5d"
328
+ # 3.4.0-preview1-bookworm
329
+ - "sha256:2690af2a931469abe513b22a083b5ae0b56d4feffc0d3496eb6378723ab203e7"
284
330
  - name: gemfile
285
331
  value:
286
332
  - "./gemfiles/aws_30.gemfile"
@@ -346,9 +392,35 @@ spec:
346
392
  workspaces:
347
393
  - name: task-pvc
348
394
  workspace: ruby-tracer-ci-pipeline-pvc
349
- - name: unittest-rails-sqlite3
395
+ - name: unittest-redis-ruby-34
350
396
  runAfter:
351
397
  - unittest-redis-ruby-32-33
398
+ matrix:
399
+ params:
400
+ - name: imageDigest
401
+ value:
402
+ # 3.4.0-preview1-bookworm
403
+ - "sha256:2690af2a931469abe513b22a083b5ae0b56d4feffc0d3496eb6378723ab203e7"
404
+ - name: gemfile
405
+ value:
406
+ - "./gemfiles/redis_40.gemfile"
407
+ - "./gemfiles/redis_50.gemfile"
408
+ - "./gemfiles/redis_51.gemfile"
409
+ - "./gemfiles/resque_122.gemfile"
410
+ - "./gemfiles/resque_20.gemfile"
411
+ - "./gemfiles/sidekiq_42.gemfile"
412
+ - "./gemfiles/sidekiq_50.gemfile"
413
+ - "./gemfiles/sidekiq_60.gemfile"
414
+ - "./gemfiles/sidekiq_65.gemfile"
415
+ - "./gemfiles/sidekiq_70.gemfile"
416
+ taskRef:
417
+ name: ruby-tracer-unittest-redis-libraries-task
418
+ workspaces:
419
+ - name: task-pvc
420
+ workspace: ruby-tracer-ci-pipeline-pvc
421
+ - name: unittest-rails-sqlite3
422
+ runAfter:
423
+ - unittest-redis-ruby-34
352
424
  matrix:
353
425
  params:
354
426
  - name: imageDigest
@@ -361,6 +433,8 @@ spec:
361
433
  - "sha256:007d2edd515f9cfc8c5c571486aca4fc4a25c903d004decee302961bb8c636ed"
362
434
  # 3.3.1-bookworm
363
435
  - "sha256:5cf0004738f54bd67e4c4316394208ca38a6726eda7a1b0586d95601aad86e5d"
436
+ # 3.4.0-preview1-bookworm
437
+ - "sha256:2690af2a931469abe513b22a083b5ae0b56d4feffc0d3496eb6378723ab203e7"
364
438
  - name: gemfile
365
439
  value:
366
440
  - "./gemfiles/rails_61.gemfile"
@@ -386,6 +460,8 @@ spec:
386
460
  - "sha256:007d2edd515f9cfc8c5c571486aca4fc4a25c903d004decee302961bb8c636ed"
387
461
  # 3.3.1-bookworm
388
462
  - "sha256:5cf0004738f54bd67e4c4316394208ca38a6726eda7a1b0586d95601aad86e5d"
463
+ # 3.4.0-preview1-bookworm
464
+ - "sha256:2690af2a931469abe513b22a083b5ae0b56d4feffc0d3496eb6378723ab203e7"
389
465
  - name: gemfile
390
466
  value:
391
467
  - "./gemfiles/rails_61.gemfile"
@@ -411,6 +487,8 @@ spec:
411
487
  - "sha256:007d2edd515f9cfc8c5c571486aca4fc4a25c903d004decee302961bb8c636ed"
412
488
  # 3.3.1-bookworm
413
489
  - "sha256:5cf0004738f54bd67e4c4316394208ca38a6726eda7a1b0586d95601aad86e5d"
490
+ # 3.4.0-preview1-bookworm
491
+ - "sha256:2690af2a931469abe513b22a083b5ae0b56d4feffc0d3496eb6378723ab203e7"
414
492
  - name: gemfile
415
493
  value:
416
494
  - "./gemfiles/rails_61.gemfile"
@@ -421,3 +499,19 @@ spec:
421
499
  workspaces:
422
500
  - name: task-pvc
423
501
  workspace: ruby-tracer-ci-pipeline-pvc
502
+ - name: generate-currency-report
503
+ runAfter:
504
+ - unittest-rails-postgres
505
+ taskRef:
506
+ name: ruby-generate-currency-report-task
507
+ workspaces:
508
+ - name: task-pvc
509
+ workspace: ruby-tracer-ci-pipeline-pvc
510
+ - name: upload-currency-report
511
+ runAfter:
512
+ - generate-currency-report
513
+ taskRef:
514
+ name: ruby-upload-currency-report-task
515
+ workspaces:
516
+ - name: task-pvc
517
+ workspace: ruby-tracer-ci-pipeline-pvc
@@ -7,7 +7,7 @@ spec:
7
7
  pipeline: "2h"
8
8
  params:
9
9
  - name: revision
10
- value: "tekton"
10
+ value: "master"
11
11
  pipelineRef:
12
12
  name: ruby-tracer-ci-pipeline
13
13
  workspaces:
@@ -18,4 +18,4 @@ spec:
18
18
  - ReadWriteOnce
19
19
  resources:
20
20
  requests:
21
- storage: 100Mi
21
+ storage: 200Mi
@@ -69,6 +69,10 @@ spec:
69
69
  # 3.3.1-bookworm
70
70
  image: ruby@sha256:5cf0004738f54bd67e4c4316394208ca38a6726eda7a1b0586d95601aad86e5d
71
71
  command: ["sh", "-c", "'true'"]
72
+ - name: prepuller-34
73
+ # 3.4.0-preview1-bookworm
74
+ image: ruby@sha256:2690af2a931469abe513b22a083b5ae0b56d4feffc0d3496eb6378723ab203e7
75
+ command: ["sh", "-c", "'true'"]
72
76
  # Use the pause container to ensure the Pod goes into a `Running` phase
73
77
  # but doesn't take up resource on the cluster
74
78
  containers:
@@ -21,7 +21,7 @@ fi
21
21
 
22
22
  case "${TEST_CONFIGURATION}" in
23
23
  libraries)
24
- export COVERAGE_PATH="cov_$(basename ${BUNDLE_GEMFILE%.gemfile})_ruby_${RUBY_VERSION}"
24
+ export TEST_SETUP="$(basename ${BUNDLE_GEMFILE%.gemfile})_ruby_${RUBY_VERSION}"
25
25
  export APPRAISAL_INITIALIZED=1 ;;
26
26
  rails)
27
27
  if [[ -z "${DATABASE_URL}" ]]; then
@@ -31,23 +31,36 @@ rails)
31
31
  else
32
32
  echo "DATABASE_URL is '${DATABASE_URL}'"
33
33
  fi
34
- export COVERAGE_PATH="cov_$(basename ${BUNDLE_GEMFILE%.gemfile})_${DATABASE_URL%:[:/]*}_ruby_${RUBY_VERSION}"
34
+ export TEST_SETUP="$(basename ${BUNDLE_GEMFILE%.gemfile})_${DATABASE_URL%:[:/]*}_ruby_${RUBY_VERSION}"
35
35
  export APPRAISAL_INITIALIZED=1 ;;
36
36
  core)
37
- export COVERAGE_PATH="cov_core_ruby_${RUBY_VERSION}" ;;
37
+ export TEST_SETUP="core_ruby_${RUBY_VERSION}" ;;
38
38
  lint)
39
- unset APPRAISAL_INITIALIZED ;;
39
+ export TEST_SETUP="lint_ruby_${RUBY_VERSION}" ;;
40
40
  *)
41
41
  echo "ERROR \$TEST_CONFIGURATION='${TEST_CONFIGURATION}' is unsupported " \
42
42
  "not in (libraries|rails|core|lint)" >&2
43
43
  exit 5 ;;
44
44
  esac
45
45
 
46
+ export COVERAGE_PATH="cov_${TEST_SETUP}"
47
+ export DEPENDENCY_PATH="dep_${TEST_SETUP}"
48
+
46
49
  echo -n "Configuration is '${TEST_CONFIGURATION}' on Ruby ${RUBY_VERSION} "
47
50
  echo "with dependencies in '${BUNDLE_GEMFILE}'"
48
51
 
52
+ # The gemfiles folder is under the tekton shared workspace
53
+ # but we have to prevent the sharing, and the concurrent writing
54
+ # of the gemfiles/*.lock files
55
+ # so here we create a container-local, non-shared copy, of the sources and use that.
56
+ cp --recursive ../ruby-sensor/ /tmp/
57
+ pushd /tmp/ruby-sensor/
58
+
49
59
  # Update RubyGems
50
- gem update --system > /dev/null
60
+ while ! gem update --system > /dev/null; do
61
+ echo "Updating Gem with 'gem update --system' failed, retrying in a minute"
62
+ sleep 60
63
+ done
51
64
  echo "Gem version $(gem --version)"
52
65
 
53
66
  # Configure Bundler
@@ -55,7 +68,10 @@ bundler --version
55
68
  bundle config set path '/tmp/vendor/bundle'
56
69
 
57
70
  # Install Dependencies
58
- bundle check || bundle install
71
+ while ! (bundle check || bundle install) | tee "${DEPENDENCY_PATH}"; do
72
+ echo "Bundle install failed, retrying in a minute"
73
+ sleep 60
74
+ done
59
75
 
60
76
  # Run tests
61
77
  if [[ "${TEST_CONFIGURATION}" = "lint" ]]; then
@@ -63,4 +79,9 @@ if [[ "${TEST_CONFIGURATION}" = "lint" ]]; then
63
79
  else
64
80
  mkdir --parents "${COVERAGE_PATH}/_junit"
65
81
  bundle exec rake
82
+ cp --recursive "${COVERAGE_PATH}" "${OLDPWD}/"
66
83
  fi
84
+
85
+ # Put back the dependency insallation results to the shared workspace
86
+ cp --recursive "${DEPENDENCY_PATH}" "${OLDPWD}/"
87
+ popd
@@ -36,7 +36,7 @@ spec:
36
36
  - ReadWriteOnce
37
37
  resources:
38
38
  requests:
39
- storage: 100Mi
39
+ storage: 200Mi
40
40
  ---
41
41
  apiVersion: triggers.tekton.dev/v1beta1
42
42
  kind: TriggerBinding
data/.tekton/task.yaml CHANGED
@@ -291,3 +291,75 @@ spec:
291
291
  workingDir: /workspace/ruby-sensor/
292
292
  command:
293
293
  - /workspace/ruby-sensor/.tekton/run_unittests.sh
294
+ ---
295
+ apiVersion: tekton.dev/v1
296
+ kind: Task
297
+ metadata:
298
+ name: ruby-generate-currency-report-task
299
+ spec:
300
+ workspaces:
301
+ - name: task-pvc
302
+ mountPath: /workspace
303
+ steps:
304
+ - name: generate-currency-report
305
+ # 3.10.13-bookworm
306
+ image: python@sha256:c970ff53939772f47b0672e380328afb50d8fd1c0568ed4f82c22effc54244fc
307
+ script: |
308
+ #!/usr/bin/env bash
309
+
310
+ cd /workspace/ruby-sensor/.tekton/.currency
311
+
312
+ python -m venv /tmp/venv
313
+ source /tmp/venv/bin/activate
314
+ pip install -r resources/requirements.txt
315
+
316
+ python scripts/generate_report.py
317
+ if [ $? -ne 0 ]; then
318
+ echo "Error occured while generating the ruby tracer currency report." >&2
319
+ exit 1
320
+ fi
321
+ cat docs/report.md
322
+ ---
323
+ apiVersion: tekton.dev/v1
324
+ kind: Task
325
+ metadata:
326
+ name: ruby-upload-currency-report-task
327
+ spec:
328
+ params:
329
+ - name: github-token-secret
330
+ default: instanacd-github-api-token
331
+ workspaces:
332
+ - name: task-pvc
333
+ mountPath: /workspace
334
+ steps:
335
+ - name: upload-currency-report
336
+ # alpine/git:2.43.0
337
+ image: alpine/git@sha256:6ff4de047dcc8f0c7d75d2efff63fbc189e87d2f458305f2cc8f165ff83309cf
338
+ env:
339
+ - name: GH_ENTERPRISE_TOKEN
340
+ valueFrom:
341
+ secretKeyRef:
342
+ name: $(params.github-token-secret)
343
+ key: "GH_ENTERPRISE_TOKEN"
344
+ script: |
345
+ #!/bin/sh
346
+
347
+ cd /workspace
348
+ git clone https://oauth2:$GH_ENTERPRISE_TOKEN@github.ibm.com/instana/tracer-reports.git
349
+
350
+ if [ $? -ne 0 ]; then
351
+ echo "The attempt to clone the tracer-reports repository failed, preventing the upload of ruby tracer currency report." >&2
352
+ exit 1
353
+ fi
354
+
355
+ cd tracer-reports
356
+
357
+ cp ../ruby-sensor/.tekton/.currency/docs/report.md ./automated/currency/ruby/report.md
358
+
359
+ git config user.name "Instanacd PAT for GitHub Enterprise"
360
+ git config user.email instana.ibm.github.enterprise@ibm.com
361
+
362
+ git add .
363
+
364
+ git commit -m "chore: Updated ruby currency report"
365
+ git push origin main
@@ -11,6 +11,7 @@ gem "puma"
11
11
  gem "rack-test"
12
12
  gem "simplecov", "~> 0.21.2"
13
13
  gem "mail", ">= 2.8.1"
14
+ gem "mutex_m" # mutex_m is not part of the default gems since Ruby 3.4.0
14
15
  gem "rails", ">= 6.1", "< 7.0"
15
16
  gem "mysql2", "0.5.5"
16
17
  gem "pg"
@@ -8,6 +8,7 @@ gem "puma"
8
8
  gem "rack-test"
9
9
  gem "simplecov", "~> 0.21.2"
10
10
  gem "mail", ">= 2.8.1"
11
+ gem "mutex_m" # mutex_m is not part of the default gems since Ruby 3.4.0
11
12
  gem "rails", "7.0.3"
12
13
  gem "mysql2", "0.5.5"
13
14
  gem "pg"
@@ -8,6 +8,7 @@ gem "puma"
8
8
  gem "rack-test"
9
9
  gem "simplecov", "~> 0.21.2"
10
10
  gem "mail", ">= 2.8.1"
11
+ gem "mutex_m" # mutex_m is not part of the default gems since Ruby 3.4.0
11
12
  gem "rails", ">= 7.1"
12
13
  gem "mysql2", "0.5.5"
13
14
  gem "pg"
@@ -0,0 +1,16 @@
1
+ # This file was generated by Appraisal
2
+
3
+ # (c) Copyright IBM Corp. 2024
4
+
5
+ source "https://rubygems.org"
6
+
7
+ gem "minitest-reporters"
8
+ gem "webmock"
9
+ gem "puma"
10
+ gem "rack-test"
11
+ gem "simplecov", "~> 0.21.2"
12
+ gem "sequel", "~> 5.60"
13
+ gem "sqlite3", "~> 1.4"
14
+ gem "mysql2", "0.5.5"
15
+
16
+ gemspec path: "../"