instana 1.215.0 → 1.216.0

Sign up to get free protection for your applications and to get access to all the features.
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: "../"