Skip to content
Permalink

Comparing changes

Choose two branches to see what’s changed or to start a new pull request. If you need to, you can also or learn more about diff comparisons.

Open a pull request

Create a new pull request by comparing changes across two branches. If you need to, you can also . Learn more about diff comparisons here.
base repository: DataDog/dd-trace-go
Failed to load repositories. Confirm that selected base ref is valid, then try again.
Loading
base: v1.49.1
Choose a base ref
...
head repository: DataDog/dd-trace-go
Failed to load repositories. Confirm that selected head ref is valid, then try again.
Loading
compare: v1.50.0
Choose a head ref
Loading
Showing with 8,291 additions and 2,763 deletions.
  1. +0 −1 .github/pull_request_template.md
  2. +1 −1 .github/workflows/appsec.yml
  3. +49 −26 .github/workflows/system-tests.yml
  4. +56 −0 .github/workflows/test-apps.yml
  5. +19 −14 .github/workflows/unit-integration-tests.yml
  6. +11 −1 .gitlab-ci.yml
  7. +1 −8 .gitlab/benchmarks.yml
  8. +9 −2 .gitlab/scripts/run-benchmarks.sh
  9. +26 −0 .gitlab/scripts/run-test-apps.sh
  10. +16 −0 .gitlab/test-apps.yml
  11. +11 −0 .golangci.yml
  12. +7 −5 CONTRIBUTING.md
  13. +12 −6 appsec/appsec.go
  14. +0 −56 checkmilestone.go
  15. +31 −23 contrib/99designs/gqlgen/tracer.go
  16. +8 −0 contrib/README.md
  17. +16 −9 contrib/Shopify/sarama/option.go
  18. +11 −4 contrib/Shopify/sarama/sarama.go
  19. +78 −2 contrib/Shopify/sarama/sarama_test.go
  20. +8 −1 contrib/aws/aws-sdk-go-v2/aws/aws.go
  21. +8 −1 contrib/aws/aws-sdk-go/aws/aws.go
  22. +9 −2 contrib/bradfitz/gomemcache/memcache/memcache.go
  23. +41 −0 contrib/bradfitz/gomemcache/memcache/memcache_test.go
  24. +10 −3 contrib/bradfitz/gomemcache/memcache/option.go
  25. +9 −2 contrib/cloud.google.com/go/pubsub.v1/pubsub.go
  26. +11 −4 contrib/confluentinc/confluent-kafka-go/kafka/kafka.go
  27. +84 −56 contrib/confluentinc/confluent-kafka-go/kafka/kafka_test.go
  28. +20 −12 contrib/confluentinc/confluent-kafka-go/kafka/option.go
  29. +52 −26 contrib/database/sql/conn.go
  30. +70 −0 contrib/database/sql/conn_test.go
  31. +0 −4 contrib/database/sql/internal/dsn.go
  32. +0 −5 contrib/database/sql/internal/dsn_test.go
  33. +8 −8 contrib/database/sql/internal/mockdriver.go
  34. +4 −4 contrib/database/sql/internal/postgres.go
  35. +45 −1 contrib/database/sql/option.go
  36. +3 −3 contrib/database/sql/option_test.go
  37. +13 −7 contrib/database/sql/propagation_test.go
  38. +14 −12 contrib/database/sql/sql.go
  39. +150 −34 contrib/database/sql/sql_test.go
  40. +5 −5 contrib/database/sql/stmt.go
  41. +2 −2 contrib/database/sql/tx.go
  42. +2 −2 contrib/dimfeld/httptreemux.v5/example_test.go
  43. +16 −9 contrib/dimfeld/httptreemux.v5/httptreemux.go
  44. +2 −2 contrib/dimfeld/httptreemux.v5/httptreemux_test.go
  45. +9 −2 contrib/elastic/go-elasticsearch.v6/elastictrace.go
  46. +51 −4 contrib/elastic/go-elasticsearch.v6/elastictrace_v8_test.go
  47. +10 −1 contrib/elastic/go-elasticsearch.v6/option.go
  48. +8 −1 contrib/emicklei/go-restful/restful.go
  49. +8 −1 contrib/garyburd/redigo/redigo.go
  50. +9 −2 contrib/gin-gonic/gin/gintrace.go
  51. +8 −1 contrib/globalsign/mgo/mgo.go
  52. +8 −1 contrib/go-chi/chi.v5/chi.go
  53. +1 −1 contrib/go-chi/chi.v5/example_test.go
  54. +8 −1 contrib/go-chi/chi/chi.go
  55. +1 −1 contrib/go-chi/chi/example_test.go
  56. +8 −1 contrib/go-pg/pg.v10/pg_go.go
  57. +1 −1 contrib/go-pg/pg.v10/pg_go_test.go
  58. +11 −2 contrib/go-redis/redis.v7/redis.go
  59. +19 −5 contrib/go-redis/redis.v7/redis_test.go
  60. +9 −0 contrib/go-redis/redis.v8/example_test.go
  61. +11 −4 contrib/go-redis/redis.v8/redis.go
  62. +19 −5 contrib/go-redis/redis.v8/redis_test.go
  63. +15 −6 contrib/go-redis/redis/redis.go
  64. +18 −2 contrib/go-redis/redis/redis_test.go
  65. +10 −3 contrib/go.mongodb.org/mongo-driver/mongo/mongo.go
  66. +9 −2 contrib/gocql/gocql/gocql.go
  67. +8 −1 contrib/gofiber/fiber.v2/fiber.go
  68. +8 −1 contrib/gomodule/redigo/redigo.go
  69. +8 −1 contrib/google.golang.org/api/api.go
  70. +0 −1 contrib/google.golang.org/api/internal/tree.go
  71. +2 −0 contrib/google.golang.org/grpc.v12/fixtures_test.pb.go
  72. +20 −8 contrib/google.golang.org/grpc.v12/grpc.go
  73. +7 −0 contrib/google.golang.org/grpc.v12/grpc_test.go
  74. +2 −1 contrib/google.golang.org/grpc/appsec.go
  75. +1 −1 contrib/google.golang.org/grpc/appsec_test.go
  76. +3 −3 contrib/google.golang.org/grpc/client.go
  77. +2 −0 contrib/google.golang.org/grpc/fixtures_test.pb.go
  78. +9 −0 contrib/google.golang.org/grpc/grpc.go
  79. +28 −10 contrib/google.golang.org/grpc/grpc_test.go
  80. +33 −21 contrib/google.golang.org/grpc/server.go
  81. +2 −0 contrib/google.golang.org/grpc/stats_client_test.go
  82. +3 −2 contrib/google.golang.org/grpc/stats_server_test.go
  83. +8 −1 contrib/gopkg.in/jinzhu/gorm.v1/gorm.go
  84. +1 −1 contrib/gorilla/mux/example_test.go
  85. +8 −1 contrib/gorilla/mux/mux.go
  86. +1 −1 contrib/gorilla/mux/mux_test.go
  87. +1 −1 contrib/gorm.io/gorm.v1/example_test.go
  88. +16 −1 contrib/gorm.io/gorm.v1/gorm.go
  89. +28 −2 contrib/gorm.io/gorm.v1/gorm_test.go
  90. +11 −4 contrib/graph-gophers/graphql-go/graphql.go
  91. +9 −2 contrib/hashicorp/consul/consul.go
  92. +39 −0 contrib/hashicorp/consul/consul_test.go
  93. +13 −2 contrib/hashicorp/consul/option.go
  94. +2 −2 contrib/hashicorp/vault/example_test.go
  95. +12 −1 contrib/hashicorp/vault/option.go
  96. +10 −0 contrib/hashicorp/vault/vault.go
  97. +49 −0 contrib/hashicorp/vault/vault_test.go
  98. +6 −6 contrib/internal/httptrace/httptrace_test.go
  99. +8 −9 contrib/internal/lists/combinations.go
  100. +30 −0 contrib/internal/namingschematest/kafka.go
  101. +142 −0 contrib/internal/namingschematest/namingschematest.go
  102. +75 −0 contrib/internal/telemetrytest/telemetry_test.go
  103. +8 −1 contrib/jinzhu/gorm/gorm.go
  104. +7 −1 contrib/jmoiron/sqlx/sql.go
  105. +2 −2 contrib/julienschmidt/httprouter/example_test.go
  106. +8 −1 contrib/julienschmidt/httprouter/httprouter.go
  107. +2 −1 contrib/k8s.io/client-go/kubernetes/example_test.go
  108. +8 −1 contrib/k8s.io/client-go/kubernetes/kubernetes.go
  109. +3 −2 contrib/k8s.io/client-go/kubernetes/kubernetes_test.go
  110. +8 −1 contrib/labstack/echo.v4/echotrace.go
  111. +8 −1 contrib/labstack/echo/echotrace.go
  112. +8 −1 contrib/miekg/dns/dns.go
  113. +1 −1 contrib/net/http/example_test.go
  114. +2 −2 contrib/net/http/http.go
  115. +2 −2 contrib/net/http/http_test.go
  116. +16 −4 contrib/net/http/option.go
  117. +3 −2 contrib/net/http/roundtripper.go
  118. +7 −0 contrib/net/http/trace.go
  119. +9 −2 contrib/olivere/elastic/elastictrace.go
  120. +51 −5 contrib/olivere/elastic/elastictrace_test.go
  121. +10 −1 contrib/olivere/elastic/option.go
  122. +11 −4 contrib/segmentio/kafka.go.v0/kafka.go
  123. +113 −71 contrib/segmentio/kafka.go.v0/kafka_test.go
  124. +17 −9 contrib/segmentio/kafka.go.v0/option.go
  125. +7 −0 contrib/sirupsen/logrus/logrus.go
  126. +8 −1 contrib/syndtr/goleveldb/leveldb/leveldb.go
  127. +8 −1 contrib/tidwall/buntdb/buntdb.go
  128. +1 −1 contrib/twitchtv/twirp/example_test.go
  129. +37 −14 contrib/twitchtv/twirp/twirp.go
  130. +19 −1 contrib/twitchtv/twirp/twirp_test.go
  131. +1 −1 contrib/urfave/negroni/example_test.go
  132. +8 −1 contrib/urfave/negroni/negroni.go
  133. +1 −1 contrib/urfave/negroni/option.go
  134. +8 −1 contrib/zenazn/goji.v1/web/goji.go
  135. +16 −2 ddtrace/ddtrace.go
  136. +11 −0 ddtrace/example_test.go
  137. +8 −2 ddtrace/ext/db.go
  138. +34 −0 ddtrace/ext/rpc.go
  139. +10 −10 ddtrace/internal/globaltracer.go
  140. +4 −4 ddtrace/internal/globaltracer_test.go
  141. +1 −0 ddtrace/mocktracer/example_test.go
  142. +52 −0 ddtrace/opentelemetry/example_test.go
  143. +38 −0 ddtrace/opentelemetry/options.go
  144. +53 −0 ddtrace/opentelemetry/otel_test.go
  145. +146 −0 ddtrace/opentelemetry/span.go
  146. +392 −0 ddtrace/opentelemetry/span_test.go
  147. +91 −0 ddtrace/opentelemetry/tracer.go
  148. +108 −0 ddtrace/opentelemetry/tracer_provider.go
  149. +278 −0 ddtrace/opentelemetry/tracer_test.go
  150. +6 −6 ddtrace/opentracer/span.go
  151. +2 −1 ddtrace/opentracer/tracer.go
  152. +39 −2 ddtrace/tracer/context_test.go
  153. +18 −3 ddtrace/tracer/option.go
  154. +19 −2 ddtrace/tracer/option_test.go
  155. +13 −13 ddtrace/tracer/sampler_test.go
  156. +20 −3 ddtrace/tracer/span.go
  157. +93 −4 ddtrace/tracer/span_test.go
  158. +83 −5 ddtrace/tracer/spancontext.go
  159. +25 −11 ddtrace/tracer/spancontext_test.go
  160. +6 −5 ddtrace/tracer/telemetry.go
  161. +34 −62 ddtrace/tracer/telemetry_test.go
  162. +90 −43 ddtrace/tracer/textmap.go
  163. +342 −295 ddtrace/tracer/textmap_test.go
  164. +2 −2 ddtrace/tracer/time.go
  165. +18 −10 ddtrace/tracer/tracer.go
  166. +117 −16 ddtrace/tracer/tracer_test.go
  167. +57 −49 go.mod
  168. +285 −254 go.sum
  169. +6 −0 internal/apps/unit-of-work/Dockerfile
  170. +13 −0 internal/apps/unit-of-work/README.md
  171. +28 −0 internal/apps/unit-of-work/docker-compose.yml
  172. +53 −0 internal/apps/unit-of-work/go.mod
  173. +306 −0 internal/apps/unit-of-work/go.sum
  174. +108 −0 internal/apps/unit-of-work/main.go
  175. +173 −0 internal/apps/unit-of-work/main_test.go
  176. +12 −0 internal/apps/unit-of-work/run.bash
  177. +2 −2 internal/appsec/_tools/rules-updater/update.sh
  178. +23 −12 internal/appsec/appsec.go
  179. +10 −3 internal/appsec/config.go
  180. +6 −4 internal/appsec/config_test.go
  181. +3 −1 internal/appsec/dyngo/instrumentation/grpcsec/grpc.go
  182. +9 −9 internal/appsec/dyngo/instrumentation/grpcsec/tags_test.go
  183. +38 −8 internal/appsec/dyngo/instrumentation/httpsec/http.go
  184. +22 −126 internal/appsec/dyngo/instrumentation/httpsec/tags.go
  185. +0 −314 internal/appsec/dyngo/instrumentation/httpsec/tags_test.go
  186. +0 −30 internal/appsec/dyngo/instrumentation/ip_default.go
  187. +0 −34 internal/appsec/dyngo/instrumentation/ip_go119.go
  188. +40 −88 internal/appsec/dyngo/operation.go
  189. +30 −98 internal/appsec/dyngo/operation_test.go
  190. +186 −44 internal/appsec/remoteconfig.go
  191. +396 −46 internal/appsec/remoteconfig_test.go
  192. +2 −2 internal/appsec/rules.go
  193. +82 −55 internal/appsec/rules.json
  194. +183 −0 internal/appsec/ruleset_builder.go
  195. +160 −0 internal/appsec/ruleset_builder_test.go
  196. +60 −0 internal/appsec/testdata/blocking.json
  197. +31 −0 internal/appsec/testdata/custom_rules.json
  198. +141 −110 internal/appsec/waf.go
  199. +81 −4 internal/appsec/waf_test.go
  200. +1 −1 internal/gitmetadatabinary.go
  201. +4 −2 internal/hostname/providers_test.go
  202. +1 −1 internal/log/log.go
  203. +97 −0 internal/namingschema/namingschema.go
  204. +44 −0 internal/namingschema/op_cache.go
  205. +84 −0 internal/namingschema/op_client_server.go
  206. +43 −0 internal/namingschema/op_db.go
  207. +78 −0 internal/namingschema/op_messaging.go
  208. +143 −0 internal/namingschema/op_test.go
  209. +23 −0 internal/namingschema/option.go
  210. +50 −0 internal/namingschema/service_name.go
  211. +111 −0 internal/namingschema/service_name_test.go
  212. +5 −3 internal/remoteconfig/config.go
  213. +90 −22 internal/remoteconfig/remoteconfig.go
  214. +66 −16 internal/remoteconfig/remoteconfig_test.go
  215. +51 −34 internal/telemetry/client.go
  216. +50 −108 internal/telemetry/client_test.go
  217. +19 −2 internal/telemetry/message.go
  218. +11 −20 internal/telemetry/option.go
  219. +69 −19 internal/telemetry/telemetry.go
  220. +140 −0 internal/telemetry/telemetry_test.go
  221. +77 −0 internal/telemetry/telemetrytest/telemetrytest.go
  222. +50 −0 internal/telemetry/utils.go
  223. +1 −1 internal/traceprof/traceproftest/app.go
  224. +0 −1 internal/traceprof/traceproftest/util.go
  225. +1 −1 internal/version/version.go
  226. +1 −1 profiler/internal/fastdelta/fd_test.go
  227. +21 −27 profiler/profile.go
  228. +7 −4 profiler/telemetry.go
  229. +32 −75 profiler/telemetry_test.go
