// Test - Bitrise Validate workflow // Workflow contains before and after workflow, and no one contains steps, but circular wofklow dependecy exist, which should fail func Test0Steps3WorkflowsCircularDependency(t *testing.T) { require.NoError(t, os.Setenv("BITRISE_BUILD_STATUS", "0")) defer func() { require.NoError(t, os.Unsetenv("BITRISE_BUILD_STATUS")) }() require.NoError(t, os.Setenv("STEPLIB_BUILD_STATUS", "0")) defer func() { require.NoError(t, os.Unsetenv("STEPLIB_BUILD_STATUS")) }() beforeWorkflow := models.WorkflowModel{ BeforeRun: []string{"target"}, } afterWorkflow := models.WorkflowModel{} workflow := models.WorkflowModel{ BeforeRun: []string{"before"}, AfterRun: []string{"after"}, } config := models.BitriseDataModel{ FormatVersion: "1.0.0", DefaultStepLibSource: "https://github.com/bitrise-io/bitrise-steplib.git", Workflows: map[string]models.WorkflowModel{ "target": workflow, "before": beforeWorkflow, "after": afterWorkflow, }, } _, err := config.Validate() require.Error(t, err) require.Equal(t, "0", os.Getenv("BITRISE_BUILD_STATUS")) require.Equal(t, "0", os.Getenv("STEPLIB_BUILD_STATUS")) }
// ConvertOldWorkfowModels ... func ConvertOldWorkfowModels(oldWorkflowMap map[string]oldmodels.WorkflowModel) (bitriseModels.BitriseDataModel, error) { bitriseData := bitriseModels.BitriseDataModel{ FormatVersion: "1.0.0", Workflows: map[string]bitriseModels.WorkflowModel{}, } defaultSource := "" workflowIDs := []string{} for workflowID, oldWorkflow := range oldWorkflowMap { workflowIDs = append(workflowIDs, workflowID) newWorkflow, defaultSteplib, err := ConvertOldWorkflow(oldWorkflow) if err != nil { return bitriseModels.BitriseDataModel{}, err } if defaultSteplib != "" { defaultSource = defaultSteplib } bitriseData.Workflows[workflowID] = newWorkflow } bitriseData.DefaultStepLibSource = defaultSource bitriseData.TriggerMap = generateTriggerMap(workflowIDs) return bitriseData, nil }
// Test - Bitrise Validate workflow // Workflow contains before and after workflow, and no one contains steps, but circular wofklow dependecy exist, which should fail func Test0Steps3WorkflowsCircularDependency(t *testing.T) { if err := os.Setenv("BITRISE_BUILD_STATUS", "0"); err != nil { t.Fatal(err) } defer func() { // env cleanup if err := os.Unsetenv("BITRISE_BUILD_STATUS"); err != nil { t.Error("Failed to unset environment: ", err) } }() if err := os.Setenv("STEPLIB_BUILD_STATUS", "0"); err != nil { t.Fatal(err) } defer func() { // env cleanup if err := os.Unsetenv("STEPLIB_BUILD_STATUS"); err != nil { t.Error("Failed to unset environment: ", err) } }() beforeWorkflow := models.WorkflowModel{ BeforeRun: []string{"target"}, } afterWorkflow := models.WorkflowModel{} workflow := models.WorkflowModel{ BeforeRun: []string{"before"}, AfterRun: []string{"after"}, } config := models.BitriseDataModel{ FormatVersion: "1.0.0", DefaultStepLibSource: "https://github.com/bitrise-io/bitrise-steplib.git", Workflows: map[string]models.WorkflowModel{ "target": workflow, "before": beforeWorkflow, "after": afterWorkflow, }, } if err := config.Validate(); err == nil { t.Fatal("Circular dependency, should fail") } if status := os.Getenv("BITRISE_BUILD_STATUS"); status != "0" { t.Log("BITRISE_BUILD_STATUS:", status) t.Fatal("BUILD_STATUS envs are incorrect") } if status := os.Getenv("STEPLIB_BUILD_STATUS"); status != "0" { t.Log("STEPLIB_BUILD_STATUS:", status) t.Fatal("STEPLIB_BUILD_STATUS envs are incorrect") } }
// RemoveConfigRedundantFieldsAndFillStepOutputs ... func RemoveConfigRedundantFieldsAndFillStepOutputs(config *models.BitriseDataModel) error { for _, workflow := range config.Workflows { for _, stepListItem := range workflow.Steps { if err := removeStepDefaultsAndFillStepOutputs(&stepListItem, config.DefaultStepLibSource); err != nil { return err } } } if err := config.RemoveRedundantFields(); err != nil { return err } return nil }
// Test - Bitrise activateAndRunWorkflow // Workflow contains before and after workflow, and no one contains steps func Test0Steps3WorkflowsBeforeAfter(t *testing.T) { require.NoError(t, os.Setenv("BITRISE_BUILD_STATUS", "0")) defer func() { require.NoError(t, os.Unsetenv("BITRISE_BUILD_STATUS")) }() require.NoError(t, os.Setenv("STEPLIB_BUILD_STATUS", "0")) defer func() { require.NoError(t, os.Unsetenv("STEPLIB_BUILD_STATUS")) }() beforeWorkflow := models.WorkflowModel{} afterWorkflow := models.WorkflowModel{} workflow := models.WorkflowModel{ BeforeRun: []string{"before"}, AfterRun: []string{"after"}, } config := models.BitriseDataModel{ FormatVersion: "1.0.0", DefaultStepLibSource: "https://github.com/bitrise-io/bitrise-steplib.git", Workflows: map[string]models.WorkflowModel{ "target": workflow, "before": beforeWorkflow, "after": afterWorkflow, }, } _, err := config.Validate() require.NoError(t, err) buildRunResults := models.BuildRunResultsModel{ StartTime: time.Now(), StepmanUpdates: map[string]int{}, } buildRunResults, err = activateAndRunWorkflow("target", workflow, config, buildRunResults, &[]envmanModels.EnvironmentItemModel{}, "") require.NoError(t, err) require.Equal(t, 0, len(buildRunResults.SuccessSteps)) require.Equal(t, 0, len(buildRunResults.FailedSteps)) require.Equal(t, 0, len(buildRunResults.FailedSkippableSteps)) require.Equal(t, 0, len(buildRunResults.SkippedSteps)) require.Equal(t, "0", os.Getenv("BITRISE_BUILD_STATUS")) require.Equal(t, "0", os.Getenv("STEPLIB_BUILD_STATUS")) }
// Test - Bitrise activateAndRunWorkflow // If workflow contains no steps func Test0Steps1Workflows(t *testing.T) { workflow := models.WorkflowModel{} require.NoError(t, os.Setenv("BITRISE_BUILD_STATUS", "0")) defer func() { require.NoError(t, os.Unsetenv("BITRISE_BUILD_STATUS")) }() require.NoError(t, os.Setenv("STEPLIB_BUILD_STATUS", "0")) defer func() { require.NoError(t, os.Unsetenv("STEPLIB_BUILD_STATUS")) }() config := models.BitriseDataModel{ FormatVersion: "1.0.0", DefaultStepLibSource: "https://github.com/bitrise-io/bitrise-steplib.git", Workflows: map[string]models.WorkflowModel{ "zero_steps": workflow, }, } _, err := config.Validate() require.NoError(t, err) buildRunResults := models.BuildRunResultsModel{ StartTime: time.Now(), StepmanUpdates: map[string]int{}, } require.NoError(t, configs.InitPaths()) buildRunResults, err = runWorkflowWithConfiguration(time.Now(), "zero_steps", config, []envmanModels.EnvironmentItemModel{}) require.NoError(t, err) require.Equal(t, 0, len(buildRunResults.SuccessSteps)) require.Equal(t, 0, len(buildRunResults.FailedSteps)) require.Equal(t, 0, len(buildRunResults.FailedSkippableSteps)) require.Equal(t, 0, len(buildRunResults.SkippedSteps)) require.Equal(t, "0", os.Getenv("BITRISE_BUILD_STATUS")) require.Equal(t, "0", os.Getenv("STEPLIB_BUILD_STATUS")) }
func normalizeValidateFillMissingDefaults(bitriseData *models.BitriseDataModel) error { if err := bitriseData.Normalize(); err != nil { return err } if err := bitriseData.Validate(); err != nil { return err } if err := bitriseData.FillMissingDefaults(); err != nil { return err } return nil }
func normalizeValidateFillMissingDefaults(bitriseData *models.BitriseDataModel) ([]string, error) { if err := bitriseData.Normalize(); err != nil { return []string{}, err } warnings, err := bitriseData.Validate() if err != nil { return warnings, err } if err := bitriseData.FillMissingDefaults(); err != nil { return warnings, err } return warnings, nil }
// Test - Bitrise activateAndRunWorkflow // Workflow contains before and after workflow, and no one contains steps func Test0Steps3WorkflowsBeforeAfter(t *testing.T) { if err := os.Setenv("BITRISE_BUILD_STATUS", "0"); err != nil { t.Fatal(err) } defer func() { // env cleanup if err := os.Unsetenv("BITRISE_BUILD_STATUS"); err != nil { t.Error("Failed to unset environment: ", err) } }() if err := os.Setenv("STEPLIB_BUILD_STATUS", "0"); err != nil { t.Fatal(err) } defer func() { // env cleanup if err := os.Unsetenv("STEPLIB_BUILD_STATUS"); err != nil { t.Error("Failed to unset environment: ", err) } }() beforeWorkflow := models.WorkflowModel{} afterWorkflow := models.WorkflowModel{} workflow := models.WorkflowModel{ BeforeRun: []string{"before"}, AfterRun: []string{"after"}, } config := models.BitriseDataModel{ FormatVersion: "1.0.0", DefaultStepLibSource: "https://github.com/bitrise-io/bitrise-steplib.git", Workflows: map[string]models.WorkflowModel{ "target": workflow, "before": beforeWorkflow, "after": afterWorkflow, }, } if err := config.Validate(); err != nil { t.Fatal(err) } buildRunResults := models.BuildRunResultsModel{ StartTime: time.Now(), StepmanUpdates: map[string]int{}, } var err error buildRunResults, err = activateAndRunWorkflow("target", workflow, config, buildRunResults, &[]envmanModels.EnvironmentItemModel{}, "") if err != nil { t.Fatal("Failed to activate and run worfklow:", err) } if len(buildRunResults.SuccessSteps) != 0 { t.Fatalf("Success step count (%d), should be (0)", len(buildRunResults.SuccessSteps)) } if len(buildRunResults.FailedSteps) != 0 { t.Fatalf("Failed step count (%d), should be (0)", len(buildRunResults.FailedSteps)) } if len(buildRunResults.FailedSkippableSteps) != 0 { t.Fatalf("FailedSkippable step count (%d), should be (0)", len(buildRunResults.FailedSkippableSteps)) } if len(buildRunResults.SkippedSteps) != 0 { t.Fatalf("Skipped step count (%d), should be (0)", len(buildRunResults.SkippedSteps)) } if status := os.Getenv("BITRISE_BUILD_STATUS"); status != "0" { t.Log("BITRISE_BUILD_STATUS:", status) t.Fatal("BUILD_STATUS envs are incorrect") } if status := os.Getenv("STEPLIB_BUILD_STATUS"); status != "0" { t.Log("STEPLIB_BUILD_STATUS:", status) t.Fatal("STEPLIB_BUILD_STATUS envs are incorrect") } }
// Test - Bitrise activateAndRunWorkflow // If workflow contains no steps func Test0Steps1Workflows(t *testing.T) { workflow := models.WorkflowModel{} if err := os.Setenv("BITRISE_BUILD_STATUS", "0"); err != nil { t.Fatal(err) } defer func() { // env cleanup if err := os.Unsetenv("BITRISE_BUILD_STATUS"); err != nil { t.Error("Failed to unset environment: ", err) } }() if err := os.Setenv("STEPLIB_BUILD_STATUS", "0"); err != nil { t.Fatal(err) } defer func() { // env cleanup if err := os.Unsetenv("STEPLIB_BUILD_STATUS"); err != nil { t.Error("Failed to unset environment: ", err) } }() config := models.BitriseDataModel{ FormatVersion: "1.0.0", DefaultStepLibSource: "https://github.com/bitrise-io/bitrise-steplib.git", Workflows: map[string]models.WorkflowModel{ "zero_steps": workflow, }, } if err := config.Validate(); err != nil { t.Fatal(err) } buildRunResults := models.BuildRunResultsModel{ StartTime: time.Now(), StepmanUpdates: map[string]int{}, } buildRunResults, err := runWorkflowWithConfiguration(time.Now(), "zero_steps", config, []envmanModels.EnvironmentItemModel{}) t.Log("Err: ", err) if len(buildRunResults.SuccessSteps) != 0 { t.Fatalf("Success step count (%d), should be (0)", len(buildRunResults.SuccessSteps)) } if len(buildRunResults.FailedSteps) != 0 { t.Fatalf("Failed step count (%d), should be (0)", len(buildRunResults.FailedSteps)) } if len(buildRunResults.FailedSkippableSteps) != 0 { t.Fatalf("FailedSkippable step count (%d), should be (0)", len(buildRunResults.FailedSkippableSteps)) } if len(buildRunResults.SkippedSteps) != 0 { t.Fatalf("Skipped step count (%d), should be (0)", len(buildRunResults.SkippedSteps)) } if status := os.Getenv("BITRISE_BUILD_STATUS"); status != "0" { t.Log("BITRISE_BUILD_STATUS:", status) t.Fatal("BUILD_STATUS envs are incorrect") } if status := os.Getenv("STEPLIB_BUILD_STATUS"); status != "0" { t.Log("STEPLIB_BUILD_STATUS:", status) t.Fatal("STEPLIB_BUILD_STATUS envs are incorrect") } }