mirror of
https://github.com/SAP/jenkins-library.git
synced 2024-12-12 10:55:20 +02:00
119 lines
3.3 KiB
Go
119 lines
3.3 KiB
Go
|
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.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.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)
|
||
|
}
|