1 change: 0 additions & 1 deletion .github/pull_request_template.md
Original file line number Diff line number Diff line change
@@ -34,6 +34,5 @@
during the review but the signing off is to be done by the reviewer(s).
-->

- [ ] If known, an appropriate milestone has been selected; otherwise the `Triage` milestone is set.
- [ ] Changed code has unit tests for its functionality.
- [ ] If this interacts with the agent in a new way, a system test has been added.
2 changes: 1 addition & 1 deletion .github/workflows/appsec.yml
Original file line number Diff line number Diff line change
@@ -26,7 +26,7 @@ jobs:
native:
strategy:
matrix:
runs-on: [ macos-12, macos-11, macos-10.15, ubuntu-22.04, ubuntu-20.04, ubuntu-18.04, windows-latest ]
runs-on: [ macos-12, macos-11, macos-10.15, ubuntu-22.04, ubuntu-20.04, windows-latest ]
go-version: [ "1.20", "1.19", "1.18" ]
cgo_enabled: # test it compiles with and without cgo
- 0
75 changes: 49 additions & 26 deletions .github/workflows/system-tests.yml
Original file line number Diff line number Diff line change
@@ -21,22 +21,59 @@ jobs:
runs-on: ubuntu-latest
strategy:
matrix:
weblog-variant:
- net-http
- echo
- chi
- gin
scenario:
- DEFAULT
- APPSEC_DISABLED
- APPSEC_BLOCKING
- APPSEC_IP_BLOCKING
- APPSEC_REQUEST_BLOCKING
- APM_TRACING_E2E
- APM_TRACING_E2E_SINGLE_SPAN
include:
- library: golang
weblog-variant: net-http
- library: golang
weblog-variant: gorilla
- library: golang
weblog-variant: echo
- library: golang
weblog-variant: chi
- library: golang
weblog-variant: gin
- weblog-variant: net-http
scenario: REMOTE_CONFIG_MOCKED_BACKEND_ASM_FEATURES
- weblog-variant: net-http
scenario: REMOTE_CONFIG_MOCKED_BACKEND_ASM_FEATURES
- weblog-variant: net-http
scenario: REMOTE_CONFIG_MOCKED_BACKEND_ASM_DD
# AppSec scenarios that don't depend on the integrations, so we just run on the net/http variant
- weblog-variant: net-http
scenario: APPSEC_RATE_LIMITER
- weblog-variant: net-http
scenario: APPSEC_CUSTOM_RULES
- weblog-variant: net-http
scenario: APPSEC_MISSING_RULES
- weblog-variant: net-http
scenario: APPSEC_CORRUPTED_RULES
- weblog-variant: net-http
scenario: APPSEC_LOW_WAF_TIMEOUT
- weblog-variant: net-http
scenario: APPSEC_CUSTOM_OBFUSCATION
# APM scenarios requiring specific environment settings
- scenario: APM_TRACING_E2E
env:
DD_API_KEY=$SYSTEM_TESTS_E2E_DD_API_KEY
DD_APPLICATION_KEY=$SYSTEM_TESTS_E2E_DD_APP_KEY
DD_SITE="datadoghq.com"
- scenario: APM_TRACING_E2E_SINGLE_SPAN
env:
DD_API_KEY=$SYSTEM_TESTS_E2E_DD_API_KEY
DD_APPLICATION_KEY=$SYSTEM_TESTS_E2E_DD_APP_KEY
DD_SITE="datadoghq.com"

