Skip to content

Conversation

@adela-almasan
Copy link
Contributor

@adela-almasan adela-almasan commented Aug 11, 2025

This PR introduces authenticated HTTP requests for viz actions by integrating with the Infinity datasource. Users can now perform actions that require authentication (Basic Auth, Digest Auth, API keys, etc.) by leveraging pre-configured Infinity datasource connections.

Viewers cannot see/execute actions.

Infinity set up for basic authentication:

inifinity-basic-auth

Test endpoints:

Authenticated requests via actions:

actions.auth.with.infinity.mov

Test dashboard:
TS - Actions w/ Infinity auth

TODO:

  • Skip rendering the cell for Table?

Please check that:

  • It works as expected from a user's perspective.
  • If this is a pre-GA feature, it is behind a feature toggle.
  • The docs are updated, and if this is a notable improvement, it's added to our What's New doc.

@adela-almasan adela-almasan added this to the 12.2.x milestone Aug 11, 2025
@adela-almasan adela-almasan self-assigned this Aug 11, 2025
@adela-almasan adela-almasan added the area/actions Issues related to viz actions label Aug 11, 2025
@grafana-pr-automation grafana-pr-automation bot added the levitate breaking change A label indicating a breaking change and assigned by Levitate. label Aug 15, 2025
@grafana-pr-automation grafana-pr-automation bot requested review from a team and s4kh and removed request for a team August 15, 2025 18:58
@grafana-pr-automation grafana-pr-automation bot requested a review from a team August 15, 2025 20:52
@torkelo torkelo requested a review from ryantxu August 27, 2025 07:12
@ryantxu
Copy link
Contributor

ryantxu commented Aug 27, 2025

/deploy-to-hg

@ephemeral-instances-bot
Copy link

  • Preparing your instance. A comment containing your instance's url will be added to this PR when the instance is ready.
  • Your instance will be ready in ~10 minutes. Follow the workflow progress
  • Slack channel: #proj-ephemeral-hg-instances
  • Building instance with adela/actions_infinity_auth oss branch and main enterprise branch. How to choose a branch

@ephemeral-instances-bot
Copy link

  • Preparing your instance. A comment containing your instance's url will be added to this PR when the instance is ready.
  • Your instance will be ready in ~10 minutes. Follow the workflow progress
  • Slack channel: #proj-ephemeral-hg-instances
  • Building instance with adela/actions_infinity_auth oss branch and main enterprise branch. How to choose a branch

@ephemeral-instances-bot
Copy link

Error building instance: Contact #proj-ephemeral-hg-instances if it is not a compile error. Logs

Error message

