#296 Allow to specify custom plugins location in jenkins CR (#309)

This commit is contained in:
salluvada
2020-03-29 20:41:16 +02:00
committed by GitHub
parent 83f8db126d
commit 970449f04f
6 changed files with 43 additions and 19 deletions
+15 -6
View File
@@ -12,6 +12,7 @@ import (
type Plugin struct {
Name string `json:"name"`
Version string `json:"version"`
DownloadURL string `json:"downloadURL"`
rootPluginNameAndVersion string
}
@@ -24,6 +25,8 @@ var (
NamePattern = regexp.MustCompile(`^[0-9a-zA-Z-_]+$`)
// VersionPattern is the plugin version regex pattern
VersionPattern = regexp.MustCompile(`^[0-9a-zA-Z+\\.-]+$`)
// DownloadURLPattern is the plugin download url regex pattern
DownloadURLPattern = regexp.MustCompile(`https?:\/\/(www\.)?[-a-zA-Z0-9@:%._\+~#=]{1,256}\.[a-zA-Z0-9()]{1,6}\b([-a-zA-Z0-9()@:%_\+.~#?&//=]*)`)
)
// New creates plugin from string, for example "name-of-plugin:0.0.1"
@@ -35,7 +38,7 @@ func New(nameWithVersion string) (*Plugin, error) {
name := val[0]
version := val[1]
if err := validatePlugin(name, version); err != nil {
if err := validatePlugin(name, version, ""); err != nil {
return nil, err
}
@@ -46,24 +49,30 @@ func New(nameWithVersion string) (*Plugin, error) {
}
// NewPlugin creates plugin from name and version, for example "name-of-plugin:0.0.1"
func NewPlugin(name, version string) (*Plugin, error) {
if err := validatePlugin(name, version); err != nil {
func NewPlugin(name, version, downloadURL string) (*Plugin, error) {
if err := validatePlugin(name, version, downloadURL); err != nil {
return nil, err
}
return &Plugin{
Name: name,
Version: version,
Name: name,
Version: version,
DownloadURL: downloadURL,
}, nil
}
func validatePlugin(name, version string) error {
func validatePlugin(name, version, downloadURL string) error {
if ok := NamePattern.MatchString(name); !ok {
return errors.Errorf("invalid plugin name '%s:%s', must follow pattern '%s'", name, version, NamePattern.String())
}
if ok := VersionPattern.MatchString(version); !ok {
return errors.Errorf("invalid plugin version '%s:%s', must follow pattern '%s'", name, version, VersionPattern.String())
}
if len(downloadURL) > 0 {
if ok := DownloadURLPattern.MatchString(downloadURL); !ok {
return errors.Errorf("invalid download URL '%s' for plugin name %s:%s, must follow pattern '%s'", downloadURL, name, version, DownloadURLPattern.String())
}
}
return nil
}
+21 -9
View File
@@ -12,42 +12,54 @@ func TestValidatePlugin(t *testing.T) {
validPluginName := "valid"
validPluginVersion := "0.1.2"
t.Run("version 1.6+build.162", func(t *testing.T) {
got := validatePlugin(validPluginName, "1.6+build.162")
got := validatePlugin(validPluginName, "1.6+build.162", "")
assert.NoError(t, got)
})
t.Run("version 1.8+build.201601050116", func(t *testing.T) {
got := validatePlugin(validPluginName, "1.8+build.201601050116")
got := validatePlugin(validPluginName, "1.8+build.201601050116", "")
assert.NoError(t, got)
})
t.Run("version 1.8-RELEASE", func(t *testing.T) {
got := validatePlugin(validPluginName, "1.8-RELEASE")
got := validatePlugin(validPluginName, "1.8-RELEASE", "")
assert.NoError(t, got)
})
t.Run("version 20.810504d7462", func(t *testing.T) {
got := validatePlugin(validPluginName, "20.810504d7462")
got := validatePlugin(validPluginName, "20.810504d7462", "")
assert.NoError(t, got)
})
t.Run("version 3.0-rc1", func(t *testing.T) {
got := validatePlugin(validPluginName, "3.0-rc1")
got := validatePlugin(validPluginName, "3.0-rc1", "")
assert.NoError(t, got)
})
t.Run("version 3.1.20180605-140134.c2e96c4", func(t *testing.T) {
got := validatePlugin(validPluginName, "3.1.20180605-140134.c2e96c4")
got := validatePlugin(validPluginName, "3.1.20180605-140134.c2e96c4", "")
assert.NoError(t, got)
})
t.Run("invalid version !", func(t *testing.T) {
got := validatePlugin(validPluginName, "0.5.1!")
got := validatePlugin(validPluginName, "0.5.1!", "")
assert.Error(t, got)
})
t.Run("name 01234567890-abcdefghijklmnoprstuwxz_ABCDEFGHIJKLMNOPQRSTUVWXYZ", func(t *testing.T) {
got := validatePlugin("01234567890-abcdefghijklmnoprstuwxz_ABCDEFGHIJKLMNOPQRSTUVWXYZ", validPluginVersion)
got := validatePlugin("01234567890-abcdefghijklmnoprstuwxz_ABCDEFGHIJKLMNOPQRSTUVWXYZ", validPluginVersion, "")
assert.NoError(t, got)
})
t.Run("invalid name !", func(t *testing.T) {
got := validatePlugin("!", validPluginVersion)
got := validatePlugin("!", validPluginVersion, "")
assert.Error(t, got)
})
t.Run("invalid download URL", func(t *testing.T) {
got := validatePlugin(validPluginName, validPluginVersion, "http://www.jenkins/plugin.hpi")
assert.Error(t, got)
})
t.Run("valid http download URL", func(t *testing.T) {
got := validatePlugin(validPluginName, validPluginVersion, "http://www.jenkins.com/plugin.hpi")
assert.NoError(t, got)
})
t.Run("valid https download URL", func(t *testing.T) {
got := validatePlugin(validPluginName, validPluginVersion, "https://www.jenkins.com/plugin.hpi")
assert.NoError(t, got)
})
}
func TestVerifyDependencies(t *testing.T) {