From 9a52ddfbe7c24c41b6aa3ddc3c79c6fcbfb8db02 Mon Sep 17 00:00:00 2001 From: Arne Luenser Date: Wed, 24 Jan 2024 12:38:30 +0100 Subject: [PATCH] feat: pooled process-isolated Jsonnet VM --- .github/workflows/ci.yaml | 2 +- Makefile | 2 +- cmd/root.go | 40 ++++++++------ driver/registry.go | 7 +++ driver/registry_default.go | 87 +++++++++++++----------------- go.mod | 9 +++- go.sum | 17 +++--- internal/driver.go | 5 +- internal/testhelpers/e2e_server.go | 7 ++- main.go | 11 +--- 10 files changed, 97 insertions(+), 90 deletions(-) diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index 43129b0991ce..c39b51455b2b 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -91,7 +91,7 @@ jobs: GOGC: 100 with: args: --timeout 10m0s - version: v1.54.2 + version: v1.55.2 skip-go-installation: true skip-pkg-cache: true - name: Build Kratos diff --git a/Makefile b/Makefile index fd023e75bf13..cbee2a75fc93 100644 --- a/Makefile +++ b/Makefile @@ -49,7 +49,7 @@ docs/swagger: npx @redocly/openapi-cli preview-docs spec/swagger.json .bin/golangci-lint: Makefile - curl -sSfL https://raw.githubusercontent.com/golangci/golangci-lint/master/install.sh | sh -s -- -d -b .bin v1.54.2 + curl -sSfL https://raw.githubusercontent.com/golangci/golangci-lint/master/install.sh | sh -s -- -d -b .bin v1.55.2 .bin/hydra: Makefile bash <(curl https://raw.githubusercontent.com/ory/meta/master/install.sh) -d -b .bin hydra v2.2.0-rc.3 diff --git a/cmd/root.go b/cmd/root.go index 9364ebd3bbc3..8f85896312b2 100644 --- a/cmd/root.go +++ b/cmd/root.go @@ -6,33 +6,33 @@ package cmd import ( "errors" "fmt" - "os" + "runtime" - "github.com/ory/kratos/cmd/cleanup" - "github.com/ory/kratos/driver/config" - "github.com/ory/x/jsonnetsecure" + "github.com/spf13/cobra" + "github.com/ory/kratos/cmd/cleanup" "github.com/ory/kratos/cmd/courier" "github.com/ory/kratos/cmd/hashers" - - "github.com/ory/kratos/cmd/remote" - "github.com/ory/kratos/cmd/identities" "github.com/ory/kratos/cmd/jsonnet" "github.com/ory/kratos/cmd/migrate" + "github.com/ory/kratos/cmd/remote" "github.com/ory/kratos/cmd/serve" + "github.com/ory/kratos/driver" + "github.com/ory/kratos/driver/config" "github.com/ory/x/cmdx" - - "github.com/spf13/cobra" + "github.com/ory/x/dbal" + "github.com/ory/x/jsonnetsecure" + "github.com/ory/x/profilex" ) -func NewRootCmd() (cmd *cobra.Command) { +func NewRootCmd(driverOpts ...driver.RegistryOption) (cmd *cobra.Command) { cmd = &cobra.Command{ Use: "kratos", } cmdx.EnableUsageTemplating(cmd) - courier.RegisterCommandRecursive(cmd, nil, nil) + courier.RegisterCommandRecursive(cmd, nil, driverOpts) cmd.AddCommand(identities.NewGetCmd()) cmd.AddCommand(identities.NewDeleteCmd()) cmd.AddCommand(jsonnet.NewFormatCmd()) @@ -41,7 +41,7 @@ func NewRootCmd() (cmd *cobra.Command) { cmd.AddCommand(jsonnet.NewLintCmd()) cmd.AddCommand(identities.NewListCmd()) migrate.RegisterCommandRecursive(cmd) - serve.RegisterCommandRecursive(cmd, nil, nil) + serve.RegisterCommandRecursive(cmd, nil, driverOpts) cleanup.RegisterCommandRecursive(cmd) remote.RegisterCommandRecursive(cmd) cmd.AddCommand(identities.NewValidateCmd()) @@ -55,13 +55,23 @@ func NewRootCmd() (cmd *cobra.Command) { // Execute adds all child commands to the root command and sets flags appropriately. // This is called by main.main(). It only needs to happen once to the RootCmd. -func Execute() { - c := NewRootCmd() +func Execute() int { + defer profilex.Profile().Stop() + + dbal.RegisterDriver(func() dbal.Driver { + return driver.NewRegistryDefault() + }) + + jsonnetPool := jsonnetsecure.NewProcessPool(runtime.GOMAXPROCS(0)) + defer jsonnetPool.Close() + + c := NewRootCmd(driver.WithJsonnetPool(jsonnetPool)) if err := c.Execute(); err != nil { if !errors.Is(err, cmdx.ErrNoPrintButFail) { _, _ = fmt.Fprintln(c.ErrOrStderr(), err) } - os.Exit(1) + return 1 } + return 0 } diff --git a/driver/registry.go b/driver/registry.go index 31a3f650a62a..e87fdd076078 100644 --- a/driver/registry.go +++ b/driver/registry.go @@ -188,6 +188,7 @@ type options struct { replacementStrategies []NewStrategy extraHooks map[string]func(config.SelfServiceHook) any disableMigrationLogging bool + jsonnetPool jsonnetsecure.Pool } type RegistryOption func(*options) @@ -196,6 +197,12 @@ func SkipNetworkInit(o *options) { o.skipNetworkInit = true } +func WithJsonnetPool(pool jsonnetsecure.Pool) RegistryOption { + return func(o *options) { + o.jsonnetPool = pool + } +} + func WithConfig(config *config.Config) RegistryOption { return func(o *options) { o.config = config diff --git a/driver/registry_default.go b/driver/registry_default.go index a267d9cb637d..5349c7359d39 100644 --- a/driver/registry_default.go +++ b/driver/registry_default.go @@ -12,74 +12,56 @@ import ( "testing" "time" + "github.com/cenkalti/backoff" "github.com/dgraph-io/ristretto" - - "github.com/ory/x/jwksx" - - "github.com/ory/x/contextx" - "github.com/ory/x/jsonnetsecure" - - "github.com/ory/x/popx" - - "github.com/hashicorp/go-retryablehttp" - - "github.com/ory/x/httpx" - "github.com/ory/x/otelx" - otelsql "github.com/ory/x/otelx/sql" - "github.com/gobuffalo/pop/v6" - - "github.com/ory/nosurf" - - "github.com/ory/kratos/hydra" - "github.com/ory/kratos/selfservice/strategy/code" - "github.com/ory/kratos/selfservice/strategy/webauthn" - - "github.com/ory/kratos/selfservice/strategy/lookup" - - "github.com/ory/kratos/selfservice/strategy/totp" - + "github.com/gorilla/sessions" + "github.com/hashicorp/go-retryablehttp" "github.com/luna-duclos/instrumentedsql" + "github.com/pkg/errors" - prometheus "github.com/ory/x/prometheusx" - + "github.com/ory/herodot" "github.com/ory/kratos/cipher" "github.com/ory/kratos/continuity" + "github.com/ory/kratos/courier" + "github.com/ory/kratos/driver/config" "github.com/ory/kratos/hash" + "github.com/ory/kratos/hydra" + "github.com/ory/kratos/identity" + "github.com/ory/kratos/persistence" + "github.com/ory/kratos/persistence/sql" "github.com/ory/kratos/schema" + "github.com/ory/kratos/selfservice/errorx" + "github.com/ory/kratos/selfservice/flow/login" + "github.com/ory/kratos/selfservice/flow/logout" "github.com/ory/kratos/selfservice/flow/recovery" + "github.com/ory/kratos/selfservice/flow/registration" "github.com/ory/kratos/selfservice/flow/settings" "github.com/ory/kratos/selfservice/flow/verification" "github.com/ory/kratos/selfservice/hook" + "github.com/ory/kratos/selfservice/strategy/code" "github.com/ory/kratos/selfservice/strategy/link" + "github.com/ory/kratos/selfservice/strategy/lookup" + "github.com/ory/kratos/selfservice/strategy/oidc" + "github.com/ory/kratos/selfservice/strategy/password" "github.com/ory/kratos/selfservice/strategy/profile" + "github.com/ory/kratos/selfservice/strategy/totp" + "github.com/ory/kratos/selfservice/strategy/webauthn" + "github.com/ory/kratos/session" "github.com/ory/kratos/x" - - "github.com/cenkalti/backoff" - "github.com/gorilla/sessions" - "github.com/pkg/errors" - + "github.com/ory/nosurf" + "github.com/ory/x/contextx" "github.com/ory/x/dbal" "github.com/ory/x/healthx" - "github.com/ory/x/sqlcon" - + "github.com/ory/x/httpx" + "github.com/ory/x/jsonnetsecure" + "github.com/ory/x/jwksx" "github.com/ory/x/logrusx" - - "github.com/ory/kratos/courier" - "github.com/ory/kratos/persistence" - "github.com/ory/kratos/persistence/sql" - "github.com/ory/kratos/selfservice/flow/login" - "github.com/ory/kratos/selfservice/flow/logout" - "github.com/ory/kratos/selfservice/flow/registration" - "github.com/ory/kratos/selfservice/strategy/oidc" - - "github.com/ory/herodot" - - "github.com/ory/kratos/driver/config" - "github.com/ory/kratos/identity" - "github.com/ory/kratos/selfservice/errorx" - "github.com/ory/kratos/selfservice/strategy/password" - "github.com/ory/kratos/session" + "github.com/ory/x/otelx" + otelsql "github.com/ory/x/otelx/sql" + "github.com/ory/x/popx" + prometheus "github.com/ory/x/prometheusx" + "github.com/ory/x/sqlcon" ) type RegistryDefault struct { @@ -169,12 +151,13 @@ type RegistryDefault struct { csrfTokenGenerator x.CSRFToken jsonnetVMProvider jsonnetsecure.VMProvider + jsonnetPool jsonnetsecure.Pool jwkFetcher *jwksx.FetcherNext } func (m *RegistryDefault) JsonnetVM(ctx context.Context) (jsonnetsecure.VM, error) { if m.jsonnetVMProvider == nil { - m.jsonnetVMProvider = &jsonnetsecure.DefaultProvider{Subcommand: "jsonnet"} + m.jsonnetVMProvider = &jsonnetsecure.DefaultProvider{Subcommand: "jsonnet", Pool: m.jsonnetPool} } return m.jsonnetVMProvider.JsonnetVM(ctx) } @@ -631,6 +614,8 @@ func (m *RegistryDefault) Init(ctx context.Context, ctxer contextx.Contextualize o := newOptions(opts) + m.jsonnetPool = o.jsonnetPool + var instrumentedDriverOpts []instrumentedsql.Opt if m.Tracer(ctx).IsLoaded() { instrumentedDriverOpts = []instrumentedsql.Opt{ diff --git a/go.mod b/go.mod index 42b2bad25942..96fad3946f5b 100644 --- a/go.mod +++ b/go.mod @@ -44,7 +44,7 @@ require ( github.com/golang/mock v1.6.0 github.com/google/go-github/v27 v27.0.1 github.com/google/go-github/v38 v38.1.0 - github.com/google/go-jsonnet v0.19.0 + github.com/google/go-jsonnet v0.20.0 github.com/gorilla/sessions v1.2.1 github.com/gtank/cryptopasta v0.0.0-20170601214702-1f550f6f2f69 github.com/hashicorp/consul/api v1.20.0 @@ -75,7 +75,7 @@ require ( github.com/ory/jsonschema/v3 v3.0.8 github.com/ory/mail/v3 v3.0.0 github.com/ory/nosurf v1.2.7 - github.com/ory/x v0.0.610 + github.com/ory/x v0.0.611 github.com/peterhellberg/link v1.2.0 github.com/phayes/freeport v0.0.0-20180830031419-95f893ade6f2 github.com/pkg/errors v0.9.1 @@ -327,3 +327,8 @@ require ( mvdan.cc/sh/v3 v3.3.0-0.dev.0.20210224101809-fb5052e7a010 // indirect sigs.k8s.io/yaml v1.3.0 // indirect ) + +require ( + github.com/jackc/puddle/v2 v2.1.2 // indirect + go.uber.org/atomic v1.10.0 // indirect +) diff --git a/go.sum b/go.sum index b3b463884b74..42b770741175 100644 --- a/go.sum +++ b/go.sum @@ -184,7 +184,6 @@ github.com/evanphx/json-patch/v5 v5.6.0/go.mod h1:G79N1coSVB93tBe7j6PhzjmR3/2Vvl github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= github.com/fatih/color v1.9.0/go.mod h1:eQcE1qtQxscV5RaZvpXrrb8Drkc3/DdQ+uUYCNjL+zU= github.com/fatih/color v1.10.0/go.mod h1:ELkj/draVOlAH/xkhN6mQ50Qd0MPOk5AAr3maGEBuJM= -github.com/fatih/color v1.12.0/go.mod h1:ELkj/draVOlAH/xkhN6mQ50Qd0MPOk5AAr3maGEBuJM= github.com/fatih/color v1.13.0 h1:8LOYc1KYPPmyKMuN8QV2DNRWNbLo6LZ0iLs8+mlH53w= github.com/fatih/color v1.13.0/go.mod h1:kLAiJbzzSOZDVNGyDpeOxJ47H46qBXwg5ILebYFFOfk= github.com/fatih/structs v1.1.0 h1:Q7juDM0QtcnhCpeyLGQKyg4TOIghuNXrkL32pHAUMxo= @@ -421,8 +420,8 @@ github.com/google/go-github/v27 v27.0.1 h1:sSMFSShNn4VnqCqs+qhab6TS3uQc+uVR6TD1b github.com/google/go-github/v27 v27.0.1/go.mod h1:/0Gr8pJ55COkmv+S/yPKCczSkUPIM/LnFyubufRNIS0= github.com/google/go-github/v38 v38.1.0 h1:C6h1FkaITcBFK7gAmq4eFzt6gbhEhk7L5z6R3Uva+po= github.com/google/go-github/v38 v38.1.0/go.mod h1:cStvrz/7nFr0FoENgG6GLbp53WaelXucT+BBz/3VKx4= -github.com/google/go-jsonnet v0.19.0 h1:G7uJZhi8t1eg5NZ+PZJ3bU0GZ4suYGGy79BCtEswlbM= -github.com/google/go-jsonnet v0.19.0/go.mod h1:5JVT33JVCoehdTj5Z2KJq1eIdt3Nb8PCmZ+W5D8U350= +github.com/google/go-jsonnet v0.20.0 h1:WG4TTSARuV7bSm4PMB4ohjxe33IHT5WVTrJSU33uT4g= +github.com/google/go-jsonnet v0.20.0/go.mod h1:VbgWF9JX7ztlv770x/TolZNGGFfiHEVx9G6ca2eUmeA= github.com/google/go-querystring v1.0.0 h1:Xkwi/a1rcvNg1PPYe5vI8GbeBY/jrVuDX5ASuANWTrk= github.com/google/go-querystring v1.0.0/go.mod h1:odCYkC5MyYFN7vkCjXpyrEuKhc/BUO6wN/zVPAxq5ck= github.com/google/go-tpm v0.9.0 h1:sQF6YqWMi+SCXpsmS3fd21oPy/vSddwZry4JnmltHVk= @@ -598,6 +597,8 @@ github.com/jackc/puddle v0.0.0-20190413234325-e4ced69a3a2b/go.mod h1:m4B5Dj62Y0f github.com/jackc/puddle v0.0.0-20190608224051-11cab39313c9/go.mod h1:m4B5Dj62Y0fbyuIc15OsIqK0+JU8nkqQjsgx7dvjSWk= github.com/jackc/puddle v1.1.3/go.mod h1:m4B5Dj62Y0fbyuIc15OsIqK0+JU8nkqQjsgx7dvjSWk= github.com/jackc/puddle v1.3.0/go.mod h1:m4B5Dj62Y0fbyuIc15OsIqK0+JU8nkqQjsgx7dvjSWk= +github.com/jackc/puddle/v2 v2.1.2 h1:0f7vaaXINONKTsxYDn4otOAiJanX/BMeAtY//BXqzlg= +github.com/jackc/puddle/v2 v2.1.2/go.mod h1:2lpufsF5mRHO6SuZkm0fNYxM6SWHfvyFj62KwNzgels= github.com/jandelgado/gcov2lcov v1.0.5 h1:rkBt40h0CVK4oCb8Dps950gvfd1rYvQ8+cWa346lVU0= github.com/jandelgado/gcov2lcov v1.0.5/go.mod h1:NnSxK6TMlg1oGDBfGelGbjgorT5/L3cchlbtgFYZSss= github.com/jarcoal/httpmock v1.0.5 h1:cHtVEcTxRSX4J0je7mWPfc9BpDpqzXSJ5HbymZmyHck= @@ -828,8 +829,8 @@ github.com/ory/nosurf v1.2.7 h1:YrHrbSensQyU6r6HT/V5+HPdVEgrOTMJiLoJABSBOp4= github.com/ory/nosurf v1.2.7/go.mod h1:d4L3ZBa7Amv55bqxCBtCs63wSlyaiCkWVl4vKf3OUxA= github.com/ory/sessions v1.2.2-0.20220110165800-b09c17334dc2 h1:zm6sDvHy/U9XrGpixwHiuAwpp0Ock6khSVHkrv6lQQU= github.com/ory/sessions v1.2.2-0.20220110165800-b09c17334dc2/go.mod h1:dk2InVEVJ0sfLlnXv9EAgkf6ecYs/i80K/zI+bUmuGM= -github.com/ory/x v0.0.610 h1:SY1X5jfJVq45zeZEIc1XWqlE+lna+rMjeLxMoRdx0bY= -github.com/ory/x v0.0.610/go.mod h1:FkkwV9h7U9VqDe6Xkdl7KKLCfDC1sQcO+q2iCBAA0Ho= +github.com/ory/x v0.0.611 h1:mB23kkg8EYebmKo25JYubXQZmu1l4qLFJnkwr3DnpzA= +github.com/ory/x v0.0.611/go.mod h1:uH065puz8neija0neqwIN3PmXXfDsB9VbZTZ20Znoos= github.com/pascaldekloe/goe v0.0.0-20180627143212-57f6aae5913c/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= github.com/pascaldekloe/goe v0.1.0 h1:cBOtyMzM9HTpWjXfbbunk26uA6nG3a8n06Wieeh0MwY= github.com/pascaldekloe/goe v0.1.0/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= @@ -927,7 +928,6 @@ github.com/segmentio/conf v1.2.0/go.mod h1:Y3B9O/PqqWqjyxyWWseyj/quPEtMu1zDp/kVb github.com/segmentio/go-snakecase v1.1.0/go.mod h1:jk1miR5MS7Na32PZUykG89Arm+1BUSYhuGR6b7+hJto= github.com/segmentio/objconv v1.0.1/go.mod h1:auayaH5k3137Cl4SoXTgrzQcuQDmvuVtZgS0fb1Ahys= github.com/sergi/go-diff v1.0.0/go.mod h1:0CfEIISq7TuYL3j771MWULgwwjU+GofnZX9QAmXWZgo= -github.com/sergi/go-diff v1.1.0/go.mod h1:STckp+ISIX8hZLjrqAeVduY0gWCT9IjLuqbuNXdaHfM= github.com/sergi/go-diff v1.2.0 h1:XU+rvMAioB0UC3q1MFrIQy4Vo5/4VsRDQQXHsEya6xQ= github.com/sergi/go-diff v1.2.0/go.mod h1:STckp+ISIX8hZLjrqAeVduY0gWCT9IjLuqbuNXdaHfM= github.com/shopspring/decimal v0.0.0-20180709203117-cd690d0c9e24/go.mod h1:M+9NzErvs504Cn4c5DxATwIqPbtswREoFCre64PpcG4= @@ -1089,6 +1089,8 @@ go.uber.org/atomic v1.3.2/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= go.uber.org/atomic v1.4.0/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= go.uber.org/atomic v1.5.0/go.mod h1:sABNBOSYdrvTF6hTgEIbc7YasKWGhgEQZyfxyTvoXHQ= go.uber.org/atomic v1.6.0/go.mod h1:sABNBOSYdrvTF6hTgEIbc7YasKWGhgEQZyfxyTvoXHQ= +go.uber.org/atomic v1.10.0 h1:9qC72Qh0+3MqyJbAn8YU5xVq1frD8bn3JtD2oXtafVQ= +go.uber.org/atomic v1.10.0/go.mod h1:LUxbIzbOniOlMKjJjyPfpl4v+PKK2cNJn91OQbhoJI0= go.uber.org/goleak v1.2.1 h1:NBol2c7O1ZokfZ0LEU9K6Whx/KnwvepVetCUhtKja4A= go.uber.org/goleak v1.2.1/go.mod h1:qlT2yGI9QafXHhZZLxlSuNsMw3FFLxBr+tBRlmO1xH4= go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0= @@ -1335,7 +1337,6 @@ golang.org/x/sys v0.0.0-20220728004956-3c1f35247d10/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220908164124-27713097b956/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20221010170243-090e33056c14/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.2.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.3.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= @@ -1591,7 +1592,6 @@ gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.5/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.7/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= @@ -1619,6 +1619,5 @@ mvdan.cc/sh/v3 v3.3.0-0.dev.0.20210224101809-fb5052e7a010/go.mod h1:fPQmabBpREM/ rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8= rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0= rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA= -sigs.k8s.io/yaml v1.1.0/go.mod h1:UJmg0vDUVViEyp3mgSv9WPwZCDxu4rQW1olrI1uml+o= sigs.k8s.io/yaml v1.3.0 h1:a2VclLzOGrwOHDiV8EfBGhvjHvP46CtW5j6POvhYGGo= sigs.k8s.io/yaml v1.3.0/go.mod h1:GeOyir5tyXNByN85N/dRIT9es5UQNerPYEKK56eTBm8= diff --git a/internal/driver.go b/internal/driver.go index d17f2b0ca62b..a6f1f13d7954 100644 --- a/internal/driver.go +++ b/internal/driver.go @@ -6,6 +6,7 @@ package internal import ( "context" "os" + "runtime" "testing" "github.com/sirupsen/logrus" @@ -82,7 +83,9 @@ func NewRegistryDefaultWithDSN(t testing.TB, dsn string) (*config.Config, *drive reg, err := driver.NewRegistryFromDSN(ctx, c, logrusx.New("", "", logrusx.ForceLevel(logrus.ErrorLevel))) require.NoError(t, err) reg.Config().MustSet(ctx, "dev", true) - require.NoError(t, reg.Init(context.Background(), &contextx.Default{}, driver.SkipNetworkInit, driver.WithDisabledMigrationLogging())) + pool := jsonnetsecure.NewProcessPool(runtime.GOMAXPROCS(0)) + t.Cleanup(pool.Close) + require.NoError(t, reg.Init(context.Background(), &contextx.Default{}, driver.SkipNetworkInit, driver.WithDisabledMigrationLogging(), driver.WithJsonnetPool(pool))) require.NoError(t, reg.Persister().MigrateUp(context.Background())) // always migrate up actual, err := reg.Persister().DetermineNetwork(context.Background()) diff --git a/internal/testhelpers/e2e_server.go b/internal/testhelpers/e2e_server.go index 0eebca91f726..4c97303707b0 100644 --- a/internal/testhelpers/e2e_server.go +++ b/internal/testhelpers/e2e_server.go @@ -18,12 +18,14 @@ import ( "net/http" "os" "path/filepath" + "runtime" "strings" "testing" "time" "github.com/ory/kratos/driver" "github.com/ory/x/dbal" + "github.com/ory/x/jsonnetsecure" "golang.org/x/sync/errgroup" @@ -84,13 +86,16 @@ func startE2EServerOnly(t *testing.T, configFile string, isTLS bool, configOptio configx.WithValues(configOptions), ) + jsonnetPool := jsonnetsecure.NewProcessPool(runtime.GOMAXPROCS(0)) + t.Cleanup(jsonnetPool.Close) + //nolint:staticcheck //lint:ignore SA1029 we really want this ctx = context.WithValue(ctx, "dsn", dsn) ctx, cancel := context.WithCancel(ctx) executor := &cmdx.CommandExecuter{ New: func() *cobra.Command { - return cmd.NewRootCmd() + return cmd.NewRootCmd(driver.WithJsonnetPool(jsonnetPool)) }, Ctx: ctx, } diff --git a/main.go b/main.go index 3eaff9925369..680a5f780afa 100644 --- a/main.go +++ b/main.go @@ -5,18 +5,11 @@ package main import ( - "github.com/ory/kratos/driver" - "github.com/ory/x/dbal" - "github.com/ory/x/profilex" + "os" "github.com/ory/kratos/cmd" ) func main() { - defer profilex.Profile().Stop() - dbal.RegisterDriver(func() dbal.Driver { - return driver.NewRegistryDefault() - }) - - cmd.Execute() + os.Exit(cmd.Execute()) }