From 5ce827ce4c0d2174686f1422cc535aff430ea578 Mon Sep 17 00:00:00 2001 From: Kevin Minehart <5140827+kminehart@users.noreply.github.com> Date: Tue, 29 Jul 2025 09:25:21 -0500 Subject: [PATCH] CI: Use playwright in daggerbuild (#108860) * Use playwright in daggerbuild * use e2e-playwright image --- .../daggerbuild/artifacts/package_targz.go | 6 ++- pkg/build/daggerbuild/docker/verify.go | 6 ++- pkg/build/daggerbuild/e2e/validate_package.go | 37 ++++++------------- pkg/build/daggerbuild/fpm/verify.go | 18 ++++++++- pkg/build/e2e-playwright/main.go | 3 +- .../frontend_container.go} | 2 +- 6 files changed, 41 insertions(+), 31 deletions(-) rename pkg/build/{e2e-playwright/frontend.go => e2eutil/frontend_container.go} (99%) diff --git a/pkg/build/daggerbuild/artifacts/package_targz.go b/pkg/build/daggerbuild/artifacts/package_targz.go index 93e09112ceb..56ea04030b3 100644 --- a/pkg/build/daggerbuild/artifacts/package_targz.go +++ b/pkg/build/daggerbuild/artifacts/package_targz.go @@ -378,8 +378,12 @@ func verifyTarball( WithExposedPort(3000).AsService(dagger.ContainerAsServiceOpts{ Args: []string{"./bin/grafana", "server"}, }) + result, err := e2e.ValidatePackage(ctx, d, svc, src, yarnCache, nodeVersion) + if err != nil { + return err + } - if _, err := containers.ExitError(ctx, e2e.ValidatePackage(d, svc, src, yarnCache, nodeVersion)); err != nil { + if _, err := containers.ExitError(ctx, result); err != nil { return err } return nil diff --git a/pkg/build/daggerbuild/docker/verify.go b/pkg/build/daggerbuild/docker/verify.go index 52b6a5eac2c..56e8ff3118e 100644 --- a/pkg/build/daggerbuild/docker/verify.go +++ b/pkg/build/daggerbuild/docker/verify.go @@ -40,7 +40,11 @@ func Verify( WithExposedPort(3000) // TODO: Add LICENSE to containers and implement validation - container := e2e.ValidatePackage(d, service.AsService(), src, yarnCache, nodeVersion) + container, err := e2e.ValidatePackage(ctx, d, service.AsService(), src, yarnCache, nodeVersion) + if err != nil { + return err + } + _, err = containers.ExitError(ctx, container) return err } diff --git a/pkg/build/daggerbuild/e2e/validate_package.go b/pkg/build/daggerbuild/e2e/validate_package.go index c786b4a991b..3bcc1c5f936 100644 --- a/pkg/build/daggerbuild/e2e/validate_package.go +++ b/pkg/build/daggerbuild/e2e/validate_package.go @@ -1,32 +1,19 @@ package e2e import ( + "context" + "dagger.io/dagger" - "github.com/grafana/grafana/pkg/build/daggerbuild/frontend" + "github.com/grafana/grafana/pkg/build/e2eutil" ) -func CypressImage(version string) string { - return "cypress/included:13.1.0" -} - -// CypressContainer returns a docker container with everything set up that is needed to build or run e2e tests. -func CypressContainer(d *dagger.Client, base string) *dagger.Container { - container := d.Container().From(base).WithEntrypoint([]string{}) - - return container -} - -func ValidatePackage(d *dagger.Client, service *dagger.Service, src *dagger.Directory, yarnCacheVolume *dagger.CacheVolume, nodeVersion string) *dagger.Container { - // The cypress container should never be cached - c := CypressContainer(d, CypressImage(nodeVersion)) - - c = frontend.WithYarnCache(c, yarnCacheVolume) - - return c.WithDirectory("/src", src). - WithWorkdir("/src"). - WithServiceBinding("grafana", service). - WithEnvVariable("HOST", "grafana"). - WithEnvVariable("PORT", "3000"). - WithExec([]string{"yarn", "install", "--immutable"}). - WithExec([]string{"/bin/sh", "-c", "/src/e2e/verify-release"}) +func ValidatePackage(ctx context.Context, d *dagger.Client, service *dagger.Service, src *dagger.Directory, yarnCacheVolume *dagger.CacheVolume, nodeVersion string) (*dagger.Container, error) { + c, err := e2eutil.WithFrontendContainer(ctx, d, src) + if err != nil { + return nil, err + } + + return c.WithServiceBinding("grafana", service). + WithEnvVariable("GRAFANA_URL", "http://grafana:3000"). + WithExec([]string{"yarn", "e2e:acceptance"}), nil } diff --git a/pkg/build/daggerbuild/fpm/verify.go b/pkg/build/daggerbuild/fpm/verify.go index a169d9b8b75..fcaaafeba0e 100644 --- a/pkg/build/daggerbuild/fpm/verify.go +++ b/pkg/build/daggerbuild/fpm/verify.go @@ -41,7 +41,12 @@ func VerifyDeb(ctx context.Context, d *dagger.Client, file *dagger.File, src *da Args: []string{"grafana-server"}, }) - if _, err := containers.ExitError(ctx, e2e.ValidatePackage(d, svc, src, yarn, nodeVersion)); err != nil { + result, err := e2e.ValidatePackage(ctx, d, svc, src, yarn, nodeVersion) + if err != nil { + return err + } + + if _, err := containers.ExitError(ctx, result); err != nil { return err } @@ -75,7 +80,16 @@ func VerifyRpm(ctx context.Context, d *dagger.Client, file *dagger.File, src *da WithExec([]string{"grafana-server"}). WithExposedPort(3000) - if _, err := containers.ExitError(ctx, e2e.ValidatePackage(d, service.AsService(), src, yarn, nodeVersion)); err != nil { + svc := service.WithExposedPort(3000).AsService(dagger.ContainerAsServiceOpts{ + Args: []string{"grafana-server"}, + }) + + result, err := e2e.ValidatePackage(ctx, d, svc, src, yarn, nodeVersion) + if err != nil { + return err + } + + if _, err := containers.ExitError(ctx, result); err != nil { return err } if !sign { diff --git a/pkg/build/e2e-playwright/main.go b/pkg/build/e2e-playwright/main.go index 0a0c2cb62bb..c7ec56c8869 100644 --- a/pkg/build/e2e-playwright/main.go +++ b/pkg/build/e2e-playwright/main.go @@ -8,6 +8,7 @@ import ( "os/signal" "dagger.io/dagger" + "github.com/grafana/grafana/pkg/build/e2eutil" "github.com/urfave/cli/v3" ) @@ -143,7 +144,7 @@ func run(ctx context.Context, cmd *cli.Command) error { }, }) - frontendContainer, err := WithFrontendContainer(ctx, d, yarnHostSrc) + frontendContainer, err := e2eutil.WithFrontendContainer(ctx, d, yarnHostSrc) if err != nil { return fmt.Errorf("failed to create frontend container: %w", err) } diff --git a/pkg/build/e2e-playwright/frontend.go b/pkg/build/e2eutil/frontend_container.go similarity index 99% rename from pkg/build/e2e-playwright/frontend.go rename to pkg/build/e2eutil/frontend_container.go index 625ea155ae4..e9de7e6c975 100644 --- a/pkg/build/e2e-playwright/frontend.go +++ b/pkg/build/e2eutil/frontend_container.go @@ -1,4 +1,4 @@ -package main +package e2eutil import ( "context"