# changelog

author: Grafana Labs <support@grafana.com> - 0.43.3
changelog:
  - chore: release 0.43.3 (#1534)
  Co-authored-by: sm-release-app[bot] <180338484+sm-release-app[bot]@users.noreply.github.com>
  - chore: add further debug logging around secrets (#1542)
  - chore: Update ghcr.io/grafana/chromium-swiftshader-alpine:140.0.7339.207-r0-3.22.1 Docker digest to 109f5c2 (#1535)
  Co-authored-by: renovate-sh-app[bot] <219655108+renovate-sh-app[bot]@users.noreply.github.com>
  - fix: add warning when tenant received without secret store details (#1533)
  - Log warning in updateTenant when tenant received via channel without secret store
  - Log warning in GetTenant when tenant retrieved from API without secret store
  - Addresses issue where k6 scripts using secrets fail with 'no secret sources are configured'
  - chore: Update ghcr.io/grafana/chromium-swiftshader-alpine Docker tag to v140.0.7339.207-r0-3.22.1 (#1532)
  | datasource | package                                     | from                     | to                       |
  | ---------- | ------------------------------------------- | ------------------------ | ------------------------ |
  | docker     | ghcr.io/grafana/chromium-swiftshader-alpine | 140.0.7339.185-r0-3.22.1 | 140.0.7339.207-r0-3.22.1 |
  Co-authored-by: renovate-sh-app[bot] <219655108+renovate-sh-app[bot]@users.noreply.github.com>


author: Grafana Labs <support@grafana.com> - 0.44.0
changelog:
  - chore: release 0.44.0
  - fix: Short circuit get tenant request (#1556)
  Use a default timeout for GetTenant call from agents to the API.
  This takes especial relevance when calling GetTenant as part of a scrape
  operation. In that context, a 5s TO for the fastest running protocol
  checks, which have a min periodicity of 30s, seems a reasonable default
  value considering the roundtrips between components in order to retrieve
  the data.
  - fix: handle nil secret store in calculateValidUntil
  - fix: don't cache tenants if the secret store is not configured
  - chore: Update ghcr.io/grafana/grafana-build-tools Docker tag to v1.21.2
  | datasource | package                             | from    | to      |
  | ---------- | ----------------------------------- | ------- | ------- |
  | docker     | ghcr.io/grafana/grafana-build-tools | v1.21.1 | v1.21.2 |
  - chore: Update ghcr.io/grafana/grafana-build-tools Docker tag to v1.21.1
  | datasource | package                             | from   | to      |
  | ---------- | ----------------------------------- | ------ | ------- |
  | docker     | ghcr.io/grafana/grafana-build-tools | 1.21.0 | v1.21.1 |
  - chore: Update module github.com/go-logfmt/logfmt to v0.6.1
  | datasource | package                     | from   | to     |
  | ---------- | --------------------------- | ------ | ------ |
  | go         | github.com/go-logfmt/logfmt | v0.6.0 | v0.6.1 |
  - chore: Update docker:dind Docker digest to 2417311
  - chore: Update ghcr.io/grafana/chromium-swiftshader-alpine Docker tag to v141
  | datasource | package                                     | from                     | to                      |
  | ---------- | ------------------------------------------- | ------------------------ | ----------------------- |
  | docker     | ghcr.io/grafana/chromium-swiftshader-alpine | 140.0.7339.207-r0-3.22.1 | 141.0.7390.54-r0-3.22.1 |
  - chore: Update grafana/shared-workflows digest to f248984
  - chore: Update golang.org/x/exp digest to 27f1f14
  | datasource | package          | from                               | to                                 |
  | ---------- | ---------------- | ---------------------------------- | ---------------------------------- |
  | go         | golang.org/x/exp | v0.0.0-20250911091902-df9299821621 | v0.0.0-20251002181428-27f1f14c8bb9 |
  - chore: Update ghcr.io/grafana/chromium-swiftshader-alpine:140.0.7339.207-r0-3.22.1 Docker digest to 44e30e6
  - chore: Update docker:dind Docker digest to c090c93
  - feat: Add cost attribution labels to tenants (#1543)
  :warning: This is based upon the feedback from @ka3de in #1655 :warning:
  Update the protobuf definition to have cost attribution labels
  associated with tenants instead of directly on checks.
  Cost Attribution Labels will be represented as a slice of strings, where each item is a key to look for in labels to get the value of the cost attribution label. 
  This allows the api to pick up the changes and test out propogated cal's
  from the api to checks.


author: Grafana Labs <support@grafana.com> - 0.44.1
changelog:
  - chore: release 0.44.1
  - fix: Revert "fix: Short circuit get tenant request (#1556)" (#1560)
  This reverts commit f5634c0ee60a64a3df5609d234a68c85f427d728.
  Reverting this change until changes in the other components allow us to
  short circuit this request.


author: Grafana Labs <support@grafana.com> - 0.44.2
changelog:
  - chore: release 0.44.2
  - chore: Update ghcr.io/grafana/grafana-build-tools Docker tag to v1.21.3
  | datasource | package                             | from    | to     |
  | ---------- | ----------------------------------- | ------- | ------ |
  | docker     | ghcr.io/grafana/grafana-build-tools | v1.21.2 | 1.21.3 |
  - chore: Update golang.org/x/exp digest to d2f985d
  | datasource | package          | from                               | to                                 |
  | ---------- | ---------------- | ---------------------------------- | ---------------------------------- |
  | go         | golang.org/x/exp | v0.0.0-20251002181428-27f1f14c8bb9 | v0.0.0-20251009144603-d2f985daa21b |
  - chore: Update alpine Docker tag to v3.22.2
  | datasource | package | from   | to     |
  | ---------- | ------- | ------ | ------ |
  | docker     | alpine  | 3.22.1 | 3.22.2 |
  - chore: Update dependency grafana/xk6-sm to v0.6.7
  | datasource      | package        | from   | to     |
  | --------------- | -------------- | ------ | ------ |
  | github-releases | grafana/xk6-sm | v0.6.6 | v0.6.7 |
  - chore: Update ghcr.io/grafana/chromium-swiftshader-alpine Docker tag to v141.0.7390.76-r0-3.22.2
  | datasource | package                                     | from                    | to                      |
  | ---------- | ------------------------------------------- | ----------------------- | ----------------------- |
  | docker     | ghcr.io/grafana/chromium-swiftshader-alpine | 141.0.7390.54-r0-3.22.1 | 141.0.7390.76-r0-3.22.2 |
  - chore: Update module golang.org/x/net to v0.46.0
  | datasource | package          | from    | to      |
  | ---------- | ---------------- | ------- | ------- |
  | go         | golang.org/x/net | v0.44.0 | v0.46.0 |
  - chore: Update module google.golang.org/grpc to v1.76.0
  | datasource | package                | from    | to      |
  | ---------- | ---------------------- | ------- | ------- |
  | go         | google.golang.org/grpc | v1.75.1 | v1.76.0 |


author: Grafana Labs <support@grafana.com> - 0.45.0
changelog:
  - chore: release 0.45.0 (#1565)
  Co-authored-by: sm-release-app[bot] <180338484+sm-release-app[bot]@users.noreply.github.com>
  - feat: Adjust publisher options (#1558)
  * feat: Adjust max tenant idle time
  Specifies the time to wait for new check execution's data for the tenant
  before removing the handler, which would cause any non delivered data to
  be lost.
  Adjust it to 65 minutes. In the worst case scenario, where the publisher
  is unable to push for 1h, setting it to 65 minutes will allow the longer
  running checks (current max=1h) to still buffer data for new executions.
  * feat: Adjust backoff and retries
  When retries are exhausted, the data being pushed is not added again to
  the buffer queue, and instead it's discarded.
  With the previous configuration (20 retries, 30ms min backoff, 2s max
  backoff), if we consider that each push request takes ~200ms, the total
  time before exhausting retries and discarding data was ~35s.
  With the new configuration (50 retries, 50ms min backoff, 30s max
  backoff), if we consider that each push request takes ~200ms, the total
  time before exhausting retries and discarding data is ~20min.
  Notice that data might still be discarded earlier due to buffer size
  limits.
  * feat: Increase max queued bytes
  Specifies the max number of bytes to hold in the buffer per tenant in
  case of unsuccessfull retries before discarding data.
  In lack of better data for calculations.. running rough estimates we can
  consider each check execution to report ~15 metrics with 10 labels
  and one sample each. That will give us a rough estimate of ~5Kb per
  check execution.
  With the previous value of 128Kb, that would hold data for 25 check
  executions. In the best scenario where a tenant runs a single check in
  that agent, considering a check frequency of 1m, that would allow
  for 25 minutes before discarding data. In most cases this number will be
  much lower, as a tenant will be running more than one check in the same
  agent, resulting in a very short time window before data is discarded.
  Therefore, increase the buffer limit size to 1mb. Considering that that
  will only have an effect when data is unable to be pushed to particular
  Mimir/Loki cells, accept the memory increase in order to try to reduce
  discarded data. Autoscalers will scale agents if necessary based on the
  memory threshold.
  * feat: Avoid discarding data based on num items
  Number of items limit seems difficul to reason about and setting a
  reasonable limit. Therefore remove this limit and apply only the size
  limit which fulfills the same purpose.
  * fix: Fix queue test
  Adjust backoff for testing purposes.
  - chore: Update grafana/shared-workflows digest to c8ac4a2 (#1573)
  Co-authored-by: renovate-sh-app[bot] <219655108+renovate-sh-app[bot]@users.noreply.github.com>
  - chore: Update module github.com/KimMachineGun/automemlimit to v0.7.5
  | datasource | package                               | from   | to     |
  | ---------- | ------------------------------------- | ------ | ------ |
  | go         | github.com/KimMachineGun/automemlimit | v0.7.4 | v0.7.5 |
  - fix: Update some github.com/prometheus/* modules
  Renovate is doing something weird, and I don't have time to deal with
  its issues.
  * github.com/prometheus/client_golang v1.22.0 -> v1.23.2
  * github.com/prometheus/common v0.65.0 -> v0.66.1
  * github.com/prometheus/prometheus v0.304.2 -> v0.305.0
  The implementation of labels.Labels change, so it's necessary to update
  that code accordingly.
  - chore: Update dependency grafana/xk6-sm to v0.6.8 (#1566)
  | datasource      | package        | from   | to     |
  | --------------- | -------------- | ------ | ------ |
  | github-releases | grafana/xk6-sm | v0.6.7 | v0.6.8 |
  Co-authored-by: renovate-sh-app[bot] <219655108+renovate-sh-app[bot]@users.noreply.github.com>
  - chore: Update grafana/shared-workflows digest to eed6978 (#1567)
  Co-authored-by: renovate-sh-app[bot] <219655108+renovate-sh-app[bot]@users.noreply.github.com>
  - fix: Run modernize over source code


author: Grafana Labs <support@grafana.com> - 0.46.0
changelog:
  - chore: release 0.46.0 (#1579)
  Co-authored-by: sm-release-app[bot] <180338484+sm-release-app[bot]@users.noreply.github.com>
  - chore: Update docker:dind Docker digest to ea9d204 (#1585)
  Co-authored-by: renovate-sh-app[bot] <219655108+renovate-sh-app[bot]@users.noreply.github.com>
  - chore: Update dependency grafana/xk6-sm to v0.6.9 (#1586)
  | datasource      | package        | from   | to     |
  | --------------- | -------------- | ------ | ------ |
  | github-releases | grafana/xk6-sm | v0.6.8 | v0.6.9 |
  Co-authored-by: renovate-sh-app[bot] <219655108+renovate-sh-app[bot]@users.noreply.github.com>
  - chore: Update grafana/shared-workflows digest to ae92934 (#1587)
  Co-authored-by: renovate-sh-app[bot] <219655108+renovate-sh-app[bot]@users.noreply.github.com>
  - chore: Update ghcr.io/grafana/chromium-swiftshader-alpine:141.0.7390.122-r0-3.22.2 Docker digest to a6d31b0
  - feat: Apply jitter to tenants cache (#1576)
  Tenant data is mostly requested from scrapers when a check execution
  happens. The actual scraper start time has a jitter to randomize checks
  start up, as most checks are received as a bulk on initial connection.
  However that jitter is kept small on purpose in order to not delay
  checks, that makes more sense particularly for new checks.
  Therefore this commit applies a jitter at the tenants cache level of up
  to 25% of the entry timeout (currently 15m). This is only applied when
  there are no expiration considerations tied to the secrets
  functionality.
  - fix: k6runner: properly propagate user errors back to the prober
  Before this PR, errors returned by the `k6 run` operations that were
  identified as user errors by `isUserError`, such as timeouts or
  controlled k6 exit codes, were inadvertently ignored as the `err`
  variable was shadowed when reading logs and metrics. This prevented such
  errors from being reported upstream, causing only errors flagged by
  `errorFromLogs` to be reported.
  This affected timeout errors in particular, as they are identified as
  such by `isUserError` and not inferred from k6 logs.
  This commit slightly changes the code so that the error returned by the
  k6 run operation is not masked anymore.
  - chore: Update ghcr.io/grafana/chromium-swiftshader-alpine Docker tag to v141.0.7390.122-r0-3.22.2 (#1570)
  | datasource | package                                     | from                    | to                       |
  | ---------- | ------------------------------------------- | ----------------------- | ------------------------ |
  | docker     | ghcr.io/grafana/chromium-swiftshader-alpine | 141.0.7390.76-r0-3.22.2 | 141.0.7390.122-r0-3.22.2 |
  Co-authored-by: renovate-sh-app[bot] <219655108+renovate-sh-app[bot]@users.noreply.github.com>
  - chore: Update googleapis/release-please-action action to v4.4.0 (#1571)
  | datasource  | package                          | from   | to     |
  | ----------- | -------------------------------- | ------ | ------ |
  | github-tags | googleapis/release-please-action | v4.3.0 | v4.4.0 |
  Co-authored-by: renovate-sh-app[bot] <219655108+renovate-sh-app[bot]@users.noreply.github.com>
  - chore: Update module github.com/grafana/gsm-api-go-client to v0.2.1 (#1581)
  | datasource | package                              | from   | to     |
  | ---------- | ------------------------------------ | ------ | ------ |
  | go         | github.com/grafana/gsm-api-go-client | v0.2.0 | v0.2.1 |
  Co-authored-by: renovate-sh-app[bot] <219655108+renovate-sh-app[bot]@users.noreply.github.com>
  - chore: Update GitHub Artifact Actions (#1574)
  | datasource  | package                   | from | to |
  | ----------- | ------------------------- | ---- | -- |
  | github-tags | actions/download-artifact | v5   | v6 |
  | github-tags | actions/upload-artifact   | v4   | v5 |
  Co-authored-by: renovate-sh-app[bot] <219655108+renovate-sh-app[bot]@users.noreply.github.com>
  - chore: Update module kernel.org/pub/linux/libs/security/libcap/cap to v1.2.77 (#1582)
  | datasource | package                                       | from    | to      |
  | ---------- | --------------------------------------------- | ------- | ------- |
  | go         | kernel.org/pub/linux/libs/security/libcap/cap | v1.2.76 | v1.2.77 |
  Co-authored-by: renovate-sh-app[bot] <219655108+renovate-sh-app[bot]@users.noreply.github.com>
  - chore: Update golang.org/x/exp digest to a4bb9ff (#1572)
  | datasource | package          | from                               | to                                 |
  | ---------- | ---------------- | ---------------------------------- | ---------------------------------- |
  | go         | golang.org/x/exp | v0.0.0-20251009144603-d2f985daa21b | v0.0.0-20251023183803-a4bb9ffd2546 |
  Co-authored-by: renovate-sh-app[bot] <219655108+renovate-sh-app[bot]@users.noreply.github.com>
  - feat: add support for secrets in http checks (#1469)
  * feat: integrate secret resolution into HTTP prober and agent components
  * chore: upgrade gsm-api-go-client to v0.2.0


author: Grafana Labs <support@grafana.com> - 0.46.1
changelog:
  - chore: release 0.46.1 (#1591)
  Co-authored-by: sm-release-app[bot] <180338484+sm-release-app[bot]@users.noreply.github.com>
  - fix: Update DEVELOPMENT.md (#1600)
  This is a high level overview of the code, with some hints as to how to
  interact with it.
  - chore: Update docker:dind Docker digest to 96789d5 (#1599)
  Co-authored-by: renovate-sh-app[bot] <219655108+renovate-sh-app[bot]@users.noreply.github.com>
  - chore: Update ghcr.io/grafana/chromium-swiftshader-alpine:142.0.7444.59-r0-3.22.2 Docker digest to 5dcd595 (#1598)
  Co-authored-by: renovate-sh-app[bot] <219655108+renovate-sh-app[bot]@users.noreply.github.com>
  - fix: Use ErrorIs instead of string comparison for context deadline (#1597)
  - chore: Update grafana/shared-workflows digest to 80f9be5
  - fix: Handle 504 Gateway Timeout false alarms in adhoc checks (#1578)
  - chore: Update module golang.org/x/sync to v0.18.0
  | datasource | package           | from    | to      |
  | ---------- | ----------------- | ------- | ------- |
  | go         | golang.org/x/sync | v0.17.0 | v0.18.0 |
  - chore: Update dependency grafana/xk6-sm to v0.6.10
  | datasource      | package        | from   | to      |
  | --------------- | -------------- | ------ | ------- |
  | github-releases | grafana/xk6-sm | v0.6.9 | v0.6.10 |
  - chore: Update docker:dind Docker digest to 2a232a4
  - chore: Update ghcr.io/grafana/chromium-swiftshader-alpine Docker tag to v142 (#1588)
  | datasource | package                                     | from                     | to                      |
  | ---------- | ------------------------------------------- | ------------------------ | ----------------------- |
  | docker     | ghcr.io/grafana/chromium-swiftshader-alpine | 141.0.7390.122-r0-3.22.2 | 142.0.7444.59-r0-3.22.2 |
  Co-authored-by: renovate-sh-app[bot] <219655108+renovate-sh-app[bot]@users.noreply.github.com>
  - chore: Update module github.com/mccutchen/go-httpbin/v2 to v2.19.0 (#1589)
  | datasource | package                            | from    | to      |
  | ---------- | ---------------------------------- | ------- | ------- |
  | go         | github.com/mccutchen/go-httpbin/v2 | v2.18.3 | v2.19.0 |
  Co-authored-by: renovate-sh-app[bot] <219655108+renovate-sh-app[bot]@users.noreply.github.com>


author: Grafana Labs <support@grafana.com> - 0.47.0
changelog:
  - chore: release 0.47.0 (#1603)
  Co-authored-by: sm-release-app[bot] <180338484+sm-release-app[bot]@users.noreply.github.com>
  - chore: Update actions/checkout action to v5.0.1
  | datasource  | package          | from   | to     |
  | ----------- | ---------------- | ------ | ------ |
  | github-tags | actions/checkout | v5.0.0 | v5.0.1 |
  - chore: Update actions/checkout digest to 93cb6ef
  - chore: Update grafana/shared-workflows digest to 92b146a
  - chore: Update golang.org/x/exp digest to e25ba8c
  | datasource | package          | from                               | to                                 |
  | ---------- | ---------------- | ---------------------------------- | ---------------------------------- |
  | go         | golang.org/x/exp | v0.0.0-20251023183803-a4bb9ffd2546 | v0.0.0-20251113190631-e25ba8c21ef6 |
  - chore: Update dependency grafana/xk6-sm to v0.6.11
  | datasource      | package        | from    | to      |
  | --------------- | -------------- | ------- | ------- |
  | github-releases | grafana/xk6-sm | v0.6.10 | v0.6.11 |
  - chore: Update module golang.org/x/net to v0.47.0
  | datasource | package          | from    | to      |
  | ---------- | ---------------- | ------- | ------- |
  | go         | golang.org/x/net | v0.46.0 | v0.47.0 |
  - chore: Update docker:dind Docker digest to ecac43e
  - chore: use the obviously superior way to `Unseconds()`
  - feat: make `probe_duration_seconds` match `probe_script_duration_seconds`
  For the vast majority of check types, `probe_duration_seconds` is
  reported as the wall time that took to run the prober. This is accurate
  for the vast majority of cases, but there's one in particular where it
  is not: k6-backed checks that use external runners.
  External runners can take a certain time to process a request, which
  prior to this commit was counted as part of `probe_duration_seconds`
  while in fact it was not. This commit adds code that parses the
  `probe_script_duration_seconds` metric returned by k6 runners, and uses
  that as the duration of the check for both logs and
  `probe_duration_seconds`.
  - chore: Update ghcr.io/grafana/grafana-build-tools Docker tag to v1.23.0
  | datasource | package                             | from   | to      |
  | ---------- | ----------------------------------- | ------ | ------- |
  | docker     | ghcr.io/grafana/grafana-build-tools | 1.21.3 | v1.23.0 |
  - fix: Remove old +build directives
  Go 1.17 (?) added support for `go:build` directives to replace `+build`
  ones. That's ~ 4 years ago. We've moved past the point were we need to
  support those older things (see
  8e7fee2f5383df5c3666120fbc6351f718a008eb), so remove them.
  (an updated golangci-lint is complaining about this)


author: Grafana Labs <support@grafana.com> - 0.48.0
changelog:
  - chore: release 0.48.0 (#1617)
  Co-authored-by: sm-release-app[bot] <180338484+sm-release-app[bot]@users.noreply.github.com>
  - feat: update CheckClassTelemetry protobuf (#1635)
  * Update CheckClassTelemetry protobuf
  Adds CostAttributionLabels field to the `CheckClassTelemetry` protobuf
  and regenerates the protobufs. This is the first step of tracking
  executions by cost attribution labels.
  I'm making this minimal change so that we can release the change in the
  agent and pull the changes into the API and validate no regressions.
  * Update CheckClassTelemetry protobuf
  After working through the change, I realized that we were not
  communicating that values of teh cost attribution labels. We _could_
  have serialized the values in such a
  way(`[]string{"team=A","service=__missing__"}` and had the API
  deserialize them, but this seems hacky.
  This created a dedicated `CostAttributionLabel` message so we do not
  tightly couple the existing `Label` to cost attribution labels.
  - fix: Rework telemetry tests to use synctest (#1631)
  Replace uses of a `sync.WaitGroup` to coordinate between different
  goroutines in tests with `testing/synctest`. That package, stable
  starting with Go 1.25, simplifies testing concurrent and asynchronous
  code by providing:
  - *Fake time*: Time advances automatically when goroutines block.
  - *Quiescence detection*: Deterministic synchronization instead of
    arbitrary delays.
  - *Fast, reliable tests*: Because of the fake time mechanism, test can
    wait for "arbitrary" periods of time and they will work. The clock
    will advance, but wallclock will be short. At the same time, you don't
    have to guess how much is enough.
  - chore: Update ghcr.io/grafana/chromium-swiftshader-alpine:142.0.7444.59-r0-3.22.2 Docker digest to 2e68718 (#1630)
  Co-authored-by: renovate-sh-app[bot] <219655108+renovate-sh-app[bot]@users.noreply.github.com>
  - feat: add feature flag for protocol secrets support (#1626)
  Add SM_AGENT_ENABLE_PROTOCOL_SECRETS environment variable to enable
  protocol secrets support. This allows testing the feature before enabling
  it by default.
  - Add boolFromEnv helper function to parse boolean environment variables
  - Add EnableProtocolSecrets config field and environment variable parsing
  - Add SupportsProtocolSecrets field to UpdaterOptions and HandlerOpts
  - Update RegisterProbe calls to use the feature flag instead of hardcoded false
  - Add tests to verify the feature flag works correctly
  - chore: Update actions/create-github-app-token action to v2.2.0 (#1629)
  | datasource  | package                         | from   | to     |
  | ----------- | ------------------------------- | ------ | ------ |
  | github-tags | actions/create-github-app-token | v2.1.4 | v2.2.0 |
  Co-authored-by: renovate-sh-app[bot] <219655108+renovate-sh-app[bot]@users.noreply.github.com>
  - chore: Update dependency grafana/xk6-sm to v0.6.12 (#1622)
  | datasource      | package        | from    | to      |
  | --------------- | -------------- | ------- | ------- |
  | github-releases | grafana/xk6-sm | v0.6.11 | v0.6.12 |
  Co-authored-by: renovate-sh-app[bot] <219655108+renovate-sh-app[bot]@users.noreply.github.com>
  - chore: Update grafana/shared-workflows digest to b055806 (#1625)
  Co-authored-by: renovate-sh-app[bot] <219655108+renovate-sh-app[bot]@users.noreply.github.com>
  - chore: Update actions/checkout action to v6 (#1624)
  | datasource  | package          | from   | to     |
  | ----------- | ---------------- | ------ | ------ |
  | github-tags | actions/checkout | v5.0.1 | v6.0.0 |
  | github-tags | actions/checkout | v5     | v6     |
  Co-authored-by: renovate-sh-app[bot] <219655108+renovate-sh-app[bot]@users.noreply.github.com>
  - chore: Update actions/setup-go action to v6.1.0 (#1623)
  | datasource  | package          | from   | to     |
  | ----------- | ---------------- | ------ | ------ |
  | github-tags | actions/setup-go | v6.0.0 | v6.1.0 |
  Co-authored-by: renovate-sh-app[bot] <219655108+renovate-sh-app[bot]@users.noreply.github.com>
  - chore: Update docker:dind Docker digest to c9699f4 (#1616)
  Co-authored-by: renovate-sh-app[bot] <219655108+renovate-sh-app[bot]@users.noreply.github.com>
  - chore: Update module google.golang.org/grpc to v1.77.0 (#1620)
  | datasource | package                | from    | to      |
  | ---------- | ---------------------- | ------- | ------- |
  | go         | google.golang.org/grpc | v1.76.0 | v1.77.0 |
  Co-authored-by: renovate-sh-app[bot] <219655108+renovate-sh-app[bot]@users.noreply.github.com>
  - fix: Prevent datarace in telemetry tests (#1628)
  This is a followup to 9f4e479ce46fb2e729ced943ce01febb321bb69d. Another
  datarace showed up similar to the one that that commit had fixed.
  - feat: Rework tenant cache (#1601)
  In order to be more resilient in the face of outages, implement an
  out-of-process cache using memcached. In order to support the existing
  mode of operation, add an in-process-cache using Otter. Rework the
  tenant cache to use this new system.
  Co-authored-by: Anant Sharma <anant.sharma@grafana.com>
  - fix: iterate over slice values, not indexes
  Since this is a slice of ints, the compiler did not catch this one.
  - chore: Update ghcr.io/grafana/chromium-swiftshader-alpine:142.0.7444.59-r0-3.22.2 Docker digest to 4bfff84
  - feat: prober/traceroute: log traceroute entries in increasing hop order
  Previously, results of traceroute hops were logged in random order as an
  artifact of them being stored in a map. This PR does not change the data
  structure, but ensures we walk it in ascending key order. Functionality
  should not change, but hopefully logs will be more readable as a result.
  - chore: Update ghcr.io/grafana/grafana-build-tools Docker tag to v1.23.1
  | datasource | package                             | from    | to     |
  | ---------- | ----------------------------------- | ------- | ------ |
  | docker     | ghcr.io/grafana/grafana-build-tools | v1.23.0 | 1.23.1 |
  - feat: Pull cost attribution labels for tenant (#1544)
  Following a similar path as limits to pull cost attribution labels for
  tenants. Adds a new internal library `cals/cals.go` that provides an
  interface that wraps the `TenantProvider` client. Updates all of the
  wiring from Updated => Scraper to pass along the new cal client.
  Starts the process of using the library in `scraper.go`, which right now
  finds the cost attribution labels for a specific tenant. Returns an
  empty slice if nothing is found.
  This will be dependent upon the API changes being released to get cost
  attribution labels defined at the tenant level.
  My goal is to have a follow up PR that updates the telemeter bits to track executions by cost attribution labels. 
  - relies on https://github.com/grafana/synthetic-monitoring-api/pull/1750


author: Grafana Labs <support@grafana.com> - 0.49.0
changelog:
  - chore: release 0.49.0 (#1644)
  Co-authored-by: sm-release-app[bot] <180338484+sm-release-app[bot]@users.noreply.github.com>
  - feat: track executions by cals (#1642)
  Resolves https://github.com/grafana/synthetic-monitoring/issues/391
  Extend the region pusher codebase to track executions by Cost Attribution Labels(CAL's) by adding an addition map to the telemetry attribution. The `telemetry` map now is now:
  ```go
  // key int64: tenant id
  // middle string: check class
  // last string: serialized cost attribution label
  telemetry   map[int64]map[sm.CheckClass]map[string]*sm.CheckClassTelemetry
  ```
  CAL's are stored as `[]sm.CostAttributionLabel`, which can not be indexed in a map. Two methods were introduced:
  1. `serializeCal`
  2. `deserializeCal`
  The methods allows the program to go from a slice to a string for the key and back. 
  To preserve existing state, if no cost attribution labels are set, then the executions are tracked with the key `__MISSING__`. When executions are pushed to the API, this gets deserialized to `[]sm.CostAttributionLabel{}` which preserves the API's ability to emit the telemetry as it does today. A PR will be made to the API which will handle the scenarios where no cost attribution labels are set(existing state today), and when the slice is set. 
  - chore: Update module golang.org/x/sync to v0.19.0 (#1646)
  | datasource | package           | from    | to      |
  | ---------- | ----------------- | ------- | ------- |
  | go         | golang.org/x/sync | v0.18.0 | v0.19.0 |
  Co-authored-by: renovate-sh-app[bot] <219655108+renovate-sh-app[bot]@users.noreply.github.com>
  - chore: Update actions/create-github-app-token action to v2.2.1 (#1645)
  | datasource  | package                         | from   | to     |
  | ----------- | ------------------------------- | ------ | ------ |
  | github-tags | actions/create-github-app-token | v2.2.0 | v2.2.1 |
  Co-authored-by: renovate-sh-app[bot] <219655108+renovate-sh-app[bot]@users.noreply.github.com>
  - feat: Resolve memcached servers (#1627)
  In order to allow the user to pass a hostname on the command line (that
  might resolve to multiple IP addresses), perform DNS resolution when
  creating the Memcached client. The servers are resolved again on a
  periodic basis to account for possible changes in IP addresses (as might
  happen in a k8s cluster).
  - chore: Update actions/checkout action to v6.0.1 (#1639)
  | datasource  | package          | from   | to     |
  | ----------- | ---------------- | ------ | ------ |
  | github-tags | actions/checkout | v6.0.0 | v6.0.1 |
  Co-authored-by: renovate-sh-app[bot] <219655108+renovate-sh-app[bot]@users.noreply.github.com>
  - chore: Update docker:dind Docker digest to 40916fb (#1637)
  Co-authored-by: renovate-sh-app[bot] <219655108+renovate-sh-app[bot]@users.noreply.github.com>
  - chore: Update alpine Docker tag to v3.23.0 (#1641)
  | datasource | package | from   | to     |
  | ---------- | ------- | ------ | ------ |
  | docker     | alpine  | 3.22.2 | 3.23.0 |
  Co-authored-by: renovate-sh-app[bot] <219655108+renovate-sh-app[bot]@users.noreply.github.com>
  - chore: Update grafana/shared-workflows digest to 02bf120 (#1634)
  Co-authored-by: renovate-sh-app[bot] <219655108+renovate-sh-app[bot]@users.noreply.github.com>
  - chore: Update actions/checkout digest to 8e8c483 (#1638)
  Co-authored-by: renovate-sh-app[bot] <219655108+renovate-sh-app[bot]@users.noreply.github.com>
  - chore: Update golang.org/x/exp digest to 87e1e73 (#1633)
  | datasource | package          | from                               | to                                 |
  | ---------- | ---------------- | ---------------------------------- | ---------------------------------- |
  | go         | golang.org/x/exp | v0.0.0-20251113190631-e25ba8c21ef6 | v0.0.0-20251125195548-87e1e737ad39 |
  Co-authored-by: renovate-sh-app[bot] <219655108+renovate-sh-app[bot]@users.noreply.github.com>