fail-fast: false
env:
TEST_LIBRARY: golang
WEBLOG_VARIANT: ${{ matrix.weblog-variant }}
DD_API_KEY: ${{ secrets.DD_API_KEY }}
SYSTEM_TESTS_E2E_DD_API_KEY: ${{ secrets.SYSTEM_TESTS_E2E_DD_API_KEY }}
SYSTEM_TESTS_E2E_DD_APP_KEY: ${{ secrets.SYSTEM_TESTS_E2E_DD_APP_KEY }}
name: Test (${{ matrix.weblog-variant }}, ${{ matrix.scenario }})
steps:
- name: Setup python 3.9
uses: actions/setup-python@v4
@@ -57,21 +94,7 @@ jobs:
run: ./build.sh

- name: Run
run: ./run.sh

- name: Run APM E2E default tests
env:
DD_API_KEY: ${{ secrets.SYSTEM_TESTS_E2E_DD_API_KEY }}
DD_APPLICATION_KEY: ${{ secrets.SYSTEM_TESTS_E2E_DD_APP_KEY }}
DD_SITE: "datadoghq.com"
run: ./run.sh APM_TRACING_E2E

- name: Run APM E2E Single Span tests
env:
DD_API_KEY: ${{ secrets.SYSTEM_TESTS_E2E_DD_API_KEY }}
DD_APPLICATION_KEY: ${{ secrets.SYSTEM_TESTS_E2E_DD_APP_KEY }}
DD_SITE: "datadoghq.com"
run: ./run.sh APM_TRACING_E2E_SINGLE_SPAN
run: env ${{ matrix.env }} ./run.sh ${{ matrix.scenario }}

