elastic-apm 2.9.1 → 2.10.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/.ci/.jenkins_codecov.yml +5 -0
  3. data/.ci/.jenkins_exclude.yml +9 -19
  4. data/.ci/.jenkins_framework.yml +1 -4
  5. data/.ci/.jenkins_master_framework.yml +3 -0
  6. data/.ci/Jenkinsfile +43 -118
  7. data/.ci/downstreamTests.groovy +59 -30
  8. data/.ci/jobs/apm-agent-ruby-downstream.yml +31 -0
  9. data/.ci/jobs/apm-agent-ruby-mbp.yml +34 -0
  10. data/.ci/jobs/defaults.yml +1 -36
  11. data/.pre-commit-config.yaml +22 -0
  12. data/.rspec +0 -1
  13. data/.rubocop.yml +3 -3
  14. data/CHANGELOG.md +12 -0
  15. data/docs/api.asciidoc +2 -2
  16. data/docs/configuration.asciidoc +37 -1
  17. data/docs/metrics.asciidoc +77 -6
  18. data/lib/elastic_apm.rb +2 -2
  19. data/lib/elastic_apm/agent.rb +11 -2
  20. data/lib/elastic_apm/central_config.rb +141 -0
  21. data/lib/elastic_apm/central_config/cache_control.rb +34 -0
  22. data/lib/elastic_apm/config.rb +152 -338
  23. data/lib/elastic_apm/config/bytes.rb +25 -0
  24. data/lib/elastic_apm/config/duration.rb +6 -8
  25. data/lib/elastic_apm/config/options.rb +134 -0
  26. data/lib/elastic_apm/config/regexp_list.rb +13 -0
  27. data/lib/elastic_apm/metadata.rb +2 -1
  28. data/lib/elastic_apm/metrics.rb +2 -1
  29. data/lib/elastic_apm/metrics/vm.rb +57 -0
  30. data/lib/elastic_apm/normalizers/action_view.rb +1 -1
  31. data/lib/elastic_apm/railtie.rb +10 -5
  32. data/lib/elastic_apm/spies/mongo.rb +13 -2
  33. data/lib/elastic_apm/stacktrace_builder.rb +2 -2
  34. data/lib/elastic_apm/transport/connection.rb +2 -0
  35. data/lib/elastic_apm/transport/serializers/metadata_serializer.rb +6 -1
  36. data/lib/elastic_apm/version.rb +1 -1
  37. metadata +11 -3
  38. data/lib/elastic_apm/config/size.rb +0 -28
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 47f1adcea0273ee666706ddea65216aa0d8ba4d15acb14be64a425b77e1c188c
4
- data.tar.gz: 7aa7372590f8c43585681cb84464af8bf984557699c43c09a4614f71e0cfc8b2
3
+ metadata.gz: eb99c67f61f3f3bc30f7fb7bc64accea3725295db3d7bf90c18f2ce33d183e1f
4
+ data.tar.gz: 1a45da759179fa4b284a14b580f9f318fe27d4d4ba60fc87d5360acbf1e5ab94
5
5
  SHA512:
6
- metadata.gz: d4afe772c0f242885882347f6c5ed3b6e319c533ab24f88e52ab3e5c68be16c33243529a642ff3644936218808b7163e7c60536c3632aa11c28d8072efc3ca21
7
- data.tar.gz: 49a6baa392426cb6f51b1327b23fc0f0d7257685c26737e222613595fb68be80b44f00b39d309535b918315e7138ba48ae9100837a92160c62265bafa2140764
6
+ metadata.gz: 731f900b1466cf7f017fbdf747c969e7748cb9fdedf4f9a2dd748d5dbf7da31a3ce96a249ecab002bf62c9961e9c9336b983f570f51775f352b8dba43f5a04cb
7
+ data.tar.gz: 52518d1fe04e4def36990303cee09643580dee8313ae2809f4e7f68fbc6783ba6028459987c291f153e29a5181ec3a289409d5bcc5fb138fbfae242b4f07747d
@@ -0,0 +1,5 @@
1
+ ---
2
+ # Tuple of ruby version and frameworks which are in charge to send data to codecov.
3
+ # # is the separator between the ruby version and the framework.
4
+ ENABLED:
5
+ - ruby:2.6#rails-6.0
@@ -13,6 +13,15 @@ exclude:
13
13
  - RUBY_VERSION: docker.elastic.co/observability-ci/jruby:9.1-7-jdk
