Move loadGitDetails mutator to Initialize phase

This will require API call and we want to keep Load phase fast.
This commit is contained in:
Denis Bilenko 2024-11-29 10:49:20 +01:00
parent 7b9726dd64
commit 8922dba1ca
5 changed files with 19 additions and 18 deletions

View File

@ -26,7 +26,6 @@ func DefaultMutators() []bundle.Mutator {
ComputeIdToClusterId(), ComputeIdToClusterId(),
InitializeVariables(), InitializeVariables(),
DefineDefaultTarget(), DefineDefaultTarget(),
LoadGitDetails(),
pythonmutator.PythonMutator(pythonmutator.PythonMutatorPhaseLoad), pythonmutator.PythonMutator(pythonmutator.PythonMutatorPhaseLoad),
// Note: This mutator must run before the target overrides are merged. // Note: This mutator must run before the target overrides are merged.

View File

@ -39,6 +39,7 @@ func Initialize() bundle.Mutator {
mutator.MergePipelineClusters(), mutator.MergePipelineClusters(),
mutator.InitializeWorkspaceClient(), mutator.InitializeWorkspaceClient(),
mutator.PopulateCurrentUser(), mutator.PopulateCurrentUser(),
mutator.LoadGitDetails(),
mutator.DefineDefaultWorkspaceRoot(), mutator.DefineDefaultWorkspaceRoot(),
mutator.ExpandWorkspaceRoot(), mutator.ExpandWorkspaceRoot(),

View File

@ -5,18 +5,19 @@ import (
"strings" "strings"
"testing" "testing"
"github.com/databricks/cli/bundle/config/mutator"
"github.com/stretchr/testify/assert" "github.com/stretchr/testify/assert"
) )
func TestGitAutoLoadWithEnvironment(t *testing.T) { func TestGitAutoLoadWithEnvironment(t *testing.T) {
b := load(t, "./environments_autoload_git") b := load(t, "./environments_autoload_git", mutator.LoadGitDetails())
assert.True(t, b.Config.Bundle.Git.Inferred) assert.True(t, b.Config.Bundle.Git.Inferred)
validUrl := strings.Contains(b.Config.Bundle.Git.OriginURL, "/cli") || strings.Contains(b.Config.Bundle.Git.OriginURL, "/bricks") validUrl := strings.Contains(b.Config.Bundle.Git.OriginURL, "/cli") || strings.Contains(b.Config.Bundle.Git.OriginURL, "/bricks")
assert.True(t, validUrl, fmt.Sprintf("Expected URL to contain '/cli' or '/bricks', got %s", b.Config.Bundle.Git.OriginURL)) assert.True(t, validUrl, fmt.Sprintf("Expected URL to contain '/cli' or '/bricks', got %s", b.Config.Bundle.Git.OriginURL))
} }
func TestGitManuallySetBranchWithEnvironment(t *testing.T) { func TestGitManuallySetBranchWithEnvironment(t *testing.T) {
b := loadTarget(t, "./environments_autoload_git", "production") b := loadTarget(t, "./environments_autoload_git", "production", mutator.LoadGitDetails())
assert.False(t, b.Config.Bundle.Git.Inferred) assert.False(t, b.Config.Bundle.Git.Inferred)
assert.Equal(t, "main", b.Config.Bundle.Git.Branch) assert.Equal(t, "main", b.Config.Bundle.Git.Branch)
validUrl := strings.Contains(b.Config.Bundle.Git.OriginURL, "/cli") || strings.Contains(b.Config.Bundle.Git.OriginURL, "/bricks") validUrl := strings.Contains(b.Config.Bundle.Git.OriginURL, "/cli") || strings.Contains(b.Config.Bundle.Git.OriginURL, "/bricks")

View File

@ -12,15 +12,8 @@ import (
"github.com/stretchr/testify/assert" "github.com/stretchr/testify/assert"
) )
func TestGitAutoLoad(t *testing.T) {
b := load(t, "./autoload_git")
assert.True(t, b.Config.Bundle.Git.Inferred)
validUrl := strings.Contains(b.Config.Bundle.Git.OriginURL, "/cli") || strings.Contains(b.Config.Bundle.Git.OriginURL, "/bricks")
assert.True(t, validUrl, fmt.Sprintf("Expected URL to contain '/cli' or '/bricks', got %s", b.Config.Bundle.Git.OriginURL))
}
func TestGitManuallySetBranch(t *testing.T) { func TestGitManuallySetBranch(t *testing.T) {
b := loadTarget(t, "./autoload_git", "production") b := loadTarget(t, "./autoload_git", "production", mutator.LoadGitDetails())
assert.False(t, b.Config.Bundle.Git.Inferred) assert.False(t, b.Config.Bundle.Git.Inferred)
assert.Equal(t, "main", b.Config.Bundle.Git.Branch) assert.Equal(t, "main", b.Config.Bundle.Git.Branch)
validUrl := strings.Contains(b.Config.Bundle.Git.OriginURL, "/cli") || strings.Contains(b.Config.Bundle.Git.OriginURL, "/bricks") validUrl := strings.Contains(b.Config.Bundle.Git.OriginURL, "/cli") || strings.Contains(b.Config.Bundle.Git.OriginURL, "/bricks")
@ -33,7 +26,7 @@ func TestGitBundleBranchValidation(t *testing.T) {
git.GitDirectoryName = ".git" git.GitDirectoryName = ".git"
}) })
b := load(t, "./git_branch_validation") b := load(t, "./git_branch_validation", mutator.LoadGitDetails())
assert.False(t, b.Config.Bundle.Git.Inferred) assert.False(t, b.Config.Bundle.Git.Inferred)
assert.Equal(t, "feature-a", b.Config.Bundle.Git.Branch) assert.Equal(t, "feature-a", b.Config.Bundle.Git.Branch)
assert.Equal(t, "feature-b", b.Config.Bundle.Git.ActualBranch) assert.Equal(t, "feature-b", b.Config.Bundle.Git.ActualBranch)

View File

@ -15,29 +15,33 @@ import (
"github.com/stretchr/testify/require" "github.com/stretchr/testify/require"
) )
func load(t *testing.T, path string) *bundle.Bundle { func load(t *testing.T, path string, mutators ...bundle.Mutator) *bundle.Bundle {
ctx := context.Background() ctx := context.Background()
b, err := bundle.Load(ctx, path) b, err := bundle.Load(ctx, path)
require.NoError(t, err) require.NoError(t, err)
diags := bundle.Apply(ctx, b, phases.Load()) diags := bundle.Apply(ctx, b, phases.Load())
require.NoError(t, diags.Error()) require.NoError(t, diags.Error())
for _, m := range mutators {
diags := bundle.Apply(ctx, b, m)
require.NoError(t, diags.Error())
}
return b return b
} }
func loadTarget(t *testing.T, path, env string) *bundle.Bundle { func loadTarget(t *testing.T, path, env string, mutators ...bundle.Mutator) *bundle.Bundle {
b, diags := loadTargetWithDiags(path, env) b, diags := loadTargetWithDiags(path, env, mutators...)
require.NoError(t, diags.Error()) require.NoError(t, diags.Error())
return b return b
} }
func loadTargetWithDiags(path, env string) (*bundle.Bundle, diag.Diagnostics) { func loadTargetWithDiags(path, env string, mutators ...bundle.Mutator) (*bundle.Bundle, diag.Diagnostics) {
ctx := context.Background() ctx := context.Background()
b, err := bundle.Load(ctx, path) b, err := bundle.Load(ctx, path)
if err != nil { if err != nil {
return nil, diag.FromErr(err) return nil, diag.FromErr(err)
} }
diags := bundle.Apply(ctx, b, bundle.Seq( seq := []bundle.Mutator{
phases.LoadNamedTarget(env), phases.LoadNamedTarget(env),
mutator.RewriteSyncPaths(), mutator.RewriteSyncPaths(),
mutator.SyncDefaultPath(), mutator.SyncDefaultPath(),
@ -46,7 +50,10 @@ func loadTargetWithDiags(path, env string) (*bundle.Bundle, diag.Diagnostics) {
mutator.MergeJobParameters(), mutator.MergeJobParameters(),
mutator.MergeJobTasks(), mutator.MergeJobTasks(),
mutator.MergePipelineClusters(), mutator.MergePipelineClusters(),
)) }
seq = append(seq, mutators...)
diags := bundle.Apply(ctx, b, bundle.Seq(seq...))
return b, diags return b, diags
} }