- name: Compress artifact
if: ${{ always() }}
@@ -81,5 +104,5 @@ jobs:
uses: actions/upload-artifact@v2
if: ${{ always() }}
with:
name: logs_${{ matrix.weblog-variant }}
name: logs_${{ matrix.weblog-variant }}_${{ matrix.scenario }}
path: artifact.tar.gz
56 changes: 56 additions & 0 deletions .github/workflows/test-apps.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
name: Test Apps

on:
workflow_dispatch: {} # manually
schedule:
- cron: "0 0 * * *" # nightly
pull_request: {} # on pull request

env:
DD_ENV: github
DD_TAGS: "github_run_id:${{ github.run_id }} github_run_number:${{ github.run_number }}"

jobs:
unit-of-work:
if: github.event_name != 'pull_request' || (github.event_name == 'pull_request' && github.event.pull_request.head.repo.full_name == 'DataDog/dd-trace-go')
strategy:
matrix:
include:
- job_name: prod
api_key: "DD_TEST_APP_API_KEY"
datadog_site: datadoghq.com
- job_name: staging
api_key: "DD_TEST_AND_DEMO_API_KEY"
datadog_site: datad0g.com
name: "unit-of-work (${{ matrix.job_name }})"

runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v3
with:
repository: 'DataDog/dd-trace-go'

