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

wip #4325

Open
wants to merge 1 commit into
base: master
Choose a base branch
from
Open

wip #4325

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
72 changes: 51 additions & 21 deletions cli/cmd/v2/apply.go
Original file line number Diff line number Diff line change
Expand Up @@ -150,28 +150,29 @@
var buildLogs string

defer func() {
var status buildStatus
if buildError != nil && !errors.Is(buildError, context.Canceled) {
reportBuildFailureInput := reportBuildFailureInput{
status = buildStatus_failed
} else if !buildFinished {
status = buildStatus_canceled
}

if status != "" {
_ = reportUnsuccessfulBuild(ctx, reportUnsuccessfulBuildInput{
client: client,
appName: appName,
buildStatus: status,
cliConf: cliConf,
deploymentTargetID: deploymentTargetID,
appRevisionID: updateResp.AppRevisionId,
eventID: eventID,
commitSHA: commitSHA,
prNumber: prNumber,
buildError: buildError,
buildLogs: buildLogs,
}
_ = reportBuildFailure(ctx, reportBuildFailureInput)
return
}
if !buildFinished {
buildMetadata := make(map[string]interface{})
buildMetadata["end_time"] = time.Now().UTC()
_ = updateExistingEvent(ctx, client, appName, cliConf.Project, cliConf.Cluster, deploymentTargetID, types.PorterAppEventType_Build, eventID, types.PorterAppEventStatus_Canceled, buildMetadata)
return
commitSHA: commitSHA,
prNumber: prNumber,
})
}
return

Check failure on line 175 in cli/cmd/v2/apply.go

View workflow job for this annotation

GitHub Actions / Go Linter

S1023: redundant `return` statement (gosimple)
}()

if commitSHA == "" {
Expand Down Expand Up @@ -347,9 +348,10 @@
return deploymentTargetID, nil
}

type reportBuildFailureInput struct {
type reportUnsuccessfulBuildInput struct {
client api.Client
appName string
buildStatus buildStatus
cliConf config.CLIConfig
deploymentTargetID string
appRevisionID string
Expand All @@ -360,8 +362,29 @@
prNumber int
}

func reportBuildFailure(ctx context.Context, inp reportBuildFailureInput) error {
_, err := inp.client.UpdateRevisionStatus(ctx, inp.cliConf.Project, inp.cliConf.Cluster, inp.appName, inp.appRevisionID, models.AppRevisionStatus_BuildFailed)
type buildStatus string

var (
buildStatus_failed buildStatus = "failed"
buildStatus_canceled buildStatus = "canceled"
)

func reportUnsuccessfulBuild(ctx context.Context, inp reportUnsuccessfulBuildInput) error {
var appRevisionStatus models.AppRevisionStatus
var porterAppEventStatus types.PorterAppEventStatus

switch inp.buildStatus {
case buildStatus_failed:
appRevisionStatus = models.AppRevisionStatus_BuildFailed
porterAppEventStatus = types.PorterAppEventStatus_Failed
case buildStatus_canceled:
appRevisionStatus = models.AppRevisionStatus_BuildCanceled
porterAppEventStatus = types.PorterAppEventStatus_Canceled
default:
return errors.New("unknown build status")
}

_, err := inp.client.UpdateRevisionStatus(ctx, inp.cliConf.Project, inp.cliConf.Cluster, inp.appName, inp.appRevisionID, appRevisionStatus)
if err != nil {
return err
}
Expand All @@ -371,14 +394,21 @@

// the below is a temporary solution until we can report build errors via telemetry from the CLI
errorStringMap := make(map[string]string)
errorStringMap["build-error"] = fmt.Sprintf("%+v", inp.buildError)
b64BuildLogs := base64.StdEncoding.EncodeToString([]byte(inp.buildLogs))
// the key name below must be kept the same so that reportBuildStatus in the CreateOrUpdatePorterAppEvent handler reports logs correctly
errorStringMap["b64-build-logs"] = b64BuildLogs

buildMetadata["errors"] = errorStringMap
if inp.buildError != nil {
errorStringMap["build-error"] = fmt.Sprintf("%+v", inp.buildError)
}
if inp.buildLogs != "" {
b64BuildLogs := base64.StdEncoding.EncodeToString([]byte(inp.buildLogs))
// the key name below must be kept the same so that reportBuildStatus in the CreateOrUpdatePorterAppEvent handler reports logs correctly
errorStringMap["b64-build-logs"] = b64BuildLogs
}

if len(errorStringMap) != 0 {
buildMetadata["errors"] = errorStringMap
}

err = updateExistingEvent(ctx, inp.client, inp.appName, inp.cliConf.Project, inp.cliConf.Cluster, inp.deploymentTargetID, types.PorterAppEventType_Build, inp.eventID, types.PorterAppEventStatus_Failed, buildMetadata)
err = updateExistingEvent(ctx, inp.client, inp.appName, inp.cliConf.Project, inp.cliConf.Cluster, inp.deploymentTargetID, types.PorterAppEventType_Build, inp.eventID, porterAppEventStatus, buildMetadata)
if err != nil {
return err
}
Expand Down
Loading