You've already forked sap-jenkins-library
mirror of
https://github.com/SAP/jenkins-library.git
synced 2025-11-06 09:09:19 +02:00
feat (buildSettingsInfo) new common cpe which holds build settings json value (#3272)
* create build settings for maven * cases for when mavenBuild may be present * fixing unit test for mavenBuild to include cpe * changing position of buildSettngsJson to be called atfter build runs * package * extending the struct for other build types * adding values for mta build settings * changing config data type * adding npm build settings * unit tests * fix trailing space * typo correction in yaml * Vitalii/build settings info (#3277) * Add buildsettings package * Improve buildSetting package for mta, npm * Add unit-test * Fix * Fix Co-authored-by: Vitalii Sidorov <vitalii.sidorov@sap.com> * review changes * removing buildTool param * changing npm script name * fix npmExecute tests * including build settings info in npm struct Co-authored-by: Your Name <you@example.com> Co-authored-by: kingvvgo <56587879+kingvvgo@users.noreply.github.com> Co-authored-by: Vitalii Sidorov <vitalii.sidorov@sap.com> Co-authored-by: Oliver Nocon <33484802+OliverNocon@users.noreply.github.com>
This commit is contained in:
@@ -7,6 +7,7 @@ import (
|
||||
"path/filepath"
|
||||
"strings"
|
||||
|
||||
"github.com/SAP/jenkins-library/pkg/buildsettings"
|
||||
"github.com/SAP/jenkins-library/pkg/command"
|
||||
"github.com/SAP/jenkins-library/pkg/log"
|
||||
"github.com/SAP/jenkins-library/pkg/maven"
|
||||
@@ -17,16 +18,16 @@ import (
|
||||
piperhttp "github.com/SAP/jenkins-library/pkg/http"
|
||||
)
|
||||
|
||||
func mavenBuild(config mavenBuildOptions, telemetryData *telemetry.CustomData) {
|
||||
func mavenBuild(config mavenBuildOptions, telemetryData *telemetry.CustomData, commonPipelineEnvironment *mavenBuildCommonPipelineEnvironment) {
|
||||
utils := maven.NewUtilsBundle()
|
||||
|
||||
err := runMavenBuild(&config, telemetryData, utils)
|
||||
err := runMavenBuild(&config, telemetryData, utils, commonPipelineEnvironment)
|
||||
if err != nil {
|
||||
log.Entry().WithError(err).Fatal("step execution failed")
|
||||
}
|
||||
}
|
||||
|
||||
func runMavenBuild(config *mavenBuildOptions, telemetryData *telemetry.CustomData, utils maven.Utils) error {
|
||||
func runMavenBuild(config *mavenBuildOptions, telemetryData *telemetry.CustomData, utils maven.Utils, commonPipelineEnvironment *mavenBuildCommonPipelineEnvironment) error {
|
||||
|
||||
var flags = []string{"-update-snapshots", "--batch-mode"}
|
||||
|
||||
@@ -84,6 +85,21 @@ func runMavenBuild(config *mavenBuildOptions, telemetryData *telemetry.CustomDat
|
||||
|
||||
_, err := maven.Execute(&mavenOptions, utils)
|
||||
|
||||
log.Entry().Infof("creating build settings information...")
|
||||
mavenConfig := buildsettings.BuildOptions{
|
||||
Profiles: config.Profiles,
|
||||
GlobalSettingsFile: config.GlobalSettingsFile,
|
||||
LogSuccessfulMavenTransfers: config.LogSuccessfulMavenTransfers,
|
||||
CreateBOM: config.CreateBOM,
|
||||
Publish: config.Publish,
|
||||
BuildSettingsInfo: config.BuildSettingsInfo,
|
||||
}
|
||||
builSettings, err := buildsettings.CreateBuildSettingsInfo(&mavenConfig, "mavenBuild")
|
||||
if err != nil {
|
||||
log.Entry().Warnf("failed to create build settings info : ''%v", err)
|
||||
}
|
||||
commonPipelineEnvironment.custom.buildSettingsInfo = builSettings
|
||||
|
||||
if err == nil {
|
||||
if config.Publish && !config.Verify {
|
||||
log.Entry().Infof("publish detected, running mvn deploy")
|
||||
@@ -120,6 +136,7 @@ func runMavenBuild(config *mavenBuildOptions, telemetryData *telemetry.CustomDat
|
||||
log.Entry().Infof("publish not detected, ignoring maven deploy")
|
||||
}
|
||||
}
|
||||
|
||||
return err
|
||||
}
|
||||
|
||||
|
||||
@@ -5,10 +5,12 @@ package cmd
|
||||
import (
|
||||
"fmt"
|
||||
"os"
|
||||
"path/filepath"
|
||||
"time"
|
||||
|
||||
"github.com/SAP/jenkins-library/pkg/config"
|
||||
"github.com/SAP/jenkins-library/pkg/log"
|
||||
"github.com/SAP/jenkins-library/pkg/piperenv"
|
||||
"github.com/SAP/jenkins-library/pkg/splunk"
|
||||
"github.com/SAP/jenkins-library/pkg/telemetry"
|
||||
"github.com/SAP/jenkins-library/pkg/validation"
|
||||
@@ -32,6 +34,35 @@ type mavenBuildOptions struct {
|
||||
CustomTLSCertificateLinks []string `json:"customTlsCertificateLinks,omitempty"`
|
||||
Publish bool `json:"publish,omitempty"`
|
||||
JavaCaCertFilePath string `json:"javaCaCertFilePath,omitempty"`
|
||||
BuildSettingsInfo string `json:"buildSettingsInfo,omitempty"`
|
||||
}
|
||||
|
||||
type mavenBuildCommonPipelineEnvironment struct {
|
||||
custom struct {
|
||||
buildSettingsInfo string
|
||||
}
|
||||
}
|
||||
|
||||
func (p *mavenBuildCommonPipelineEnvironment) persist(path, resourceName string) {
|
||||
content := []struct {
|
||||
category string
|
||||
name string
|
||||
value interface{}
|
||||
}{
|
||||
{category: "custom", name: "buildSettingsInfo", value: p.custom.buildSettingsInfo},
|
||||
}
|
||||
|
||||
errCount := 0
|
||||
for _, param := range content {
|
||||
err := piperenv.SetResourceParameter(path, resourceName, filepath.Join(param.category, param.name), param.value)
|
||||
if err != nil {
|
||||
log.Entry().WithError(err).Error("Error persisting piper environment.")
|
||||
errCount++
|
||||
}
|
||||
}
|
||||
if errCount > 0 {
|
||||
log.Entry().Fatal("failed to persist Piper environment")
|
||||
}
|
||||
}
|
||||
|
||||
// MavenBuildCommand This step will install the maven project into the local maven repository.
|
||||
@@ -41,6 +72,7 @@ func MavenBuildCommand() *cobra.Command {
|
||||
metadata := mavenBuildMetadata()
|
||||
var stepConfig mavenBuildOptions
|
||||
var startTime time.Time
|
||||
var commonPipelineEnvironment mavenBuildCommonPipelineEnvironment
|
||||
var logCollector *log.CollectorHook
|
||||
|
||||
var createMavenBuildCmd = &cobra.Command{
|
||||
@@ -93,6 +125,7 @@ supports ci friendly versioning by flattening the pom before installing.`,
|
||||
telemetryData.ErrorCode = "1"
|
||||
handler := func() {
|
||||
config.RemoveVaultSecretFiles()
|
||||
commonPipelineEnvironment.persist(GeneralConfig.EnvRootPath, "commonPipelineEnvironment")
|
||||
telemetryData.Duration = fmt.Sprintf("%v", time.Since(startTime).Milliseconds())
|
||||
telemetryData.ErrorCategory = log.GetErrorCategory().String()
|
||||
telemetry.Send(&telemetryData)
|
||||
@@ -110,7 +143,7 @@ supports ci friendly versioning by flattening the pom before installing.`,
|
||||
GeneralConfig.HookConfig.SplunkConfig.Index,
|
||||
GeneralConfig.HookConfig.SplunkConfig.SendLogs)
|
||||
}
|
||||
mavenBuild(stepConfig, &telemetryData)
|
||||
mavenBuild(stepConfig, &telemetryData, &commonPipelineEnvironment)
|
||||
telemetryData.ErrorCode = "0"
|
||||
log.Entry().Info("SUCCESS")
|
||||
},
|
||||
@@ -137,6 +170,7 @@ func addMavenBuildFlags(cmd *cobra.Command, stepConfig *mavenBuildOptions) {
|
||||
cmd.Flags().StringSliceVar(&stepConfig.CustomTLSCertificateLinks, "customTlsCertificateLinks", []string{}, "List of download links to custom TLS certificates. This is required to ensure trusted connections to instances with repositories (like nexus) when publish flag is set to true.")
|
||||
cmd.Flags().BoolVar(&stepConfig.Publish, "publish", false, "Configures maven to run the deploy plugin to publish artifacts to a repository.")
|
||||
cmd.Flags().StringVar(&stepConfig.JavaCaCertFilePath, "javaCaCertFilePath", os.Getenv("PIPER_javaCaCertFilePath"), "path to the cacerts file used by Java. When maven publish is set to True and customTlsCertificateLinks (to deploy the artifact to a repository with a self signed cert) are provided to trust the self signed certs, Piper will extend the existing Java cacerts to include the new self signed certs. if not provided Piper will search for the cacerts in $JAVA_HOME/jre/lib/security/cacerts")
|
||||
cmd.Flags().StringVar(&stepConfig.BuildSettingsInfo, "buildSettingsInfo", os.Getenv("PIPER_buildSettingsInfo"), "build settings info is typically filled by the step automatically to create information about the build settings that were used during the maven build . This information is typically used for compliance related processes.")
|
||||
|
||||
}
|
||||
|
||||
@@ -334,11 +368,36 @@ func mavenBuildMetadata() config.StepData {
|
||||
Aliases: []config.Alias{{Name: "maven/javaCaCertFilePath"}},
|
||||
Default: os.Getenv("PIPER_javaCaCertFilePath"),
|
||||
},
|
||||
{
|
||||
Name: "buildSettingsInfo",
|
||||
ResourceRef: []config.ResourceReference{
|
||||
{
|
||||
Name: "commonPipelineEnvironment",
|
||||
Param: "custom/buildSettingsInfo",
|
||||
},
|
||||
},
|
||||
Scope: []string{"STEPS", "STAGES", "PARAMETERS"},
|
||||
Type: "string",
|
||||
Mandatory: false,
|
||||
Aliases: []config.Alias{},
|
||||
Default: os.Getenv("PIPER_buildSettingsInfo"),
|
||||
},
|
||||
},
|
||||
},
|
||||
Containers: []config.Container{
|
||||
{Name: "mvn", Image: "maven:3.6-jdk-8"},
|
||||
},
|
||||
Outputs: config.StepOutputs{
|
||||
Resources: []config.StepResources{
|
||||
{
|
||||
Name: "commonPipelineEnvironment",
|
||||
Type: "piperEnvironment",
|
||||
Parameters: []map[string]interface{}{
|
||||
{"Name": "custom/buildSettingsInfo"},
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
}
|
||||
return theMetaData
|
||||
|
||||
@@ -7,12 +7,15 @@ import (
|
||||
)
|
||||
|
||||
func TestMavenBuild(t *testing.T) {
|
||||
|
||||
cpe := mavenBuildCommonPipelineEnvironment{}
|
||||
|
||||
t.Run("mavenBuild should install the artifact", func(t *testing.T) {
|
||||
mockedUtils := newMavenMockUtils()
|
||||
|
||||
config := mavenBuildOptions{}
|
||||
|
||||
err := runMavenBuild(&config, nil, &mockedUtils)
|
||||
err := runMavenBuild(&config, nil, &mockedUtils, &cpe)
|
||||
|
||||
assert.Nil(t, err)
|
||||
assert.Equal(t, mockedUtils.Calls[0].Exec, "mvn")
|
||||
@@ -25,7 +28,7 @@ func TestMavenBuild(t *testing.T) {
|
||||
|
||||
config := mavenBuildOptions{}
|
||||
|
||||
err := runMavenBuild(&config, nil, &mockedUtils)
|
||||
err := runMavenBuild(&config, nil, &mockedUtils, &cpe)
|
||||
|
||||
assert.Nil(t, err)
|
||||
assert.Equal(t, mockedUtils.Calls[0].Exec, "mvn")
|
||||
@@ -37,7 +40,7 @@ func TestMavenBuild(t *testing.T) {
|
||||
|
||||
config := mavenBuildOptions{Flatten: true}
|
||||
|
||||
err := runMavenBuild(&config, nil, &mockedUtils)
|
||||
err := runMavenBuild(&config, nil, &mockedUtils, &cpe)
|
||||
|
||||
assert.Nil(t, err)
|
||||
assert.Contains(t, mockedUtils.Calls[0].Params, "flatten:flatten")
|
||||
@@ -50,7 +53,7 @@ func TestMavenBuild(t *testing.T) {
|
||||
|
||||
config := mavenBuildOptions{Verify: true}
|
||||
|
||||
err := runMavenBuild(&config, nil, &mockedUtils)
|
||||
err := runMavenBuild(&config, nil, &mockedUtils, &cpe)
|
||||
|
||||
assert.Nil(t, err)
|
||||
assert.Contains(t, mockedUtils.Calls[0].Params, "verify")
|
||||
@@ -62,7 +65,7 @@ func TestMavenBuild(t *testing.T) {
|
||||
|
||||
config := mavenBuildOptions{CreateBOM: true}
|
||||
|
||||
err := runMavenBuild(&config, nil, &mockedUtils)
|
||||
err := runMavenBuild(&config, nil, &mockedUtils, &cpe)
|
||||
|
||||
assert.Nil(t, err)
|
||||
assert.Contains(t, mockedUtils.Calls[0].Params, "org.cyclonedx:cyclonedx-maven-plugin:makeAggregateBom")
|
||||
@@ -82,7 +85,7 @@ func TestMavenBuild(t *testing.T) {
|
||||
|
||||
config := mavenBuildOptions{Publish: true, Verify: false}
|
||||
|
||||
err := runMavenBuild(&config, nil, &mockedUtils)
|
||||
err := runMavenBuild(&config, nil, &mockedUtils, &cpe)
|
||||
|
||||
assert.Nil(t, err)
|
||||
assert.Contains(t, mockedUtils.Calls[0].Params, "install")
|
||||
@@ -96,7 +99,7 @@ func TestMavenBuild(t *testing.T) {
|
||||
|
||||
config := mavenBuildOptions{Publish: true, Verify: false}
|
||||
|
||||
err := runMavenBuild(&config, nil, &mockedUtils)
|
||||
err := runMavenBuild(&config, nil, &mockedUtils, &cpe)
|
||||
|
||||
assert.Nil(t, err)
|
||||
assert.Contains(t, mockedUtils.Calls[1].Params, "-Dmaven.main.skip=true")
|
||||
@@ -110,7 +113,7 @@ func TestMavenBuild(t *testing.T) {
|
||||
|
||||
config := mavenBuildOptions{Publish: true, Verify: false, AltDeploymentRepositoryID: "ID", AltDeploymentRepositoryURL: "http://sampleRepo.com"}
|
||||
|
||||
err := runMavenBuild(&config, nil, &mockedUtils)
|
||||
err := runMavenBuild(&config, nil, &mockedUtils, &cpe)
|
||||
|
||||
assert.Nil(t, err)
|
||||
assert.Contains(t, mockedUtils.Calls[1].Params, "-DaltDeploymentRepository=ID::default::http://sampleRepo.com")
|
||||
@@ -121,7 +124,7 @@ func TestMavenBuild(t *testing.T) {
|
||||
|
||||
config := mavenBuildOptions{Profiles: []string{"profile1", "profile2"}}
|
||||
|
||||
err := runMavenBuild(&config, nil, &mockedUtils)
|
||||
err := runMavenBuild(&config, nil, &mockedUtils, &cpe)
|
||||
|
||||
assert.Nil(t, err)
|
||||
assert.Contains(t, mockedUtils.Calls[0].Params, "--activate-profiles")
|
||||
|
||||
@@ -13,6 +13,7 @@ import (
|
||||
"text/template"
|
||||
"time"
|
||||
|
||||
"github.com/SAP/jenkins-library/pkg/buildsettings"
|
||||
"github.com/SAP/jenkins-library/pkg/npm"
|
||||
|
||||
"github.com/SAP/jenkins-library/pkg/command"
|
||||
@@ -233,6 +234,19 @@ func runMtaBuild(config mtaBuildOptions,
|
||||
return err
|
||||
}
|
||||
|
||||
log.Entry().Infof("creating build settings information...")
|
||||
mtaConfig := buildsettings.BuildOptions{
|
||||
Profiles: config.Profiles,
|
||||
GlobalSettingsFile: config.GlobalSettingsFile,
|
||||
Publish: config.Publish,
|
||||
BuildSettingsInfo: config.BuildSettingsInfo,
|
||||
}
|
||||
builSettings, err := buildsettings.CreateBuildSettingsInfo(&mtaConfig, "mtaBuild")
|
||||
if err != nil {
|
||||
log.Entry().Warnf("failed to create build settings info : ''%v", err)
|
||||
}
|
||||
commonPipelineEnvironment.custom.buildSettingsInfo = builSettings
|
||||
|
||||
commonPipelineEnvironment.mtarFilePath = mtarName
|
||||
|
||||
if config.InstallArtifacts {
|
||||
|
||||
@@ -37,12 +37,14 @@ type mtaBuildOptions struct {
|
||||
MtaDeploymentRepositoryURL string `json:"mtaDeploymentRepositoryUrl,omitempty"`
|
||||
Publish bool `json:"publish,omitempty"`
|
||||
Profiles []string `json:"profiles,omitempty"`
|
||||
BuildSettingsInfo string `json:"buildSettingsInfo,omitempty"`
|
||||
}
|
||||
|
||||
type mtaBuildCommonPipelineEnvironment struct {
|
||||
mtarFilePath string
|
||||
custom struct {
|
||||
mtarPublishedURL string
|
||||
mtarPublishedURL string
|
||||
buildSettingsInfo string
|
||||
}
|
||||
}
|
||||
|
||||
@@ -54,6 +56,7 @@ func (p *mtaBuildCommonPipelineEnvironment) persist(path, resourceName string) {
|
||||
}{
|
||||
{category: "", name: "mtarFilePath", value: p.mtarFilePath},
|
||||
{category: "custom", name: "mtarPublishedUrl", value: p.custom.mtarPublishedURL},
|
||||
{category: "custom", name: "buildSettingsInfo", value: p.custom.buildSettingsInfo},
|
||||
}
|
||||
|
||||
errCount := 0
|
||||
@@ -175,6 +178,7 @@ func addMtaBuildFlags(cmd *cobra.Command, stepConfig *mtaBuildOptions) {
|
||||
cmd.Flags().StringVar(&stepConfig.MtaDeploymentRepositoryURL, "mtaDeploymentRepositoryUrl", os.Getenv("PIPER_mtaDeploymentRepositoryUrl"), "Url for the alternative deployment repository to which mtar artifacts will be publised")
|
||||
cmd.Flags().BoolVar(&stepConfig.Publish, "publish", false, "pushed mtar artifact to altDeploymentRepositoryUrl/altDeploymentRepositoryID when set to true")
|
||||
cmd.Flags().StringSliceVar(&stepConfig.Profiles, "profiles", []string{}, "Defines list of maven build profiles to be used. profiles will overwrite existing values in the global settings xml at $M2_HOME/conf/settings.xml")
|
||||
cmd.Flags().StringVar(&stepConfig.BuildSettingsInfo, "buildSettingsInfo", os.Getenv("PIPER_buildSettingsInfo"), "build settings info is typically filled by the step automatically to create information about the build settings that were used during the mta build . This information is typically used for compliance related processes.")
|
||||
|
||||
}
|
||||
|
||||
@@ -391,6 +395,20 @@ func mtaBuildMetadata() config.StepData {
|
||||
Aliases: []config.Alias{},
|
||||
Default: []string{},
|
||||
},
|
||||
{
|
||||
Name: "buildSettingsInfo",
|
||||
ResourceRef: []config.ResourceReference{
|
||||
{
|
||||
Name: "commonPipelineEnvironment",
|
||||
Param: "custom/buildSettingsInfo",
|
||||
},
|
||||
},
|
||||
Scope: []string{"STEPS", "STAGES", "PARAMETERS"},
|
||||
Type: "string",
|
||||
Mandatory: false,
|
||||
Aliases: []config.Alias{},
|
||||
Default: os.Getenv("PIPER_buildSettingsInfo"),
|
||||
},
|
||||
},
|
||||
},
|
||||
Containers: []config.Container{
|
||||
@@ -404,6 +422,7 @@ func mtaBuildMetadata() config.StepData {
|
||||
Parameters: []map[string]interface{}{
|
||||
{"Name": "mtarFilePath"},
|
||||
{"Name": "custom/mtarPublishedUrl"},
|
||||
{"Name": "custom/buildSettingsInfo"},
|
||||
},
|
||||
},
|
||||
},
|
||||
|
||||
@@ -1,23 +1,24 @@
|
||||
package cmd
|
||||
|
||||
import (
|
||||
"github.com/SAP/jenkins-library/pkg/buildsettings"
|
||||
"github.com/SAP/jenkins-library/pkg/log"
|
||||
"github.com/SAP/jenkins-library/pkg/npm"
|
||||
"github.com/SAP/jenkins-library/pkg/telemetry"
|
||||
)
|
||||
|
||||
func npmExecuteScripts(config npmExecuteScriptsOptions, telemetryData *telemetry.CustomData) {
|
||||
func npmExecuteScripts(config npmExecuteScriptsOptions, telemetryData *telemetry.CustomData, commonPipelineEnvironment *npmExecuteScriptsCommonPipelineEnvironment) {
|
||||
npmExecutorOptions := npm.ExecutorOptions{DefaultNpmRegistry: config.DefaultNpmRegistry}
|
||||
npmExecutor := npm.NewExecutor(npmExecutorOptions)
|
||||
|
||||
err := runNpmExecuteScripts(npmExecutor, &config)
|
||||
err := runNpmExecuteScripts(npmExecutor, &config, commonPipelineEnvironment)
|
||||
if err != nil {
|
||||
log.SetErrorCategory(log.ErrorBuild)
|
||||
log.Entry().WithError(err).Fatal("step execution failed")
|
||||
}
|
||||
}
|
||||
|
||||
func runNpmExecuteScripts(npmExecutor npm.Executor, config *npmExecuteScriptsOptions) error {
|
||||
func runNpmExecuteScripts(npmExecutor npm.Executor, config *npmExecuteScriptsOptions, commonPipelineEnvironment *npmExecuteScriptsCommonPipelineEnvironment) error {
|
||||
if config.Install {
|
||||
packageJSONFiles, err := npmExecutor.FindPackageJSONFilesWithExcludes(config.BuildDescriptorExcludeList)
|
||||
if err != nil {
|
||||
@@ -46,6 +47,19 @@ func runNpmExecuteScripts(npmExecutor npm.Executor, config *npmExecuteScriptsOpt
|
||||
return err
|
||||
}
|
||||
|
||||
log.Entry().Infof("creating build settings information...")
|
||||
npmConfig := buildsettings.BuildOptions{
|
||||
Publish: config.Publish,
|
||||
CreateBOM: config.CreateBOM,
|
||||
DefaultNpmRegistry: config.DefaultNpmRegistry,
|
||||
BuildSettingsInfo: config.BuildSettingsInfo,
|
||||
}
|
||||
builSettings, err := buildsettings.CreateBuildSettingsInfo(&npmConfig, "npmExecuteScripts")
|
||||
if err != nil {
|
||||
log.Entry().Warnf("failed to create build settings info : ''%v", err)
|
||||
}
|
||||
commonPipelineEnvironment.custom.buildSettingsInfo = builSettings
|
||||
|
||||
if config.Publish {
|
||||
packageJSONFiles, err := npmExecutor.FindPackageJSONFilesWithExcludes(config.BuildDescriptorExcludeList)
|
||||
if err != nil {
|
||||
|
||||
@@ -5,10 +5,12 @@ package cmd
|
||||
import (
|
||||
"fmt"
|
||||
"os"
|
||||
"path/filepath"
|
||||
"time"
|
||||
|
||||
"github.com/SAP/jenkins-library/pkg/config"
|
||||
"github.com/SAP/jenkins-library/pkg/log"
|
||||
"github.com/SAP/jenkins-library/pkg/piperenv"
|
||||
"github.com/SAP/jenkins-library/pkg/splunk"
|
||||
"github.com/SAP/jenkins-library/pkg/telemetry"
|
||||
"github.com/SAP/jenkins-library/pkg/validation"
|
||||
@@ -28,6 +30,35 @@ type npmExecuteScriptsOptions struct {
|
||||
RepositoryURL string `json:"repositoryUrl,omitempty"`
|
||||
RepositoryPassword string `json:"repositoryPassword,omitempty"`
|
||||
RepositoryUsername string `json:"repositoryUsername,omitempty"`
|
||||
BuildSettingsInfo string `json:"buildSettingsInfo,omitempty"`
|
||||
}
|
||||
|
||||
type npmExecuteScriptsCommonPipelineEnvironment struct {
|
||||
custom struct {
|
||||
buildSettingsInfo string
|
||||
}
|
||||
}
|
||||
|
||||
func (p *npmExecuteScriptsCommonPipelineEnvironment) persist(path, resourceName string) {
|
||||
content := []struct {
|
||||
category string
|
||||
name string
|
||||
value interface{}
|
||||
}{
|
||||
{category: "custom", name: "buildSettingsInfo", value: p.custom.buildSettingsInfo},
|
||||
}
|
||||
|
||||
errCount := 0
|
||||
for _, param := range content {
|
||||
err := piperenv.SetResourceParameter(path, resourceName, filepath.Join(param.category, param.name), param.value)
|
||||
if err != nil {
|
||||
log.Entry().WithError(err).Error("Error persisting piper environment.")
|
||||
errCount++
|
||||
}
|
||||
}
|
||||
if errCount > 0 {
|
||||
log.Entry().Fatal("failed to persist Piper environment")
|
||||
}
|
||||
}
|
||||
|
||||
// NpmExecuteScriptsCommand Execute npm run scripts on all npm packages in a project
|
||||
@@ -37,6 +68,7 @@ func NpmExecuteScriptsCommand() *cobra.Command {
|
||||
metadata := npmExecuteScriptsMetadata()
|
||||
var stepConfig npmExecuteScriptsOptions
|
||||
var startTime time.Time
|
||||
var commonPipelineEnvironment npmExecuteScriptsCommonPipelineEnvironment
|
||||
var logCollector *log.CollectorHook
|
||||
|
||||
var createNpmExecuteScriptsCmd = &cobra.Command{
|
||||
@@ -88,6 +120,7 @@ func NpmExecuteScriptsCommand() *cobra.Command {
|
||||
telemetryData.ErrorCode = "1"
|
||||
handler := func() {
|
||||
config.RemoveVaultSecretFiles()
|
||||
commonPipelineEnvironment.persist(GeneralConfig.EnvRootPath, "commonPipelineEnvironment")
|
||||
telemetryData.Duration = fmt.Sprintf("%v", time.Since(startTime).Milliseconds())
|
||||
telemetryData.ErrorCategory = log.GetErrorCategory().String()
|
||||
telemetry.Send(&telemetryData)
|
||||
@@ -105,7 +138,7 @@ func NpmExecuteScriptsCommand() *cobra.Command {
|
||||
GeneralConfig.HookConfig.SplunkConfig.Index,
|
||||
GeneralConfig.HookConfig.SplunkConfig.SendLogs)
|
||||
}
|
||||
npmExecuteScripts(stepConfig, &telemetryData)
|
||||
npmExecuteScripts(stepConfig, &telemetryData, &commonPipelineEnvironment)
|
||||
telemetryData.ErrorCode = "0"
|
||||
log.Entry().Info("SUCCESS")
|
||||
},
|
||||
@@ -128,6 +161,7 @@ func addNpmExecuteScriptsFlags(cmd *cobra.Command, stepConfig *npmExecuteScripts
|
||||
cmd.Flags().StringVar(&stepConfig.RepositoryURL, "repositoryUrl", os.Getenv("PIPER_repositoryUrl"), "Url to the repository to which the project artifacts should be published.")
|
||||
cmd.Flags().StringVar(&stepConfig.RepositoryPassword, "repositoryPassword", os.Getenv("PIPER_repositoryPassword"), "Password for the repository to which the project artifacts should be published.")
|
||||
cmd.Flags().StringVar(&stepConfig.RepositoryUsername, "repositoryUsername", os.Getenv("PIPER_repositoryUsername"), "Username for the repository to which the project artifacts should be published.")
|
||||
cmd.Flags().StringVar(&stepConfig.BuildSettingsInfo, "buildSettingsInfo", os.Getenv("PIPER_buildSettingsInfo"), "build settings info is typically filled by the step automatically to create information about the build settings that were used during the npm build . This information is typically used for compliance related processes.")
|
||||
|
||||
}
|
||||
|
||||
@@ -268,11 +302,36 @@ func npmExecuteScriptsMetadata() config.StepData {
|
||||
Aliases: []config.Alias{},
|
||||
Default: os.Getenv("PIPER_repositoryUsername"),
|
||||
},
|
||||
{
|
||||
Name: "buildSettingsInfo",
|
||||
ResourceRef: []config.ResourceReference{
|
||||
{
|
||||
Name: "commonPipelineEnvironment",
|
||||
Param: "custom/buildSettingsInfo",
|
||||
},
|
||||
},
|
||||
Scope: []string{"STEPS", "STAGES", "PARAMETERS"},
|
||||
Type: "string",
|
||||
Mandatory: false,
|
||||
Aliases: []config.Alias{},
|
||||
Default: os.Getenv("PIPER_buildSettingsInfo"),
|
||||
},
|
||||
},
|
||||
},
|
||||
Containers: []config.Container{
|
||||
{Name: "node", Image: "node:lts-stretch"},
|
||||
},
|
||||
Outputs: config.StepOutputs{
|
||||
Resources: []config.StepResources{
|
||||
{
|
||||
Name: "commonPipelineEnvironment",
|
||||
Type: "piperEnvironment",
|
||||
Parameters: []map[string]interface{}{
|
||||
{"Name": "custom/buildSettingsInfo"},
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
}
|
||||
return theMetaData
|
||||
|
||||
@@ -26,6 +26,8 @@ func newNpmMockUtilsBundle() NpmMockUtilsBundle {
|
||||
}
|
||||
|
||||
func TestNpmExecuteScripts(t *testing.T) {
|
||||
cpe := npmExecuteScriptsCommonPipelineEnvironment{}
|
||||
|
||||
t.Run("Call with packagesList", func(t *testing.T) {
|
||||
config := npmExecuteScriptsOptions{Install: true, RunScripts: []string{"ci-build", "ci-test"}, BuildDescriptorList: []string{"src/package.json"}}
|
||||
utils := npm.NewNpmMockUtilsBundle()
|
||||
@@ -33,7 +35,7 @@ func TestNpmExecuteScripts(t *testing.T) {
|
||||
utils.AddFile("src/package.json", []byte("{\"name\": \"Test\" }"))
|
||||
|
||||
npmExecutor := npm.NpmExecutorMock{Utils: utils, Config: npm.NpmConfig{Install: config.Install, RunScripts: config.RunScripts, PackagesList: config.BuildDescriptorList}}
|
||||
err := runNpmExecuteScripts(&npmExecutor, &config)
|
||||
err := runNpmExecuteScripts(&npmExecutor, &config, &cpe)
|
||||
|
||||
assert.NoError(t, err)
|
||||
})
|
||||
@@ -45,7 +47,7 @@ func TestNpmExecuteScripts(t *testing.T) {
|
||||
utils.AddFile("src/package.json", []byte("{\"name\": \"Test\" }"))
|
||||
|
||||
npmExecutor := npm.NpmExecutorMock{Utils: utils, Config: npm.NpmConfig{Install: config.Install, RunScripts: config.RunScripts, ExcludeList: config.BuildDescriptorExcludeList}}
|
||||
err := runNpmExecuteScripts(&npmExecutor, &config)
|
||||
err := runNpmExecuteScripts(&npmExecutor, &config, &cpe)
|
||||
|
||||
assert.NoError(t, err)
|
||||
})
|
||||
@@ -57,7 +59,7 @@ func TestNpmExecuteScripts(t *testing.T) {
|
||||
utils.AddFile("src/package.json", []byte("{\"name\": \"Test\" }"))
|
||||
|
||||
npmExecutor := npm.NpmExecutorMock{Utils: utils, Config: npm.NpmConfig{Install: config.Install, RunScripts: config.RunScripts, ScriptOptions: config.ScriptOptions}}
|
||||
err := runNpmExecuteScripts(&npmExecutor, &config)
|
||||
err := runNpmExecuteScripts(&npmExecutor, &config, &cpe)
|
||||
|
||||
assert.NoError(t, err)
|
||||
})
|
||||
@@ -69,7 +71,7 @@ func TestNpmExecuteScripts(t *testing.T) {
|
||||
utils.AddFile("src/package.json", []byte("{\"name\": \"Test\" }"))
|
||||
|
||||
npmExecutor := npm.NpmExecutorMock{Utils: utils, Config: npm.NpmConfig{Install: config.Install, RunScripts: config.RunScripts}}
|
||||
err := runNpmExecuteScripts(&npmExecutor, &config)
|
||||
err := runNpmExecuteScripts(&npmExecutor, &config, &cpe)
|
||||
|
||||
assert.NoError(t, err)
|
||||
})
|
||||
@@ -81,7 +83,7 @@ func TestNpmExecuteScripts(t *testing.T) {
|
||||
utils.AddFile("src/package.json", []byte("{\"name\": \"Test\" }"))
|
||||
|
||||
npmExecutor := npm.NpmExecutorMock{Utils: utils, Config: npm.NpmConfig{Install: config.Install, RunScripts: config.RunScripts}}
|
||||
err := runNpmExecuteScripts(&npmExecutor, &config)
|
||||
err := runNpmExecuteScripts(&npmExecutor, &config, &cpe)
|
||||
|
||||
assert.NoError(t, err)
|
||||
})
|
||||
@@ -93,7 +95,7 @@ func TestNpmExecuteScripts(t *testing.T) {
|
||||
utils.AddFile("src/package.json", []byte("{\"name\": \"Test\" }"))
|
||||
|
||||
npmExecutor := npm.NpmExecutorMock{Utils: utils, Config: npm.NpmConfig{Install: config.Install, RunScripts: config.RunScripts, VirtualFrameBuffer: config.VirtualFrameBuffer}}
|
||||
err := runNpmExecuteScripts(&npmExecutor, &config)
|
||||
err := runNpmExecuteScripts(&npmExecutor, &config, &cpe)
|
||||
|
||||
assert.NoError(t, err)
|
||||
})
|
||||
@@ -109,7 +111,7 @@ func TestNpmExecuteScripts(t *testing.T) {
|
||||
|
||||
npmExecutor := npm.Execute{Utils: &utils, Options: options}
|
||||
|
||||
err := runNpmExecuteScripts(&npmExecutor, &config)
|
||||
err := runNpmExecuteScripts(&npmExecutor, &config, &cpe)
|
||||
|
||||
if assert.NoError(t, err) {
|
||||
if assert.Equal(t, 4, len(utils.execRunner.Calls)) {
|
||||
@@ -130,7 +132,7 @@ func TestNpmExecuteScripts(t *testing.T) {
|
||||
utils.AddFile("src/package.json", []byte("{\"name\": \"Test\" }"))
|
||||
|
||||
npmExecutor := npm.Execute{Utils: &utils, Options: options}
|
||||
err := runNpmExecuteScripts(&npmExecutor, &config)
|
||||
err := runNpmExecuteScripts(&npmExecutor, &config, &cpe)
|
||||
|
||||
assert.NoError(t, err)
|
||||
})
|
||||
|
||||
Reference in New Issue
Block a user