14
14
  FRAMEWORK: rails-4.2
15
15
 
16
+ - RUBY_VERSION: ruby:2.4
17
+ FRAMEWORK: rails-6.0
18
+ - RUBY_VERSION: ruby:2.3
19
+ FRAMEWORK: rails-6.0
20
+ - RUBY_VERSION: jruby:9.1
21
+ FRAMEWORK: rails-6.0
22
+ - RUBY_VERSION: docker.elastic.co/observability-ci/jruby:9.1-7-jdk
23
+ FRAMEWORK: rails-6.0
24
+
16
25
  # Only test master on newest ruby
17
26
  - RUBY_VERSION: ruby:2.5
18
27
  FRAMEWORK: rails-master
@@ -52,22 +61,3 @@ exclude:
52
61
  - RUBY_VERSION: docker.elastic.co/observability-ci/jruby:9.1-7-jdk
53
62
  FRAMEWORK: sinatra-master
54
63
 
55
- # Rails 6 beta
56
- - RUBY_VERSION: ruby:2.5
57
- FRAMEWORK: rails-6.0-rc1
58
- - RUBY_VERSION: ruby:2.4
59
- FRAMEWORK: rails-6.0-rc1
60
- - RUBY_VERSION: ruby:2.3
61
- FRAMEWORK: rails-6.0-rc1
62
- - RUBY_VERSION: jruby:9.2
63
- FRAMEWORK: rails-6.0-rc1
64
- - RUBY_VERSION: jruby:9.1
65
- FRAMEWORK: rails-6.0-rc1
66
- - RUBY_VERSION: docker.elastic.co/observability-ci/jruby:9.2-12-jdk
67
- FRAMEWORK: rails-6.0-rc1
68
- - RUBY_VERSION: docker.elastic.co/observability-ci/jruby:9.2-11-jdk
69
- FRAMEWORK: rails-6.0-rc1
70
- - RUBY_VERSION: docker.elastic.co/observability-ci/jruby:9.2-8-jdk
71
- FRAMEWORK: rails-6.0-rc1
72
- - RUBY_VERSION: docker.elastic.co/observability-ci/jruby:9.1-7-jdk
73
- FRAMEWORK: rails-6.0-rc1
@@ -1,5 +1,5 @@
1
1
  FRAMEWORK:
2
- - rails-6.0-rc1
2
+ - rails-6.0
3
3
  - rails-5.2
4
4
  - rails-5.1
5
5
  - rails-5.0
@@ -7,6 +7,3 @@ FRAMEWORK:
7
7
 
8
8
  - sinatra-2.0
9
9
  - sinatra-1.4
10
-
11
- - rails-master
12
- - sinatra-master
@@ -0,0 +1,3 @@
1
+ FRAMEWORK:
2
+ - rails-master
3
+ - sinatra-master
@@ -11,11 +11,11 @@ it is need as field to store the results of the tests.
11
11
  @Field def rubyTasksGen
12
12
 
