From 59bec2f619ef3afa0786474986a8a157cf6ccbe7 Mon Sep 17 00:00:00 2001 From: Shubham Agrawal Date: Thu, 7 Oct 2021 16:59:35 +0530 Subject: [PATCH 1/3] Added support for passing GITHUB_TOKEN --- plugin.go | 16 +++++++++++++-- utils/env.go | 57 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 71 insertions(+), 2 deletions(-) create mode 100644 utils/env.go diff --git a/plugin.go b/plugin.go index d8c691e..7a5aaa4 100644 --- a/plugin.go +++ b/plugin.go @@ -11,9 +11,13 @@ import ( ) const ( - workflowFile = "/tmp/workflow.yml" - webhookFile = "/tmp/webhook" envFile = "/tmp/action.env" + secretFile = "/tmp/action.secrets" + workflowFile = "/tmp/workflow.yml" +) + +var ( + secrets = []string{"GITHUB_TOKEN"} ) type ( @@ -42,11 +46,19 @@ func (p Plugin) Exec() error { return err } + if err := utils.CreateEnvAndSecretFile(envFile, secretFile, secrets); err != nil { + return err + } + cmdArgs := []string{ "-W", workflowFile, "-P", fmt.Sprintf("ubuntu-latest=%s", p.Action.Image), + "--secret-file", + secretFile, + "--env-file", + envFile, "-b", "--detect-event", } diff --git a/utils/env.go b/utils/env.go new file mode 100644 index 0000000..38c2369 --- /dev/null +++ b/utils/env.go @@ -0,0 +1,57 @@ +package utils + +import ( + "fmt" + "io/ioutil" + "os" + "strings" + + "github.com/pkg/errors" +) + +func CreateEnvAndSecretFile(envFile, secretFile string, secrets []string) error { + envVars := getEnvVars() + + envBuf := "" + for key, val := range envVars { + if !strings.HasPrefix(key, "PLUGIN_") && !Exists(secrets, key) { + envBuf += fmt.Sprintf("%s=%s\n", key, val) + } + } + + secretBuf := "" + for _, secretName := range secrets { + if os.Getenv(secretName) != "" { + secretBuf += fmt.Sprintf("%s=%s\n", secretName, os.Getenv(secretName)) + } + } + + if err := ioutil.WriteFile(envFile, []byte(envBuf), 0644); err != nil { + return errors.Wrap(err, "failed to write environment variables file") + } + + if err := ioutil.WriteFile(secretFile, []byte(secretBuf), 0644); err != nil { + return errors.Wrap(err, "failed to write secret variables file") + } + return nil +} + +// Return environment variables set in a map format +func getEnvVars() map[string]string { + m := make(map[string]string) + for _, e := range os.Environ() { + if i := strings.Index(e, "="); i >= 0 { + m[e[:i]] = e[i+1:] + } + } + return m +} + +func Exists(slice []string, val string) bool { + for _, item := range slice { + if item == val { + return true + } + } + return false +} From b127585fadc0d3968d28fcb9e926b7feffbd27ac Mon Sep 17 00:00:00 2001 From: Shubham Agrawal Date: Thu, 7 Oct 2021 17:40:34 +0530 Subject: [PATCH 2/3] fixed readme --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index fd47bde..6ba82e6 100644 --- a/README.md +++ b/README.md @@ -30,7 +30,7 @@ docker build \ ## Plugin step usage -Provide uses, with & env of github action to use in plugin step settings. +Provide uses, with & env of github action to use in plugin step settings. Provide GITHUB_TOKEN as environment variable if it is required for an action. ```console steps: From 040dd66e563b7b63866a67b0783b2c46dbbdf69c Mon Sep 17 00:00:00 2001 From: Shubham Agrawal Date: Thu, 7 Oct 2021 18:04:00 +0530 Subject: [PATCH 3/3] Added support for env & secrets --- utils/env.go | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) diff --git a/utils/env.go b/utils/env.go index 38c2369..7a6a89d 100644 --- a/utils/env.go +++ b/utils/env.go @@ -1,36 +1,34 @@ package utils import ( - "fmt" - "io/ioutil" "os" "strings" + "github.com/joho/godotenv" "github.com/pkg/errors" ) func CreateEnvAndSecretFile(envFile, secretFile string, secrets []string) error { envVars := getEnvVars() - envBuf := "" + actionEnvVars := make(map[string]string) for key, val := range envVars { if !strings.HasPrefix(key, "PLUGIN_") && !Exists(secrets, key) { - envBuf += fmt.Sprintf("%s=%s\n", key, val) + actionEnvVars[key] = val } } - secretBuf := "" + secretEnvVars := make(map[string]string) for _, secretName := range secrets { if os.Getenv(secretName) != "" { - secretBuf += fmt.Sprintf("%s=%s\n", secretName, os.Getenv(secretName)) + secretEnvVars[secretName] = os.Getenv(secretName) } } - if err := ioutil.WriteFile(envFile, []byte(envBuf), 0644); err != nil { + if err := godotenv.Write(actionEnvVars, envFile); err != nil { return errors.Wrap(err, "failed to write environment variables file") } - - if err := ioutil.WriteFile(secretFile, []byte(secretBuf), 0644); err != nil { + if err := godotenv.Write(secretEnvVars, secretFile); err != nil { return errors.Wrap(err, "failed to write secret variables file") } return nil