Skip to content

Commit 4c5978c

Browse files
committed
fix(git): create tmp dir before clone repository
1 parent 1f158d5 commit 4c5978c

File tree

4 files changed

+79
-20
lines changed

4 files changed

+79
-20
lines changed

mock/git/git.go

+28
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

pkg/cli/app.go

+24-18
Original file line numberDiff line numberDiff line change
@@ -78,20 +78,12 @@ const (
7878
)
7979

8080
func (a *app) run(cmd *cobra.Command, args []string) error {
81-
defer func() {
82-
err := a.logger.Sync()
83-
if err != nil && errors.Is(err, syscall.EINVAL) {
84-
// Sync is not supported on os.Stderr / os.Stdout on arm64 alpine:3.20.3
85-
} else if err != nil {
86-
log.Fatal(err)
87-
}
88-
}()
8981
ctx := context.Background()
90-
target := func(tag string, path string) string {
91-
return fmt.Sprintf("/%s/%s", tag, path)
82+
target := func(destination string, path string) string {
83+
return fmt.Sprintf("%s/%s", destination, path)
9284
}
93-
outputer := func(in []byte, tag, path string) error {
94-
if err := os.WriteFile(target(tag, path), in, 0o644); err != nil {
85+
outputer := func(in []byte, destination, path string) error {
86+
if err := os.WriteFile(target(destination, path), in, 0o644); err != nil {
9587
a.logger.Error("fail to write file", zap.Error(errors.ErrUnsupported))
9688
return err
9789
}
@@ -102,19 +94,31 @@ func (a *app) run(cmd *cobra.Command, args []string) error {
10294
if err := gitClient.Clone(a.githubUrl); err != nil {
10395
return err
10496
}
97+
defer func() {
98+
err := gitClient.Close()
99+
if err != nil {
100+
log.Fatal(err)
101+
}
102+
err = a.logger.Sync()
103+
if err != nil && errors.Is(err, syscall.EINVAL) {
104+
// Sync is not supported on os.Stderr / os.Stdout on arm64 alpine:3.20.3
105+
} else if err != nil {
106+
log.Fatal(err)
107+
}
108+
}()
105109

106110
s := selectStrategy(a.containerPath, a.taskPath)
107111

108112
switch s {
109113
case TASK_DEFINITION:
110-
ext := filepath.Ext(target(a.tag, a.taskPath))
114+
ext := filepath.Ext(target(gitClient.GetDestination(), a.taskPath))
111115
format := encoder.GetFormat(ext)
112116
if format == encoder.Unknow {
113117
err := errors.New("unknow extension")
114118
a.logger.Error("unknown extension", zap.Error(err))
115119
return err
116120
}
117-
in, err := os.ReadFile(target(a.tag, a.taskPath))
121+
in, err := os.ReadFile(target(gitClient.GetDestination(), a.taskPath))
118122
if err != nil {
119123
a.logger.Error("fail to open target file", zap.Error(err))
120124
return err
@@ -139,18 +143,19 @@ func (a *app) run(cmd *cobra.Command, args []string) error {
139143
githubClient,
140144
)
141145
if err != nil {
146+
a.logger.Error("execute task definition", zap.Error(err))
142147
return err
143148
}
144149

145150
case CONTAINER_DEFINITION:
146-
ext := filepath.Ext(target(a.tag, a.containerPath))
151+
ext := filepath.Ext(target(gitClient.GetDestination(), a.containerPath))
147152
format := encoder.GetFormat(ext)
148153
if format == encoder.Unknow {
149154
err := errors.New("unknow extension")
150155
a.logger.Error("", zap.Error(err))
151156
return err
152157
}
153-
in, err := os.ReadFile(target(a.tag, a.containerPath))
158+
in, err := os.ReadFile(target(gitClient.GetDestination(), a.containerPath))
154159
if err != nil {
155160
a.logger.Error("fail to open target file", zap.Error(err))
156161
return err
@@ -175,6 +180,7 @@ func (a *app) run(cmd *cobra.Command, args []string) error {
175180
githubClient,
176181
)
177182
if err != nil {
183+
a.logger.Info("execute container definition", zap.Error(err))
178184
return err
179185
}
180186
case UNKNOW_DEFINITION:
@@ -212,7 +218,7 @@ func execute[P ecs.EcsTarget](
212218
transformer transformer.Transformer[P],
213219
encoder encoder.Encoder[P],
214220
decoder decoder.Decoder[P],
215-
outputer func(in []byte, tag, path string) error,
221+
outputer func(in []byte, destination, path string) error,
216222
gitClient git.Git,
217223
githubClient github.Github,
218224
) error {
@@ -228,7 +234,7 @@ func execute[P ecs.EcsTarget](
228234
if err != nil {
229235
return err
230236
}
231-
if err := outputer(decoded, tag, path); err != nil {
237+
if err := outputer(decoded, gitClient.GetDestination(), path); err != nil {
232238
return err
233239
}
234240
if err := gitClient.Add(path); err != nil {

pkg/cli/app_test.go

+7-1
Original file line numberDiff line numberDiff line change
@@ -159,7 +159,7 @@ func Test_execute(t *testing.T) {
159159
},
160160
gitClient: func() git.Git {
161161
mockGitClient := mock_git.NewMockGit(mockCtrl)
162-
162+
mockGitClient.EXPECT().GetDestination().Return("/tmp/tag")
163163
return mockGitClient
164164
},
165165
githubClient: func(ctx context.Context) github.Github {
@@ -190,6 +190,7 @@ func Test_execute(t *testing.T) {
190190
},
191191
gitClient: func() git.Git {
192192
mockGitClient := mock_git.NewMockGit(mockCtrl)
193+
mockGitClient.EXPECT().GetDestination().Return("/tmp/tag")
193194
mockGitClient.EXPECT().Add(path).Return(errors.New("fail to git add"))
194195
return mockGitClient
195196
},
@@ -221,6 +222,7 @@ func Test_execute(t *testing.T) {
221222
},
222223
gitClient: func() git.Git {
223224
mockGitClient := mock_git.NewMockGit(mockCtrl)
225+
mockGitClient.EXPECT().GetDestination().Return("/tmp/tag")
224226
mockGitClient.EXPECT().Add(path).Return(nil)
225227
mockGitClient.EXPECT().Commit(tag).Return(errors.New("fail to git commit"))
226228
return mockGitClient
@@ -253,6 +255,7 @@ func Test_execute(t *testing.T) {
253255
},
254256
gitClient: func() git.Git {
255257
mockGitClient := mock_git.NewMockGit(mockCtrl)
258+
mockGitClient.EXPECT().GetDestination().Return("/tmp/tag")
256259
mockGitClient.EXPECT().Add(path).Return(nil)
257260
mockGitClient.EXPECT().Commit(tag).Return(nil)
258261
mockGitClient.EXPECT().CheckOut(tag).Return(errors.New("fail to git checkout"))
@@ -286,6 +289,7 @@ func Test_execute(t *testing.T) {
286289
},
287290
gitClient: func() git.Git {
288291
mockGitClient := mock_git.NewMockGit(mockCtrl)
292+
mockGitClient.EXPECT().GetDestination().Return("/tmp/tag")
289293
mockGitClient.EXPECT().Add(path).Return(nil)
290294
mockGitClient.EXPECT().Commit(tag).Return(nil)
291295
mockGitClient.EXPECT().CheckOut(tag).Return(nil)
@@ -320,6 +324,7 @@ func Test_execute(t *testing.T) {
320324
},
321325
gitClient: func() git.Git {
322326
mockGitClient := mock_git.NewMockGit(mockCtrl)
327+
mockGitClient.EXPECT().GetDestination().Return("/tmp/tag")
323328
mockGitClient.EXPECT().Add(path).Return(nil)
324329
mockGitClient.EXPECT().Commit(tag).Return(nil)
325330
mockGitClient.EXPECT().CheckOut(tag).Return(nil)
@@ -355,6 +360,7 @@ func Test_execute(t *testing.T) {
355360
},
356361
gitClient: func() git.Git {
357362
mockGitClient := mock_git.NewMockGit(mockCtrl)
363+
mockGitClient.EXPECT().GetDestination().Return("/tmp/tag")
358364
mockGitClient.EXPECT().Add(path).Return(nil)
359365
mockGitClient.EXPECT().Commit(tag).Return(nil)
360366
mockGitClient.EXPECT().CheckOut(tag).Return(nil)

pkg/git/git.go

+20-1
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import (
55
"encoding/base64"
66
"errors"
77
"fmt"
8+
"os"
89
"os/exec"
910
"sync"
1011

@@ -27,6 +28,8 @@ type Git interface {
2728
Push(target string) error
2829
CheckOut(target string) error
2930
Clone(url string) error
31+
GetDestination() string
32+
Close() error
3033
}
3134

3235
func NewGitClient(logger *zap.Logger, username string, email string, destination string, token string) Git {
@@ -40,16 +43,32 @@ func NewGitClient(logger *zap.Logger, username string, email string, destination
4043
return nil
4144
}
4245
}
46+
tempDir, err := os.MkdirTemp("/tmp", destination)
47+
if err != nil {
48+
logger.Warn("fail to create tmp directory", zap.Error(err))
49+
return nil
50+
}
4351
return &GitClient{
4452
logger: logger,
4553
username: username,
4654
email: email,
47-
destination: destination,
55+
destination: tempDir,
4856
token: token,
4957
mutex: &sync.Mutex{},
5058
}
5159
}
5260

61+
func (g GitClient) GetDestination() string {
62+
return g.destination
63+
}
64+
65+
func (g GitClient) Close() error {
66+
if err := os.RemoveAll(g.destination); err != nil {
67+
g.logger.Warn("failed to remove temp directory", zap.Error(err))
68+
}
69+
return nil
70+
}
71+
5372
func (g GitClient) Status() error {
5473
g.mutex.Lock()
5574
defer g.mutex.Unlock()

0 commit comments

Comments
 (0)