13
13
  pipeline {
14
- agent any
14
+ agent { label 'linux && immutable' }
15
15
  environment {
16
16
  REPO = 'apm-agent-ruby'
17
17
  BASE_DIR = "src/github.com/elastic/${env.REPO}"
18
- PIPELINE_LOG_LEVEL='INFO'
18
+ PIPELINE_LOG_LEVEL='DEBUG'
19
19
  NOTIFY_TO = credentials('notify-to')
20
20
  JOB_GCS_BUCKET = credentials('gcs-bucket')
21
21
  CODECOV_SECRET = 'secret/apm-team/ci/apm-agent-ruby-codecov'
@@ -39,7 +39,6 @@ pipeline {
39
39
  }
40
40
  parameters {
41
41
  booleanParam(name: 'Run_As_Master_Branch', defaultValue: false, description: 'Allow to run any steps on a PR, some steps normally only run on master branch.')
42
- booleanParam(name: 'doc_ci', defaultValue: true, description: 'Enable build docs.')
43
42
  booleanParam(name: 'bench_ci', defaultValue: true, description: 'Enable run benchmarks.')
44
43
  }
45
44
  stages {
@@ -47,14 +46,33 @@ pipeline {
47
46
  Checkout the code and stash it, to use it on other stages.
48
47
  */
49
48
  stage('Checkout') {
50
- agent { label 'master || immutable' }
49
+ agent { label 'immutable' }
51
50
  options { skipDefaultCheckout() }
52
51
  steps {
53
52
  deleteDir()
54
- gitCheckout(basedir: "${BASE_DIR}")
53
+ gitCheckout(basedir: "${BASE_DIR}", githubNotifyFirstTimeContributor: true)
55
54
  stash allowEmpty: true, name: 'source', useDefaultExcludes: false
56
55
  }
57
56
  }
57
+ stage('Sanity checks') {
58
+ agent { label 'linux && immutable && docker' }
59
+ options { skipDefaultCheckout() }
60
+ environment {
61
+ HOME = "${env.WORKSPACE}"
62
+ PATH = "${env.WORKSPACE}/bin:${env.PATH}"
63
+ }
64
+ steps {
65
+ withGithubNotify(context: 'Sanity checks') {
66
+ deleteDir()
67
+ unstash 'source'
68
+ dir(BASE_DIR) {
69
+ catchError(buildResult: 'SUCCESS', stageResult: 'UNSTABLE', message: 'Sanity checks failed but keep running the build') {
70
+ preCommit(commit: "${GIT_BASE_COMMIT}", junit: true)
71
+ }
72
+ }
73
+ }
74
+ }
75
+ }
58
76
  /**
59
77
  Execute unit tests.
60
78
  */
@@ -67,18 +85,12 @@ pipeline {
67
85
  unstash "source"
68
86
  dir("${BASE_DIR}"){
69
87
  script {
70
- rubyTasksGen = new RubyParallelTaskGenerator(
71
- xKey: 'RUBY_VERSION',
72
- yKey: 'FRAMEWORK',
73
- xFile: ".ci/.jenkins_ruby.yml",
74
- yFile: ".ci/.jenkins_framework.yml",
75
- exclusionFile: ".ci/.jenkins_exclude.yml",
76
- tag: "Ruby",
77
- name: "Ruby",
78
- steps: this
79
- )
80
- def mapPatallelTasks = rubyTasksGen.generateParallelTests()
81
- parallel(mapPatallelTasks)
88
+ def ruby = readYaml(file: '.ci/.jenkins_ruby.yml')
89
+ def testTasks = [:]
90
+ ruby['RUBY_VERSION'].each{ rubyVersion ->
91
+ testTasks[rubyVersion] = { runJob(rubyVersion) }
92
+ }
93
+ parallel(testTasks)
82
94
  }
83
95
  }
84
96
  }
@@ -136,31 +148,6 @@ pipeline {
136
148
  }
137
149
  }
138
150
  }
139
- /**
140
- Build the documentation.
141
- */
142
- stage('Documentation') {
143
- agent { label 'linux && immutable' }
144
- options { skipDefaultCheckout() }
145
- when {
146
- beforeAgent true
147
- allOf {
148
- anyOf {
149
- branch 'master'
150
- branch "\\d+\\.\\d+"
151
- branch "v\\d?"
152
- tag "v\\d+\\.\\d+\\.\\d+*"
153
- expression { return params.Run_As_Master_Branch }
154
- }
155
- expression { return params.doc_ci }
156
- }
157
- }
158
- steps {
159
- deleteDir()
160
- unstash 'source'
161
- buildDocs(docsDir: "${BASE_DIR}/docs", archive: true)
162
- }
163
- }
164
151
  stage('Integration Tests') {
165
152
  agent none
166
153
  when {
@@ -176,93 +163,21 @@ pipeline {
176
163
  log(level: 'INFO', text: 'Launching Async ITs')
177
164
  build(job: env.ITS_PIPELINE, propagate: false, wait: false,
178
165
  parameters: [string(name: 'AGENT_INTEGRATION_TEST', value: 'Ruby'),
179
- string(name: 'BUILD_OPTS', value: "--ruby-agent-version ${env.GIT_BASE_COMMIT} --ruby-agent-version-state ${env.GIT_BUILD_CAUSE} --ruby-agent-repo ${env.CHANGE_FORK}/${env.REPO}"),
166
+ string(name: 'BUILD_OPTS', value: "--ruby-agent-version ${env.GIT_BASE_COMMIT} --ruby-agent-version-state ${env.GIT_BUILD_CAUSE} --ruby-agent-repo ${env.CHANGE_FORK?.trim() ?: 'elastic'}/${env.REPO}"),
180
167
  string(name: 'GITHUB_CHECK_NAME', value: env.GITHUB_CHECK_ITS_NAME),
181
168
  string(name: 'GITHUB_CHECK_REPO', value: env.REPO),
182
- string(name: 'GITHUB_CHECK_SHA1', value: env.GIT_BASE_COMMIT)])
169
+ string(name: 'GITHUB_CHECK_SHA1', value: env.GIT_BASE_COMMIT)]
170
+ )
183
171
  githubNotify(context: "${env.GITHUB_CHECK_ITS_NAME}", description: "${env.GITHUB_CHECK_ITS_NAME} ...", status: 'PENDING', targetUrl: "${env.JENKINS_URL}search/?q=${env.ITS_PIPELINE.replaceAll('/','+')}")
184
172
  }
185
173
  }
186
174
  }
