forked from Ivasoft/github-actions
58 lines
1.2 KiB
Go
58 lines
1.2 KiB
Go
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
|
|
}
|