Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

fix(workflow-hook): multiline output formatting #3425

Merged
merged 5 commits into from
May 30, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 3 additions & 2 deletions server/core/runtime/post_workflow_hook_runner.go
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,8 @@ func (wh DefaultPostWorkflowHookRunner) Run(ctx models.WorkflowHookCommandContex
cmd.Env = finalEnvVars
out, err := cmd.CombinedOutput()

wh.OutputHandler.SendWorkflowHook(ctx, string(out), false)
outString := strings.ReplaceAll(string(out), "\n", "\r\n")
wh.OutputHandler.SendWorkflowHook(ctx, outString, false)
wh.OutputHandler.SendWorkflowHook(ctx, "\n", true)

if err != nil {
Expand All @@ -75,5 +76,5 @@ func (wh DefaultPostWorkflowHookRunner) Run(ctx models.WorkflowHookCommandContex
}

ctx.Log.Info("successfully ran %q in %q", command, path)
return string(out), strings.Trim(string(customStatusOut), "\n"), nil
return outString, strings.Trim(string(customStatusOut), "\n"), nil
}
19 changes: 9 additions & 10 deletions server/core/runtime/post_workflow_hook_runner_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ func TestPostWorkflowHookRunner_Run(t *testing.T) {
},
{
Command: "echo hi",
ExpOut: "hi\n",
ExpOut: "hi\r\n",
ExpErr: "",
ExpDescription: "",
},
Expand All @@ -43,37 +43,37 @@ func TestPostWorkflowHookRunner_Run(t *testing.T) {
},
{
Command: `printf 'your main.tf file does not provide default region.\ncheck'`,
ExpOut: "your main.tf file does not provide default region.\ncheck",
ExpOut: "your main.tf file does not provide default region.\r\ncheck",
ExpErr: "",
ExpDescription: "",
},
{
Command: "echo 'a",
ExpOut: "sh: 1: Syntax error: Unterminated quoted string\n",
ExpOut: "sh: 1: Syntax error: Unterminated quoted string\r\n",
ExpErr: "exit status 2: running \"echo 'a\" in",
ExpDescription: "",
},
{
Command: "echo hi >> file && cat file",
ExpOut: "hi\n",
ExpOut: "hi\r\n",
ExpErr: "",
ExpDescription: "",
},
{
Command: "lkjlkj",
ExpOut: "sh: 1: lkjlkj: not found\n",
ExpOut: "sh: 1: lkjlkj: not found\r\n",
ExpErr: "exit status 127: running \"lkjlkj\" in",
ExpDescription: "",
},
{
Command: "echo base_repo_name=$BASE_REPO_NAME base_repo_owner=$BASE_REPO_OWNER head_repo_name=$HEAD_REPO_NAME head_repo_owner=$HEAD_REPO_OWNER head_branch_name=$HEAD_BRANCH_NAME head_commit=$HEAD_COMMIT base_branch_name=$BASE_BRANCH_NAME pull_num=$PULL_NUM pull_url=$PULL_URL pull_author=$PULL_AUTHOR",
ExpOut: "base_repo_name=basename base_repo_owner=baseowner head_repo_name=headname head_repo_owner=headowner head_branch_name=add-feat head_commit=12345abcdef base_branch_name=main pull_num=2 pull_url=https://github.com/runatlantis/atlantis/pull/2 pull_author=acme\n",
ExpOut: "base_repo_name=basename base_repo_owner=baseowner head_repo_name=headname head_repo_owner=headowner head_branch_name=add-feat head_commit=12345abcdef base_branch_name=main pull_num=2 pull_url=https://github.com/runatlantis/atlantis/pull/2 pull_author=acme\r\n",
ExpErr: "",
ExpDescription: "",
},
{
Command: "echo user_name=$USER_NAME",
ExpOut: "user_name=acme-user\n",
ExpOut: "user_name=acme-user\r\n",
ExpErr: "",
ExpDescription: "",
},
Expand Down Expand Up @@ -125,7 +125,7 @@ func TestPostWorkflowHookRunner_Run(t *testing.T) {
},
Log: logger,
}
out, desc, err := r.Run(ctx, c.Command, tmpDir)
_, desc, err := r.Run(ctx, c.Command, tmpDir)
if c.ExpErr != "" {
ErrContains(t, c.ExpErr, err)
} else {
Expand All @@ -134,9 +134,8 @@ func TestPostWorkflowHookRunner_Run(t *testing.T) {
// Replace $DIR in the exp with the actual temp dir. We do this
// here because when constructing the cases we don't yet know the
// temp dir.
expOut := strings.Replace(c.ExpOut, "$DIR", tmpDir, -1)
Equals(t, expOut, out)
Equals(t, c.ExpDescription, desc)
expOut := strings.Replace(c.ExpOut, "$DIR", tmpDir, -1)
projectCmdOutputHandler.VerifyWasCalledOnce().SendWorkflowHook(
runtimematchers.AnyModelsWorkflowHookCommandContext(), EqString(expOut), EqBool(false))
})
Expand Down
5 changes: 3 additions & 2 deletions server/core/runtime/pre_workflow_hook_runner.go
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,8 @@ func (wh DefaultPreWorkflowHookRunner) Run(ctx models.WorkflowHookCommandContext
cmd.Env = finalEnvVars
out, err := cmd.CombinedOutput()

wh.OutputHandler.SendWorkflowHook(ctx, string(out), false)
outString := strings.ReplaceAll(string(out), "\n", "\r\n")
wh.OutputHandler.SendWorkflowHook(ctx, outString, false)
wh.OutputHandler.SendWorkflowHook(ctx, "\n", true)

if err != nil {
Expand All @@ -75,5 +76,5 @@ func (wh DefaultPreWorkflowHookRunner) Run(ctx models.WorkflowHookCommandContext
}

ctx.Log.Info("successfully ran %q in %q", command, path)
return string(out), strings.Trim(string(customStatusOut), "\n"), nil
return outString, strings.Trim(string(customStatusOut), "\n"), nil
}
19 changes: 9 additions & 10 deletions server/core/runtime/pre_workflow_hook_runner_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ func TestPreWorkflowHookRunner_Run(t *testing.T) {
},
{
Command: "echo hi",
ExpOut: "hi\n",
ExpOut: "hi\r\n",
ExpErr: "",
ExpDescription: "",
},
Expand All @@ -43,37 +43,37 @@ func TestPreWorkflowHookRunner_Run(t *testing.T) {
},
{
Command: `printf 'your main.tf file does not provide default region.\ncheck'`,
ExpOut: "your main.tf file does not provide default region.\ncheck",
ExpOut: "your main.tf file does not provide default region.\r\ncheck",
ExpErr: "",
ExpDescription: "",
},
{
Command: "echo 'a",
ExpOut: "sh: 1: Syntax error: Unterminated quoted string\n",
ExpOut: "sh: 1: Syntax error: Unterminated quoted string\r\n",
ExpErr: "exit status 2: running \"echo 'a\" in",
ExpDescription: "",
},
{
Command: "echo hi >> file && cat file",
ExpOut: "hi\n",
ExpOut: "hi\r\n",
ExpErr: "",
ExpDescription: "",
},
{
Command: "lkjlkj",
ExpOut: "sh: 1: lkjlkj: not found\n",
ExpOut: "sh: 1: lkjlkj: not found\r\n",
ExpErr: "exit status 127: running \"lkjlkj\" in",
ExpDescription: "",
},
{
Command: "echo base_repo_name=$BASE_REPO_NAME base_repo_owner=$BASE_REPO_OWNER head_repo_name=$HEAD_REPO_NAME head_repo_owner=$HEAD_REPO_OWNER head_branch_name=$HEAD_BRANCH_NAME head_commit=$HEAD_COMMIT base_branch_name=$BASE_BRANCH_NAME pull_num=$PULL_NUM pull_url=$PULL_URL pull_author=$PULL_AUTHOR",
ExpOut: "base_repo_name=basename base_repo_owner=baseowner head_repo_name=headname head_repo_owner=headowner head_branch_name=add-feat head_commit=12345abcdef base_branch_name=main pull_num=2 pull_url=https://github.com/runatlantis/atlantis/pull/2 pull_author=acme\n",
ExpOut: "base_repo_name=basename base_repo_owner=baseowner head_repo_name=headname head_repo_owner=headowner head_branch_name=add-feat head_commit=12345abcdef base_branch_name=main pull_num=2 pull_url=https://github.com/runatlantis/atlantis/pull/2 pull_author=acme\r\n",
ExpErr: "",
ExpDescription: "",
},
{
Command: "echo user_name=$USER_NAME",
ExpOut: "user_name=acme-user\n",
ExpOut: "user_name=acme-user\r\n",
ExpErr: "",
ExpDescription: "",
},
Expand Down Expand Up @@ -125,7 +125,7 @@ func TestPreWorkflowHookRunner_Run(t *testing.T) {
},
Log: logger,
}
out, desc, err := r.Run(ctx, c.Command, tmpDir)
_, desc, err := r.Run(ctx, c.Command, tmpDir)
if c.ExpErr != "" {
ErrContains(t, c.ExpErr, err)
} else {
Expand All @@ -134,9 +134,8 @@ func TestPreWorkflowHookRunner_Run(t *testing.T) {
// Replace $DIR in the exp with the actual temp dir. We do this
// here because when constructing the cases we don't yet know the
// temp dir.
expOut := strings.Replace(c.ExpOut, "$DIR", tmpDir, -1)
Equals(t, expOut, out)
Equals(t, c.ExpDescription, desc)
expOut := strings.Replace(c.ExpOut, "$DIR", tmpDir, -1)
projectCmdOutputHandler.VerifyWasCalledOnce().SendWorkflowHook(
runtimematchers.AnyModelsWorkflowHookCommandContext(), EqString(expOut), EqBool(false))
})
Expand Down