Skip to content

Commit

Permalink
feat: disable cli spinner in ci (datreeio#721)
Browse files Browse the repository at this point in the history
  • Loading branch information
shmu3l authored Jul 14, 2022
1 parent 0a74f0d commit 62ab5d4
Show file tree
Hide file tree
Showing 2 changed files with 53 additions and 30 deletions.
71 changes: 41 additions & 30 deletions cmd/test/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,6 @@ import (
"github.com/datreeio/datree/pkg/printer"
"github.com/datreeio/datree/pkg/utils"

"github.com/briandowns/spinner"
"github.com/eiannone/keyboard"
"github.com/spf13/cobra"
)
Expand Down Expand Up @@ -333,7 +332,7 @@ func TestWrapper(ctx *TestCommandContext, args []string, testCommandFlags *TestC
return test(ctx, args, testCommandOptions)
}

func test(ctx *TestCommandContext, paths []string, prerunData *TestCommandData) error {
func test(ctx *TestCommandContext, paths []string, testCommandData *TestCommandData) error {
if paths[0] == "-" {
tempFile, err := os.CreateTemp("", "datree_temp_*.yaml")
if err != nil {
Expand All @@ -357,11 +356,11 @@ func test(ctx *TestCommandContext, paths []string, prerunData *TestCommandData)
return noFilesErr
}

if prerunData.Output == "simple" {
if testCommandData.Output == "simple" {
ctx.Printer.SetTheme(printer.CreateSimpleTheme())
}

evaluationResultData, err := evaluate(ctx, filesPaths, prerunData)
evaluationResultData, err := evaluate(ctx, filesPaths, testCommandData)
if err != nil {
return err
}
Expand All @@ -374,7 +373,7 @@ func test(ctx *TestCommandContext, paths []string, prerunData *TestCommandData)

validationManager := evaluationResultData.ValidationManager

if prerunData.OnlyK8sFiles {
if testCommandData.OnlyK8sFiles {
filesCount -= validationManager.IgnoredFilesCount()
}

Expand All @@ -395,12 +394,12 @@ func test(ctx *TestCommandContext, paths []string, prerunData *TestCommandData)
InvalidYamlFiles: validationManager.InvalidYamlFiles(),
InvalidK8sFiles: validationManager.InvalidK8sFiles(),
EvaluationSummary: evaluationSummary,
LoginURL: prerunData.RegistrationURL,
OutputFormat: prerunData.Output,
LoginURL: testCommandData.RegistrationURL,
OutputFormat: testCommandData.Output,
Printer: ctx.Printer,
K8sVersion: prerunData.K8sVersion,
Verbose: prerunData.Verbose,
PolicyName: prerunData.Policy.Name,
K8sVersion: testCommandData.K8sVersion,
Verbose: testCommandData.Verbose,
PolicyName: testCommandData.Policy.Name,
K8sValidationWarnings: validationManager.k8sValidationWarningPerValidFile,
})

Expand All @@ -414,7 +413,7 @@ func test(ctx *TestCommandContext, paths []string, prerunData *TestCommandData)
}

if strings.ToLower(string(answer)) != "n" {
openBrowser(prerunData.PromptRegistrationURL)
openBrowser(testCommandData.PromptRegistrationURL)
}
}

Expand All @@ -437,24 +436,25 @@ type EvaluationResultData struct {
PromptMessage string
}

func evaluate(ctx *TestCommandContext, filesPaths []string, prerunData *TestCommandData) (EvaluationResultData, error) {
isInteractiveMode := !evaluation.IsFormattedOutputOption(prerunData.Output)
func evaluate(ctx *TestCommandContext, filesPaths []string, testCommandData *TestCommandData) (EvaluationResultData, error) {
isInteractiveMode := !evaluation.IsFormattedOutputOption(testCommandData.Output)

var _spinner *spinner.Spinner
if isInteractiveMode && prerunData.Output != "simple" {
_spinner = createSpinner(" Loading...", "cyan")
showSpinner := shouldDisplaySpinner(ctx.CiContext.IsCI, isInteractiveMode, testCommandData.Output)

if showSpinner {
_spinner := createSpinner(" Loading...", "cyan")
_spinner.Start()
}

defer func() {
if _spinner != nil {
_spinner.Stop()
}
}()
defer func() {
if _spinner != nil {
_spinner.Stop()
}
}()
}

validationManager := NewValidationManager()

ctx.K8sValidator.InitClient(prerunData.K8sVersion, prerunData.IgnoreMissingSchemas, prerunData.SchemaLocations)
ctx.K8sValidator.InitClient(testCommandData.K8sVersion, testCommandData.IgnoreMissingSchemas, testCommandData.SchemaLocations)

concurrency := 100
var wg sync.WaitGroup
Expand All @@ -464,7 +464,7 @@ func evaluate(ctx *TestCommandContext, filesPaths []string, prerunData *TestComm
wg.Add(1)
go validationManager.AggregateInvalidYamlFiles(invalidYamlFilesChan, &wg)

if prerunData.OnlyK8sFiles {
if testCommandData.OnlyK8sFiles {
var ignoredYamlFilesChan chan *extractor.FileConfigurations
validYamlConfigurationsChan, ignoredYamlFilesChan = ctx.K8sValidator.GetK8sFiles(validYamlConfigurationsChan, concurrency)
wg.Add(1)
Expand All @@ -480,13 +480,13 @@ func evaluate(ctx *TestCommandContext, filesPaths []string, prerunData *TestComm

wg.Wait()

policyName := prerunData.Policy.Name
policyName := testCommandData.Policy.Name

policyCheckData := evaluation.PolicyCheckData{
FilesConfigurations: validationManager.ValidK8sFilesConfigurations(),
IsInteractiveMode: isInteractiveMode,
PolicyName: policyName,
Policy: prerunData.Policy,
Policy: testCommandData.Policy,
}

emptyEvaluationResultData := EvaluationResultData{
Expand All @@ -510,7 +510,7 @@ func evaluate(ctx *TestCommandContext, filesPaths []string, prerunData *TestComm
AllFilesThatRanPolicyCheck: utils.MapSlice[cliClient.FileData, string](policyCheckResultData.FilesData, func(fileData cliClient.FileData) string { return fileData.FilePath }),
}

if prerunData.NoRecord {
if testCommandData.NoRecord {
return EvaluationResultData{
ValidationManager: validationManager,
RulesCount: policyCheckResultData.RulesCount,
Expand Down Expand Up @@ -538,10 +538,10 @@ func evaluate(ctx *TestCommandContext, filesPaths []string, prerunData *TestComm
endEvaluationTime := time.Now()
EvaluationDurationSeconds := endEvaluationTime.Sub(ctx.StartTime).Seconds()
evaluationRequestData := evaluation.EvaluationRequestData{
Token: prerunData.Token,
ClientId: prerunData.ClientId,
Token: testCommandData.Token,
ClientId: testCommandData.ClientId,
CliVersion: ctx.CliVersion,
K8sVersion: prerunData.K8sVersion,
K8sVersion: testCommandData.K8sVersion,
PolicyName: policyName,
CiContext: ciContext,
RulesData: policyCheckResultData.RulesData,
Expand Down Expand Up @@ -596,3 +596,14 @@ func saveDefaultRulesAsFile(ctx *TestCommandContext, preRunDefaultRulesYaml stri
const fileReadPermission = 0644
_ = ioutil.WriteFile(defaultRulesFilePath, []byte(preRunDefaultRulesYaml), os.FileMode(fileReadPermission))
}

func shouldDisplaySpinner(IsCI bool, isInteractiveMode bool, outputOption string) bool {
switch {
case IsCI:
return false
case isInteractiveMode && outputOption != "simple":
return true
default:
return true
}
}
12 changes: 12 additions & 0 deletions cmd/test/main_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -821,6 +821,18 @@ func TestTestCommandOnlyK8sFiles(t *testing.T) {
k8sValidatorMock.AssertCalled(t, "GetK8sFiles", mock.Anything, 100)
}

func TestShouldDisplaySpinner(t *testing.T) {
defaultCaseSpinner := shouldDisplaySpinner(false, true, "")
assert.True(t, defaultCaseSpinner)

interactiveModeSpinner := shouldDisplaySpinner(true, true, "")
assert.False(t, interactiveModeSpinner)

nonInteractiveModeSpinner := shouldDisplaySpinner(false, false, "")
assert.True(t, nonInteractiveModeSpinner)

}

func TestTestCommandNoInternetConnection(t *testing.T) {
setup()
_ = test(ctx, []string{"valid/path"}, &TestCommandData{Policy: testingPolicy})
Expand Down

0 comments on commit 62ab5d4

Please sign in to comment.