jobs.go

 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}