- uses: datadog/agent-github-action@v1.3
with:
api_key: ${{ secrets[matrix.api_key] }}
datadog_site: ${{ matrix.datadog_site }}

- uses: actions/setup-go@v3
with:
go-version: 'stable'
check-latest: true
cache: true

- name: "Configure nightly run to last 10 minutes and add nightly:true tag"
if: (github.event_name == 'schedule')
run: |
# 660s is enough time to capture 10 profiles without missing the last one
# (TODO: Implement profiler.StopFlush())
echo "DD_TEST_APPS_TOTAL_DURATION=660s" >> $GITHUB_ENV
echo "DD_TEST_APPS_PROFILE_PERIOD=60s" >> $GITHUB_ENV
echo "DD_TAGS=${DD_TAGS} nightly:true" >> $GITHUB_ENV
- name: Run unit of work app
run: |
cd ./internal/apps/unit-of-work && ./run.bash
33 changes: 19 additions & 14 deletions .github/workflows/unit-integration-tests.yml
Original file line number Diff line number Diff line change
@@ -8,19 +8,6 @@ on:
type: string

jobs:
milestone:
runs-on: ubuntu-latest
if: ${{ github.event_name == 'pull_request' }}
steps:
- name: Checkout
uses: actions/checkout@v2
with:
repository: 'DataDog/dd-trace-go'
- name: Milestone
env:
PR_NUMBER: ${{ github.event.pull_request.number }}
run: |
go run checkmilestone.go
copyright:
runs-on: ubuntu-latest
steps:
@@ -31,6 +18,9 @@ jobs:
- name: Copyright
run: |
go run checkcopyright.go
# Deprecated
# TODO remove this once the golangci-lint job is stable.
lint:
runs-on: ubuntu-latest
steps:
@@ -57,9 +47,24 @@ jobs:
- name: lint
run: |
go install golang.org/x/lint/golint@latest
curl -L https://git.io/vp6lP | sh # https://github.com/alecthomas/gometalinter#binary-releases
curl https://raw.githubusercontent.com/alecthomas/gometalinter/master/scripts/install.sh | sh # https://github.com/alecthomas/gometalinter#binary-releases
./bin/gometalinter --disable-all --vendor --deadline=120s --enable=golint ./...
golangci-lint:
runs-on: ubuntu-latest
steps:
- uses: actions/setup-go@v4
with:
go-version: ${{ inputs.go-version }}
cache: true
- uses: actions/checkout@v3
with:
repository: 'DataDog/dd-trace-go'
- name: golangci-lint
uses: golangci/golangci-lint-action@v3
with:
version: v1.52.2

