Skip to content

Commit c21ec8d

Browse files
committed
improve error reporting of jobs
1 parent 1984d7a commit c21ec8d

File tree

1 file changed

+43
-11
lines changed

1 file changed

+43
-11
lines changed

cli/pkg/spec/next.go

Lines changed: 43 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import (
44
"fmt"
55
"github.com/diggerhq/digger/cli/pkg/digger"
66
"github.com/diggerhq/digger/cli/pkg/usage"
7+
backend2 "github.com/diggerhq/digger/libs/backendapi"
78
comment_summary "github.com/diggerhq/digger/libs/comment_utils/summary"
89
"github.com/diggerhq/digger/libs/digger_config"
910
"github.com/diggerhq/digger/libs/scheduler"
@@ -15,6 +16,13 @@ import (
1516
"time"
1617
)
1718

19+
func reporterError(spec spec.Spec, backendApi backend2.Api, err error) {
20+
_, reportingError := backendApi.ReportProjectJobStatus(spec.VCS.RepoName, spec.Job.ProjectName, spec.JobId, "failed", time.Now(), nil, "", "")
21+
if reportingError != nil {
22+
usage.ReportErrorAndExit(spec.VCS.RepoOwner, fmt.Sprintf("Failed run commands. %s", err), 5)
23+
}
24+
}
25+
1826
func RunSpecNext(
1927
spec spec.Spec,
2028
vcsProvider spec.VCSProvider,
@@ -28,78 +36,101 @@ func RunSpecNext(
2836
commentUpdaterProvider comment_summary.CommentUpdaterProvider,
2937
) error {
3038

39+
backendApi, err := backedProvider.GetBackendApi(spec.Backend)
40+
if err != nil {
41+
log.Printf("error getting backend api: %v", err)
42+
usage.ReportErrorAndExit(spec.VCS.Actor, fmt.Sprintf("could not get backend api: %v", err), 1)
43+
}
44+
3145
// checking out to the commit ID
3246
log.Printf("checking out to commit ID %v", spec.Job.Commit)
3347
cmd := exec.Command("git", "checkout", spec.Job.Commit)
3448
cmd.Stdout = os.Stdout
3549
cmd.Stderr = os.Stderr
36-
err := cmd.Run()
50+
err = cmd.Run()
3751
if err != nil {
3852
log.Printf("error while checking out to commit SHA: %v", err)
53+
reporterError(spec, backendApi, err)
3954
usage.ReportErrorAndExit(spec.VCS.Actor, fmt.Sprintf("error while checking out to commit sha: %v", err), 1)
4055
}
4156

4257
job, err := jobProvider.GetJob(spec.Job)
4358
if err != nil {
59+
log.Printf("error getting job: %v", err)
60+
reporterError(spec, backendApi, err)
4461
usage.ReportErrorAndExit(spec.VCS.Actor, fmt.Sprintf("could not get job: %v", err), 1)
4562
}
4663

4764
// get variables from the variables spec
4865
variablesMap, err := VariablesProvider.GetVariables(spec.Variables)
4966
if err != nil {
5067
log.Printf("could not get variables from provider: %v", err)
68+
reporterError(spec, backendApi, err)
5169
usage.ReportErrorAndExit(spec.VCS.Actor, fmt.Sprintf("could not get variables from provider: %v", err), 1)
5270
}
5371
job.StateEnvVars = lo.Assign(job.StateEnvVars, variablesMap)
5472
job.CommandEnvVars = lo.Assign(job.CommandEnvVars, variablesMap)
5573

5674
lock, err := lockProvider.GetLock(spec.Lock)
5775
if err != nil {
58-
usage.ReportErrorAndExit(spec.VCS.Actor, fmt.Sprintf("could not get job: %v", err), 1)
59-
76+
log.Printf("error getting lock: %v", err)
77+
reporterError(spec, backendApi, err)
78+
usage.ReportErrorAndExit(spec.VCS.Actor, fmt.Sprintf("could not get lock: %v", err), 1)
6079
}
6180

6281
prService, err := vcsProvider.GetPrService(spec.VCS)
6382
if err != nil {
83+
log.Printf("error getting prservice: %v", err)
84+
reporterError(spec, backendApi, err)
6485
usage.ReportErrorAndExit(spec.VCS.Actor, fmt.Sprintf("could not get prservice: %v", err), 1)
6586
}
6687

6788
orgService, err := vcsProvider.GetOrgService(spec.VCS)
6889
if err != nil {
90+
log.Printf("error getting orgservice: %v", err)
91+
reporterError(spec, backendApi, err)
6992
usage.ReportErrorAndExit(spec.VCS.Actor, fmt.Sprintf("could not get orgservice: %v", err), 1)
7093
}
7194
reporter, err := reporterProvider.GetReporter(fmt.Sprintf("%v for %v", spec.Job.JobType, job.ProjectName), spec.Reporter, prService, *spec.Job.PullRequestNumber)
7295
if err != nil {
96+
log.Printf("error getting reporter: %v", err)
97+
reporterError(spec, backendApi, err)
7398
usage.ReportErrorAndExit(spec.VCS.Actor, fmt.Sprintf("could not get reporter: %v", err), 1)
7499
}
75100

76-
backendApi, err := backedProvider.GetBackendApi(spec.Backend)
77-
if err != nil {
78-
usage.ReportErrorAndExit(spec.VCS.Actor, fmt.Sprintf("could not get backend api: %v", err), 1)
79-
}
80-
81101
policyChecker, err := policyProvider.GetPolicyProvider(spec.Policy, spec.Backend.BackendHostname, spec.Backend.BackendOrganisationName, spec.Backend.BackendJobToken)
82102
if err != nil {
103+
log.Printf("error getting policy provider: %v", err)
104+
reporterError(spec, backendApi, err)
83105
usage.ReportErrorAndExit(spec.VCS.Actor, fmt.Sprintf("could not get policy provider: %v", err), 1)
84106
}
85107

86108
changedFiles, err := prService.GetChangedFiles(*spec.Job.PullRequestNumber)
87109
if err != nil {
110+
log.Printf("error getting changed files: %v", err)
111+
reporterError(spec, backendApi, err)
88112
usage.ReportErrorAndExit(spec.VCS.Actor, fmt.Sprintf("could not get changed files: %v", err), 1)
89113
}
114+
90115
diggerConfig, _, _, err := digger_config.LoadDiggerConfig("./", false, changedFiles)
91116
if err != nil {
117+
log.Printf("error getting digger config: %v", err)
118+
reporterError(spec, backendApi, err)
92119
usage.ReportErrorAndExit(spec.VCS.Actor, fmt.Sprintf("Failed to read Digger digger_config. %s", err), 4)
93120
}
94121
log.Printf("Digger digger_config read successfully\n")
95122

96123
commentUpdater, err := commentUpdaterProvider.Get(*diggerConfig)
97124
if err != nil {
125+
log.Printf("error getting comment updater: %v", err)
126+
reporterError(spec, backendApi, err)
98127
usage.ReportErrorAndExit(spec.VCS.Actor, fmt.Sprintf("could not get comment updater: %v", err), 8)
99128
}
100129

101130
planStorage, err := PlanStorageProvider.GetPlanStorage(spec.VCS.RepoOwner, spec.VCS.RepoName, *spec.Job.PullRequestNumber)
102131
if err != nil {
132+
log.Printf("error getting plan storage: %v", err)
133+
reporterError(spec, backendApi, err)
103134
usage.ReportErrorAndExit(spec.VCS.Actor, fmt.Sprintf("could not get plan storage: %v", err), 8)
104135
}
105136

@@ -108,16 +139,17 @@ func RunSpecNext(
108139
fullRepoName := fmt.Sprintf("%v-%v", spec.VCS.RepoOwner, spec.VCS.RepoName)
109140
_, err = backendApi.ReportProjectJobStatus(fullRepoName, spec.Job.ProjectName, spec.JobId, "started", time.Now(), nil, "", "")
110141
if err != nil {
142+
log.Printf("error getting project status: %v", err)
143+
reporterError(spec, backendApi, err)
111144
usage.ReportErrorAndExit(spec.VCS.Actor, fmt.Sprintf("Failed to report jobSpec status to backend. Exiting. %v", err), 4)
112145
}
113146

114147
commentId := spec.CommentId
115-
if err != nil {
116-
usage.ReportErrorAndExit(spec.VCS.Actor, fmt.Sprintf("failed to get comment ID: %v", err), 4)
117-
}
118148

119149
currentDir, err := os.Getwd()
120150
if err != nil {
151+
log.Printf("error getting current directory: %v", err)
152+
reporterError(spec, backendApi, err)
121153
usage.ReportErrorAndExit(spec.VCS.Actor, fmt.Sprintf("Failed to get current dir. %s", err), 4)
122154
}
123155

0 commit comments

Comments
 (0)