Skip to content

Commit

Permalink
Merge pull request #330 from gravitational/fred/decode-reviewers-as-p…
Browse files Browse the repository at this point in the history
…laintext-1

Support decoding `--reviewers` as plain-text JSON
  • Loading branch information
fheinecke authored Mar 3, 2025
2 parents 0134753 + d9d09d2 commit 7192988
Show file tree
Hide file tree
Showing 2 changed files with 53 additions and 4 deletions.
15 changes: 11 additions & 4 deletions bot/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -147,9 +147,16 @@ func parseFlags() (flags, error) {
return flags{}, trace.BadParameter("reviewers required for assign and check")
}

data, err := base64.StdEncoding.DecodeString(*reviewers)
if err != nil {
return flags{}, trace.Wrap(err)
var decodedReviewers string
// Support base64-encoded JSON reviewer string and just JSON without base64 encoding
if strings.HasPrefix(*reviewers, "{") {
decodedReviewers = *reviewers
} else {
reviewerBytes, err := base64.StdEncoding.DecodeString(*reviewers)
if err != nil {
return flags{}, trace.Wrap(err)
}
decodedReviewers = string(reviewerBytes)
}

stats, err := base64.StdEncoding.DecodeString(*baseStats)
Expand All @@ -160,7 +167,7 @@ func parseFlags() (flags, error) {
return flags{
workflow: *workflow,
token: *token,
reviewers: string(data),
reviewers: decodedReviewers,
local: *local,
org: *org,
repo: *repo,
Expand Down
42 changes: 42 additions & 0 deletions bot/main_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
package main

import (
"encoding/base64"
"flag"
"os"
"testing"

"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
)

func TestParseFlagsReviewers(t *testing.T) {
dummyArgs := []string{
os.Args[0],
"-workflow",
"dummy-value",
"-token",
"dummy-value",
}

flagName := "-reviewers"
testValueJSON := `{"key": "value"}`
testValueBase64 := base64.StdEncoding.EncodeToString([]byte(testValueJSON))

flag.CommandLine = flag.NewFlagSet(os.Args[0], flag.ExitOnError) // Reset the flag lib
os.Args = append(dummyArgs, flagName, testValueBase64)
b64Flags, err := parseFlags()
require.NoError(t, err)

flag.CommandLine = flag.NewFlagSet(os.Args[0], flag.ExitOnError) // Reset the flag lib
os.Args = append(dummyArgs, flagName, testValueJSON)
plainTextFlags, err := parseFlags()
require.NoError(t, err)

// Verify that the results are the same regardless of whether or not the reviewers
// flag is base64 encoded
assert.Equal(t, b64Flags.reviewers, plainTextFlags.reviewers)

// Basic checks
assert.Equal(t, testValueJSON, b64Flags.reviewers)
}

0 comments on commit 7192988

Please sign in to comment.