Skip to content
This repository was archived by the owner on May 30, 2024. It is now read-only.

Commit 27656de

Browse files
author
Noah Lee
authored
Fix to evaluation to avoid an escape character error (#250)
* Add a method Eval to Config * Fix to evaluate the configuration in the server
1 parent 07a24b4 commit 27656de

File tree

14 files changed

+212
-278
lines changed

14 files changed

+212
-278
lines changed

internal/interactor/config.go

Lines changed: 0 additions & 22 deletions
This file was deleted.

internal/interactor/config_test.go

Lines changed: 0 additions & 57 deletions
This file was deleted.

internal/interactor/deployment.go

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -37,10 +37,6 @@ func (i *Interactor) Deploy(ctx context.Context, u *ent.User, r *ent.Repo, d *en
3737
return nil, err
3838
}
3939

40-
if err := env.Eval(&vo.EvalValues{IsRollback: d.IsRollback}); err != nil {
41-
return nil, err
42-
}
43-
4440
number, err := i.Store.GetNextDeploymentNumberOfRepo(ctx, r)
4541
if err != nil {
4642
return nil, e.NewError(
@@ -139,10 +135,6 @@ func (i *Interactor) DeployToRemote(ctx context.Context, u *ent.User, r *ent.Rep
139135
)
140136
}
141137

142-
if err := env.Eval(&vo.EvalValues{IsRollback: d.IsRollback}); err != nil {
143-
return nil, err
144-
}
145-
146138
rd, err := i.createRemoteDeployment(ctx, u, r, d, env)
147139
if err != nil {
148140
return nil, err

internal/interactor/deployment_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -289,7 +289,7 @@ func TestInteractor_DeployToRemote(t *testing.T) {
289289
}
290290
})
291291

292-
t.Run("create a new remote deployment and update the deployment.", func(t *testing.T) {
292+
t.Run("Create a new remote deployment and update the deployment.", func(t *testing.T) {
293293
input := struct {
294294
d *ent.Deployment
295295
e *vo.Env

internal/server/api/v1/repos/deployment.go

Lines changed: 45 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -85,15 +85,23 @@ func (r *Repo) CreateDeployment(c *gin.Context) {
8585
vr, _ := c.Get(KeyRepo)
8686
re := vr.(*ent.Repo)
8787

88-
env, err := r.i.GetEnv(ctx, u, re, p.Env)
88+
config, err := r.i.GetConfig(ctx, u, re)
8989
if e.HasErrorCode(err, e.ErrorCodeEntityNotFound) {
90-
r.log.Check(gb.GetZapLogLevel(err), "The configuration file is not found.").Write(zap.Error(err))
91-
// To override the HTTP status 422.
90+
r.log.Check(gb.GetZapLogLevel(err), "Failed to get the configuration.").Write(zap.Error(err))
9291
gb.ResponseWithStatusAndError(c, http.StatusUnprocessableEntity, err)
9392
return
94-
} else if err != nil {
95-
r.log.Check(gb.GetZapLogLevel(err), "It has failed to get the configuration.").Write(zap.Error(err))
96-
gb.ResponseWithError(c, err)
93+
}
94+
95+
if err := config.Eval(&vo.EvalValues{}); err != nil {
96+
r.log.Check(gb.GetZapLogLevel(err), "Failed to evaluate the configuration.").Write(zap.Error(err))
97+
gb.ResponseWithStatusAndError(c, http.StatusUnprocessableEntity, err)
98+
return
99+
}
100+
101+
var env *vo.Env
102+
if env = config.GetEnv(p.Env); env == nil {
103+
r.log.Warn("The environment is not found.", zap.String("env", p.Env))
104+
gb.ResponseWithStatusAndError(c, http.StatusUnprocessableEntity, e.NewError(e.ErrorCodeConfigUndefinedEnv, nil))
97105
return
98106
}
99107

@@ -110,7 +118,6 @@ func (r *Repo) CreateDeployment(c *gin.Context) {
110118
return
111119
}
112120

113-
// TODO: Migrate the event logic into the interactor.
114121
if _, err := r.i.CreateEvent(ctx, &ent.Event{
115122
Kind: event.KindDeployment,
116123
Type: event.TypeCreated,
@@ -124,6 +131,7 @@ func (r *Repo) CreateDeployment(c *gin.Context) {
124131
d = de
125132
}
126133

134+
r.log.Info("Start to deploy.", zap.String("repo", re.GetFullName()), zap.String("env", p.Env))
127135
gb.Response(c, http.StatusCreated, d)
128136
}
129137

@@ -149,15 +157,23 @@ func (r *Repo) UpdateDeployment(c *gin.Context) {
149157
return
150158
}
151159

152-
env, err := r.i.GetEnv(ctx, u, re, d.Env)
160+
config, err := r.i.GetConfig(ctx, u, re)
153161
if e.HasErrorCode(err, e.ErrorCodeEntityNotFound) {
154-
r.log.Check(gb.GetZapLogLevel(err), "The configuration file is not found.").Write(zap.Error(err))
155-
// To override the HTTP status 422.
162+
r.log.Check(gb.GetZapLogLevel(err), "Failed to get the configuration.").Write(zap.Error(err))
156163
gb.ResponseWithStatusAndError(c, http.StatusUnprocessableEntity, err)
157164
return
158-
} else if err != nil {
159-
r.log.Check(gb.GetZapLogLevel(err), "It has failed to get the configuration.").Write(zap.Error(err))
160-
gb.ResponseWithError(c, err)
165+
}
166+
167+
if err := config.Eval(&vo.EvalValues{IsRollback: d.IsRollback}); err != nil {
168+
r.log.Check(gb.GetZapLogLevel(err), "Failed to evaludate the configuration.").Write(zap.Error(err))
169+
gb.ResponseWithStatusAndError(c, http.StatusUnprocessableEntity, err)
170+
return
171+
}
172+
173+
var env *vo.Env
174+
if env = config.GetEnv(d.Env); env == nil {
175+
r.log.Warn("The environment is not found.", zap.String("env", d.Env))
176+
gb.ResponseWithStatusAndError(c, http.StatusUnprocessableEntity, e.NewError(e.ErrorCodeConfigUndefinedEnv, nil))
161177
return
162178
}
163179

@@ -180,6 +196,7 @@ func (r *Repo) UpdateDeployment(c *gin.Context) {
180196
d = de
181197
}
182198

199+
r.log.Info("Start to deploy.", zap.String("repo", re.GetFullName()), zap.Int("number", d.Number))
183200
gb.Response(c, http.StatusOK, d)
184201
}
185202

@@ -203,15 +220,23 @@ func (r *Repo) RollbackDeployment(c *gin.Context) {
203220
return
204221
}
205222

206-
env, err := r.i.GetEnv(ctx, u, re, d.Env)
223+
config, err := r.i.GetConfig(ctx, u, re)
207224
if e.HasErrorCode(err, e.ErrorCodeEntityNotFound) {
208-
r.log.Check(gb.GetZapLogLevel(err), "The configuration file is not found.").Write(zap.Error(err))
209-
// To override the HTTP status 422.
225+
r.log.Check(gb.GetZapLogLevel(err), "Failed to get the configuration.").Write(zap.Error(err))
210226
gb.ResponseWithStatusAndError(c, http.StatusUnprocessableEntity, err)
211227
return
212-
} else if err != nil {
213-
r.log.Check(gb.GetZapLogLevel(err), "It has failed to get the configuration.").Write(zap.Error(err))
214-
gb.ResponseWithError(c, err)
228+
}
229+
230+
if err := config.Eval(&vo.EvalValues{IsRollback: true}); err != nil {
231+
r.log.Check(gb.GetZapLogLevel(err), "Failed to evaludate the configuration.").Write(zap.Error(err))
232+
gb.ResponseWithStatusAndError(c, http.StatusUnprocessableEntity, err)
233+
return
234+
}
235+
236+
var env *vo.Env
237+
if env = config.GetEnv(d.Env); env == nil {
238+
r.log.Warn("The environment is not found.", zap.String("env", d.Env))
239+
gb.ResponseWithStatusAndError(c, http.StatusUnprocessableEntity, e.NewError(e.ErrorCodeConfigUndefinedEnv, nil))
215240
return
216241
}
217242

@@ -242,6 +267,7 @@ func (r *Repo) RollbackDeployment(c *gin.Context) {
242267
d = de
243268
}
244269

270+
r.log.Info("Start to rollback.", zap.String("repo", re.GetFullName()), zap.Int("number", d.Number))
245271
gb.Response(c, http.StatusCreated, d)
246272
}
247273

internal/server/api/v1/repos/deployment_test.go

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -120,13 +120,15 @@ func TestRepo_CreateDeployment(t *testing.T) {
120120
ctrl := gomock.NewController(t)
121121
m := mock.NewMockInteractor(ctrl)
122122

123-
t.Log("Read the config file.")
124123
m.
125124
EXPECT().
126-
GetEnv(gomock.Any(), gomock.AssignableToTypeOf(&ent.User{}), gomock.AssignableToTypeOf(&ent.Repo{}), gomock.Any()).
127-
Return(&vo.Env{
128-
Name: "prod",
129-
}, nil)
125+
GetConfig(gomock.Any(), gomock.AssignableToTypeOf(&ent.User{}), gomock.AssignableToTypeOf(&ent.Repo{})).
126+
Return(&vo.Config{
127+
Envs: []*vo.Env{
128+
{
129+
Name: "prod",
130+
},
131+
}}, nil)
130132

131133
t.Log("Deploy with the payload successfully.")
132134
m.

internal/server/api/v1/repos/interface.go

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,6 @@ type (
3131
Deploy(ctx context.Context, u *ent.User, re *ent.Repo, d *ent.Deployment, env *vo.Env) (*ent.Deployment, error)
3232
DeployToRemote(ctx context.Context, u *ent.User, r *ent.Repo, d *ent.Deployment, env *vo.Env) (*ent.Deployment, error)
3333
GetConfig(ctx context.Context, u *ent.User, r *ent.Repo) (*vo.Config, error)
34-
GetEnv(ctx context.Context, u *ent.User, r *ent.Repo, env string) (*vo.Env, error)
3534

3635
ListReviews(ctx context.Context, d *ent.Deployment) ([]*ent.Review, error)
3736
FindReviewOfUser(ctx context.Context, u *ent.User, d *ent.Deployment) (*ent.Review, error)

internal/server/api/v1/repos/lock.go

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ import (
2020
"github.com/gitploy-io/gitploy/internal/server/global"
2121
gb "github.com/gitploy-io/gitploy/internal/server/global"
2222
"github.com/gitploy-io/gitploy/pkg/e"
23+
"github.com/gitploy-io/gitploy/vo"
2324
)
2425

2526
type (
@@ -84,15 +85,17 @@ func (r *Repo) CreateLock(c *gin.Context) {
8485
vu, _ := c.Get(global.KeyUser)
8586
u := vu.(*ent.User)
8687

87-
env, err := r.i.GetEnv(ctx, u, re, p.Env)
88+
config, err := r.i.GetConfig(ctx, u, re)
8889
if e.HasErrorCode(err, e.ErrorCodeEntityNotFound) {
89-
r.log.Check(gb.GetZapLogLevel(err), "The configuration file is not found.").Write(zap.Error(err))
90-
// To override the HTTP status 422.
90+
r.log.Check(gb.GetZapLogLevel(err), "Failed to get the configuration.").Write(zap.Error(err))
9191
gb.ResponseWithStatusAndError(c, http.StatusUnprocessableEntity, err)
9292
return
93-
} else if err != nil {
94-
r.log.Check(gb.GetZapLogLevel(err), "It has failed to get the configuration.").Write(zap.Error(err))
95-
gb.ResponseWithError(c, err)
93+
}
94+
95+
var env *vo.Env
96+
if env = config.GetEnv(p.Env); env == nil {
97+
r.log.Warn("The environment is not found.", zap.String("env", p.Env))
98+
gb.ResponseWithStatusAndError(c, http.StatusUnprocessableEntity, e.NewError(e.ErrorCodeConfigUndefinedEnv, nil))
9699
return
97100
}
98101

internal/server/api/v1/repos/lock_test.go

Lines changed: 14 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@ import (
1717
"github.com/gitploy-io/gitploy/ent"
1818
"github.com/gitploy-io/gitploy/internal/server/api/v1/repos/mock"
1919
"github.com/gitploy-io/gitploy/internal/server/global"
20-
"github.com/gitploy-io/gitploy/pkg/e"
2120
"github.com/gitploy-io/gitploy/vo"
2221
)
2322

@@ -34,11 +33,15 @@ func TestRepo_CreateLock(t *testing.T) {
3433
ctrl := gomock.NewController(t)
3534
m := mock.NewMockInteractor(ctrl)
3635

37-
t.Log("Read deploy.yml and check the env.")
3836
m.
3937
EXPECT().
40-
GetEnv(gomock.Any(), gomock.AssignableToTypeOf(&ent.User{}), gomock.AssignableToTypeOf(&ent.Repo{}), gomock.Any()).
41-
Return(nil, e.NewError(e.ErrorCodeConfigUndefinedEnv, nil))
38+
GetConfig(gomock.Any(), gomock.AssignableToTypeOf(&ent.User{}), gomock.AssignableToTypeOf(&ent.Repo{})).
39+
Return(&vo.Config{
40+
Envs: []*vo.Env{
41+
{
42+
Name: "dev",
43+
},
44+
}}, nil)
4245

4346
r := NewRepo(RepoConfig{}, m)
4447

@@ -72,13 +75,15 @@ func TestRepo_CreateLock(t *testing.T) {
7275
ctrl := gomock.NewController(t)
7376
m := mock.NewMockInteractor(ctrl)
7477

75-
t.Log("Read deploy.yml and check the env.")
7678
m.
7779
EXPECT().
78-
GetEnv(gomock.Any(), gomock.AssignableToTypeOf(&ent.User{}), gomock.AssignableToTypeOf(&ent.Repo{}), gomock.Any()).
79-
Return(&vo.Env{
80-
Name: "production",
81-
}, nil)
80+
GetConfig(gomock.Any(), gomock.AssignableToTypeOf(&ent.User{}), gomock.AssignableToTypeOf(&ent.Repo{})).
81+
Return(&vo.Config{
82+
Envs: []*vo.Env{
83+
{
84+
Name: "production",
85+
},
86+
}}, nil)
8287

8388
t.Log("Lock the env.")
8489
m.

internal/server/api/v1/repos/mock/interactor.go

Lines changed: 0 additions & 15 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

internal/server/slack/deploy.go

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -273,15 +273,21 @@ func (s *Slack) interactDeploy(c *gin.Context) {
273273
return
274274
}
275275

276-
cfg, err := s.i.GetConfig(ctx, cu.Edges.User, cb.Edges.Repo)
276+
config, err := s.i.GetConfig(ctx, cu.Edges.User, cb.Edges.Repo)
277277
if err != nil {
278278
postMessageWithError(cu, err)
279279
c.Status(http.StatusOK)
280280
return
281281
}
282282

283+
if err := config.Eval(&vo.EvalValues{}); err != nil {
284+
postMessageWithError(cu, err)
285+
c.Status(http.StatusOK)
286+
return
287+
}
288+
283289
var env *vo.Env
284-
if env = cfg.GetEnv(sm.Env); env == nil {
290+
if env = config.GetEnv(sm.Env); env == nil {
285291
postBotMessage(cu, "The env is not defined in the config.")
286292
c.Status(http.StatusOK)
287293
return

0 commit comments

Comments
 (0)