handling pull request comment event: running grafana-build deb: executing command: stdout= stderr=go: downloading dagger.io/dagger v0.18.8
go: downloading github.com/urfave/cli/v2 v2.27.7
go: downloading golang.org/x/sync v0.16.0
go: downloading github.com/Masterminds/semver v1.5.0
go: downloading go.opentelemetry.io/otel/trace v1.37.0
go: downloading github.com/Khan/genqlient v0.8.1
go: downloading github.com/vektah/gqlparser/v2 v2.5.27
go: downloading github.com/99designs/gqlgen v0.17.73
go: downloading go.opentelemetry.io/otel v1.37.0
go: downloading github.com/adrg/xdg v0.5.3
go: downloading go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploghttp v0.12.2
go: downloading github.com/mitchellh/go-homedir v1.1.0
go: downloading go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploggrpc v0.12.2
go: downloading go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc v1.37.0
go: downloading go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp v1.37.0
go: downloading go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.37.0
go: downloading go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.37.0
go: downloading go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.37.0
go: downloading go.opentelemetry.io/otel/log v0.12.2
go: downloading go.opentelemetry.io/otel/metric v1.37.0
go: downloading go.opentelemetry.io/otel/sdk v1.37.0
go: downloading github.com/urfave/cli v1.22.16
go: downloading go.opentelemetry.io/otel/sdk/log v0.12.2
go: downloading go.opentelemetry.io/otel/sdk/metric v1.37.0
go: downloading go.opentelemetry.io/proto/otlp v1.7.0
go: downloading google.golang.org/grpc v1.74.2
go: downloading github.com/google/uuid v1.6.0
go: downloading github.com/cpuguy83/go-md2man/v2 v2.0.7
go: downloading github.com/xrash/smetrics v0.0.0-20240521201337-686a1a2994c1
go: downloading github.com/sosodev/duration v1.3.1
go: downloading github.com/go-logr/logr v1.4.3
go: downloading golang.org/x/sys v0.35.0
go: downloading google.golang.org/protobuf v1.36.6
go: downloading google.golang.org/genproto/googleapis/rpc v0.0.0-20250603155806-513f23925822
go: downloading github.com/go-logr/stdr v1.2.2
go: downloading github.com/cpuguy83/go-md2man v1.0.10
go: downloading go.opentelemetry.io/auto/sdk v1.1.0
go: downloading github.com/cenkalti/backoff/v5 v5.0.2
go: downloading google.golang.org/genproto v0.0.0-20250603155806-513f23925822
go: downloading github.com/grpc-ecosystem/grpc-gateway/v2 v2.27.1
go: downloading github.com/grpc-ecosystem/grpc-gateway v1.16.0
go: downloading github.com/russross/blackfriday/v2 v2.1.0
go: downloading google.golang.org/genproto/googleapis/api v0.0.0-20250603155806-513f23925822
go: downloading github.com/russross/blackfriday v1.6.0
go: downloading golang.org/x/net v0.43.0
go: downloading golang.org/x/text v0.28.0
2025/09/02 19:01:04 if git -C src checkout adela/actions_infinity_auth; then echo "checked out adela/actions_infinity_auth"; else exit 3; fi
time=2025-09-02T19:05:57.338Z level=INFO msg="Initializing tar.gz artifact with options" name=grafana-pro "build ID"=12345 version=12.2.0 distro=linux/amd64 static=true enterprise=true
2025/09/02 19:05:57 if git -C src checkout adela/actions_infinity_auth; then echo "checked out adela/actions_infinity_auth"; else exit 3; fi
2025/09/02 19:05:57 if git -C src checkout main; then echo "checked out main"; else exit 3; fi
time=2025-09-02T19:06:02.983Z level=INFO msg="Initializing backend artifact with options" static=true version=12.2.0 name=grafana-pro distro=linux/amd64
2025/09/02 19:06:02 if git -C src checkout main; then echo "checked out main"; else exit 3; fi
time=2025-09-02T19:06:08.507Z level=INFO msg="initializing Pro Docker artifact" Org=hosted-grafana registry=us.gcr.io repo=hosted-grafana-pro tag=12.2.0-ephemeral-oss-109493-69940-1
time=2025-09-02T19:06:08.507Z level=INFO msg="Adding artifact to dag..." filename=grafana-pro_12.2.0_12345_linux_amd64.docker-pro.tar.gz artifact=docker-pro:pro:linux/amd64
time=2025-09-02T19:06:08.507Z level=INFO msg="getting dependencies..." artifact=docker-pro:pro:linux/amd64 filename=grafana-pro_12.2.0_12345_linux_amd64.docker-pro.tar.gz service=ArtifactHandler
time=2025-09-02T19:06:08.507Z level=INFO msg="got dependencies" artifact=docker-pro:pro:linux/amd64 filename=grafana-pro_12.2.0_12345_linux_amd64.docker-pro.tar.gz service=ArtifactHandler count=1
time=2025-09-02T19:06:08.507Z level=INFO msg="getting dependencies..." artifact=docker-pro:pro:linux/amd64 filename=grafana-pro_12.2.0_12345_linux_amd64.deb service=ArtifactHandler
time=2025-09-02T19:06:08.507Z level=INFO msg="got dependencies" artifact=docker-pro:pro:linux/amd64 filename=grafana-pro_12.2.0_12345_linux_amd64.deb service=ArtifactHandler count=1
time=2025-09-02T19:06:08.507Z level=INFO msg="getting dependencies..." artifact=docker-pro:pro:linux/amd64 filename=grafana-pro_12.2.0_12345_linux_amd64.tar.gz service=ArtifactHandler
time=2025-09-02T19:06:08.507Z level=INFO msg="got dependencies" artifact=docker-pro:pro:linux/amd64 filename=grafana-pro_12.2.0_12345_linux_amd64.tar.gz service=ArtifactHandler count=3
time=2025-09-02T19:06:08.507Z level=INFO msg="getting dependencies..." artifact=docker-pro:pro:linux/amd64 filename=bin/grafana-pro/linux/amd64 service=ArtifactHandler
time=2025-09-02T19:06:08.507Z level=INFO msg="got dependencies" artifact=docker-pro:pro:linux/amd64 filename=bin/grafana-pro/linux/amd64 service=ArtifactHandler count=0
time=2025-09-02T19:06:08.507Z level=INFO msg="getting builder..." artifact=docker-pro:pro:linux/amd64 filename=bin/grafana-pro/linux/amd64 service=ArtifactHandler
time=2025-09-02T19:06:08.508Z level=INFO msg="got builder" artifact=docker-pro:pro:linux/amd64 filename=bin/grafana-pro/linux/amd64 service=ArtifactHandler
time=2025-09-02T19:06:08.508Z level=INFO msg="building directory..." artifact=docker-pro:pro:linux/amd64 filename=bin/grafana-pro/linux/amd64 service=ArtifactHandler
2025/09/02 19:06:08 Building with command 'if [ -d pkg/cmd/grafana ]; then go build -buildvcs=false -ldflags="-w -s -X "main.version=12.2.0" -X "main.commit=$(cat ./.buildinfo.commit)" -X "main.buildBranch=$(cat ./.buildinfo.branch)" -X "main.enterpriseCommit=$(cat ./.buildinfo.enterprise-commit)" -linkmode=external -extldflags=-static " -o=bin/grafana-pro/linux/amd64/grafana -trimpath -tags=osusergo,timetzdata,pro ./pkg/cmd/grafana; fi'
2025/09/02 19:06:08 Building with command 'if [ -d pkg/cmd/grafana-server ]; then go build -buildvcs=false -ldflags="-w -s -X "main.version=12.2.0" -X "main.commit=$(cat ./.buildinfo.commit)" -X "main.buildBranch=$(cat ./.buildinfo.branch)" -X "main.enterpriseCommit=$(cat ./.buildinfo.enterprise-commit)" -linkmode=external -extldflags=-static " -o=bin/grafana-pro/linux/amd64/grafana-server -trimpath -tags=osusergo,timetzdata,pro ./pkg/cmd/grafana-server; fi'
2025/09/02 19:06:08 Building with command 'if [ -d pkg/cmd/grafana-cli ]; then go build -buildvcs=false -ldflags="-w -s -X "main.version=12.2.0" -X "main.commit=$(cat ./.buildinfo.commit)" -X "main.buildBranch=$(cat ./.buildinfo.branch)" -X "main.enterpriseCommit=$(cat ./.buildinfo.enterprise-commit)" -linkmode=external -extldflags=-static " -o=bin/grafana-pro/linux/amd64/grafana-cli -trimpath -tags=osusergo,timetzdata,pro ./pkg/cmd/grafana-cli; fi'
2025/09/02 19:06:08 Building with command 'if [ -d pkg/cmd/grafana-example-apiserver ]; then go build -buildvcs=false -ldflags="-w -s -X "main.version=12.2.0" -X "main.commit=$(cat ./.buildinfo.commit)" -X "main.buildBranch=$(cat ./.buildinfo.branch)" -X "main.enterpriseCommit=$(cat ./.buildinfo.enterprise-commit)" -linkmode=external -extldflags=-static " -o=bin/grafana-pro/linux/amd64/grafana-example-apiserver -trimpath -tags=osusergo,timetzdata,pro ./pkg/cmd/grafana-example-apiserver; fi'
time=2025-09-02T19:06:08.508Z level=INFO msg="done building directory" artifact=docker-pro:pro:linux/amd64 filename=bin/grafana-pro/linux/amd64 service=ArtifactHandler
time=2025-09-02T19:06:08.508Z level=INFO msg="getting dependencies..." artifact=docker-pro:pro:linux/amd64 filename=12.2.0/grafana-enterprise/public service=ArtifactHandler
time=2025-09-02T19:06:08.508Z level=INFO msg="got dependencies" artifact=docker-pro:pro:linux/amd64 filename=12.2.0/grafana-enterprise/public service=ArtifactHandler count=0
time=2025-09-02T19:06:08.508Z level=INFO msg="getting builder..." artifact=docker-pro:pro:linux/amd64 filename=12.2.0/grafana-enterprise/public service=ArtifactHandler
time=2025-09-02T19:06:59.140Z level=INFO msg="got builder" artifact=docker-pro:pro:linux/amd64 filename=12.2.0/grafana-enterprise/public service=ArtifactHandler
time=2025-09-02T19:06:59.141Z level=INFO msg="building directory..." artifact=docker-pro:pro:linux/amd64 filename=12.2.0/grafana-enterprise/public service=ArtifactHandler
time=2025-09-02T19:06:59.141Z level=INFO msg="done building directory" artifact=docker-pro:pro:linux/amd64 filename=12.2.0/grafana-enterprise/public service=ArtifactHandler
time=2025-09-02T19:06:59.141Z level=INFO msg="getting dependencies..." artifact=docker-pro:pro:linux/amd64 filename=bin/bundled-plugins service=ArtifactHandler
time=2025-09-02T19:06:59.141Z level=INFO msg="got dependencies" artifact=docker-pro:pro:linux/amd64 filename=bin/bundled-plugins service=ArtifactHandler count=0
time=2025-09-02T19:06:59.141Z level=INFO msg="getting builder..." artifact=docker-pro:pro:linux/amd64 filename=bin/bundled-plugins service=ArtifactHandler
time=2025-09-02T19:06:59.149Z level=INFO msg="got builder" artifact=docker-pro:pro:linux/amd64 filename=bin/bundled-plugins service=ArtifactHandler
time=2025-09-02T19:06:59.149Z level=INFO msg="building directory..." artifact=docker-pro:pro:linux/amd64 filename=bin/bundled-plugins service=ArtifactHandler
time=2025-09-02T19:06:59.149Z level=INFO msg="done building directory" artifact=docker-pro:pro:linux/amd64 filename=bin/bundled-plugins service=ArtifactHandler
time=2025-09-02T19:06:59.149Z level=INFO msg="getting builder..." artifact=docker-pro:pro:linux/amd64 filename=grafana-pro_12.2.0_12345_linux_amd64.tar.gz service=ArtifactHandler
time=2025-09-02T19:06:59.149Z level=INFO msg="got builder" artifact=docker-pro:pro:linux/amd64 filename=grafana-pro_12.2.0_12345_linux_amd64.tar.gz service=ArtifactHandler
time=2025-09-02T19:06:59.149Z level=INFO msg="building file..." artifact=docker-pro:pro:linux/amd64 filename=grafana-pro_12.2.0_12345_linux_amd64.tar.gz service=ArtifactHandler
time=2025-09-02T19:06:59.149Z level=INFO msg="done building file" artifact=docker-pro:pro:linux/amd64 filename=grafana-pro_12.2.0_12345_linux_amd64.tar.gz service=ArtifactHandler
time=2025-09-02T19:06:59.149Z level=INFO msg="getting builder..." artifact=docker-pro:pro:linux/amd64 filename=grafana-pro_12.2.0_12345_linux_amd64.deb service=ArtifactHandler
time=2025-09-02T19:06:59.149Z level=INFO msg="got builder" artifact=docker-pro:pro:linux/amd64 filename=grafana-pro_12.2.0_12345_linux_amd64.deb service=ArtifactHandler
time=2025-09-02T19:06:59.149Z level=INFO msg="building file..." artifact=docker-pro:pro:linux/amd64 filename=grafana-pro_12.2.0_12345_linux_amd64.deb service=ArtifactHandler
time=2025-09-02T19:06:59.149Z level=INFO msg="done building file" artifact=docker-pro:pro:linux/amd64 filename=grafana-pro_12.2.0_12345_linux_amd64.deb service=ArtifactHandler
time=2025-09-02T19:06:59.149Z level=INFO msg="getting builder..." artifact=docker-pro:pro:linux/amd64 filename=grafana-pro_12.2.0_12345_linux_amd64.docker-pro.tar.gz service=ArtifactHandler
time=2025-09-02T19:06:59.149Z level=INFO msg="got builder" artifact=docker-pro:pro:linux/amd64 filename=grafana-pro_12.2.0_12345_linux_amd64.docker-pro.tar.gz service=ArtifactHandler
time=2025-09-02T19:06:59.149Z level=INFO msg="building file..." artifact=docker-pro:pro:linux/amd64 filename=grafana-pro_12.2.0_12345_linux_amd64.docker-pro.tar.gz service=ArtifactHandler
time=2025-09-02T19:06:59.149Z level=INFO msg="done building file" artifact=docker-pro:pro:linux/amd64 filename=grafana-pro_12.2.0_12345_linux_amd64.docker-pro.tar.gz service=ArtifactHandler
time=2025-09-02T19:06:59.149Z level=INFO msg="Done adding artifact" filename=grafana-pro_12.2.0_12345_linux_amd64.docker-pro.tar.gz artifact=docker-pro:pro:linux/amd64
time=2025-09-02T19:06:59.149Z level=INFO msg="Exporting artifacts..."
time=2025-09-02T19:06:59.149Z level=INFO msg="Started exporting artifact..." artifact=docker-pro:pro:linux/amd64 action=export
time=2025-09-02T19:06:59.149Z level=INFO msg="Acquiring semaphore" artifact=docker-pro:pro:linux/amd64 action=export
time=2025-09-02T19:06:59.149Z level=INFO msg="Acquired semaphore" artifact=docker-pro:pro:linux/amd64 action=export
time=2025-09-02T19:06:59.149Z level=INFO msg="Exporting artifact" artifact=docker-pro:pro:linux/amd64 action=export
error exporting artifact 'grafana-pro_12.2.0_12345_linux_amd64.docker-pro.tar.gz': input: container.from.withExec.withExec.withExec.withExec.withExec.withExec.withExec.withExec.withExec.withExec.withExec.withEnvVariable.withEnvVariable.withEnvVariable.withEnvVariable.withEnvVariable.withEnvVariable.withEnvVariable.withEnvVariable.withMountedCache.withEnvVariable.withDirectory.withDirectory.withDirectory.withDirectory.withFile.withDirectory.withDirectory.withDirectory.withDirectory.withFile.withFile.withWorkdir.withFile.withEnvVariable.withMountedCache.withExec.withFile.withFile.withFile.withExec.withExec.withExec.withExec.directory process "/bin/sh -c if [ -d pkg/cmd/grafana ]; then go build -buildvcs=false -ldflags="-w -s -X \"main.version=12.2.0\" -X \"main.commit=$(cat ./.buildinfo.commit)\" -X \"main.buildBranch=$(cat ./.buildinfo.branch)\" -X \"main.enterpriseCommit=$(cat ./.buildinfo.enterprise-commit)\" -linkmode=external -extldflags=-static " -o=bin/grafana-pro/linux/amd64/grafana -trimpath -tags=osusergo,timetzdata,pro ./pkg/cmd/grafana; fi" did not complete successfully: exit code: 1

