1package server
2
3import (
4 "github.com/charmbracelet/soft-serve/git"
5 "github.com/charmbracelet/soft-serve/server/backend"
6)
7
8var (
9 jobSpecs = map[string]string{
10 "mirror": "@every 10m",
11 }
12)
13
14// mirrorJob runs the (pull) mirror job task.
15func mirrorJob(b backend.Backend) func() {
16 logger := logger.WithPrefix("server.mirrorJob")
17 return func() {
18 repos, err := b.Repositories()
19 if err != nil {
20 logger.Error("error getting repositories", "err", err)
21 return
22 }
23
24 for _, repo := range repos {
25 if repo.IsMirror() {
26 logger.Debug("updating mirror", "repo", repo.Name())
27 r, err := repo.Open()
28 if err != nil {
29 logger.Error("error opening repository", "repo", repo.Name(), "err", err)
30 continue
31 }
32
33 cmd := git.NewCommand("remote", "update", "--prune")
34 if _, err := cmd.RunInDir(r.Path); err != nil {
35 logger.Error("error running git remote update", "repo", repo.Name(), "err", err)
36 }
37 }
38 }
39 }
40}