mirror of https://github.com/databricks/cli.git
split into summary and detail
This commit is contained in:
parent
fd01824ee1
commit
5308ad8bf3
|
@ -3,6 +3,7 @@ package loader
|
|||
import (
|
||||
"context"
|
||||
"fmt"
|
||||
"slices"
|
||||
"sort"
|
||||
"strings"
|
||||
|
||||
|
@ -10,7 +11,6 @@ import (
|
|||
"github.com/databricks/cli/bundle/config"
|
||||
"github.com/databricks/cli/libs/diag"
|
||||
"github.com/databricks/cli/libs/dyn"
|
||||
"golang.org/x/exp/maps"
|
||||
)
|
||||
|
||||
var resourceTypes = []string{
|
||||
|
@ -99,22 +99,20 @@ func validateSingleResourceDefined(r *config.Root, ext, typ string) diag.Diagnos
|
|||
return nil
|
||||
}
|
||||
|
||||
msg := strings.Builder{}
|
||||
msg.WriteString(fmt.Sprintf("We recommend only defining a single %s in a file with the %s extension.\n", typ, ext))
|
||||
|
||||
// Dedup the list of resources before adding them the diagnostic message. This
|
||||
// is needed because we do not dedup earlier when gathering the resources and
|
||||
// it's valid to define the same resource in both the resources and targets block.
|
||||
msg.WriteString("The following resources are defined or configured in this file:\n")
|
||||
setOfLines := map[string]struct{}{}
|
||||
detail := strings.Builder{}
|
||||
detail.WriteString("The following resources are defined or configured in this file:\n")
|
||||
lines := []string{}
|
||||
for _, r := range resources {
|
||||
setOfLines[fmt.Sprintf(" - %s (%s)\n", r.key, r.typ)] = struct{}{}
|
||||
lines = append(lines, fmt.Sprintf(" - %s (%s)\n", r.key, r.typ))
|
||||
}
|
||||
// Sort the line s to print to make the output deterministic.
|
||||
listOfLines := maps.Keys(setOfLines)
|
||||
sort.Strings(listOfLines)
|
||||
for _, l := range listOfLines {
|
||||
msg.WriteString(l)
|
||||
sort.Strings(lines)
|
||||
// Compact the lines before writing them to the message to remove any duplicate lines.
|
||||
// This is needed because we do not dedup earlier when gathering the resources
|
||||
// and it's valid to define the same resource in both the resources and targets block.
|
||||
lines = slices.Compact(lines)
|
||||
for _, l := range lines {
|
||||
detail.WriteString(l)
|
||||
}
|
||||
|
||||
locations := []dyn.Location{}
|
||||
|
@ -134,7 +132,8 @@ func validateSingleResourceDefined(r *config.Root, ext, typ string) diag.Diagnos
|
|||
return diag.Diagnostics{
|
||||
{
|
||||
Severity: diag.Info,
|
||||
Summary: msg.String(),
|
||||
Summary: fmt.Sprintf("We recommend only defining a single %s in a file with the %s extension.", typ, ext),
|
||||
Detail: detail.String(),
|
||||
Locations: locations,
|
||||
Paths: paths,
|
||||
},
|
||||
|
|
|
@ -58,7 +58,8 @@ func TestProcessIncludeValidatesFileFormat(t *testing.T) {
|
|||
assert.Equal(t, diag.Diagnostics{
|
||||
{
|
||||
Severity: diag.Info,
|
||||
Summary: "We recommend only defining a single job in a file with the .job.yml extension.\nThe following resources are defined or configured in this file:\n - bar (job)\n - foo (job)\n",
|
||||
Summary: "We recommend only defining a single job in a file with the .job.yml extension.",
|
||||
Detail: "The following resources are defined or configured in this file:\n - bar (job)\n - foo (job)\n",
|
||||
Locations: []dyn.Location{
|
||||
{File: filepath.FromSlash("testdata/format/foo.job.yml"), Line: 4, Column: 7},
|
||||
{File: filepath.FromSlash("testdata/format/foo.job.yml"), Line: 7, Column: 7},
|
||||
|
@ -209,7 +210,8 @@ func TestValidateFileFormat(t *testing.T) {
|
|||
expected: diag.Diagnostics{
|
||||
{
|
||||
Severity: diag.Info,
|
||||
Summary: "We recommend only defining a single pipeline in a file with the .pipeline.yml extension.\nThe following resources are defined or configured in this file:\n - job1 (job)\n",
|
||||
Summary: "We recommend only defining a single pipeline in a file with the .pipeline.yml extension.",
|
||||
Detail: "The following resources are defined or configured in this file:\n - job1 (job)\n",
|
||||
Locations: []dyn.Location{
|
||||
{File: "foo.pipeline.yml", Line: 1, Column: 1},
|
||||
{File: "foo.pipeline.yml", Line: 2, Column: 2},
|
||||
|
@ -242,7 +244,8 @@ func TestValidateFileFormat(t *testing.T) {
|
|||
expected: diag.Diagnostics{
|
||||
{
|
||||
Severity: diag.Info,
|
||||
Summary: "We recommend only defining a single job in a file with the .job.yml extension.\nThe following resources are defined or configured in this file:\n - job1 (job)\n - pipeline1 (pipeline)\n",
|
||||
Summary: "We recommend only defining a single job in a file with the .job.yml extension.",
|
||||
Detail: "The following resources are defined or configured in this file:\n - job1 (job)\n - pipeline1 (pipeline)\n",
|
||||
Locations: []dyn.Location{
|
||||
{File: "foo.job.yml", Line: 1, Column: 1},
|
||||
{File: "foo.job.yml", Line: 2, Column: 2},
|
||||
|
@ -265,7 +268,8 @@ func TestValidateFileFormat(t *testing.T) {
|
|||
expected: diag.Diagnostics{
|
||||
{
|
||||
Severity: diag.Info,
|
||||
Summary: "We recommend only defining a single experiment in a file with the .experiment.yml extension.\nThe following resources are defined or configured in this file:\n - job1 (job)\n - pipeline1 (pipeline)\n",
|
||||
Summary: "We recommend only defining a single experiment in a file with the .experiment.yml extension.",
|
||||
Detail: "The following resources are defined or configured in this file:\n - job1 (job)\n - pipeline1 (pipeline)\n",
|
||||
Locations: []dyn.Location{
|
||||
{File: "foo.experiment.yml", Line: 1, Column: 1},
|
||||
{File: "foo.experiment.yml", Line: 2, Column: 2},
|
||||
|
@ -288,7 +292,8 @@ func TestValidateFileFormat(t *testing.T) {
|
|||
expected: diag.Diagnostics{
|
||||
{
|
||||
Severity: diag.Info,
|
||||
Summary: "We recommend only defining a single job in a file with the .job.yml extension.\nThe following resources are defined or configured in this file:\n - job1 (job)\n - job2 (job)\n",
|
||||
Summary: "We recommend only defining a single job in a file with the .job.yml extension.",
|
||||
Detail: "The following resources are defined or configured in this file:\n - job1 (job)\n - job2 (job)\n",
|
||||
Locations: []dyn.Location{
|
||||
{File: "foo.job.yml", Line: 1, Column: 1},
|
||||
{File: "foo.job.yml", Line: 2, Column: 2},
|
||||
|
@ -321,7 +326,8 @@ func TestValidateFileFormat(t *testing.T) {
|
|||
expected: diag.Diagnostics{
|
||||
{
|
||||
Severity: diag.Info,
|
||||
Summary: "We recommend only defining a single job in a file with the .job.yml extension.\nThe following resources are defined or configured in this file:\n - job1 (job)\n - job2 (job)\n",
|
||||
Summary: "We recommend only defining a single job in a file with the .job.yml extension.",
|
||||
Detail: "The following resources are defined or configured in this file:\n - job1 (job)\n - job2 (job)\n",
|
||||
Locations: []dyn.Location{
|
||||
{File: "foo.job.yml", Line: 1, Column: 1},
|
||||
{File: "foo.job.yml", Line: 2, Column: 2},
|
||||
|
@ -344,7 +350,8 @@ func TestValidateFileFormat(t *testing.T) {
|
|||
expected: diag.Diagnostics{
|
||||
{
|
||||
Severity: diag.Info,
|
||||
Summary: "We recommend only defining a single job in a file with the .job.yml extension.\nThe following resources are defined or configured in this file:\n - job1 (job)\n - job2 (job)\n",
|
||||
Summary: "We recommend only defining a single job in a file with the .job.yml extension.",
|
||||
Detail: "The following resources are defined or configured in this file:\n - job1 (job)\n - job2 (job)\n",
|
||||
Locations: []dyn.Location{
|
||||
{File: "foo.job.yml", Line: 1, Column: 1},
|
||||
{File: "foo.job.yml", Line: 2, Column: 2},
|
||||
|
|
Loading…
Reference in New Issue