test-core:
runs-on: ubuntu-latest
env:
12 changes: 11 additions & 1 deletion .gitlab-ci.yml
Original file line number Diff line number Diff line change
@@ -1,4 +1,14 @@
stages:
- benchmarks
- test-apps

include: ".gitlab/benchmarks.yml"
variables:
# This base image is created here: https://gitlab.ddbuild.io/DataDog/apm-reliability/relenv-microbenchmarking-platform/-/jobs/201492583
BASE_CI_IMAGE: 486234852809.dkr.ecr.us-east-1.amazonaws.com/ci/relenv-microbenchmarking-platform:dd-trace-go_knusbaum
INDEX_FILE: index.txt
KUBERNETES_SERVICE_ACCOUNT_OVERWRITE: dd-trace-go
FF_USE_LEGACY_KUBERNETES_EXECUTION_STRATEGY: "true"

include:
- ".gitlab/benchmarks.yml"
- ".gitlab/test-apps.yml"
9 changes: 1 addition & 8 deletions .gitlab/benchmarks.yml
Original file line number Diff line number Diff line change
@@ -1,11 +1,7 @@
variables:
# This base image is created here: https://gitlab.ddbuild.io/DataDog/apm-reliability/relenv-microbenchmarking-platform/-/jobs/201492583
BASE_CI_IMAGE: 486234852809.dkr.ecr.us-east-1.amazonaws.com/ci/relenv-microbenchmarking-platform:dd-trace-go_knusbaum
INDEX_FILE: index.txt

