From 565536e67385e7337e1a7d67c80499216d645882 Mon Sep 17 00:00:00 2001 From: Runxi Yu Date: Thu, 03 Apr 2025 16:32:45 +0800 Subject: [PATCH] Automatically deploy and run git2d --- config.go | 5 +++-- forge.scfg | 3 +++ git2d_deploy.go | 29 +++++++++++++++++++++++++++++ main.go | 12 ++++++++++++ diff --git a/config.go b/config.go index 822f58bc6b9ebb2b8d17c8cc8503d1bebb55a33d..f0dcad55276384007321fb3edc217ac6fa7271d9 100644 --- a/config.go +++ b/config.go @@ -39,8 +39,9 @@ WriteTimeout uint32 `scfg:"write_timeout"` 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"` diff --git a/forge.scfg b/forge.scfg index 451643ae3f7dfc3c7e0cf94898f3caaa8b59700d..faeb1e1ed7ae3f76196a48fdad328902a3972f41 100644 --- a/forge.scfg +++ b/forge.scfg @@ -42,6 +42,9 @@ repo_dir /var/lib/lindenii/forge/repos # 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 0000000000000000000000000000000000000000..09332a8d438cefa0f75fc4337bcb89adf265ff4b --- /dev/null +++ b/git2d_deploy.go @@ -0,0 +1,29 @@ +// SPDX-License-Identifier: AGPL-3.0-only +// SPDX-FileCopyrightText: Copyright (c) 2025 Runxi Yu + +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 +} diff --git a/main.go b/main.go index 75e187fcfe1b31b585e932eb194749e3f3c1cc9e..84458cbcb4ef27a540fee2b4e68ec6fe561a1e1a 100644 --- a/main.go +++ b/main.go @@ -8,6 +8,7 @@ "errors" "flag" "net" "net/http" + "os/exec" "syscall" "time" @@ -31,6 +32,17 @@ } 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 { -- 2.48.1