aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRunxi Yu <me@runxiyu.org>2025-04-03 16:32:45 +0800
committerRunxi Yu <me@runxiyu.org>2025-04-03 16:47:01 +0800
commit565536e67385e7337e1a7d67c80499216d645882 (patch)
treeac3e714b70d1d2191668c91032f983b562f50254
parentHTML: Fix authorship fields (diff)
downloadforge-565536e67385e7337e1a7d67c80499216d645882.tar.gz
forge-565536e67385e7337e1a7d67c80499216d645882.tar.zst
forge-565536e67385e7337e1a7d67c80499216d645882.zip
Automatically deploy and run git2d
-rw-r--r--config.go5
-rw-r--r--forge.scfg3
-rw-r--r--git2d_deploy.go29
-rw-r--r--main.go12
4 files changed, 47 insertions, 2 deletions
diff --git a/config.go b/config.go
index 822f58b..f0dcad5 100644
--- a/config.go
+++ b/config.go
@@ -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"`
diff --git a/forge.scfg b/forge.scfg
index 451643a..faeb1e1 100644
--- a/forge.scfg
+++ b/forge.scfg
@@ -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
+}
diff --git a/main.go b/main.go
index 75e187f..84458cb 100644
--- a/main.go
+++ b/main.go
@@ -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
{