exit status 1
exit status 1

@adela-almasan
Copy link
Contributor Author

/deploy-to-hg

@ephemeral-instances-bot
Copy link

  • Preparing your instance. A comment containing your instance's url will be added to this PR when the instance is ready.
  • Your instance will be ready in ~10 minutes. Follow the workflow progress
  • Slack channel: #proj-ephemeral-hg-instances
  • Building instance with adela/actions_infinity_auth oss branch and main enterprise branch. How to choose a branch

@ephemeral-instances-bot
Copy link

Copy link
Contributor

@ryantxu ryantxu left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM -- this is a good way to get this feature usable while we figure out a less awkward backend proxy approach.

@adela-almasan
Copy link
Contributor Author

/deploy-to-hg

@ephemeral-instances-bot
Copy link

  • Preparing your instance. A comment containing your instance's url will be added to this PR when the instance is ready.
  • Your instance will be ready in ~10 minutes. Follow the workflow progress
  • Slack channel: #proj-ephemeral-hg-instances
  • Building instance with adela/actions_infinity_auth oss branch and main enterprise branch. How to choose a branch

@ephemeral-instances-bot
Copy link

@adela-almasan
Copy link
Contributor Author

/deploy-to-hg

@ephemeral-instances-bot
Copy link

  • Preparing your instance. A comment containing your instance's url will be added to this PR when the instance is ready.
  • Your instance will be ready in ~10 minutes. Follow the workflow progress
  • Slack channel: #proj-ephemeral-hg-instances
  • Building instance with adela/actions_infinity_auth oss branch and main enterprise branch. How to choose a branch

data,
headers: requestHeaders,
params: requestQueryParams,
body_type: 'raw',
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Shall I assume that the remaining body_types will be supported later?

Copy link
Contributor

@leeoniya leeoniya Sep 4, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

we don't really understand how body_type differs or relates to body_content_type, which kinda-sorta maps to content-type headers? except it's a bit odd that body_content_type list does not include the web standard application/x-www-form-urlencoded 🤷

is there something that the other body_type options offer that is not covered by our current options with raw? 🤔

image

@ephemeral-instances-bot
Copy link

@adela-almasan adela-almasan merged commit 4f70b93 into main Sep 4, 2025
170 of 174 checks passed
@adela-almasan adela-almasan deleted the adela/actions_infinity_auth branch September 4, 2025 01:56
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

6 participants