benchmark:
stage: benchmarks
image: $BASE_CI_IMAGE
when: on_success
timeout: 1h
only:
refs:
@@ -24,6 +20,3 @@ benchmark:
paths:
- reports/
expire_in: 3 months
variables:
KUBERNETES_SERVICE_ACCOUNT_OVERWRITE: dd-trace-go
FF_USE_LEGACY_KUBERNETES_EXECUTION_STRATEGY: "true"
11 changes: 9 additions & 2 deletions .gitlab/scripts/run-benchmarks.sh
Original file line number Diff line number Diff line change
@@ -4,6 +4,13 @@ set -ex

source ./.gitlab/scripts/config-benchmarks.sh

bench_loop_x10 () {
for i in {1..10}
do
go test -run=XXX -bench $BENCHMARK_TARGETS -benchmem -count 1 -benchtime 2s ./... | tee -a $1
done
}

CANDIDATE_BRANCH=$CI_COMMIT_REF_NAME
CANDIDATE_COMMIT_SHA=$CI_COMMIT_SHA

@@ -14,7 +21,7 @@ git clone --branch "$CANDIDATE_BRANCH" https://github.com/DataDog/dd-trace-go "$

# Run benchmarks for candidate release
cd "$CANDIDATE_SRC/ddtrace/tracer/"
go test -run=XXX -bench $BENCHMARK_TARGETS -benchmem -count 10 -benchtime 2s ./... | tee "${ARTIFACTS_DIR}/pr_bench.txt"
bench_loop_x10 "${ARTIFACTS_DIR}/pr_bench.txt"

BASELINE_BRANCH=$(github-find-merge-into-branch --for-repo="$CI_PROJECT_NAME" --for-pr="$CANDIDATE_BRANCH" || :)

@@ -29,5 +36,5 @@ if [ ! -z "$BASELINE_BRANCH" ]; then

