From 38da34011a0fc7fa26eea046f0a2c6a950e89200 Mon Sep 17 00:00:00 2001 From: rubenruizdegauna Date: Wed, 19 Feb 2025 12:52:48 +0100 Subject: [PATCH] fix: allow app_name placeholder in schema validation (#169) --- publisher/config/schema.go | 4 ++++ publisher/config/schema_test.go | 1 + publisher/utils/utils.go | 18 +++++++++--------- 3 files changed, 14 insertions(+), 9 deletions(-) diff --git a/publisher/config/schema.go b/publisher/config/schema.go index 49e9418..fb65185 100644 --- a/publisher/config/schema.go +++ b/publisher/config/schema.go @@ -3,6 +3,7 @@ package config import ( "errors" "fmt" + "github.com/newrelic/infrastructure-publish-action/publisher/utils" "gopkg.in/yaml.v2" "io/ioutil" "strings" @@ -115,6 +116,9 @@ func validateName(appName string, src string) error { if appName == "" { return fmt.Errorf("%w: appName cannot be empty", ErrInvalidAppName) } + if strings.HasPrefix(src, utils.PlaceholderForAppName) { + return nil + } if !strings.HasPrefix(src, appName) { return fmt.Errorf("%w: %s should prefix %s", ErrInvalidAppName, appName, src) } diff --git a/publisher/config/schema_test.go b/publisher/config/schema_test.go index ec73696..94f2f01 100644 --- a/publisher/config/schema_test.go +++ b/publisher/config/schema_test.go @@ -146,6 +146,7 @@ func TestValidateSchemas(t *testing.T) { schemas UploadArtifactSchemas expectedError error }{ + {name: "valid app name with placeholder", appName: "some-app-name", schemas: UploadArtifactSchemas{{Src: "{app_name}_linux_{version}_{arch}.deb", Uploads: []Upload{{Type: TypeApt}}}}, expectedError: nil}, {name: "valid app name with pkg suffix", appName: "some-app-name", schemas: UploadArtifactSchemas{{Src: "some-app-name_some_suffix_0.0.1_amd64.deb", Uploads: []Upload{{Type: TypeApt}}}}, expectedError: nil}, {name: "valid app name exactly as pkg name", appName: "some-app-name", schemas: UploadArtifactSchemas{{Src: "some-app-name_0.0.1_amd64.deb", Uploads: []Upload{{Type: TypeApt}}}}, expectedError: nil}, {name: "invalid app name", appName: "some-app-name", schemas: UploadArtifactSchemas{{Src: "some-other-name_0.0.1_amd64.deb", Uploads: []Upload{{Type: TypeFile}}}}, expectedError: ErrInvalidAppName}, diff --git a/publisher/utils/utils.go b/publisher/utils/utils.go index 5c2388a..c33f99a 100644 --- a/publisher/utils/utils.go +++ b/publisher/utils/utils.go @@ -18,7 +18,7 @@ const ( placeholderForOsVersion = "{os_version}" placeholderForDestPrefix = "{dest_prefix}" placeholderForRepoName = "{repo_name}" - placeholderForAppName = "{app_name}" + PlaceholderForAppName = "{app_name}" placeholderForArch = "{arch}" placeholderForTag = "{tag}" placeholderForVersion = "{version}" @@ -26,11 +26,11 @@ const ( PlaceholderForAccessPointHost = "{access_point_host}" s3RetrySleepTimeout = 3 * time.Second - s3Retries = 10 + s3Retries = 10 ) var ( - Logger = log.New(log.Writer(), "", 0) + Logger = log.New(log.Writer(), "", 0) ) func ReadFileContent(filePath string) ([]byte, error) { @@ -41,7 +41,7 @@ func ReadFileContent(filePath string) ([]byte, error) { func ReplacePlaceholders(template, repoName, appName, arch, tag, version, destPrefix, osVersion string) (str string) { str = strings.Replace(template, placeholderForRepoName, repoName, -1) - str = strings.Replace(str, placeholderForAppName, appName, -1) + str = strings.Replace(str, PlaceholderForAppName, appName, -1) str = strings.Replace(str, placeholderForArch, arch, -1) str = strings.Replace(str, placeholderForTag, tag, -1) str = strings.Replace(str, placeholderForVersion, version, -1) @@ -111,7 +111,7 @@ func CopyFile(srcPath string, destPath string, override bool, commandTimeout tim Logger.Println("[ ] Create " + destDirectory) - if err = ExecWithRetries(s3Retries, S3RemountFn, Logger, "mkdir", commandTimeout,"-p", destDirectory); err != nil { + if err = ExecWithRetries(s3Retries, S3RemountFn, Logger, "mkdir", commandTimeout, "-p", destDirectory); err != nil { return err } @@ -120,10 +120,10 @@ func CopyFile(srcPath string, destPath string, override bool, commandTimeout tim Logger.Println("[ ] Copy " + srcPath + " into " + destPath) if override { - if err = ExecWithRetries(s3Retries, S3RemountFn, Logger, "cp", commandTimeout,"-f", srcPath, destPath); err != nil { + if err = ExecWithRetries(s3Retries, S3RemountFn, Logger, "cp", commandTimeout, "-f", srcPath, destPath); err != nil { return err } - }else{ + } else { // Note: we are not doing retries here as this command is not // idempotent. If one copy fails, retry will skip and leave corrupted // file in the repo @@ -154,7 +154,7 @@ func ExecWithRetries(retries int, s3Remount RetryCallback, l *log.Logger, cmdNam type RetryCallback func(l *log.Logger, commandTimeout time.Duration) func S3RemountFn(l *log.Logger, commandTimeout time.Duration) { - err := ExecLogOutput(l, "make", commandTimeout ,"unmount-s3") + err := ExecLogOutput(l, "make", commandTimeout, "unmount-s3") if err != nil { l.Printf("unmounting s3 failed %v", err) } @@ -163,4 +163,4 @@ func S3RemountFn(l *log.Logger, commandTimeout time.Duration) { if err != nil { l.Printf("mounting s3 failed %v", err) } -} \ No newline at end of file +}