Lindenii Project Forge
Config placement adjustments
package config import ( "go.lindenii.runxiyu.org/forge/forged/internal/database" "go.lindenii.runxiyu.org/forge/forged/internal/irc" ) type Config struct { HTTP struct { Net string `scfg:"net"` Addr string `scfg:"addr"` CookieExpiry int `scfg:"cookie_expiry"` Root string `scfg:"root"` ReadTimeout uint32 `scfg:"read_timeout"` WriteTimeout uint32 `scfg:"write_timeout"` IdleTimeout uint32 `scfg:"idle_timeout"` ReverseProxy bool `scfg:"reverse_proxy"` } `scfg:"http"` Hooks struct { Socket string `scfg:"socket"` Execs string `scfg:"execs"` } `scfg:"hooks"` LMTP struct { Socket string `scfg:"socket"` Domain string `scfg:"domain"` MaxSize int64 `scfg:"max_size"` WriteTimeout uint32 `scfg:"write_timeout"` ReadTimeout uint32 `scfg:"read_timeout"` } `scfg:"lmtp"` Git struct { RepoDir string `scfg:"repo_dir"` Socket string `scfg:"socket"` DaemonPath string `scfg:"daemon_path"` } `scfg:"git"` SSH struct { Net string `scfg:"net"` Addr string `scfg:"addr"` Key string `scfg:"key"` Root string `scfg:"root"` } `scfg:"ssh"` IRC irc.Config `scfg:"irc"` General struct { Title string `scfg:"title"` } `scfg:"general"` DB database.Config `scfg:"db"` Pprof struct { Net string `scfg:"net"` Addr string `scfg:"addr"` } `scfg:"pprof"` }
// SPDX-License-Identifier: AGPL-3.0-only // SPDX-FileCopyrightText: Copyright (c) 2025 Runxi Yu <https://runxiyu.org> // Package database provides stubs and wrappers for databases. package database import ( "context" "github.com/jackc/pgx/v5/pgxpool" ) // Database is a wrapper around pgxpool.Pool to provide a common interface for // other packages in the forge. type Database struct { *pgxpool.Pool } // Open opens a new database connection pool using the provided connection // string. It returns a Database instance and an error if any occurs. // It is run indefinitely in the background. func Open(connString string) (Database, error) { db, err := pgxpool.New(context.Background(), connString) return Database{db}, err }
type Config struct { Type string `scfg:"type"` Conn string `scfg:"conn"` }
package hooki import ( "go.lindenii.runxiyu.org/forge/forged/internal/cmap" "github.com/gliderlabs/ssh" ) type Pool cmap.Map[string, hookinfo] type hookinfo struct { session ssh.Session pubkey string directAccess bool repoPath string userID int userType string repoID int groupPath []string repoName string contribReq string }
package server import ( "context" "fmt" "html/template" "go.lindenii.runxiyu.org/forge/forged/internal/config" "go.lindenii.runxiyu.org/forge/forged/internal/database" "go.lindenii.runxiyu.org/forge/forged/internal/hooki" "go.lindenii.runxiyu.org/forge/forged/internal/store" ) type Server struct { config config.Config database database.Database stores *store.Set hookis *hooki.Pool templates *template.Template } func New(ctx context.Context, config config.Config) (*Server, error) { database, err := database.Open(ctx, config.DB) if err != nil { return nil, fmt.Errorf("open database: %w", err) } return &Server{ database: database, }, nil }
package store type Set struct{} // TODO