Skip to content

Commit 95f8246

Browse files
authored
Merge pull request #1647 from diggerhq/fix/cli-error-reporting
improve error reporting of next jobs
2 parents 1984d7a + 05f8411 commit 95f8246

File tree

3 files changed

+61
-12
lines changed

3 files changed

+61
-12
lines changed

.github/workflows/next_deploy.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ on:
33
push:
44
branches:
55
- develop # change to main if needed
6-
- next-tfvars
6+
- fix/cli-error-reporting
77

88
jobs:
99
deploy:

cli/pkg/spec/next.go

Lines changed: 54 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,112 @@ 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
46+
log.Printf("fetching commit ID %v", spec.Job.Commit)
47+
fetchCmd := exec.Command("git", "fetch", "origin", spec.Job.Commit)
48+
fetchCmd.Stdout = os.Stdout
49+
fetchCmd.Stderr = os.Stderr
50+
err = fetchCmd.Run()
51+
if err != nil {
52+
log.Printf("error while fetching commit SHA: %v", err)
53+
reporterError(spec, backendApi, err)
54+
usage.ReportErrorAndExit(spec.VCS.Actor, fmt.Sprintf("error while checking out to commit sha: %v", err), 1)
55+
}
56+
3257
log.Printf("checking out to commit ID %v", spec.Job.Commit)
3358
cmd := exec.Command("git", "checkout", spec.Job.Commit)
3459
cmd.Stdout = os.Stdout
3560
cmd.Stderr = os.Stderr
36-
err := cmd.Run()
61+
err = cmd.Run()
3762
if err != nil {
3863
log.Printf("error while checking out to commit SHA: %v", err)
64+
reporterError(spec, backendApi, err)
3965
usage.ReportErrorAndExit(spec.VCS.Actor, fmt.Sprintf("error while checking out to commit sha: %v", err), 1)
4066
}
4167

4268
job, err := jobProvider.GetJob(spec.Job)
4369
if err != nil {
70+
log.Printf("error getting job: %v", err)
71+
reporterError(spec, backendApi, err)
4472
usage.ReportErrorAndExit(spec.VCS.Actor, fmt.Sprintf("could not get job: %v", err), 1)
4573
}
4674

4775
// get variables from the variables spec
4876
variablesMap, err := VariablesProvider.GetVariables(spec.Variables)
4977
if err != nil {
5078
log.Printf("could not get variables from provider: %v", err)
79+
reporterError(spec, backendApi, err)
5180
usage.ReportErrorAndExit(spec.VCS.Actor, fmt.Sprintf("could not get variables from provider: %v", err), 1)
5281
}
5382
job.StateEnvVars = lo.Assign(job.StateEnvVars, variablesMap)
5483
job.CommandEnvVars = lo.Assign(job.CommandEnvVars, variablesMap)
5584

5685
lock, err := lockProvider.GetLock(spec.Lock)
5786
if err != nil {
58-
usage.ReportErrorAndExit(spec.VCS.Actor, fmt.Sprintf("could not get job: %v", err), 1)
59-
87+
log.Printf("error getting lock: %v", err)
88+
reporterError(spec, backendApi, err)
89+
usage.ReportErrorAndExit(spec.VCS.Actor, fmt.Sprintf("could not get lock: %v", err), 1)
6090
}
6191

6292
prService, err := vcsProvider.GetPrService(spec.VCS)
6393
if err != nil {
94+
log.Printf("error getting prservice: %v", err)
95+
reporterError(spec, backendApi, err)
6496
usage.ReportErrorAndExit(spec.VCS.Actor, fmt.Sprintf("could not get prservice: %v", err), 1)
6597
}
6698

