Skip to content

Commit

Permalink
feat: setup of testing validation stamps
Browse files Browse the repository at this point in the history
  • Loading branch information
dcoraboeuf committed Nov 13, 2023
1 parent 4bbf0f6 commit b04ef2c
Show file tree
Hide file tree
Showing 4 changed files with 130 additions and 67 deletions.
77 changes: 62 additions & 15 deletions cmd/promotionLevelAuto.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,16 +5,37 @@ import (
client "ontrack-cli/client"
config "ontrack-cli/config"
"os"
"slices"

"github.com/spf13/cobra"
"gopkg.in/yaml.v2"
)

type AutoPromotions struct {
// List of validations and their configuration
Validations []ValidationConfig
// List of promotions
Promotions []PromotionConfig
}

type ValidationConfig struct {
// Name of the validation
Name string
// Optional description for the validation
Description string
// Optional data type
DataType *string
// Optional data type config
DataTypeConfig *string
// Test configuration
Tests *TestSummaryValidationConfig
}

type TestSummaryValidationConfig struct {
// Warning if skipped tests
WarningIfSkipped bool
}

type PromotionConfig struct {
// Name of the promotion
Name string
Expand All @@ -38,6 +59,11 @@ By default, the definition of the promotions and their auto promotion is availab
This YAML file has the following structure (example):
validations:
- name: unit-tests
description: Unit tests
tests:
warningIfSkipped: false
promotions:
- name: BRONZE
validations:
Expand Down Expand Up @@ -87,32 +113,53 @@ promotions:
}
yaml.Unmarshal(buf, &root)

// Setup of validations
var createdValidations []string
for _, validation := range root.Validations {
createdValidations = append(createdValidations, validation.Name)
// TODO Generic data type
// Tests data type
if validation.Tests != nil {
err = SetupTestValidationStamp(
project,
branch,
validation.Name,
validation.Description,
validation.Tests.WarningIfSkipped,
)
if err != nil {
return err
}
}
}

// List of validations and promotions to setup
var validationStamps []string

// Going over all promotions
for _, promotion := range root.Promotions {
if len(promotion.Validations) > 0 {
for _, validation := range promotion.Validations {
validationStamps = append(validationStamps, validation)
}
validationStamps = append(validationStamps, promotion.Validations...)
}
}

// Creates all the validations
for _, validation := range validationStamps {
// Setup the validation stamp
err := client.SetupValidationStamp(
cfg,
project,
branch,
validation,
"",
"",
"",
)
if err != nil {
return err
// Check if not already created
if slices.Index(createdValidations, validation) < 0 {
// Setup the validation stamp
err := client.SetupValidationStamp(
cfg,
project,
branch,
validation,
"",
"",
"",
)
if err != nil {
return err
}
}
}

Expand Down
60 changes: 60 additions & 0 deletions cmd/validationStamp.go
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,9 @@ package cmd

import (
"github.com/spf13/cobra"

client "ontrack-cli/client"
config "ontrack-cli/config"
)

// validationStampCmd represents the validationStamp command
Expand Down Expand Up @@ -52,3 +55,60 @@ func init() {
// is called directly, e.g.:
// validationStampCmd.Flags().BoolP("toggle", "t", false, "Help message for toggle")
}

// Utility method to setup a "tests" validation stamp
func SetupTestValidationStamp(
project string,
branch string,
validation string,
description string,
warningIfSkipped bool,
) error {

cfg, err := config.GetSelectedConfiguration()
if err != nil {
return err
}

var data struct {
SetupTestSummaryValidationStamp struct {
Errors []struct {
Message string
}
}
}

err = client.GraphQLCall(cfg, `
mutation SetupTestSummaryValidationStamp(
$project: String!,
$branch: String!,
$validation: String!,
$description: String,
$warningIfSkipped: Boolean!
) {
setupTestSummaryValidationStamp(input: {
project: $project,
branch: $branch,
validation: $validation,
description: $description,
warningIfSkipped: $warningIfSkipped
}) {
errors {
message
}
}
}
`, map[string]interface{}{
"project": project,
"branch": branch,
"validation": validation,
"description": description,
"warningIfSkipped": warningIfSkipped,
}, &data)

if err != nil {
return err
}

return client.CheckDataErrors(data.SetupTestSummaryValidationStamp.Errors)
}
58 changes: 7 additions & 51 deletions cmd/validationStampSetupTests.go
Original file line number Diff line number Diff line change
Expand Up @@ -22,9 +22,6 @@ THE SOFTWARE.
package cmd

import (
client "ontrack-cli/client"
config "ontrack-cli/config"

"github.com/spf13/cobra"
)

Expand Down Expand Up @@ -66,54 +63,13 @@ For example:
return err
}

cfg, err := config.GetSelectedConfiguration()
if err != nil {
return err
}

var data struct {
SetupTestSummaryValidationStamp struct {
Errors []struct {
Message string
}
}
}
if err := client.GraphQLCall(cfg, `
mutation SetupTestSummaryValidationStamp(
$project: String!,
$branch: String!,
$validation: String!,
$description: String,
$warningIfSkipped: Boolean!
) {
setupTestSummaryValidationStamp(input: {
project: $project,
branch: $branch,
validation: $validation,
description: $description,
warningIfSkipped: $warningIfSkipped
}) {
errors {
message
}
}
}
`, map[string]interface{}{
"project": project,
"branch": branch,
"validation": validation,
"description": description,
"warningIfSkipped": warningIfSkipped,
}, &data); err != nil {
return err
}

if err := client.CheckDataErrors(data.SetupTestSummaryValidationStamp.Errors); err != nil {
return err
}

// OK
return nil
return SetupTestValidationStamp(
project,
branch,
validation,
description,
warningIfSkipped,
)
},
}

Expand Down
2 changes: 1 addition & 1 deletion go.mod
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
module ontrack-cli

go 1.15
go 1.21.1

require (
github.com/mitchellh/go-homedir v1.1.0
Expand Down

0 comments on commit b04ef2c

Please sign in to comment.