# Run benchmarks for baseline release
cd "$BASELINE_SRC/ddtrace/tracer/"
go test -run=XXX -bench $BENCHMARK_TARGETS -benchmem -count 10 -benchtime 2s ./... | tee "${ARTIFACTS_DIR}/main_bench.txt"
bench_loop_x10 "${ARTIFACTS_DIR}/main_bench.txt"
fi
26 changes: 26 additions & 0 deletions .gitlab/scripts/run-test-apps.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
#!/usr/bin/env bash
set -eu

stop_agent() {
echo "-> Stopping agent"
service datadog-agent stop
}
trap "stop_agent" ERR

echo "-> Installing agent"
DD_HOSTNAME=$(hostname) \
DD_SITE="datad0g.com" \
DD_API_KEY="$(aws ssm get-parameter --region us-east-1 --name ci.dd-trace-go.dd_api_key --with-decryption --query "Parameter.Value" --out text)" \
DD_INSTALL_ONLY=true \
DD_AGENT_MAJOR_VERSION=7 \
bash -c "$(curl -L https://s3.amazonaws.com/dd-agent/scripts/install_script.sh)"

echo "-> Starting agent"
# see https://github.com/DataDog/datadog-agent/issues/14836
cp /etc/datadog-agent/security-agent.yaml.example /etc/datadog-agent/security-agent.yaml
service datadog-agent start

echo "-> Running unit-of-work test app"
cd ./internal/apps/unit-of-work && ./run.bash

stop_agent
16 changes: 16 additions & 0 deletions .gitlab/test-apps.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
unit-of-work:
stage: test-apps
when: manual
image: $BASE_CI_IMAGE
timeout: 1h
interruptible: true
tags: ["runner:apm-k8s-tweaked-metal"]
script:
- ./.gitlab/scripts/run-test-apps.sh
variables:
DD_ENV: "gitlab"
# 660s is enough time to capture 10 profiles without missing the last one
# (TODO: Implement profiler.StopFlush())
DD_TEST_APPS_TOTAL_DURATION: "660s"
DD_TEST_APPS_PROFILE_PERIOD: "60s"
DD_TEST_APPS_REQUESTS_PER_SECOND: 25
11 changes: 11 additions & 0 deletions .golangci.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
run:
deadline: 10m
skip-dirs:
# This package is an exception and has its own test job (Testing outlier gRPC v1.2).
- contrib/google.golang.org/grpc.v12
linters:
disable-all: true
enable:
- gofmt
- goimports
- revive
12 changes: 7 additions & 5 deletions CONTRIBUTING.md
Original file line number Diff line number Diff line change
@@ -22,7 +22,7 @@ All new code is expected to be covered by tests.

#### PR Checks

We expect all PR checks to pass before we merge a PR. When opening a PR, the metadata check will fail until a repo maintainer assigns the PR a milestone. The other checks can be investigated by following the `Details` links to CircleCI and CodeCov for unit/integration tests and code coverage checks.
We expect all PR checks to pass before we merge a PR, which can be investigated by following the `Details` links to CircleCI and CodeCov for unit/integration tests and code coverage checks.

![Screen Shot 2021-08-31 at 10 35 37 AM](https://user-images.githubusercontent.com/1819836/131533266-7c87305d-37df-4bd5-a9ea-6fb8e51e4b50.png)

@@ -41,6 +41,12 @@ If a PR sits open for more than a month awaiting work or replies by the author,
A set of [Style guidelines](https://github.com/DataDog/dd-trace-go/wiki/Style-guidelines) was added to our Wiki. Please spend some time browsing it.
It will help tremendously in avoiding comments and speeding up the PR process.

To run golangci-lint locally:

```
docker run --rm -v $(pwd):/app -w /app golangci/golangci-lint:v1.52.2 golangci-lint run -v
```

### Integrations

Please view our contrib [README.md](contrib/README.md) for information on new integrations. If you need support for a new integration, please file an issue to discuss before opening a PR.
@@ -55,10 +61,6 @@ This repository used to omit many dependencies from the `go.mod` file due to con
git update-index --no-assume-unchanged go.*
```

### Milestones

The maintainers of this repository assign milestones to pull requests to classify them. `Triage` indicates that it is yet to be decided which version the change will go into. Pull requests that are ready get the upcoming release version assigned.

### Benchmarks

Some benchmarks will run on any new PR commits, the results will be commented into the PR on completion.
Loading