187
175
  post {
188
176
  cleanup {
189
- script{
190
- if(rubyTasksGen?.results){
191
- writeJSON(file: 'results.json', json: toJSON(rubyTasksGen.results), pretty: 2)
192
- def mapResults = ["Ruby": rubyTasksGen.results]
193
- def processor = new ResultsProcessor()
194
- processor.processResults(mapResults)
195
- archiveArtifacts allowEmptyArchive: true, artifacts: 'results.json,results.html', defaultExcludes: false
196
- catchError(buildResult: 'SUCCESS') {
197
- def datafile = readFile(file: "results.json")
198
- def json = getVaultSecret(secret: 'secret/apm-team/ci/apm-server-benchmark-cloud')
199
- sendDataToElasticsearch(es: json.data.url, data: datafile, restCall: '/jenkins-builds-test-results/_doc/')
200
- }
201
- }
202
- }
203
- notifyBuildResult()
204
- }
205
- }
206
- }
207
-
208
- /**
209
- Parallel task generator for the integration tests.
210
- */
211
- class RubyParallelTaskGenerator extends DefaultParallelTaskGenerator {
212
-
213
- public RubyParallelTaskGenerator(Map params){
214
- super(params)
215
- }
216
-
217
- /**
218
- build a clousure that launch and agent and execute the corresponding test script,
219
- then store the results.
220
- */
221
- public Closure generateStep(x, y){
222
- return {
223
- steps.sleep steps.randomNumber(min:10, max: 30)
224
- steps.node('linux && immutable'){
225
- // Label is transformed to avoid using the internal docker registry in the x coordinate
226
- // TODO: def label = "${tag}:${x?.drop(x?.lastIndexOf('/')+1)}#${y}"
227
- def label = "${tag}:${x}#${y}"
228
- try {
229
- steps.runScript(label: label, ruby: x, framework: y)
230
- saveResult(x, y, 1)
231
- } catch(e){
232
- saveResult(x, y, 0)
233
- steps.error("${label} tests failed : ${e.toString()}\n")
234
- } finally {
235
- steps.junit(allowEmptyResults: false,
236
- keepLongStdio: true,
237
- testResults: "**/spec/ruby-agent-junit.xml")
238
- steps.codecov(repo: "${steps.env.REPO}", basedir: "${steps.env.BASE_DIR}",
239
- secret: "${steps.env.CODECOV_SECRET}")
240
- }
177
+ notifyBuildResult()
241
178
  }
242
179
  }
243
180
  }
244
- }
245
-
246
- /**
247
- Run tests for a Ruby version and framework version.
248
- */
249
- def runScript(Map params = [:]){
250
- def label = params.label
251
- def ruby = params.ruby
252
- def framework = params.framework
253
- log(level: 'INFO', text: "${label}")
254
- env.HOME = "${env.WORKSPACE}"
255
- env.PATH = "${env.PATH}:${env.WORKSPACE}/bin"
256
- deleteDir()
257
- unstash 'source'
258
- dir("${BASE_DIR}"){
259
- retry(2){
260
- sleep randomNumber(min:10, max: 30)
261
- dockerLogin(secret: "${DOCKER_SECRET}", registry: "${DOCKER_REGISTRY}")
262
- sh("./spec/scripts/spec.sh ${ruby} ${framework}")
263
- }
264
- }
265
- }
266
181
 