6799
orgService, err := vcsProvider.GetOrgService(spec.VCS)
68100
if err != nil {
101+
log.Printf("error getting orgservice: %v", err)
102+
reporterError(spec, backendApi, err)
69103
usage.ReportErrorAndExit(spec.VCS.Actor, fmt.Sprintf("could not get orgservice: %v", err), 1)
70104
}
71105
reporter, err := reporterProvider.GetReporter(fmt.Sprintf("%v for %v", spec.Job.JobType, job.ProjectName), spec.Reporter, prService, *spec.Job.PullRequestNumber)
72106
if err != nil {
107+
log.Printf("error getting reporter: %v", err)
108+
reporterError(spec, backendApi, err)
73109
usage.ReportErrorAndExit(spec.VCS.Actor, fmt.Sprintf("could not get reporter: %v", err), 1)
74110
}
75111

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-
81112
policyChecker, err := policyProvider.GetPolicyProvider(spec.Policy, spec.Backend.BackendHostname, spec.Backend.BackendOrganisationName, spec.Backend.BackendJobToken)
82113
if err != nil {
114+
log.Printf("error getting policy provider: %v", err)
115+
reporterError(spec, backendApi, err)
83116
usage.ReportErrorAndExit(spec.VCS.Actor, fmt.Sprintf("could not get policy provider: %v", err), 1)
84117
}
85118

86119
changedFiles, err := prService.GetChangedFiles(*spec.Job.PullRequestNumber)
87120
if err != nil {
121+
log.Printf("error getting changed files: %v", err)
122+
reporterError(spec, backendApi, err)
88123
usage.ReportErrorAndExit(spec.VCS.Actor, fmt.Sprintf("could not get changed files: %v", err), 1)
89124
}
125+
90126
diggerConfig, _, _, err := digger_config.LoadDiggerConfig("./", false, changedFiles)
91127
if err != nil {
128+
log.Printf("error getting digger config: %v", err)
129+
reporterError(spec, backendApi, err)
92130
usage.ReportErrorAndExit(spec.VCS.Actor, fmt.Sprintf("Failed to read Digger digger_config. %s", err), 4)
93131
}
94132
log.Printf("Digger digger_config read successfully\n")
95133

96134
commentUpdater, err := commentUpdaterProvider.Get(*diggerConfig)
97135
if err != nil {
136+
log.Printf("error getting comment updater: %v", err)
137+
reporterError(spec, backendApi, err)
98138
usage.ReportErrorAndExit(spec.VCS.Actor, fmt.Sprintf("could not get comment updater: %v", err), 8)
99139
}
100140

101141
planStorage, err := PlanStorageProvider.GetPlanStorage(spec.VCS.RepoOwner, spec.VCS.RepoName, *spec.Job.PullRequestNumber)
102142
if err != nil {
143+
log.Printf("error getting plan storage: %v", err)
144+
reporterError(spec, backendApi, err)
103145
usage.ReportErrorAndExit(spec.VCS.Actor, fmt.Sprintf("could not get plan storage: %v", err), 8)
104146
}
105147

@@ -108,16 +150,17 @@ func RunSpecNext(
108150
fullRepoName := fmt.Sprintf("%v-%v", spec.VCS.RepoOwner, spec.VCS.RepoName)
109151
_, err = backendApi.ReportProjectJobStatus(fullRepoName, spec.Job.ProjectName, spec.JobId, "started", time.Now(), nil, "", "")
110152
if err != nil {
153+
log.Printf("error getting project status: %v", err)
154+
reporterError(spec, backendApi, err)
111155
usage.ReportErrorAndExit(spec.VCS.Actor, fmt.Sprintf("Failed to report jobSpec status to backend. Exiting. %v", err), 4)
112156
}
113157

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

119160
currentDir, err := os.Getwd()
120161
if err != nil {
162+
log.Printf("error getting current directory: %v", err)
163+
reporterError(spec, backendApi, err)
121164
usage.ReportErrorAndExit(spec.VCS.Actor, fmt.Sprintf("Failed to get current dir. %s", err), 4)
122165
}
123166

next/controllers/projects.go

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -122,6 +122,12 @@ func (d DiggerController) SetJobStatusForProject(c *gin.Context) {
122122
return
123123
}
124124

125+
batch.Status = int16(orchestrator_scheduler.BatchJobFailed)
126+
batchErr := dbmodels.DB.GormDB.Save(batch).Error
127+
if batchErr != nil {
128+
log.Printf("error while updating batch status: %v", err)
129+
}
130+
125131
default:
126132
log.Printf("Unexpected status %v", request.Status)
127133
c.JSON(http.StatusInternalServerError, gin.H{"error": "Error saving job"})

0 commit comments

Comments
 (0)