diff --git a/localinfra/spindle.Dockerfile b/localinfra/spindle.Dockerfile --- a/localinfra/spindle.Dockerfile +++ b/localinfra/spindle.Dockerfile @@ -21,7 +21,7 @@ go build -tags libsqlite3 -o /out/spindle ./cmd/spindle && \ go build -tags libsqlite3 -o /out/spindle-microvm-run ./cmd/spindle-microvm-run -FROM alpine:3.20 +FROM alpine:3.24 RUN apk add --no-cache \ bash \ diff --git a/spindle/server.go b/spindle/server.go --- a/spindle/server.go +++ b/spindle/server.go @@ -424,7 +424,7 @@ } // NOTE: we are blindly trusting the knot that it will return only repos it own - repoCloneUri := s.newRepoCloneUrl(src.Key(), repoDid) + repoCloneUri := s.newRepoCloneUrl(src.Host, repoDid) repoPath := s.newRepoPath(repoDid) if err := git.SparseSyncGitRepo(ctx, repoCloneUri, repoPath, event.NewSha); err != nil { return fmt.Errorf("sync git repo: %w", err) diff --git a/spindle/git/git.go b/spindle/git/git.go --- a/spindle/git/git.go +++ b/spindle/git/git.go @@ -72,22 +72,34 @@ if err != nil { return err } + if exist { + gitDirExist, err := isDir(path + "/.git") + if err != nil { + return err + } + if !gitDirExist { + if err := os.RemoveAll(path); err != nil { + return fmt.Errorf("cleanup invalid git dir: %w", err) + } + exist = false + } + } if rev == "" { rev = "HEAD" } if !exist { - if err := exec.Command("git", "clone", "--no-checkout", "--depth=1", "--filter=tree:0", "--revision="+rev, cloneUri, path).Run(); err != nil { + if err := exec.CommandContext(ctx, "git", "clone", "--no-checkout", "--depth=1", "--filter=tree:0", "--revision="+rev, cloneUri, path).Run(); err != nil { return fmt.Errorf("git clone: %w", err) } - if err := exec.Command("git", "-C", path, "sparse-checkout", "set", "--no-cone", WorkflowDir).Run(); err != nil { + if err := exec.CommandContext(ctx, "git", "-C", path, "sparse-checkout", "set", "--no-cone", WorkflowDir).Run(); err != nil { return fmt.Errorf("git sparse-checkout set: %w", err) } } else { - if err := exec.Command("git", "-C", path, "fetch", "--depth=1", "--filter=tree:0", "origin", rev).Run(); err != nil { - return fmt.Errorf("git pull: %w", err) + if err := exec.CommandContext(ctx, "git", "-C", path, "fetch", "--depth=1", "--filter=tree:0", "origin", rev).Run(); err != nil { + return fmt.Errorf("git fetch: %w", err) } } - if err := exec.Command("git", "-C", path, "checkout", rev).Run(); err != nil { + if err := exec.CommandContext(ctx, "git", "-C", path, "checkout", rev).Run(); err != nil { return fmt.Errorf("git checkout: %w", err) } return nil