-
Notifications
You must be signed in to change notification settings - Fork 13
/
rationalize.go
97 lines (85 loc) · 3.1 KB
/
rationalize.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
package initialize
import (
"errors"
"strings"
"github.com/ActiveState/cli/internal/constants"
"github.com/ActiveState/cli/internal/errs"
"github.com/ActiveState/cli/internal/language"
"github.com/ActiveState/cli/internal/locale"
"github.com/ActiveState/cli/internal/runbits/rationalize"
bpResp "github.com/ActiveState/cli/pkg/platform/api/buildplanner/response"
"github.com/ActiveState/cli/pkg/platform/api/buildplanner/types"
"github.com/ActiveState/cli/pkg/platform/runtime/setup"
)
func rationalizeError(owner, project string, rerr *error) {
var pcErr *bpResp.ProjectCreatedError
var errArtifactSetup *setup.ArtifactSetupErrors
var projectExistsErr *errProjectExists
var unrecognizedLanguageErr *errUnrecognizedLanguage
switch {
case rerr == nil:
return
// Not authenticated
case errors.Is(*rerr, rationalize.ErrNotAuthenticated):
*rerr = errs.WrapUserFacing(*rerr,
locale.T("err_init_authenticated"),
errs.SetInput(),
)
case errors.As(*rerr, &projectExistsErr):
*rerr = errs.WrapUserFacing(*rerr,
locale.Tr("err_init_project_exists", project, projectExistsErr.path),
errs.SetInput(),
)
case errors.Is(*rerr, errNoLanguage):
*rerr = errs.WrapUserFacing(*rerr,
locale.T("err_init_no_language"),
errs.SetInput(),
)
case errors.Is(*rerr, errNoOwner):
*rerr = errs.WrapUserFacing(*rerr,
locale.Tr("err_init_invalid_org", owner),
errs.SetInput(),
)
case errors.As(*rerr, &unrecognizedLanguageErr):
opts := strings.Join(language.RecognizedSupportedsNames(), ", ")
*rerr = errs.WrapUserFacing(*rerr,
locale.Tr("err_invalid_language", unrecognizedLanguageErr.Name, opts),
errs.SetInput(),
)
// Error creating project.
case errors.As(*rerr, &pcErr):
switch pcErr.Type {
case types.AlreadyExistsErrorType:
*rerr = errs.WrapUserFacing(
pcErr,
locale.Tl("err_create_project_exists", "The project '{{.V0}}' already exists under '{{.V1}}'", project, owner),
errs.SetInput(),
)
case types.ForbiddenErrorType:
*rerr = errs.NewUserFacing(
locale.Tl("err_create_project_forbidden", "You do not have permission to create that project"),
errs.SetInput(),
errs.SetTips(locale.T("err_init_authenticated")))
case types.NotFoundErrorType:
*rerr = errs.WrapUserFacing(
pcErr,
locale.Tl("err_create_project_not_found", "Could not create project because the organization '{{.V0}}' was not found.", owner),
errs.SetInput(),
errs.SetTips(locale.T("err_init_authenticated")))
}
// If there was an artifact download error, say so, rather than reporting a generic "could not
// update runtime" error.
case errors.As(*rerr, &errArtifactSetup):
for _, serr := range errArtifactSetup.Errors() {
if !errs.Matches(serr, &setup.ArtifactDownloadError{}) {
continue
}
*rerr = errs.WrapUserFacing(*rerr,
locale.Tl("err_init_download", "Your project could not be created because one or more artifacts failed to download."),
errs.SetInput(),
errs.SetTips(locale.Tr("err_user_network_solution", constants.ForumsURL)),
)
break // it only takes one download failure to report the runtime failure as due to download error
}
}
}