1
0
mirror of https://github.com/SAP/jenkins-library.git synced 2024-12-14 11:03:09 +02:00
sap-jenkins-library/cmd/gaugeExecuteTests.go

119 lines
3.4 KiB
Go
Raw Normal View History

package cmd
import (
"fmt"
"io"
"os"
"path/filepath"
"strings"
"github.com/SAP/jenkins-library/pkg/command"
"github.com/SAP/jenkins-library/pkg/log"
"github.com/SAP/jenkins-library/pkg/piperutils"
"github.com/SAP/jenkins-library/pkg/telemetry"
"github.com/pkg/errors"
)
var ErrorGaugeInstall error = errors.New("error installing gauge")
var ErrorGaugeRunnerInstall error = errors.New("error installing runner")
var ErrorGaugeRun error = errors.New("error running gauge")
type gaugeExecuteTestsUtils interface {
FileExists(filename string) (bool, error)
MkdirAll(path string, perm os.FileMode) error
SetEnv([]string)
RunExecutable(executable string, params ...string) error
Stdout(io.Writer)
Getenv(key string) string
}
type gaugeExecuteTestsUtilsBundle struct {
*command.Command
*piperutils.Files
}
func newGaugeExecuteTestsUtils() gaugeExecuteTestsUtils {
utils := gaugeExecuteTestsUtilsBundle{
Command: &command.Command{},
Files: &piperutils.Files{},
}
utils.Stdout(log.Writer())
utils.Stderr(log.Writer())
return &utils
}
func gaugeExecuteTests(config gaugeExecuteTestsOptions, telemetryData *telemetry.CustomData, influx *gaugeExecuteTestsInflux) {
utils := newGaugeExecuteTestsUtils()
influx.step_data.fields.gauge = false
err := runGaugeExecuteTests(&config, telemetryData, utils)
if err != nil {
log.Entry().WithError(err).Fatal("step execution failed")
}
influx.step_data.fields.gauge = true
}
func runGaugeExecuteTests(config *gaugeExecuteTestsOptions, telemetryData *telemetry.CustomData, utils gaugeExecuteTestsUtils) error {
if config.InstallCommand != "" {
err := installGauge(config.InstallCommand, utils)
if err != nil {
return err
}
}
if config.LanguageRunner != "" {
err := installLanguageRunner(config.LanguageRunner, utils)
if err != nil {
return err
}
}
err := runGauge(config, utils)
if err != nil {
return fmt.Errorf("failed to run gauge: %w", err)
}
return nil
}
func installGauge(gaugeInstallCommand string, utils gaugeExecuteTestsUtils) error {
installGaugeTokens := strings.Split(gaugeInstallCommand, " ")
installGaugeTokens = append(installGaugeTokens, "--prefix=~/.npm-global")
err := utils.RunExecutable(installGaugeTokens[0], installGaugeTokens[1:]...)
if err != nil {
log.SetErrorCategory(log.ErrorConfiguration)
return errors.Wrap(ErrorGaugeInstall, err.Error())
}
return nil
}
func installLanguageRunner(languageRunner string, utils gaugeExecuteTestsUtils) error {
installParams := []string{"install", languageRunner}
gaugePath := filepath.FromSlash(filepath.Join(utils.Getenv("HOME"), "/.npm-global/bin/gauge"))
err := utils.RunExecutable(gaugePath, installParams...)
if err != nil {
log.SetErrorCategory(log.ErrorConfiguration)
return errors.Wrap(ErrorGaugeRunnerInstall, err.Error())
}
return nil
}
func runGauge(config *gaugeExecuteTestsOptions, utils gaugeExecuteTestsUtils) error {
runCommandTokens := strings.Split(config.RunCommand, " ")
if config.TestOptions != "" {
runCommandTokens = append(runCommandTokens, strings.Split(config.TestOptions, " ")...)
}
gaugePath := filepath.FromSlash(filepath.Join(utils.Getenv("HOME"), "/.npm-global/bin/gauge"))
err := utils.RunExecutable(gaugePath, runCommandTokens...)
if err != nil {
return errors.Wrap(ErrorGaugeRun, err.Error())
}
return nil
}
func (utils gaugeExecuteTestsUtilsBundle) Getenv(key string) string {
return os.Getenv(key)
}