267
182
  /**
268
183
  Run benchmarks for a Ruby version, then report the results to the Elasticsearch server.
@@ -300,3 +215,13 @@ def runBenchmark(version){
300
215
  }
301
216
  }
302
217
  }
218
+
219
+ def runJob(rubyVersion){
220
+ build( job: "apm-agent-ruby/apm-agent-ruby-downstream/${env.BRANCH_NAME}",
221
+ parameters: [
222
+ string(name: 'RUBY_VERSION', value: "${rubyVersion}"),
223
+ string(name: 'BRANCH_SPECIFIER', value: "${env.GIT_BASE_COMMIT}")
224
+ ],
225
+ quietPeriod: 15
226
+ )
227
+ }
@@ -11,7 +11,7 @@ it is need as field to store the results of the tests.
11
11
  @Field def rubyTasksGen
12
12
 
13
13
  pipeline {
14
- agent any
14
+ agent { label 'linux && immutable' }
15
15
  environment {
16
16
  REPO="git@github.com:elastic/apm-agent-ruby.git"
17
17
  BASE_DIR="src/github.com/elastic/apm-agent-ruby"
@@ -25,7 +25,7 @@ pipeline {
25
25
  }
26
26
  options {
27
27
  timeout(time: 2, unit: 'HOURS')
28
- buildDiscarder(logRotator(numToKeepStr: '20', artifactNumToKeepStr: '20', daysToKeepStr: '30'))
28
+ buildDiscarder(logRotator(numToKeepStr: '300', artifactNumToKeepStr: '20', daysToKeepStr: '30'))
29
29
  timestamps()
30
30
  ansiColor('xterm')
31
31
  disableResume()
@@ -36,49 +36,36 @@ pipeline {
36
36
  parameters {
37
37
  string(name: 'RUBY_VERSION', defaultValue: "ruby:2.6", description: "Ruby version to test")
38
38
  string(name: 'BRANCH_SPECIFIER', defaultValue: "master", description: "Git branch/tag to use")
39
- string(name: 'CHANGE_TARGET', defaultValue: "master", description: "Git branch/tag to merge before building")
40
39
  }
41
40
  stages {
42
41
  /**
43
42
  Checkout the code and stash it, to use it on other stages.
44
43
  */
45
44
  stage('Checkout') {
46
- agent { label 'master || immutable' }
45
+ agent { label 'immutable' }
47
46
  options { skipDefaultCheckout() }
48
47
  steps {
49
48
  deleteDir()
50
- gitCheckout(basedir: "${BASE_DIR}",
49
+ gitCheckout(basedir: "${BASE_DIR}",
51
50
  branch: "${params.BRANCH_SPECIFIER}",
52
51
  repo: "${REPO}",
53
- credentialsId: "${JOB_GIT_CREDENTIALS}",
54
- mergeTarget: "${params.CHANGE_TARGET}",
55
- reference: '/var/lib/jenkins/apm-agent-ruby.git')
52
+ credentialsId: "${JOB_GIT_CREDENTIALS}")
56
53
  stash allowEmpty: true, name: 'source', useDefaultExcludes: false
57
54
  }
58
55
  }
59
- /**
60
- Execute unit tests.
61
- */
62
56
  stage('Test') {
63
57
  agent { label 'linux && immutable' }
64
58
  options { skipDefaultCheckout() }
65
59
  steps {
66
- deleteDir()
67
- unstash "source"
68
- dir("${BASE_DIR}"){
69
- script {
70
- rubyTasksGen = new RubyParallelTaskGenerator(
71
- xVersions: [ "${params.RUBY_VERSION}" ],
72
- yKey: 'FRAMEWORK',
73
- yFile: ".ci/.jenkins_framework.yml",
74
- exclusionFile: ".ci/.jenkins_exclude.yml",
75
- tag: "Ruby",
76
- name: "Ruby",
77
- steps: this
78
- )
79
- def mapPatallelTasks = rubyTasksGen.generateParallelTests()
80
- parallel(mapPatallelTasks)
81
- }
60
+ runTests('.ci/.jenkins_framework.yml')
61
+ }
62
+ }
63
+ stage('Master Test') {
64
+ agent { label 'linux && immutable' }
65
+ options { skipDefaultCheckout() }
66
+ steps {
67
+ catchError(buildResult: 'SUCCESS', stageResult: 'UNSTABLE', message: "The tests for the master framework have failed. Let's warn instead.") {
68
+ runTests('.ci/.jenkins_master_framework.yml')
82
69
  }
83
70
  }
84
71
  }
@@ -92,6 +79,11 @@ pipeline {
92
79
  def processor = new ResultsProcessor()
93
80
  processor.processResults(mapResults)
94
81
  archiveArtifacts allowEmptyArchive: true, artifacts: 'results.json,results.html', defaultExcludes: false
82
+ catchError(buildResult: 'SUCCESS') {
83
+ def datafile = readFile(file: "results.json")
84
+ def json = getVaultSecret(secret: 'secret/apm-team/ci/jenkins-stats-cloud')
85
+ sendDataToElasticsearch(es: json.data.url, data: datafile, restCall: '/jenkins-builds-ruby-test-results/_doc/')
86
+ }
95
87
  }
96
88
  }
