mirror of https://github.com/databricks/cli.git
Remove dependency on `ConfigFilePath` from path translation mutator (#1437)
## Changes This is one step toward removing the `path.Paths` struct embedding from resource types. Going forward, we'll exclusively use the `dyn.Value` tree for location information. ## Tests Existing unit tests that cover path resolution with fallback behavior pass.
This commit is contained in:
parent
4556d33e6b
commit
dd94107853
|
@ -213,3 +213,31 @@ func (m *translatePaths) Apply(_ context.Context, b *bundle.Bundle) diag.Diagnos
|
|||
|
||||
return diag.FromErr(err)
|
||||
}
|
||||
|
||||
func gatherFallbackPaths(v dyn.Value, typ string) (map[string]string, error) {
|
||||
var fallback = make(map[string]string)
|
||||
var pattern = dyn.NewPattern(dyn.Key("resources"), dyn.Key(typ), dyn.AnyKey())
|
||||
|
||||
// Previous behavior was to use a resource's location as the base path to resolve
|
||||
// relative paths in its definition. With the introduction of [dyn.Value] throughout,
|
||||
// we can use the location of the [dyn.Value] of the relative path itself.
|
||||
//
|
||||
// This is more flexible, as resources may have overrides that are not
|
||||
// located in the same directory as the resource configuration file.
|
||||
//
|
||||
// To maintain backwards compatibility, we allow relative paths to be resolved using
|
||||
// the original approach as fallback if the [dyn.Value] location cannot be resolved.
|
||||
_, err := dyn.MapByPattern(v, pattern, func(p dyn.Path, v dyn.Value) (dyn.Value, error) {
|
||||
key := p[2].Key()
|
||||
dir, err := v.Location().Directory()
|
||||
if err != nil {
|
||||
return dyn.InvalidValue, fmt.Errorf("unable to determine directory for %s: %w", p, err)
|
||||
}
|
||||
fallback[key] = dir
|
||||
return v, nil
|
||||
})
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return fallback, nil
|
||||
}
|
||||
|
|
|
@ -55,21 +55,14 @@ func rewritePatterns(base dyn.Pattern) []jobRewritePattern {
|
|||
}
|
||||
|
||||
func (m *translatePaths) applyJobTranslations(b *bundle.Bundle, v dyn.Value) (dyn.Value, error) {
|
||||
var fallback = make(map[string]string)
|
||||
var ignore []string
|
||||
var err error
|
||||
|
||||
for key, job := range b.Config.Resources.Jobs {
|
||||
dir, err := job.ConfigFileDirectory()
|
||||
fallback, err := gatherFallbackPaths(v, "jobs")
|
||||
if err != nil {
|
||||
return dyn.InvalidValue, fmt.Errorf("unable to determine directory for job %s: %w", key, err)
|
||||
return dyn.InvalidValue, err
|
||||
}
|
||||
|
||||
// If we cannot resolve the relative path using the [dyn.Value] location itself,
|
||||
// use the job's location as fallback. This is necessary for backwards compatibility.
|
||||
fallback[key] = dir
|
||||
|
||||
// Do not translate job task paths if using git source
|
||||
// Do not translate job task paths if using Git source
|
||||
var ignore []string
|
||||
for key, job := range b.Config.Resources.Jobs {
|
||||
if job.GitSource != nil {
|
||||
ignore = append(ignore, key)
|
||||
}
|
||||
|
|
|
@ -8,18 +8,9 @@ import (
|
|||
)
|
||||
|
||||
func (m *translatePaths) applyPipelineTranslations(b *bundle.Bundle, v dyn.Value) (dyn.Value, error) {
|
||||
var fallback = make(map[string]string)
|
||||
var err error
|
||||
|
||||
for key, pipeline := range b.Config.Resources.Pipelines {
|
||||
dir, err := pipeline.ConfigFileDirectory()
|
||||
fallback, err := gatherFallbackPaths(v, "pipelines")
|
||||
if err != nil {
|
||||
return dyn.InvalidValue, fmt.Errorf("unable to determine directory for pipeline %s: %w", key, err)
|
||||
}
|
||||
|
||||
// If we cannot resolve the relative path using the [dyn.Value] location itself,
|
||||
// use the pipeline's location as fallback. This is necessary for backwards compatibility.
|
||||
fallback[key] = dir
|
||||
return dyn.InvalidValue, err
|
||||
}
|
||||
|
||||
// Base pattern to match all libraries in all pipelines.
|
||||
|
|
|
@ -1,9 +1,6 @@
|
|||
package paths
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"path/filepath"
|
||||
|
||||
"github.com/databricks/cli/libs/dyn"
|
||||
)
|
||||
|
||||
|
@ -23,10 +20,3 @@ func (p *Paths) ConfigureConfigFilePath() {
|
|||
}
|
||||
p.ConfigFilePath = p.DynamicValue.Location().File
|
||||
}
|
||||
|
||||
func (p *Paths) ConfigFileDirectory() (string, error) {
|
||||
if p.ConfigFilePath == "" {
|
||||
return "", fmt.Errorf("config file path not configured")
|
||||
}
|
||||
return filepath.Dir(p.ConfigFilePath), nil
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue