diff options
-rw-r--r-- | config.go | 5 | ||||
-rw-r--r-- | forge.scfg | 3 | ||||
-rw-r--r-- | git2d_deploy.go | 29 | ||||
-rw-r--r-- | main.go | 12 |
4 files changed, 47 insertions, 2 deletions
@@ -39,8 +39,9 @@ var config struct { ReadTimeout uint32 `scfg:"read_timeout"` } `scfg:"lmtp"` Git struct { - RepoDir string `scfg:"repo_dir"` - Socket string `scfg:"socket"` + RepoDir string `scfg:"repo_dir"` + Socket string `scfg:"socket"` + DaemonPath string `scfg:"daemon_path"` } `scfg:"git"` SSH struct { Net string `scfg:"net"` @@ -42,6 +42,9 @@ git { # Where should git2d listen on? socket /var/run/lindenii/forge/git2d.sock + + # Where should we put git2d? + daemon_path /usr/libexec/lindenii/forge/git2d } ssh { diff --git a/git2d_deploy.go b/git2d_deploy.go new file mode 100644 index 0000000..09332a8 --- /dev/null +++ b/git2d_deploy.go @@ -0,0 +1,29 @@ +// SPDX-License-Identifier: AGPL-3.0-only +// SPDX-FileCopyrightText: Copyright (c) 2025 Runxi Yu <https://runxiyu.org> + +package main + +import ( + "io" + "io/fs" + "os" +) + +func deployGit2D() (err error) { + var srcFD fs.File + var dstFD *os.File + + if srcFD, err = resourcesFS.Open("git2d/git2d"); err != nil { + return err + } + defer srcFD.Close() + + if dstFD, err = os.OpenFile(config.Git.DaemonPath, os.O_WRONLY|os.O_CREATE|os.O_TRUNC, 0o755); err != nil { + return err + } + defer dstFD.Close() + + _, err = io.Copy(dstFD, srcFD) + + return err +} @@ -8,6 +8,7 @@ import ( "flag" "net" "net/http" + "os/exec" "syscall" "time" @@ -31,6 +32,17 @@ func main() { if err := loadTemplates(); err != nil { clog.Fatal(1, "Loading templates: "+err.Error()) } + if err := deployGit2D(); err != nil { + clog.Fatal(1, "Deploying git2d: "+err.Error()) + } + + // Launch Git2D + go func() { + cmd := exec.Command(config.Git.DaemonPath, config.Git.Socket) //#nosec G204 + if err := cmd.Run(); err != nil { + panic(err) + } + }() // UNIX socket listener for hooks { |