Skip to content

Commit

Permalink
chore: boolean eval screenshots (#1904)
Browse files Browse the repository at this point in the history
* chore: fix screenshots for new ui

* chore: mv screenshots to subdir

* feat(wip): concepts docs

* chore: rm old screenshots func

* chore: finish most of the screenshots

* chore: add rollouts

* chore: add readonly screenshot

* chore: add missing eval console screen
  • Loading branch information
markphelps committed Jul 25, 2023
1 parent e9fd8e3 commit d5ef8b3
Show file tree
Hide file tree
Showing 46 changed files with 595 additions and 151 deletions.
135 changes: 135 additions & 0 deletions build/generate/screenshots.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,135 @@
package generate

import (
"context"
"crypto/sha256"
"fmt"
"log"
"os"
"path"
"time"

"dagger.io/dagger"
"golang.org/x/sync/errgroup"
)

func Screenshots(ctx context.Context, client *dagger.Client, flipt *dagger.Container) error {
src := client.Host().Directory("./ui/", dagger.HostDirectoryOpts{
Include: []string{
"./package.json",
"./package-lock.json",
"./playwright.config.ts",
"/screenshots/",
},
})

contents, err := src.File("package-lock.json").Contents(ctx)
if err != nil {
return err
}

cache := client.CacheVolume(fmt.Sprintf("node-modules-screenshot-%x", sha256.Sum256([]byte(contents))))

ui, err := client.Container().From("node:18-bullseye").
WithMountedDirectory("/src", src).WithWorkdir("/src").
WithMountedCache("/src/node_modules", cache).
WithExec([]string{"npm", "install"}).
WithExec([]string{"npx", "playwright", "install", "chromium", "--with-deps"}).
Sync(ctx)
if err != nil {
return err
}

src = client.Host().Directory("./ui/", dagger.HostDirectoryOpts{
Exclude: []string{
"./dist/",
"./node_modules/",
},
})

// remount entire directory with module cache
ui, err = ui.WithMountedDirectory("/src", src).
WithMountedCache("/src/node_modules", cache).
WithExec([]string{"npm", "install"}).
Sync(ctx)
if err != nil {
return err
}

dirs := []string{
"getting_started", "concepts", "configuration", "extra",
}

for _, dir := range dirs {
var (
g errgroup.Group
containers = make(chan *dagger.Container)
dir = dir
)

entries, err := ui.Directory("screenshot/" + dir).Entries(ctx)
if err != nil {
// skip if directory does not exist
continue
}

go func() {
_ = g.Wait()
close(containers)
}()

for _, entry := range entries {
entry := entry
g.Go(func() error {
test, err := buildUI(ctx, ui, flipt)
if err != nil {
return err
}

if ext := path.Ext(entry); ext != ".js" {
return nil
}

c, err := test.WithExec([]string{"node", path.Join("screenshot", dir, entry)}).Sync(ctx)
if err != nil {
return err
}

containers <- c
log.Printf("Generating screenshot for %s/%s\n", dir, entry)

return err
})
}

for c := range containers {
if _, err := c.Directory("screenshots").
Export(ctx, "screenshots"); err != nil {
return err
}
}
}

return err
}

func buildUI(ctx context.Context, ui, flipt *dagger.Container) (_ *dagger.Container, err error) {
flipt, err = flipt.Sync(ctx)
if err != nil {
return nil, err
}

ui, err = ui.Sync(ctx)
if err != nil {
return nil, err
}

return ui.
WithServiceBinding("flipt", flipt.
WithEnvVariable("CI", os.Getenv("CI")).
WithEnvVariable("FLIPT_AUTHENTICATION_METHODS_TOKEN_ENABLED", "true").
WithEnvVariable("UNIQUE", time.Now().String()).
WithExec(nil)).
WithFile("/usr/bin/flipt", flipt.File("/flipt")).
WithEnvVariable("FLIPT_ADDRESS", "http://flipt:8080"), nil
}
3 changes: 2 additions & 1 deletion build/magefile.go
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ import (
"dagger.io/dagger"
"github.com/magefile/mage/mg"
"github.com/magefile/mage/sh"
"go.flipt.io/flipt/build/generate"
"go.flipt.io/flipt/build/hack"
"go.flipt.io/flipt/build/internal"
"go.flipt.io/flipt/build/internal/publish"
Expand Down Expand Up @@ -160,7 +161,7 @@ type Generate mg.Namespace

func (g Generate) Screenshots(ctx context.Context) error {
return daggerBuild(ctx, func(client *dagger.Client, req internal.FliptRequest, base, flipt *dagger.Container) error {
return testing.Screenshots(ctx, client, flipt)
return generate.Screenshots(ctx, client, flipt)
})
}

Expand Down
95 changes: 0 additions & 95 deletions build/testing/ui.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,14 +2,10 @@ package testing

import (
"context"
"crypto/sha256"
"fmt"
"os"
"path"
"time"

"dagger.io/dagger"
"golang.org/x/sync/errgroup"
)

func UI(ctx context.Context, client *dagger.Client, ui, flipt *dagger.Container) error {
Expand All @@ -32,97 +28,6 @@ func UI(ctx context.Context, client *dagger.Client, ui, flipt *dagger.Container)
return nil
}

func Screenshots(ctx context.Context, client *dagger.Client, flipt *dagger.Container) error {
src := client.Host().Directory("./ui/", dagger.HostDirectoryOpts{
Include: []string{
"./package.json",
"./package-lock.json",
"./playwright.config.ts",
"/screenshots/",
},
})

contents, err := src.File("package-lock.json").Contents(ctx)
if err != nil {
return err
}

cache := client.CacheVolume(fmt.Sprintf("node-modules-screenshot-%x", sha256.Sum256([]byte(contents))))

ui, err := client.Container().From("node:18-bullseye").
WithMountedDirectory("/src", src).WithWorkdir("/src").
WithMountedCache("/src/node_modules", cache).
WithExec([]string{"npm", "install"}).
WithExec([]string{"npx", "playwright", "install", "chromium", "--with-deps"}).
Sync(ctx)
if err != nil {
return err
}

src = client.Host().Directory("./ui/", dagger.HostDirectoryOpts{
Exclude: []string{
"./dist/",
"./node_modules/",
},
})

// remount entire directory with module cache
ui, err = ui.WithMountedDirectory("/src", src).
WithMountedCache("/src/node_modules", cache).
WithExec([]string{"npm", "install"}).
Sync(ctx)
if err != nil {
return err
}

entries, err := ui.Directory("screenshot").Entries(ctx)
if err != nil {
return err
}

var (
g errgroup.Group
containers = make(chan *dagger.Container, 0)
)

go func() {
g.Wait()
close(containers)
}()

for _, entry := range entries {
entry := entry
g.Go(func() error {
test, err := buildUI(ctx, ui, flipt)
if err != nil {
return err
}

if ext := path.Ext(entry); ext != ".js" {
return nil
}

c, err := test.WithExec([]string{"node", path.Join("screenshot", entry)}).Sync(ctx)
if err != nil {
return err
}

containers <- c

return err
})
}

for c := range containers {
if _, err := c.Directory("screenshots").
Export(ctx, "screenshots"); err != nil {
return err
}
}

return g.Wait()
}

func buildUI(ctx context.Context, ui, flipt *dagger.Container) (_ *dagger.Container, err error) {
flipt, err = flipt.Sync(ctx)
if err != nil {
Expand Down
Loading

0 comments on commit d5ef8b3

Please sign in to comment.