1
0
mirror of https://github.com/SAP/jenkins-library.git synced 2025-03-03 15:02:35 +02:00

Allow to configure sap npm registry in mta builder (#1550)

This commit is contained in:
Florian Wilhelm 2020-05-15 14:20:37 +02:00 committed by GitHub
parent 22fe087598
commit d151550554
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 67 additions and 13 deletions

View File

@ -100,9 +100,19 @@ func runMtaBuild(config mtaBuildOptions,
var err error
handleSettingsFiles(config, p, httpClient)
err = handleSettingsFiles(config, p, httpClient)
if err != nil {
return err
}
handleDefaultNpmRegistry(config, e)
err = configureNpmRegistry(config.DefaultNpmRegistry, "default", "", e)
if err != nil {
return err
}
err = configureNpmRegistry(config.SapNpmRegistry, "SAP", "@sap", e)
if err != nil {
return err
}
mtaYamlFile := "mta.yaml"
mtaYamlFileExists, err := p.FileExists(mtaYamlFile)
@ -299,16 +309,21 @@ func createMtaYamlFile(mtaYamlFile, applicationName string, p piperutils.FileUti
return nil
}
func handleDefaultNpmRegistry(config mtaBuildOptions, e execRunner) error {
func configureNpmRegistry(registryURI string, registryName string, scope string, e execRunner) error {
if len(registryURI) == 0 {
log.Entry().Debugf("No %s npm registry provided via configuration. Leaving npm config untouched.", registryName)
return nil
}
if len(config.DefaultNpmRegistry) > 0 {
log.Entry().Debugf("Setting %s npm registry to \"%s\"", registryName, registryURI)
log.Entry().Debugf("Setting default npm registry to \"%s\"", config.DefaultNpmRegistry)
if err := e.RunExecutable("npm", "config", "set", "registry", config.DefaultNpmRegistry); err != nil {
return err
}
} else {
log.Entry().Debugf("No default npm registry provided via configuration. Leaving npm config untouched.")
key := "registry"
if len(scope) > 0 {
key = fmt.Sprintf("%s:registry", scope)
}
if err := e.RunExecutable("npm", "config", "set", key, registryURI); err != nil {
return err
}
return nil

View File

@ -24,6 +24,7 @@ type mtaBuildOptions struct {
Platform string `json:"platform,omitempty"`
ApplicationName string `json:"applicationName,omitempty"`
DefaultNpmRegistry string `json:"defaultNpmRegistry,omitempty"`
SapNpmRegistry string `json:"sapNpmRegistry,omitempty"`
ProjectSettingsFile string `json:"projectSettingsFile,omitempty"`
GlobalSettingsFile string `json:"globalSettingsFile,omitempty"`
}
@ -117,6 +118,7 @@ func addMtaBuildFlags(cmd *cobra.Command, stepConfig *mtaBuildOptions) {
cmd.Flags().StringVar(&stepConfig.Platform, "platform", os.Getenv("PIPER_platform"), "mtaBuildTool 'cloudMbt' only: The target platform to which the mtar can be deployed.")
cmd.Flags().StringVar(&stepConfig.ApplicationName, "applicationName", os.Getenv("PIPER_applicationName"), "The name of the application which is being built. If the parameter has been provided and no `mta.yaml` exists, the `mta.yaml` will be automatically generated using this parameter and the information (`name` and `version`) from 'package.json` before the actual build starts.")
cmd.Flags().StringVar(&stepConfig.DefaultNpmRegistry, "defaultNpmRegistry", os.Getenv("PIPER_defaultNpmRegistry"), "Url to the npm registry that should be used for installing npm dependencies.")
cmd.Flags().StringVar(&stepConfig.SapNpmRegistry, "sapNpmRegistry", os.Getenv("PIPER_sapNpmRegistry"), "Url to the sap npm registry that should be used for installing npm dependencies prefixed with @sap.")
cmd.Flags().StringVar(&stepConfig.ProjectSettingsFile, "projectSettingsFile", os.Getenv("PIPER_projectSettingsFile"), "Path or url to the mvn settings file that should be used as project settings file.")
cmd.Flags().StringVar(&stepConfig.GlobalSettingsFile, "globalSettingsFile", os.Getenv("PIPER_globalSettingsFile"), "Path or url to the mvn settings file that should be used as global settings file")
@ -196,6 +198,14 @@ func mtaBuildMetadata() config.StepData {
Mandatory: false,
Aliases: []config.Alias{},
},
{
Name: "sapNpmRegistry",
ResourceRef: []config.ResourceReference{},
Scope: []string{"PARAMETERS", "STAGES", "STEPS"},
Type: "string",
Mandatory: false,
Aliases: []config.Alias{},
},
{
Name: "projectSettingsFile",
ResourceRef: []config.ResourceReference{},

View File

@ -52,6 +52,26 @@ func TestMarBuild(t *testing.T) {
}
})
t.Run("Provide SAP npm registry", func(t *testing.T) {
e := mock.ExecMockRunner{}
options := mtaBuildOptions{ApplicationName: "myApp", MtaBuildTool: "classic", BuildTarget: "CF", SapNpmRegistry: "https://example.sap/npm", MtarName: "myName"}
existingFiles := make(map[string]string)
existingFiles["package.json"] = "{\"name\": \"myName\", \"version\": \"1.2.3\"}"
fileUtils := MtaTestFileUtilsMock{existingFiles: existingFiles}
err := runMtaBuild(options, &cpe, &e, &fileUtils, &httpClient)
assert.Nil(t, err)
if assert.Len(t, e.Calls, 2) { // the second (unchecked) entry is the mta call
assert.Equal(t, "npm", e.Calls[0].Exec)
assert.Equal(t, []string{"config", "set", "@sap:registry", "https://example.sap/npm"}, e.Calls[0].Params)
}
})
t.Run("Package json does not exist", func(t *testing.T) {
e := mock.ExecMockRunner{}

View File

@ -84,9 +84,18 @@ spec:
type: string
description: "Url to the npm registry that should be used for installing npm dependencies."
scope:
- PARAMETERS
- STAGES
- STEPS
- PARAMETERS
- STAGES
- STEPS
mandatory: false
default:
- name: sapNpmRegistry
type: string
description: "Url to the sap npm registry that should be used for installing npm dependencies prefixed with @sap."
scope:
- PARAMETERS
- STAGES
- STEPS
mandatory: false
default:
- name: projectSettingsFile