97
89
  notifyBuildResult()
@@ -126,11 +118,13 @@ class RubyParallelTaskGenerator extends DefaultParallelTaskGenerator {
126
118
  saveResult(x, y, 0)
127
119
  steps.error("${label} tests failed : ${e.toString()}\n")
128
120
  } finally {
129
- steps.junit(allowEmptyResults: false,
121
+ steps.junit(allowEmptyResults: true,
130
122
  keepLongStdio: true,
131
123
  testResults: "**/spec/ruby-agent-junit.xml")
132
- steps.codecov(repo: "${steps.env.REPO}", basedir: "${steps.env.BASE_DIR}",
133
- secret: "${steps.env.CODECOV_SECRET}")
124
+ if (steps.isCodecovEnabled(x, y)) {
125
+ steps.codecov(repo: "${steps.env.REPO}", basedir: "${steps.env.BASE_DIR}",
126
+ secret: "${steps.env.CODECOV_SECRET}")
127
+ }
134
128
  }
135
129
  }
136
130
  }
@@ -157,3 +151,38 @@ def runScript(Map params = [:]){
157
151
  }
158
152
  }
159
153
  }
154
+
155
+ /**
156
+ * Whether the given ruby version and framework are in charge of sending the
157
+ * codecov results. It does require the workspace.
158
+ */
159
+ def isCodecovEnabled(ruby, framework){
160
+ dir(BASE_DIR){
161
+ def codecovVersions = readYaml(file: '.ci/.jenkins_codecov.yml')
162
+ return codecovVersions['ENABLED'].any { it.trim() == "${ruby?.trim()}#${framework?.trim()}" }
163
+ }
164
+ }
165
+
166
+ /**
167
+ Run all the tests for the given ruby version and file with the frameworks to test
168
+ */
169
+ def runTests(frameworkFile) {
170
+ deleteDir()
171
+ unstash "source"
172
+ dir("${BASE_DIR}"){
173
+ script {
174
+ rubyTasksGen = new RubyParallelTaskGenerator(
175
+ xVersions: [ "${params.RUBY_VERSION}" ],
176
+ xKey: 'RUBY_VERSION',
177
+ yKey: 'FRAMEWORK',
178
+ yFile: frameworkFile,
179
+ exclusionFile: '.ci/.jenkins_exclude.yml',
180
+ tag: 'Ruby',
181
+ name: 'Ruby',
182
+ steps: this
183
+ )
184
+ def mapPatallelTasks = rubyTasksGen.generateParallelTests()
185
+ parallel(mapPatallelTasks)
186
+ }
187
+ }
188
+ }
@@ -4,3 +4,34 @@
4
4
  display-name: APM Agent Ruby Downstream
5
5
  description: APM Agent Ruby Downstream .
6
6
  script-path: .ci/downstreamTests.groovy
7
+ scm:
8
+ - github:
9
+ branch-discovery: no-pr
10
+ discover-pr-forks-strategy: merge-current
11
+ discover-pr-forks-trust: permission
12
+ discover-pr-origin: merge-current
13
+ discover-tags: true
14
+ notification-context: 'apm-ci/downstream'
15
+ property-strategies:
16
+ all-branches:
17
+ - suppress-scm-triggering: true
18
+ repo: apm-agent-ruby
19
+ repo-owner: elastic
20
+ credentials-id: 2a9602aa-ab9f-4e52-baf3-b71ca88469c7-UserAndToken
21
+ ssh-checkout:
22
+ credentials: f6c7695a-671e-4f4f-a331-acdce44ff9ba
23
+ clean:
24
+ after: true
25
+ before: true
26
+ prune: true
27
+ shallow-clone: true
28
+ depth: 3
29
+ do-not-fetch-tags: true
30
+ submodule:
31
+ disable: false
32
+ recursive: true
33
+ parent-credentials: true
34
+ timeout: 100
35
+ timeout: '15'
36
+ use-author: true
37
+ wipe-workspace: 'True'