github.com/SAP/jenkins-library@v1.362.0/cmd/npmExecuteScripts.go (about)

     1  package cmd
     2  
     3  import (
     4  	"os"
     5  
     6  	"github.com/SAP/jenkins-library/pkg/buildsettings"
     7  	"github.com/SAP/jenkins-library/pkg/log"
     8  	"github.com/SAP/jenkins-library/pkg/npm"
     9  	"github.com/SAP/jenkins-library/pkg/telemetry"
    10  )
    11  
    12  func npmExecuteScripts(config npmExecuteScriptsOptions, telemetryData *telemetry.CustomData, commonPipelineEnvironment *npmExecuteScriptsCommonPipelineEnvironment) {
    13  	npmExecutorOptions := npm.ExecutorOptions{DefaultNpmRegistry: config.DefaultNpmRegistry}
    14  	npmExecutor := npm.NewExecutor(npmExecutorOptions)
    15  
    16  	err := runNpmExecuteScripts(npmExecutor, &config, commonPipelineEnvironment)
    17  	if err != nil {
    18  		log.SetErrorCategory(log.ErrorBuild)
    19  		log.Entry().WithError(err).Fatal("step execution failed")
    20  	}
    21  }
    22  
    23  func runNpmExecuteScripts(npmExecutor npm.Executor, config *npmExecuteScriptsOptions, commonPipelineEnvironment *npmExecuteScriptsCommonPipelineEnvironment) error {
    24  	// setting env. variable to omit installation of dev. dependencies
    25  	if config.Production {
    26  		os.Setenv("NODE_ENV", "production")
    27  	}
    28  
    29  	if config.Install {
    30  		if len(config.BuildDescriptorList) > 0 {
    31  			if err := npmExecutor.InstallAllDependencies(config.BuildDescriptorList); err != nil {
    32  				return err
    33  			}
    34  		} else {
    35  			packageJSONFiles, err := npmExecutor.FindPackageJSONFilesWithExcludes(config.BuildDescriptorExcludeList)
    36  			if err != nil {
    37  				return err
    38  			}
    39  
    40  			if err := npmExecutor.InstallAllDependencies(packageJSONFiles); err != nil {
    41  				return err
    42  			}
    43  		}
    44  	}
    45  
    46  	if config.CreateBOM {
    47  		if len(config.BuildDescriptorList) > 0 {
    48  			if err := npmExecutor.CreateBOM(config.BuildDescriptorList); err != nil {
    49  				return err
    50  			}
    51  		} else {
    52  			packageJSONFiles, err := npmExecutor.FindPackageJSONFilesWithExcludes(config.BuildDescriptorExcludeList)
    53  			if err != nil {
    54  				return err
    55  			}
    56  
    57  			if err := npmExecutor.CreateBOM(packageJSONFiles); err != nil {
    58  				return err
    59  			}
    60  		}
    61  	}
    62  
    63  	err := npmExecutor.RunScriptsInAllPackages(config.RunScripts, nil, config.ScriptOptions, config.VirtualFrameBuffer, config.BuildDescriptorExcludeList, config.BuildDescriptorList)
    64  	if err != nil {
    65  		return err
    66  	}
    67  
    68  	log.Entry().Debugf("creating build settings information...")
    69  	stepName := "npmExecuteScripts"
    70  	dockerImage, err := GetDockerImageValue(stepName)
    71  	if err != nil {
    72  		return err
    73  	}
    74  
    75  	npmConfig := buildsettings.BuildOptions{
    76  		Publish:            config.Publish,
    77  		CreateBOM:          config.CreateBOM,
    78  		DefaultNpmRegistry: config.DefaultNpmRegistry,
    79  		BuildSettingsInfo:  config.BuildSettingsInfo,
    80  		DockerImage:        dockerImage,
    81  	}
    82  	buildSettingsInfo, err := buildsettings.CreateBuildSettingsInfo(&npmConfig, stepName)
    83  	if err != nil {
    84  		log.Entry().Warnf("failed to create build settings info: %v", err)
    85  	}
    86  	commonPipelineEnvironment.custom.buildSettingsInfo = buildSettingsInfo
    87  
    88  	if config.Publish {
    89  		if len(config.BuildDescriptorList) > 0 {
    90  			err = npmExecutor.PublishAllPackages(config.BuildDescriptorList, config.RepositoryURL, config.RepositoryUsername, config.RepositoryPassword, config.PackBeforePublish)
    91  			if err != nil {
    92  				return err
    93  			}
    94  		} else {
    95  			packageJSONFiles, err := npmExecutor.FindPackageJSONFilesWithExcludes(config.BuildDescriptorExcludeList)
    96  			if err != nil {
    97  				return err
    98  			}
    99  
   100  			err = npmExecutor.PublishAllPackages(packageJSONFiles, config.RepositoryURL, config.RepositoryUsername, config.RepositoryPassword, config.PackBeforePublish)
   101  			if err != nil {
   102  				return err
   103  			}
   104  		}
   105  	}
   106  
   107  	return nil
   108  }