use ga actions lib instead of own stuff

This commit is contained in:
2023-10-05 19:35:05 +02:00
parent d7ac55f64d
commit 94b74d2931
3 changed files with 17 additions and 65 deletions

75
main.go
View File

@@ -1,21 +1,15 @@
package main
import (
"fmt"
"os"
"strings"
vault "github.com/hashicorp/vault/api"
"github.com/pkg/errors"
ga "github.com/sethvargo/go-githubactions"
"github.com/sirupsen/logrus"
)
const (
eol = "\n"
multiLineFileDelim = "_GitHubActionsFileCommandDelimeter_"
multilineFileCmd = "%s<<" + multiLineFileDelim + eol + "%s" + eol + multiLineFileDelim // ${name}<<${delimiter}${os.EOL}${convertedVal}${os.EOL}${delimiter}
)
var vaultClient *vault.Client
func main() {
@@ -24,25 +18,25 @@ func main() {
logrus.Printf("Environment: %s", os.Environ())
vaultClient, err = vault.NewClient(&vault.Config{
Address: getInput("url"),
Address: ga.GetInput("url"),
})
if err != nil {
logrus.WithError(err).Fatal("error creating vault client")
}
switch getInput("method") {
switch ga.GetInput("method") {
case "approle":
if err := setVaultTokenFromRoleID(); err != nil {
logrus.WithError(err).Fatal("error setting vault token from role id")
}
case "token":
vaultClient.SetToken(getInput("token"))
vaultClient.SetToken(ga.GetInput("token"))
default:
logrus.Fatal("no credentials found")
}
exprs := strings.Split(getInput("secrets"), ";")
exprs := strings.Split(ga.GetInput("secrets"), ";")
for _, expr := range exprs {
p, k, o := parseExpression(strings.TrimSpace(expr))
logrus.Infof("%q => %q => %q", p, k, o)
@@ -52,9 +46,8 @@ func main() {
logrus.WithError(err).Fatal("error reading credential")
}
if err := setOutput(o, s); err != nil {
logrus.WithError(err).WithField("key", o).Fatal("error setting output")
}
ga.SetOutput(o, s)
ga.SetEnv(o, s)
}
}
@@ -113,11 +106,11 @@ func getVaultSecret(p string) (*vault.Secret, error) {
func setVaultTokenFromRoleID() error {
data := map[string]any{
"role_id": getInput("roleid"),
"role_id": ga.GetInput("roleid"),
}
if getInput("secretid") != "" {
data["secret_id"] = getInput("secretid")
if ga.GetInput("secretid") != "" {
data["secret_id"] = ga.GetInput("secretid")
}
loginSecret, err := vaultClient.Logical().Write("auth/approle/login", data)
@@ -129,51 +122,3 @@ func setVaultTokenFromRoleID() error {
return nil
}
func getInput(i string) string {
e := strings.ReplaceAll(i, " ", "_")
e = strings.ToUpper(e)
e = "INPUT_" + e
return strings.ReplaceAll(strings.TrimSpace(os.Getenv(e)), "\\n", "\n")
}
func setOutput(k, v string) (err error) {
msg := fmt.Sprintf(multilineFileCmd, k, v)
outputFilepath := os.Getenv("GITHUB_OUTPUT")
f, err := os.OpenFile(outputFilepath, os.O_APPEND|os.O_CREATE|os.O_WRONLY, 0o644)
if err != nil {
return errors.Wrap(err, "open output file")
}
defer func() {
if cErr := f.Close(); cErr != nil && err == nil {
err = cErr
}
}()
if _, err = f.Write([]byte(msg)); err != nil {
return errors.Wrap(err, "write to output")
}
envFilepath := os.Getenv("GITHUB_ENV")
envFile, err := os.OpenFile(envFilepath, os.O_APPEND|os.O_CREATE|os.O_WRONLY, 0o644)
if err != nil {
return errors.Wrap(err, "open env file")
}
defer func() {
if cErr := envFile.Close(); cErr != nil && err == nil {
err = cErr
}
}()
envMsg := fmt.Sprintf("%s=\"%s\"\n", k, strings.ReplaceAll(v, "\n", "\\n"))
if _, err := envFile.Write([]byte(envMsg)); err != nil {
return errors.Wrap(err, "write to env file")
}
return nil
}