Detailed changes
@@ -0,0 +1,71 @@
+package cmd
+
+import (
+ "context"
+ "errors"
+ "fmt"
+ "io/fs"
+ "os"
+
+ "github.com/charmbracelet/soft-serve/pkg/backend"
+ "github.com/charmbracelet/soft-serve/pkg/config"
+ "github.com/charmbracelet/soft-serve/pkg/db"
+ "github.com/charmbracelet/soft-serve/pkg/hooks"
+ "github.com/charmbracelet/soft-serve/pkg/store"
+ "github.com/charmbracelet/soft-serve/pkg/store/database"
+ "github.com/spf13/cobra"
+)
+
+// InitBackendContext initializes the backend context.
+func InitBackendContext(cmd *cobra.Command, _ []string) error {
+ ctx := cmd.Context()
+ cfg := config.FromContext(ctx)
+ if _, err := os.Stat(cfg.DataPath); errors.Is(err, fs.ErrNotExist) {
+ if err := os.MkdirAll(cfg.DataPath, os.ModePerm); err != nil {
+ return fmt.Errorf("create data directory: %w", err)
+ }
+ }
+ dbx, err := db.Open(ctx, cfg.DB.Driver, cfg.DB.DataSource)
+ if err != nil {
+ return fmt.Errorf("open database: %w", err)
+ }
+
+ ctx = db.WithContext(ctx, dbx)
+ dbstore := database.New(ctx, dbx)
+ ctx = store.WithContext(ctx, dbstore)
+ be := backend.New(ctx, cfg, dbx)
+ ctx = backend.WithContext(ctx, be)
+
+ cmd.SetContext(ctx)
+
+ return nil
+}
+
+// CloseDBContext closes the database context.
+func CloseDBContext(cmd *cobra.Command, _ []string) error {
+ ctx := cmd.Context()
+ dbx := db.FromContext(ctx)
+ if dbx != nil {
+ if err := dbx.Close(); err != nil {
+ return fmt.Errorf("close database: %w", err)
+ }
+ }
+
+ return nil
+}
+
+// InitializeHooks initializes the hooks.
+func InitializeHooks(ctx context.Context, cfg *config.Config, be *backend.Backend) error {
+ repos, err := be.Repositories(ctx)
+ if err != nil {
+ return err
+ }
+
+ for _, repo := range repos {
+ if err := hooks.GenerateHooks(ctx, cfg, repo.Name()); err != nil {
+ return err
+ }
+ }
+
+ return nil
+}
@@ -1,17 +1,19 @@
-package main
+package admin
import (
"fmt"
- "github.com/charmbracelet/soft-serve/server/backend"
- "github.com/charmbracelet/soft-serve/server/config"
- "github.com/charmbracelet/soft-serve/server/db"
- "github.com/charmbracelet/soft-serve/server/db/migrate"
+ "github.com/charmbracelet/soft-serve/cmd"
+ "github.com/charmbracelet/soft-serve/pkg/backend"
+ "github.com/charmbracelet/soft-serve/pkg/config"
+ "github.com/charmbracelet/soft-serve/pkg/db"
+ "github.com/charmbracelet/soft-serve/pkg/db/migrate"
"github.com/spf13/cobra"
)
var (
- adminCmd = &cobra.Command{
+ // Command is the admin command.
+ Command = &cobra.Command{
Use: "admin",
Short: "Administrate the server",
}
@@ -19,8 +21,8 @@ var (
migrateCmd = &cobra.Command{
Use: "migrate",
Short: "Migrate the database to the latest version",
- PersistentPreRunE: initBackendContext,
- PersistentPostRunE: closeDBContext,
+ PersistentPreRunE: cmd.InitBackendContext,
+ PersistentPostRunE: cmd.CloseDBContext,
RunE: func(cmd *cobra.Command, _ []string) error {
ctx := cmd.Context()
db := db.FromContext(ctx)
@@ -35,8 +37,8 @@ var (
rollbackCmd = &cobra.Command{
Use: "rollback",
Short: "Rollback the database to the previous version",
- PersistentPreRunE: initBackendContext,
- PersistentPostRunE: closeDBContext,
+ PersistentPreRunE: cmd.InitBackendContext,
+ PersistentPostRunE: cmd.CloseDBContext,
RunE: func(cmd *cobra.Command, _ []string) error {
ctx := cmd.Context()
db := db.FromContext(ctx)
@@ -51,13 +53,13 @@ var (
syncHooksCmd = &cobra.Command{
Use: "sync-hooks",
Short: "Update repository hooks",
- PersistentPreRunE: initBackendContext,
- PersistentPostRunE: closeDBContext,
- RunE: func(cmd *cobra.Command, _ []string) error {
- ctx := cmd.Context()
+ PersistentPreRunE: cmd.InitBackendContext,
+ PersistentPostRunE: cmd.CloseDBContext,
+ RunE: func(c *cobra.Command, _ []string) error {
+ ctx := c.Context()
cfg := config.FromContext(ctx)
be := backend.FromContext(ctx)
- if err := initializeHooks(ctx, cfg, be); err != nil {
+ if err := cmd.InitializeHooks(ctx, cfg, be); err != nil {
return fmt.Errorf("initialize hooks: %w", err)
}
@@ -67,7 +69,7 @@ var (
)
func init() {
- adminCmd.AddCommand(
+ Command.AddCommand(
syncHooksCmd,
migrateCmd,
rollbackCmd,
@@ -1,4 +1,4 @@
-package main
+package browse
import (
"fmt"
@@ -9,15 +9,16 @@ import (
tea "github.com/charmbracelet/bubbletea"
"github.com/charmbracelet/lipgloss"
"github.com/charmbracelet/soft-serve/git"
- "github.com/charmbracelet/soft-serve/server/proto"
- "github.com/charmbracelet/soft-serve/server/ui/common"
- "github.com/charmbracelet/soft-serve/server/ui/components/footer"
- "github.com/charmbracelet/soft-serve/server/ui/pages/repo"
+ "github.com/charmbracelet/soft-serve/pkg/proto"
+ "github.com/charmbracelet/soft-serve/pkg/ui/common"
+ "github.com/charmbracelet/soft-serve/pkg/ui/components/footer"
+ "github.com/charmbracelet/soft-serve/pkg/ui/pages/repo"
"github.com/muesli/termenv"
"github.com/spf13/cobra"
)
-var browseCmd = &cobra.Command{
+// Command is the browse command.
+var Command = &cobra.Command{
Use: "browse PATH",
Short: "Browse a repository",
Args: cobra.MaximumNArgs(1),
@@ -72,7 +73,6 @@ func init() {
// HACK: This is a hack to hide the clone url
// TODO: Make this configurable
common.CloneCmd = func(publicURL, name string) string { return "" }
- rootCmd.AddCommand(browseCmd)
}
type state int
@@ -1,4 +1,4 @@
-package main
+package hook
import (
"bufio"
@@ -13,9 +13,10 @@ import (
"strings"
"github.com/charmbracelet/log"
- "github.com/charmbracelet/soft-serve/server/backend"
- "github.com/charmbracelet/soft-serve/server/config"
- "github.com/charmbracelet/soft-serve/server/hooks"
+ "github.com/charmbracelet/soft-serve/cmd"
+ "github.com/charmbracelet/soft-serve/pkg/backend"
+ "github.com/charmbracelet/soft-serve/pkg/config"
+ "github.com/charmbracelet/soft-serve/pkg/hooks"
"github.com/spf13/cobra"
)
@@ -26,23 +27,24 @@ var (
// Deprecated: this flag is ignored.
configPath string
- hookCmd = &cobra.Command{
+ // Command is the hook command.
+ Command = &cobra.Command{
Use: "hook",
Short: "Run git server hooks",
Long: "Handles Soft Serve git server hooks.",
Hidden: true,
- PersistentPreRunE: func(cmd *cobra.Command, args []string) error {
- logger := log.FromContext(cmd.Context())
- if err := initBackendContext(cmd, args); err != nil {
+ PersistentPreRunE: func(c *cobra.Command, args []string) error {
+ logger := log.FromContext(c.Context())
+ if err := cmd.InitBackendContext(c, args); err != nil {
logger.Error("failed to initialize backend context", "err", err)
return ErrInternalServerError
}
return nil
},
- PersistentPostRunE: func(cmd *cobra.Command, args []string) error {
- logger := log.FromContext(cmd.Context())
- if err := closeDBContext(cmd, args); err != nil {
+ PersistentPostRunE: func(c *cobra.Command, args []string) error {
+ logger := log.FromContext(c.Context())
+ if err := cmd.CloseDBContext(c, args); err != nil {
logger.Error("failed to close backend", "err", err)
return ErrInternalServerError
}
@@ -147,8 +149,8 @@ var (
)
func init() {
- hookCmd.PersistentFlags().StringVar(&configPath, "config", "", "path to config file (deprecated)")
- hookCmd.AddCommand(
+ Command.PersistentFlags().StringVar(&configPath, "config", "", "path to config file (deprecated)")
+ Command.AddCommand(
preReceiveCmd,
updateCmd,
postReceiveCmd,
@@ -163,47 +165,3 @@ func runCommand(ctx context.Context, in io.Reader, out io.Writer, err io.Writer,
cmd.Stderr = err
return cmd.Run()
}
-
-const updateHookExample = `#!/bin/sh
-#
-# An example hook script to echo information about the push
-# and send it to the client.
-#
-# To enable this hook, rename this file to "update" and make it executable.
-
-refname="$1"
-oldrev="$2"
-newrev="$3"
-
-# Safety check
-if [ -z "$GIT_DIR" ]; then
- echo "Don't run this script from the command line." >&2
- echo " (if you want, you could supply GIT_DIR then run" >&2
- echo " $0 <ref> <oldrev> <newrev>)" >&2
- exit 1
-fi
-
-if [ -z "$refname" -o -z "$oldrev" -o -z "$newrev" ]; then
- echo "usage: $0 <ref> <oldrev> <newrev>" >&2
- exit 1
-fi
-
-# Check types
-# if $newrev is 0000...0000, it's a commit to delete a ref.
-zero=$(git hash-object --stdin </dev/null | tr '[0-9a-f]' '0')
-if [ "$newrev" = "$zero" ]; then
- newrev_type=delete
-else
- newrev_type=$(git cat-file -t $newrev)
-fi
-
-echo "Hi from Soft Serve update hook!"
-echo
-echo "Repository: $SOFT_SERVE_REPO_NAME"
-echo "RefName: $refname"
-echo "Change Type: $newrev_type"
-echo "Old SHA1: $oldrev"
-echo "New SHA1: $newrev"
-
-exit 0
-`
@@ -2,20 +2,20 @@ package main
import (
"context"
- "errors"
"fmt"
- "io/fs"
"os"
"runtime/debug"
"github.com/charmbracelet/log"
- "github.com/charmbracelet/soft-serve/server/backend"
- "github.com/charmbracelet/soft-serve/server/config"
- "github.com/charmbracelet/soft-serve/server/db"
- logr "github.com/charmbracelet/soft-serve/server/log"
- "github.com/charmbracelet/soft-serve/server/store"
- "github.com/charmbracelet/soft-serve/server/store/database"
- "github.com/charmbracelet/soft-serve/server/version"
+ "github.com/charmbracelet/soft-serve/cmd/soft/admin"
+ "github.com/charmbracelet/soft-serve/cmd/soft/browse"
+ "github.com/charmbracelet/soft-serve/cmd/soft/hook"
+ "github.com/charmbracelet/soft-serve/cmd/soft/serve"
+ "github.com/charmbracelet/soft-serve/pkg/config"
+ logr "github.com/charmbracelet/soft-serve/pkg/log"
+ "github.com/charmbracelet/soft-serve/pkg/version"
+ mcobra "github.com/muesli/mango-cobra"
+ "github.com/muesli/roff"
"github.com/spf13/cobra"
"go.uber.org/automaxprocs/maxprocs"
)
@@ -39,18 +39,36 @@ var (
Long: "Soft Serve is a self-hostable Git server for the command line.",
SilenceUsage: true,
RunE: func(cmd *cobra.Command, args []string) error {
- return browseCmd.RunE(cmd, args)
+ return browse.Command.RunE(cmd, args)
+ },
+ }
+
+ manCmd = &cobra.Command{
+ Use: "man",
+ Short: "Generate man pages",
+ Args: cobra.NoArgs,
+ Hidden: true,
+ RunE: func(_ *cobra.Command, _ []string) error {
+ manPage, err := mcobra.NewManPage(1, rootCmd) //.
+ if err != nil {
+ return err
+ }
+
+ manPage = manPage.WithSection("Copyright", "(C) 2021-2023 Charmbracelet, Inc.\n"+
+ "Released under MIT license.")
+ fmt.Println(manPage.Build(roff.NewDocument()))
+ return nil
},
}
)
func init() {
rootCmd.AddCommand(
- serveCmd,
manCmd,
- hookCmd,
- migrateConfig,
- adminCmd,
+ serve.Command,
+ hook.Command,
+ admin.Command,
+ browse.Command,
)
rootCmd.CompletionOptions.HiddenDefaultCmd = true
@@ -114,39 +132,3 @@ func main() {
os.Exit(1)
}
}
-
-func initBackendContext(cmd *cobra.Command, _ []string) error {
- ctx := cmd.Context()
- cfg := config.FromContext(ctx)
- if _, err := os.Stat(cfg.DataPath); errors.Is(err, fs.ErrNotExist) {
- if err := os.MkdirAll(cfg.DataPath, os.ModePerm); err != nil {
- return fmt.Errorf("create data directory: %w", err)
- }
- }
- dbx, err := db.Open(ctx, cfg.DB.Driver, cfg.DB.DataSource)
- if err != nil {
- return fmt.Errorf("open database: %w", err)
- }
-
- ctx = db.WithContext(ctx, dbx)
- dbstore := database.New(ctx, dbx)
- ctx = store.WithContext(ctx, dbstore)
- be := backend.New(ctx, cfg, dbx)
- ctx = backend.WithContext(ctx, be)
-
- cmd.SetContext(ctx)
-
- return nil
-}
-
-func closeDBContext(cmd *cobra.Command, _ []string) error {
- ctx := cmd.Context()
- dbx := db.FromContext(ctx)
- if dbx != nil {
- if err := dbx.Close(); err != nil {
- return fmt.Errorf("close database: %w", err)
- }
- }
-
- return nil
-}
@@ -1,27 +0,0 @@
-package main
-
-import (
- "fmt"
-
- mcobra "github.com/muesli/mango-cobra"
- "github.com/muesli/roff"
- "github.com/spf13/cobra"
-)
-
-var manCmd = &cobra.Command{
- Use: "man",
- Short: "Generate man pages",
- Args: cobra.NoArgs,
- Hidden: true,
- RunE: func(_ *cobra.Command, _ []string) error {
- manPage, err := mcobra.NewManPage(1, rootCmd) //.
- if err != nil {
- return err
- }
-
- manPage = manPage.WithSection("Copyright", "(C) 2021-2023 Charmbracelet, Inc.\n"+
- "Released under MIT license.")
- fmt.Println(manPage.Build(roff.NewDocument()))
- return nil
- },
-}
@@ -1,434 +0,0 @@
-package main
-
-import (
- "encoding/json"
- "errors"
- "fmt"
- "io"
- "os"
- "path/filepath"
- "strings"
- "time"
-
- "github.com/charmbracelet/log"
- "github.com/charmbracelet/soft-serve/git"
- "github.com/charmbracelet/soft-serve/server/access"
- "github.com/charmbracelet/soft-serve/server/backend"
- "github.com/charmbracelet/soft-serve/server/config"
- "github.com/charmbracelet/soft-serve/server/db"
- "github.com/charmbracelet/soft-serve/server/proto"
- "github.com/charmbracelet/soft-serve/server/sshutils"
- "github.com/charmbracelet/soft-serve/server/utils"
- gitm "github.com/gogs/git-module"
- "github.com/spf13/cobra"
- "golang.org/x/crypto/ssh"
- "gopkg.in/yaml.v3"
-)
-
-// Deprecated: will be removed in a future release.
-var migrateConfig = &cobra.Command{
- Use: "migrate-config",
- Short: "Migrate config to new format",
- Hidden: true,
- RunE: func(cmd *cobra.Command, _ []string) error {
- ctx := cmd.Context()
-
- logger := log.FromContext(ctx)
- // Disable logging timestamp
- logger.SetReportTimestamp(false)
-
- keyPath := os.Getenv("SOFT_SERVE_KEY_PATH")
- reposPath := os.Getenv("SOFT_SERVE_REPO_PATH")
- bindAddr := os.Getenv("SOFT_SERVE_BIND_ADDRESS")
- cfg := config.DefaultConfig()
- if err := cfg.ParseEnv(); err != nil {
- return fmt.Errorf("parse env: %w", err)
- }
-
- ctx = config.WithContext(ctx, cfg)
- db, err := db.Open(ctx, cfg.DB.Driver, cfg.DB.DataSource)
- if err != nil {
- return fmt.Errorf("open database: %w", err)
- }
-
- defer db.Close() // nolint: errcheck
- sb := backend.New(ctx, cfg, db)
-
- // FIXME: Admin user gets created when the database is created.
- sb.DeleteUser(ctx, "admin") // nolint: errcheck
-
- // Set SSH listen address
- logger.Info("Setting SSH listen address...")
- if bindAddr != "" {
- cfg.SSH.ListenAddr = bindAddr
- }
-
- // Copy SSH host key
- logger.Info("Copying SSH host key...")
- if keyPath != "" {
- if err := os.MkdirAll(filepath.Join(cfg.DataPath, "ssh"), os.ModePerm); err != nil {
- return fmt.Errorf("failed to create ssh directory: %w", err)
- }
-
- if err := copyFile(keyPath, filepath.Join(cfg.DataPath, "ssh", filepath.Base(keyPath))); err != nil {
- return fmt.Errorf("failed to copy ssh key: %w", err)
- }
-
- if err := copyFile(keyPath+".pub", filepath.Join(cfg.DataPath, "ssh", filepath.Base(keyPath))+".pub"); err != nil {
- logger.Errorf("failed to copy ssh key: %s", err)
- }
-
- cfg.SSH.KeyPath = filepath.Join(cfg.DataPath, "ssh", filepath.Base(keyPath))
- }
-
- // Read config
- logger.Info("Reading config repository...")
- r, err := git.Open(filepath.Join(reposPath, "config"))
- if err != nil {
- return fmt.Errorf("failed to open config repo: %w", err)
- }
-
- head, err := r.HEAD()
- if err != nil {
- return fmt.Errorf("failed to get head: %w", err)
- }
-
- tree, err := r.TreePath(head, "")
- if err != nil {
- return fmt.Errorf("failed to get tree: %w", err)
- }
-
- isJson := false // nolint: revive
- te, err := tree.TreeEntry("config.yaml")
- if err != nil {
- te, err = tree.TreeEntry("config.json")
- if err != nil {
- return fmt.Errorf("failed to get config file: %w", err)
- }
- isJson = true
- }
-
- cc, err := te.Contents()
- if err != nil {
- return fmt.Errorf("failed to get config contents: %w", err)
- }
-
- var ocfg Config
- if isJson {
- if err := json.Unmarshal(cc, &ocfg); err != nil {
- return fmt.Errorf("failed to unmarshal config: %w", err)
- }
- } else {
- if err := yaml.Unmarshal(cc, &ocfg); err != nil {
- return fmt.Errorf("failed to unmarshal config: %w", err)
- }
- }
-
- readme, readmePath, err := git.LatestFile(r, nil, "README*")
- hasReadme := err == nil
-
- // Set server name
- cfg.Name = ocfg.Name
-
- // Set server public url
- cfg.SSH.PublicURL = fmt.Sprintf("ssh://%s:%d", ocfg.Host, ocfg.Port)
-
- // Set server settings
- logger.Info("Setting server settings...")
- if sb.SetAllowKeyless(ctx, ocfg.AllowKeyless) != nil {
- fmt.Fprintf(os.Stderr, "failed to set allow keyless\n")
- }
- anon := access.ParseAccessLevel(ocfg.AnonAccess)
- if anon >= 0 {
- if err := sb.SetAnonAccess(ctx, anon); err != nil {
- fmt.Fprintf(os.Stderr, "failed to set anon access: %s\n", err)
- }
- }
-
- // Copy repos
- if reposPath != "" {
- logger.Info("Copying repos...")
- if err := os.MkdirAll(filepath.Join(cfg.DataPath, "repos"), os.ModePerm); err != nil {
- return fmt.Errorf("failed to create repos directory: %w", err)
- }
-
- dirs, err := os.ReadDir(reposPath)
- if err != nil {
- return fmt.Errorf("failed to read repos directory: %w", err)
- }
-
- for _, dir := range dirs {
- if !dir.IsDir() || dir.Name() == "config" {
- continue
- }
-
- if !isGitDir(filepath.Join(reposPath, dir.Name())) {
- continue
- }
-
- logger.Infof(" Copying repo %s", dir.Name())
- src := filepath.Join(reposPath, utils.SanitizeRepo(dir.Name()))
- dst := filepath.Join(cfg.DataPath, "repos", utils.SanitizeRepo(dir.Name())) + ".git"
- if err := os.MkdirAll(dst, os.ModePerm); err != nil {
- return fmt.Errorf("failed to create repo directory: %w", err)
- }
-
- if err := copyDir(src, dst); err != nil {
- return fmt.Errorf("failed to copy repo: %w", err)
- }
-
- if _, err := sb.CreateRepository(ctx, dir.Name(), nil, proto.RepositoryOptions{}); err != nil {
- fmt.Fprintf(os.Stderr, "failed to create repository: %s\n", err)
- }
- }
-
- if hasReadme {
- logger.Infof(" Copying readme from \"config\" to \".soft-serve\"")
-
- // Switch to main branch
- bcmd := git.NewCommand("branch", "-M", "main")
-
- rp := filepath.Join(cfg.DataPath, "repos", ".soft-serve.git")
- nr, err := git.Init(rp, true)
- if err != nil {
- return fmt.Errorf("failed to init repo: %w", err)
- }
-
- if _, err := nr.SymbolicRef("HEAD", gitm.RefsHeads+"main"); err != nil {
- return fmt.Errorf("failed to set HEAD: %w", err)
- }
-
- tmpDir, err := os.MkdirTemp("", "soft-serve")
- if err != nil {
- return fmt.Errorf("failed to create temp dir: %w", err)
- }
-
- r, err := git.Init(tmpDir, false)
- if err != nil {
- return fmt.Errorf("failed to clone repo: %w", err)
- }
-
- if _, err := bcmd.RunInDir(tmpDir); err != nil {
- return fmt.Errorf("failed to create main branch: %w", err)
- }
-
- if err := os.WriteFile(filepath.Join(tmpDir, readmePath), []byte(readme), 0o644); err != nil { // nolint: gosec
- return fmt.Errorf("failed to write readme: %w", err)
- }
-
- if err := r.Add(gitm.AddOptions{
- All: true,
- }); err != nil {
- return fmt.Errorf("failed to add readme: %w", err)
- }
-
- if err := r.Commit(&gitm.Signature{
- Name: "Soft Serve",
- Email: "vt100@charm.sh",
- When: time.Now(),
- }, "Add readme"); err != nil {
- return fmt.Errorf("failed to commit readme: %w", err)
- }
-
- if err := r.RemoteAdd("origin", "file://"+rp); err != nil {
- return fmt.Errorf("failed to add remote: %w", err)
- }
-
- if err := r.Push("origin", "main"); err != nil {
- return fmt.Errorf("failed to push readme: %w", err)
- }
-
- // Create `.soft-serve` repository and add readme
- if _, err := sb.CreateRepository(ctx, ".soft-serve", nil, proto.RepositoryOptions{
- ProjectName: "Home",
- Description: "Soft Serve home repository",
- Hidden: true,
- Private: false,
- }); err != nil {
- fmt.Fprintf(os.Stderr, "failed to create repository: %s\n", err)
- }
- }
- }
-
- // Set repos metadata & collabs
- logger.Info("Setting repos metadata & collabs...")
- for _, r := range ocfg.Repos {
- repo, name := r.Repo, r.Name
- // Special case for config repo
- if repo == "config" {
- repo = ".soft-serve"
- r.Private = false
- }
-
- if err := sb.SetProjectName(ctx, repo, name); err != nil {
- logger.Errorf("failed to set repo name to %s: %s", repo, err)
- }
-
- if err := sb.SetDescription(ctx, repo, r.Note); err != nil {
- logger.Errorf("failed to set repo description to %s: %s", repo, err)
- }
-
- if err := sb.SetPrivate(ctx, repo, r.Private); err != nil {
- logger.Errorf("failed to set repo private to %s: %s", repo, err)
- }
-
- for _, collab := range r.Collabs {
- if err := sb.AddCollaborator(ctx, repo, collab, access.ReadWriteAccess); err != nil {
- logger.Errorf("failed to add repo collab to %s: %s", repo, err)
- }
- }
- }
-
- // Create users & collabs
- logger.Info("Creating users & collabs...")
- for _, user := range ocfg.Users {
- keys := make(map[string]ssh.PublicKey)
- for _, key := range user.PublicKeys {
- pk, _, err := sshutils.ParseAuthorizedKey(key)
- if err != nil {
- continue
- }
- ak := sshutils.MarshalAuthorizedKey(pk)
- keys[ak] = pk
- }
-
- pubkeys := make([]ssh.PublicKey, 0)
- for _, pk := range keys {
- pubkeys = append(pubkeys, pk)
- }
-
- username := strings.ToLower(user.Name)
- username = strings.ReplaceAll(username, " ", "-")
- logger.Infof("Creating user %q", username)
- if _, err := sb.CreateUser(ctx, username, proto.UserOptions{
- Admin: user.Admin,
- PublicKeys: pubkeys,
- }); err != nil {
- logger.Errorf("failed to create user: %s", err)
- }
-
- for _, repo := range user.CollabRepos {
- if err := sb.AddCollaborator(ctx, repo, username, access.ReadWriteAccess); err != nil {
- logger.Errorf("failed to add user collab to %s: %s\n", repo, err)
- }
- }
- }
-
- logger.Info("Writing config...")
- defer logger.Info("Done!")
- return cfg.WriteConfig()
- },
-}
-
-// Returns true if path is a directory containing an `objects` directory and a
-// `HEAD` file.
-func isGitDir(path string) bool {
- stat, err := os.Stat(filepath.Join(path, "objects"))
- if err != nil {
- return false
- }
- if !stat.IsDir() {
- return false
- }
-
- stat, err = os.Stat(filepath.Join(path, "HEAD"))
- if err != nil {
- return false
- }
- if stat.IsDir() {
- return false
- }
-
- return true
-}
-
-// copyFile copies a single file from src to dst.
-func copyFile(src, dst string) error {
- var err error
- var srcfd *os.File
- var dstfd *os.File
- var srcinfo os.FileInfo
-
- if srcfd, err = os.Open(src); err != nil {
- return err
- }
- defer srcfd.Close() // nolint: errcheck
-
- if dstfd, err = os.Create(dst); err != nil {
- return err
- }
- defer dstfd.Close() // nolint: errcheck
-
- if _, err = io.Copy(dstfd, srcfd); err != nil {
- return err
- }
- if srcinfo, err = os.Stat(src); err != nil {
- return err
- }
- return os.Chmod(dst, srcinfo.Mode())
-}
-
-// copyDir copies a whole directory recursively.
-func copyDir(src string, dst string) error {
- var err error
- var fds []os.DirEntry
- var srcinfo os.FileInfo
-
- if srcinfo, err = os.Stat(src); err != nil {
- return err
- }
-
- if err = os.MkdirAll(dst, srcinfo.Mode()); err != nil {
- return err
- }
-
- if fds, err = os.ReadDir(src); err != nil {
- return err
- }
-
- for _, fd := range fds {
- srcfp := filepath.Join(src, fd.Name())
- dstfp := filepath.Join(dst, fd.Name())
-
- if fd.IsDir() {
- if err = copyDir(srcfp, dstfp); err != nil {
- err = errors.Join(err, err)
- }
- } else {
- if err = copyFile(srcfp, dstfp); err != nil {
- err = errors.Join(err, err)
- }
- }
- }
-
- return err
-}
-
-// Config is the configuration for the server.
-type Config struct {
- Name string `yaml:"name" json:"name"`
- Host string `yaml:"host" json:"host"`
- Port int `yaml:"port" json:"port"`
- AnonAccess string `yaml:"anon-access" json:"anon-access"`
- AllowKeyless bool `yaml:"allow-keyless" json:"allow-keyless"`
- Users []User `yaml:"users" json:"users"`
- Repos []RepoConfig `yaml:"repos" json:"repos"`
-}
-
-// User contains user-level configuration for a repository.
-type User struct {
- Name string `yaml:"name" json:"name"`
- Admin bool `yaml:"admin" json:"admin"`
- PublicKeys []string `yaml:"public-keys" json:"public-keys"`
- CollabRepos []string `yaml:"collab-repos" json:"collab-repos"`
-}
-
-// RepoConfig is a repository configuration.
-type RepoConfig struct {
- Name string `yaml:"name" json:"name"`
- Repo string `yaml:"repo" json:"repo"`
- Note string `yaml:"note" json:"note"`
- Private bool `yaml:"private" json:"private"`
- Readme string `yaml:"readme" json:"readme"`
- Collabs []string `yaml:"collabs" json:"collabs"`
-}
@@ -1,4 +1,4 @@
-package main
+package serve
import (
"context"
@@ -9,26 +9,26 @@ import (
"syscall"
"time"
- "github.com/charmbracelet/soft-serve/server"
- "github.com/charmbracelet/soft-serve/server/backend"
- "github.com/charmbracelet/soft-serve/server/config"
- "github.com/charmbracelet/soft-serve/server/db"
- "github.com/charmbracelet/soft-serve/server/db/migrate"
- "github.com/charmbracelet/soft-serve/server/hooks"
+ "github.com/charmbracelet/soft-serve/cmd"
+ "github.com/charmbracelet/soft-serve/pkg/backend"
+ "github.com/charmbracelet/soft-serve/pkg/config"
+ "github.com/charmbracelet/soft-serve/pkg/db"
+ "github.com/charmbracelet/soft-serve/pkg/db/migrate"
"github.com/spf13/cobra"
)
var (
syncHooks bool
- serveCmd = &cobra.Command{
+ // Command is the serve command.
+ Command = &cobra.Command{
Use: "serve",
Short: "Start the server",
Args: cobra.NoArgs,
- PersistentPreRunE: initBackendContext,
- PersistentPostRunE: closeDBContext,
- RunE: func(cmd *cobra.Command, _ []string) error {
- ctx := cmd.Context()
+ PersistentPreRunE: cmd.InitBackendContext,
+ PersistentPostRunE: cmd.CloseDBContext,
+ RunE: func(c *cobra.Command, _ []string) error {
+ ctx := c.Context()
cfg := config.DefaultConfig()
if cfg.Exist() {
if err := cfg.ParseFile(); err != nil {
@@ -67,14 +67,14 @@ var (
return fmt.Errorf("migration error: %w", err)
}
- s, err := server.NewServer(ctx)
+ s, err := NewServer(ctx)
if err != nil {
return fmt.Errorf("start server: %w", err)
}
if syncHooks {
be := backend.FromContext(ctx)
- if err := initializeHooks(ctx, cfg, be); err != nil {
+ if err := cmd.InitializeHooks(ctx, cfg, be); err != nil {
return fmt.Errorf("initialize hooks: %w", err)
}
}
@@ -103,20 +103,49 @@ var (
)
func init() {
- serveCmd.Flags().BoolVarP(&syncHooks, "sync-hooks", "", false, "synchronize hooks for all repositories before running the server")
+ Command.Flags().BoolVarP(&syncHooks, "sync-hooks", "", false, "synchronize hooks for all repositories before running the server")
}
-func initializeHooks(ctx context.Context, cfg *config.Config, be *backend.Backend) error {
- repos, err := be.Repositories(ctx)
- if err != nil {
- return err
- }
-
- for _, repo := range repos {
- if err := hooks.GenerateHooks(ctx, cfg, repo.Name()); err != nil {
- return err
- }
- }
-
- return nil
-}
+const updateHookExample = `#!/bin/sh
+#
+# An example hook script to echo information about the push
+# and send it to the client.
+#
+# To enable this hook, rename this file to "update" and make it executable.
+
+refname="$1"
+oldrev="$2"
+newrev="$3"
+
+# Safety check
+if [ -z "$GIT_DIR" ]; then
+ echo "Don't run this script from the command line." >&2
+ echo " (if you want, you could supply GIT_DIR then run" >&2
+ echo " $0 <ref> <oldrev> <newrev>)" >&2
+ exit 1
+fi
+
+if [ -z "$refname" -o -z "$oldrev" -o -z "$newrev" ]; then
+ echo "usage: $0 <ref> <oldrev> <newrev>" >&2
+ exit 1
+fi
+
+# Check types
+# if $newrev is 0000...0000, it's a commit to delete a ref.
+zero=$(git hash-object --stdin </dev/null | tr '[0-9a-f]' '0')
+if [ "$newrev" = "$zero" ]; then
+ newrev_type=delete
+else
+ newrev_type=$(git cat-file -t $newrev)
+fi
+
+echo "Hi from Soft Serve update hook!"
+echo
+echo "Repository: $SOFT_SERVE_REPO_NAME"
+echo "RefName: $refname"
+echo "Change Type: $newrev_type"
+echo "Old SHA1: $oldrev"
+echo "New SHA1: $newrev"
+
+exit 0
+`
@@ -1,4 +1,4 @@
-package server
+package serve
import (
"context"
@@ -8,15 +8,15 @@ import (
"github.com/charmbracelet/log"
- "github.com/charmbracelet/soft-serve/server/backend"
- "github.com/charmbracelet/soft-serve/server/config"
- "github.com/charmbracelet/soft-serve/server/cron"
- "github.com/charmbracelet/soft-serve/server/daemon"
- "github.com/charmbracelet/soft-serve/server/db"
- "github.com/charmbracelet/soft-serve/server/jobs"
- sshsrv "github.com/charmbracelet/soft-serve/server/ssh"
- "github.com/charmbracelet/soft-serve/server/stats"
- "github.com/charmbracelet/soft-serve/server/web"
+ "github.com/charmbracelet/soft-serve/pkg/backend"
+ "github.com/charmbracelet/soft-serve/pkg/config"
+ "github.com/charmbracelet/soft-serve/pkg/cron"
+ "github.com/charmbracelet/soft-serve/pkg/daemon"
+ "github.com/charmbracelet/soft-serve/pkg/db"
+ "github.com/charmbracelet/soft-serve/pkg/jobs"
+ sshsrv "github.com/charmbracelet/soft-serve/pkg/ssh"
+ "github.com/charmbracelet/soft-serve/pkg/stats"
+ "github.com/charmbracelet/soft-serve/pkg/web"
"github.com/charmbracelet/ssh"
"golang.org/x/sync/errgroup"
)
@@ -5,8 +5,8 @@ import (
"errors"
"time"
- "github.com/charmbracelet/soft-serve/server/db"
- "github.com/charmbracelet/soft-serve/server/proto"
+ "github.com/charmbracelet/soft-serve/pkg/db"
+ "github.com/charmbracelet/soft-serve/pkg/proto"
)
// CreateAccessToken creates an access token for user.
@@ -4,10 +4,10 @@ import (
"context"
"github.com/charmbracelet/log"
- "github.com/charmbracelet/soft-serve/server/config"
- "github.com/charmbracelet/soft-serve/server/db"
- "github.com/charmbracelet/soft-serve/server/store"
- "github.com/charmbracelet/soft-serve/server/task"
+ "github.com/charmbracelet/soft-serve/pkg/config"
+ "github.com/charmbracelet/soft-serve/pkg/db"
+ "github.com/charmbracelet/soft-serve/pkg/store"
+ "github.com/charmbracelet/soft-serve/pkg/task"
)
// Backend is the Soft Serve backend that handles users, repositories, and
@@ -5,12 +5,12 @@ import (
"errors"
"strings"
- "github.com/charmbracelet/soft-serve/server/access"
- "github.com/charmbracelet/soft-serve/server/db"
- "github.com/charmbracelet/soft-serve/server/db/models"
- "github.com/charmbracelet/soft-serve/server/proto"
- "github.com/charmbracelet/soft-serve/server/utils"
- "github.com/charmbracelet/soft-serve/server/webhook"
+ "github.com/charmbracelet/soft-serve/pkg/access"
+ "github.com/charmbracelet/soft-serve/pkg/db"
+ "github.com/charmbracelet/soft-serve/pkg/db/models"
+ "github.com/charmbracelet/soft-serve/pkg/proto"
+ "github.com/charmbracelet/soft-serve/pkg/utils"
+ "github.com/charmbracelet/soft-serve/pkg/webhook"
)
// AddCollaborator adds a collaborator to a repository.
@@ -7,10 +7,10 @@ import (
"sync"
"github.com/charmbracelet/soft-serve/git"
- "github.com/charmbracelet/soft-serve/server/hooks"
- "github.com/charmbracelet/soft-serve/server/proto"
- "github.com/charmbracelet/soft-serve/server/sshutils"
- "github.com/charmbracelet/soft-serve/server/webhook"
+ "github.com/charmbracelet/soft-serve/pkg/hooks"
+ "github.com/charmbracelet/soft-serve/pkg/proto"
+ "github.com/charmbracelet/soft-serve/pkg/sshutils"
+ "github.com/charmbracelet/soft-serve/pkg/webhook"
)
var _ hooks.Hooks = (*Backend)(nil)
@@ -8,12 +8,12 @@ import (
"path/filepath"
"strconv"
- "github.com/charmbracelet/soft-serve/server/config"
- "github.com/charmbracelet/soft-serve/server/db"
- "github.com/charmbracelet/soft-serve/server/lfs"
- "github.com/charmbracelet/soft-serve/server/proto"
- "github.com/charmbracelet/soft-serve/server/storage"
- "github.com/charmbracelet/soft-serve/server/store"
+ "github.com/charmbracelet/soft-serve/pkg/config"
+ "github.com/charmbracelet/soft-serve/pkg/db"
+ "github.com/charmbracelet/soft-serve/pkg/lfs"
+ "github.com/charmbracelet/soft-serve/pkg/proto"
+ "github.com/charmbracelet/soft-serve/pkg/storage"
+ "github.com/charmbracelet/soft-serve/pkg/store"
)
// StoreRepoMissingLFSObjects stores missing LFS objects for a repository.
@@ -13,15 +13,15 @@ import (
"time"
"github.com/charmbracelet/soft-serve/git"
- "github.com/charmbracelet/soft-serve/server/db"
- "github.com/charmbracelet/soft-serve/server/db/models"
- "github.com/charmbracelet/soft-serve/server/hooks"
- "github.com/charmbracelet/soft-serve/server/lfs"
- "github.com/charmbracelet/soft-serve/server/proto"
- "github.com/charmbracelet/soft-serve/server/storage"
- "github.com/charmbracelet/soft-serve/server/task"
- "github.com/charmbracelet/soft-serve/server/utils"
- "github.com/charmbracelet/soft-serve/server/webhook"
+ "github.com/charmbracelet/soft-serve/pkg/db"
+ "github.com/charmbracelet/soft-serve/pkg/db/models"
+ "github.com/charmbracelet/soft-serve/pkg/hooks"
+ "github.com/charmbracelet/soft-serve/pkg/lfs"
+ "github.com/charmbracelet/soft-serve/pkg/proto"
+ "github.com/charmbracelet/soft-serve/pkg/storage"
+ "github.com/charmbracelet/soft-serve/pkg/task"
+ "github.com/charmbracelet/soft-serve/pkg/utils"
+ "github.com/charmbracelet/soft-serve/pkg/webhook"
)
func (d *Backend) reposPath() string {
@@ -3,8 +3,8 @@ package backend
import (
"context"
- "github.com/charmbracelet/soft-serve/server/access"
- "github.com/charmbracelet/soft-serve/server/db"
+ "github.com/charmbracelet/soft-serve/pkg/access"
+ "github.com/charmbracelet/soft-serve/pkg/db"
)
// AllowKeyless returns whether or not keyless access is allowed.
@@ -6,12 +6,12 @@ import (
"strings"
"time"
- "github.com/charmbracelet/soft-serve/server/access"
- "github.com/charmbracelet/soft-serve/server/db"
- "github.com/charmbracelet/soft-serve/server/db/models"
- "github.com/charmbracelet/soft-serve/server/proto"
- "github.com/charmbracelet/soft-serve/server/sshutils"
- "github.com/charmbracelet/soft-serve/server/utils"
+ "github.com/charmbracelet/soft-serve/pkg/access"
+ "github.com/charmbracelet/soft-serve/pkg/db"
+ "github.com/charmbracelet/soft-serve/pkg/db/models"
+ "github.com/charmbracelet/soft-serve/pkg/proto"
+ "github.com/charmbracelet/soft-serve/pkg/sshutils"
+ "github.com/charmbracelet/soft-serve/pkg/utils"
"golang.org/x/crypto/ssh"
)
@@ -2,7 +2,7 @@ package backend
import (
"github.com/charmbracelet/soft-serve/git"
- "github.com/charmbracelet/soft-serve/server/proto"
+ "github.com/charmbracelet/soft-serve/pkg/proto"
)
// LatestFile returns the contents of the latest file at the specified path in
@@ -5,11 +5,11 @@ import (
"encoding/json"
"github.com/charmbracelet/log"
- "github.com/charmbracelet/soft-serve/server/db"
- "github.com/charmbracelet/soft-serve/server/db/models"
- "github.com/charmbracelet/soft-serve/server/proto"
- "github.com/charmbracelet/soft-serve/server/store"
- "github.com/charmbracelet/soft-serve/server/webhook"
+ "github.com/charmbracelet/soft-serve/pkg/db"
+ "github.com/charmbracelet/soft-serve/pkg/db/models"
+ "github.com/charmbracelet/soft-serve/pkg/proto"
+ "github.com/charmbracelet/soft-serve/pkg/store"
+ "github.com/charmbracelet/soft-serve/pkg/webhook"
"github.com/google/uuid"
)
@@ -9,7 +9,7 @@ import (
"time"
"github.com/caarlos0/env/v8"
- "github.com/charmbracelet/soft-serve/server/sshutils"
+ "github.com/charmbracelet/soft-serve/pkg/sshutils"
"golang.org/x/crypto/ssh"
"gopkg.in/yaml.v3"
)
@@ -11,11 +11,11 @@ import (
"time"
"github.com/charmbracelet/log"
- "github.com/charmbracelet/soft-serve/server/access"
- "github.com/charmbracelet/soft-serve/server/backend"
- "github.com/charmbracelet/soft-serve/server/config"
- "github.com/charmbracelet/soft-serve/server/git"
- "github.com/charmbracelet/soft-serve/server/utils"
+ "github.com/charmbracelet/soft-serve/pkg/access"
+ "github.com/charmbracelet/soft-serve/pkg/backend"
+ "github.com/charmbracelet/soft-serve/pkg/config"
+ "github.com/charmbracelet/soft-serve/pkg/git"
+ "github.com/charmbracelet/soft-serve/pkg/utils"
"github.com/go-git/go-git/v5/plumbing/format/pktline"
"github.com/prometheus/client_golang/prometheus"
"github.com/prometheus/client_golang/prometheus/promauto"
@@ -12,14 +12,14 @@ import (
"strings"
"testing"
- "github.com/charmbracelet/soft-serve/server/backend"
- "github.com/charmbracelet/soft-serve/server/config"
- "github.com/charmbracelet/soft-serve/server/db"
- "github.com/charmbracelet/soft-serve/server/db/migrate"
- "github.com/charmbracelet/soft-serve/server/git"
- "github.com/charmbracelet/soft-serve/server/store"
- "github.com/charmbracelet/soft-serve/server/store/database"
- "github.com/charmbracelet/soft-serve/server/test"
+ "github.com/charmbracelet/soft-serve/pkg/backend"
+ "github.com/charmbracelet/soft-serve/pkg/config"
+ "github.com/charmbracelet/soft-serve/pkg/db"
+ "github.com/charmbracelet/soft-serve/pkg/db/migrate"
+ "github.com/charmbracelet/soft-serve/pkg/git"
+ "github.com/charmbracelet/soft-serve/pkg/store"
+ "github.com/charmbracelet/soft-serve/pkg/store/database"
+ "github.com/charmbracelet/soft-serve/pkg/test"
"github.com/go-git/go-git/v5/plumbing/format/pktline"
_ "modernc.org/sqlite" // sqlite driver
)
@@ -7,7 +7,7 @@ import (
"fmt"
"github.com/charmbracelet/log"
- "github.com/charmbracelet/soft-serve/server/config"
+ "github.com/charmbracelet/soft-serve/pkg/config"
"github.com/jmoiron/sqlx"
_ "github.com/lib/pq" // postgres driver
_ "modernc.org/sqlite" // sqlite driver
@@ -6,10 +6,10 @@ import (
"fmt"
"strconv"
- "github.com/charmbracelet/soft-serve/server/access"
- "github.com/charmbracelet/soft-serve/server/config"
- "github.com/charmbracelet/soft-serve/server/db"
- "github.com/charmbracelet/soft-serve/server/sshutils"
+ "github.com/charmbracelet/soft-serve/pkg/access"
+ "github.com/charmbracelet/soft-serve/pkg/config"
+ "github.com/charmbracelet/soft-serve/pkg/db"
+ "github.com/charmbracelet/soft-serve/pkg/sshutils"
)
const (
@@ -3,7 +3,7 @@ package migrate
import (
"context"
- "github.com/charmbracelet/soft-serve/server/db"
+ "github.com/charmbracelet/soft-serve/pkg/db"
)
const (
@@ -7,7 +7,7 @@ import (
"fmt"
"github.com/charmbracelet/log"
- "github.com/charmbracelet/soft-serve/server/db"
+ "github.com/charmbracelet/soft-serve/pkg/db"
)
// MigrateFunc is a function that executes a migration.
@@ -7,7 +7,7 @@ import (
"regexp"
"strings"
- "github.com/charmbracelet/soft-serve/server/db"
+ "github.com/charmbracelet/soft-serve/pkg/db"
)
//go:embed *.sql
@@ -3,7 +3,7 @@ package models
import (
"time"
- "github.com/charmbracelet/soft-serve/server/access"
+ "github.com/charmbracelet/soft-serve/pkg/access"
)
// Collab represents a repository collaborator.
@@ -15,13 +15,13 @@ import (
"github.com/charmbracelet/git-lfs-transfer/transfer"
"github.com/charmbracelet/log"
- "github.com/charmbracelet/soft-serve/server/config"
- "github.com/charmbracelet/soft-serve/server/db"
- "github.com/charmbracelet/soft-serve/server/db/models"
- "github.com/charmbracelet/soft-serve/server/lfs"
- "github.com/charmbracelet/soft-serve/server/proto"
- "github.com/charmbracelet/soft-serve/server/storage"
- "github.com/charmbracelet/soft-serve/server/store"
+ "github.com/charmbracelet/soft-serve/pkg/config"
+ "github.com/charmbracelet/soft-serve/pkg/db"
+ "github.com/charmbracelet/soft-serve/pkg/db/models"
+ "github.com/charmbracelet/soft-serve/pkg/lfs"
+ "github.com/charmbracelet/soft-serve/pkg/proto"
+ "github.com/charmbracelet/soft-serve/pkg/storage"
+ "github.com/charmbracelet/soft-serve/pkg/store"
"github.com/rubyist/tracerx"
)
@@ -8,10 +8,10 @@ import (
"time"
"github.com/charmbracelet/log"
- "github.com/charmbracelet/soft-serve/server/config"
- "github.com/charmbracelet/soft-serve/server/jwk"
- "github.com/charmbracelet/soft-serve/server/lfs"
- "github.com/charmbracelet/soft-serve/server/proto"
+ "github.com/charmbracelet/soft-serve/pkg/config"
+ "github.com/charmbracelet/soft-serve/pkg/jwk"
+ "github.com/charmbracelet/soft-serve/pkg/lfs"
+ "github.com/charmbracelet/soft-serve/pkg/proto"
"github.com/golang-jwt/jwt/v5"
)
@@ -9,8 +9,8 @@ import (
"text/template"
"github.com/charmbracelet/log"
- "github.com/charmbracelet/soft-serve/server/config"
- "github.com/charmbracelet/soft-serve/server/utils"
+ "github.com/charmbracelet/soft-serve/pkg/config"
+ "github.com/charmbracelet/soft-serve/pkg/utils"
)
// The names of git server-side hooks.
@@ -8,12 +8,12 @@ import (
"github.com/charmbracelet/log"
"github.com/charmbracelet/soft-serve/git"
- "github.com/charmbracelet/soft-serve/server/backend"
- "github.com/charmbracelet/soft-serve/server/config"
- "github.com/charmbracelet/soft-serve/server/db"
- "github.com/charmbracelet/soft-serve/server/lfs"
- "github.com/charmbracelet/soft-serve/server/store"
- "github.com/charmbracelet/soft-serve/server/sync"
+ "github.com/charmbracelet/soft-serve/pkg/backend"
+ "github.com/charmbracelet/soft-serve/pkg/config"
+ "github.com/charmbracelet/soft-serve/pkg/db"
+ "github.com/charmbracelet/soft-serve/pkg/lfs"
+ "github.com/charmbracelet/soft-serve/pkg/store"
+ "github.com/charmbracelet/soft-serve/pkg/sync"
)
func init() {
@@ -5,7 +5,7 @@ import (
"crypto/sha256"
"fmt"
- "github.com/charmbracelet/soft-serve/server/config"
+ "github.com/charmbracelet/soft-serve/pkg/config"
"github.com/go-jose/go-jose/v3"
"github.com/golang-jwt/jwt/v5"
)
@@ -6,7 +6,7 @@ import (
"time"
"github.com/charmbracelet/log"
- "github.com/charmbracelet/soft-serve/server/config"
+ "github.com/charmbracelet/soft-serve/pkg/config"
)
// NewLogger returns a new logger with default settings.
@@ -4,9 +4,9 @@ import (
"fmt"
"github.com/charmbracelet/soft-serve/git"
- "github.com/charmbracelet/soft-serve/server/backend"
- "github.com/charmbracelet/soft-serve/server/ui/common"
- "github.com/charmbracelet/soft-serve/server/ui/styles"
+ "github.com/charmbracelet/soft-serve/pkg/backend"
+ "github.com/charmbracelet/soft-serve/pkg/ui/common"
+ "github.com/charmbracelet/soft-serve/pkg/ui/styles"
"github.com/spf13/cobra"
)
@@ -5,9 +5,9 @@ import (
"strings"
"github.com/charmbracelet/soft-serve/git"
- "github.com/charmbracelet/soft-serve/server/backend"
- "github.com/charmbracelet/soft-serve/server/proto"
- "github.com/charmbracelet/soft-serve/server/webhook"
+ "github.com/charmbracelet/soft-serve/pkg/backend"
+ "github.com/charmbracelet/soft-serve/pkg/proto"
+ "github.com/charmbracelet/soft-serve/pkg/webhook"
gitm "github.com/gogs/git-module"
"github.com/spf13/cobra"
)
@@ -7,12 +7,12 @@ import (
"text/template"
"unicode"
- "github.com/charmbracelet/soft-serve/server/access"
- "github.com/charmbracelet/soft-serve/server/backend"
- "github.com/charmbracelet/soft-serve/server/config"
- "github.com/charmbracelet/soft-serve/server/proto"
- "github.com/charmbracelet/soft-serve/server/sshutils"
- "github.com/charmbracelet/soft-serve/server/utils"
+ "github.com/charmbracelet/soft-serve/pkg/access"
+ "github.com/charmbracelet/soft-serve/pkg/backend"
+ "github.com/charmbracelet/soft-serve/pkg/config"
+ "github.com/charmbracelet/soft-serve/pkg/proto"
+ "github.com/charmbracelet/soft-serve/pkg/sshutils"
+ "github.com/charmbracelet/soft-serve/pkg/utils"
"github.com/charmbracelet/ssh"
"github.com/spf13/cobra"
)
@@ -1,8 +1,8 @@
package cmd
import (
- "github.com/charmbracelet/soft-serve/server/access"
- "github.com/charmbracelet/soft-serve/server/backend"
+ "github.com/charmbracelet/soft-serve/pkg/access"
+ "github.com/charmbracelet/soft-serve/pkg/backend"
"github.com/spf13/cobra"
)
@@ -7,9 +7,9 @@ import (
gansi "github.com/charmbracelet/glamour/ansi"
"github.com/charmbracelet/soft-serve/git"
- "github.com/charmbracelet/soft-serve/server/backend"
- "github.com/charmbracelet/soft-serve/server/ui/common"
- "github.com/charmbracelet/soft-serve/server/ui/styles"
+ "github.com/charmbracelet/soft-serve/pkg/backend"
+ "github.com/charmbracelet/soft-serve/pkg/ui/common"
+ "github.com/charmbracelet/soft-serve/pkg/ui/styles"
"github.com/muesli/termenv"
"github.com/spf13/cobra"
)
@@ -3,9 +3,9 @@ package cmd
import (
"fmt"
- "github.com/charmbracelet/soft-serve/server/backend"
- "github.com/charmbracelet/soft-serve/server/config"
- "github.com/charmbracelet/soft-serve/server/proto"
+ "github.com/charmbracelet/soft-serve/pkg/backend"
+ "github.com/charmbracelet/soft-serve/pkg/config"
+ "github.com/charmbracelet/soft-serve/pkg/proto"
"github.com/spf13/cobra"
)
@@ -1,7 +1,7 @@
package cmd
import (
- "github.com/charmbracelet/soft-serve/server/backend"
+ "github.com/charmbracelet/soft-serve/pkg/backend"
"github.com/spf13/cobra"
)
@@ -3,7 +3,7 @@ package cmd
import (
"strings"
- "github.com/charmbracelet/soft-serve/server/backend"
+ "github.com/charmbracelet/soft-serve/pkg/backend"
"github.com/spf13/cobra"
)
@@ -6,14 +6,14 @@ import (
"time"
"github.com/charmbracelet/log"
- "github.com/charmbracelet/soft-serve/server/access"
- "github.com/charmbracelet/soft-serve/server/backend"
- "github.com/charmbracelet/soft-serve/server/config"
- "github.com/charmbracelet/soft-serve/server/git"
- "github.com/charmbracelet/soft-serve/server/lfs"
- "github.com/charmbracelet/soft-serve/server/proto"
- "github.com/charmbracelet/soft-serve/server/sshutils"
- "github.com/charmbracelet/soft-serve/server/utils"
+ "github.com/charmbracelet/soft-serve/pkg/access"
+ "github.com/charmbracelet/soft-serve/pkg/backend"
+ "github.com/charmbracelet/soft-serve/pkg/config"
+ "github.com/charmbracelet/soft-serve/pkg/git"
+ "github.com/charmbracelet/soft-serve/pkg/lfs"
+ "github.com/charmbracelet/soft-serve/pkg/proto"
+ "github.com/charmbracelet/soft-serve/pkg/sshutils"
+ "github.com/charmbracelet/soft-serve/pkg/utils"
"github.com/prometheus/client_golang/prometheus"
"github.com/prometheus/client_golang/prometheus/promauto"
"github.com/spf13/cobra"
@@ -1,7 +1,7 @@
package cmd
import (
- "github.com/charmbracelet/soft-serve/server/backend"
+ "github.com/charmbracelet/soft-serve/pkg/backend"
"github.com/spf13/cobra"
)
@@ -3,9 +3,9 @@ package cmd
import (
"errors"
- "github.com/charmbracelet/soft-serve/server/backend"
- "github.com/charmbracelet/soft-serve/server/proto"
- "github.com/charmbracelet/soft-serve/server/task"
+ "github.com/charmbracelet/soft-serve/pkg/backend"
+ "github.com/charmbracelet/soft-serve/pkg/proto"
+ "github.com/charmbracelet/soft-serve/pkg/task"
"github.com/spf13/cobra"
)
@@ -1,8 +1,8 @@
package cmd
import (
- "github.com/charmbracelet/soft-serve/server/backend"
- "github.com/charmbracelet/soft-serve/server/sshutils"
+ "github.com/charmbracelet/soft-serve/pkg/backend"
+ "github.com/charmbracelet/soft-serve/pkg/sshutils"
"github.com/spf13/cobra"
)
@@ -4,9 +4,9 @@ import (
"fmt"
"time"
- "github.com/charmbracelet/soft-serve/server/config"
- "github.com/charmbracelet/soft-serve/server/jwk"
- "github.com/charmbracelet/soft-serve/server/proto"
+ "github.com/charmbracelet/soft-serve/pkg/config"
+ "github.com/charmbracelet/soft-serve/pkg/jwk"
+ "github.com/charmbracelet/soft-serve/pkg/proto"
"github.com/golang-jwt/jwt/v5"
"github.com/spf13/cobra"
)
@@ -1,9 +1,9 @@
package cmd
import (
- "github.com/charmbracelet/soft-serve/server/access"
- "github.com/charmbracelet/soft-serve/server/backend"
- "github.com/charmbracelet/soft-serve/server/sshutils"
+ "github.com/charmbracelet/soft-serve/pkg/access"
+ "github.com/charmbracelet/soft-serve/pkg/backend"
+ "github.com/charmbracelet/soft-serve/pkg/sshutils"
"github.com/spf13/cobra"
)
@@ -1,7 +1,7 @@
package cmd
import (
- "github.com/charmbracelet/soft-serve/server/backend"
+ "github.com/charmbracelet/soft-serve/pkg/backend"
"github.com/spf13/cobra"
)
@@ -4,7 +4,7 @@ import (
"strconv"
"strings"
- "github.com/charmbracelet/soft-serve/server/backend"
+ "github.com/charmbracelet/soft-serve/pkg/backend"
"github.com/spf13/cobra"
)
@@ -3,7 +3,7 @@ package cmd
import (
"strings"
- "github.com/charmbracelet/soft-serve/server/backend"
+ "github.com/charmbracelet/soft-serve/pkg/backend"
"github.com/spf13/cobra"
)
@@ -3,8 +3,8 @@ package cmd
import (
"strings"
- "github.com/charmbracelet/soft-serve/server/backend"
- "github.com/charmbracelet/soft-serve/server/sshutils"
+ "github.com/charmbracelet/soft-serve/pkg/backend"
+ "github.com/charmbracelet/soft-serve/pkg/sshutils"
"github.com/spf13/cobra"
)
@@ -1,7 +1,7 @@
package cmd
import (
- "github.com/charmbracelet/soft-serve/server/backend"
+ "github.com/charmbracelet/soft-serve/pkg/backend"
"github.com/spf13/cobra"
)
@@ -4,8 +4,8 @@ import (
"fmt"
"strings"
- "github.com/charmbracelet/soft-serve/server/backend"
- "github.com/charmbracelet/soft-serve/server/proto"
+ "github.com/charmbracelet/soft-serve/pkg/backend"
+ "github.com/charmbracelet/soft-serve/pkg/proto"
"github.com/spf13/cobra"
)
@@ -1,8 +1,8 @@
package cmd
import (
- "github.com/charmbracelet/soft-serve/server/backend"
- "github.com/charmbracelet/soft-serve/server/sshutils"
+ "github.com/charmbracelet/soft-serve/pkg/backend"
+ "github.com/charmbracelet/soft-serve/pkg/sshutils"
"github.com/spf13/cobra"
)
@@ -4,8 +4,8 @@ import (
"fmt"
"strconv"
- "github.com/charmbracelet/soft-serve/server/access"
- "github.com/charmbracelet/soft-serve/server/backend"
+ "github.com/charmbracelet/soft-serve/pkg/access"
+ "github.com/charmbracelet/soft-serve/pkg/backend"
"github.com/spf13/cobra"
)
@@ -5,9 +5,9 @@ import (
"github.com/charmbracelet/log"
"github.com/charmbracelet/soft-serve/git"
- "github.com/charmbracelet/soft-serve/server/backend"
- "github.com/charmbracelet/soft-serve/server/proto"
- "github.com/charmbracelet/soft-serve/server/webhook"
+ "github.com/charmbracelet/soft-serve/pkg/backend"
+ "github.com/charmbracelet/soft-serve/pkg/proto"
+ "github.com/charmbracelet/soft-serve/pkg/webhook"
"github.com/spf13/cobra"
)
@@ -7,8 +7,8 @@ import (
"github.com/caarlos0/duration"
"github.com/caarlos0/tablewriter"
- "github.com/charmbracelet/soft-serve/server/backend"
- "github.com/charmbracelet/soft-serve/server/proto"
+ "github.com/charmbracelet/soft-serve/pkg/backend"
+ "github.com/charmbracelet/soft-serve/pkg/proto"
"github.com/dustin/go-humanize"
"github.com/spf13/cobra"
)
@@ -4,8 +4,8 @@ import (
"fmt"
"github.com/charmbracelet/soft-serve/git"
- "github.com/charmbracelet/soft-serve/server/backend"
- "github.com/charmbracelet/soft-serve/server/proto"
+ "github.com/charmbracelet/soft-serve/pkg/backend"
+ "github.com/charmbracelet/soft-serve/pkg/proto"
"github.com/dustin/go-humanize"
"github.com/spf13/cobra"
)
@@ -4,9 +4,9 @@ import (
"sort"
"strings"
- "github.com/charmbracelet/soft-serve/server/backend"
- "github.com/charmbracelet/soft-serve/server/proto"
- "github.com/charmbracelet/soft-serve/server/sshutils"
+ "github.com/charmbracelet/soft-serve/pkg/backend"
+ "github.com/charmbracelet/soft-serve/pkg/proto"
+ "github.com/charmbracelet/soft-serve/pkg/sshutils"
"github.com/spf13/cobra"
"golang.org/x/crypto/ssh"
)
@@ -6,8 +6,8 @@ import (
"strings"
"github.com/caarlos0/tablewriter"
- "github.com/charmbracelet/soft-serve/server/backend"
- "github.com/charmbracelet/soft-serve/server/webhook"
+ "github.com/charmbracelet/soft-serve/pkg/backend"
+ "github.com/charmbracelet/soft-serve/pkg/webhook"
"github.com/dustin/go-humanize"
"github.com/google/uuid"
"github.com/spf13/cobra"
@@ -5,13 +5,13 @@ import (
"time"
"github.com/charmbracelet/log"
- "github.com/charmbracelet/soft-serve/server/backend"
- "github.com/charmbracelet/soft-serve/server/config"
- "github.com/charmbracelet/soft-serve/server/db"
- "github.com/charmbracelet/soft-serve/server/proto"
- "github.com/charmbracelet/soft-serve/server/ssh/cmd"
- "github.com/charmbracelet/soft-serve/server/sshutils"
- "github.com/charmbracelet/soft-serve/server/store"
+ "github.com/charmbracelet/soft-serve/pkg/backend"
+ "github.com/charmbracelet/soft-serve/pkg/config"
+ "github.com/charmbracelet/soft-serve/pkg/db"
+ "github.com/charmbracelet/soft-serve/pkg/proto"
+ "github.com/charmbracelet/soft-serve/pkg/ssh/cmd"
+ "github.com/charmbracelet/soft-serve/pkg/sshutils"
+ "github.com/charmbracelet/soft-serve/pkg/store"
"github.com/charmbracelet/ssh"
"github.com/charmbracelet/wish"
"github.com/prometheus/client_golang/prometheus"
@@ -5,11 +5,11 @@ import (
"time"
tea "github.com/charmbracelet/bubbletea"
- "github.com/charmbracelet/soft-serve/server/access"
- "github.com/charmbracelet/soft-serve/server/backend"
- "github.com/charmbracelet/soft-serve/server/config"
- "github.com/charmbracelet/soft-serve/server/proto"
- "github.com/charmbracelet/soft-serve/server/ui/common"
+ "github.com/charmbracelet/soft-serve/pkg/access"
+ "github.com/charmbracelet/soft-serve/pkg/backend"
+ "github.com/charmbracelet/soft-serve/pkg/config"
+ "github.com/charmbracelet/soft-serve/pkg/proto"
+ "github.com/charmbracelet/soft-serve/pkg/ui/common"
"github.com/charmbracelet/ssh"
"github.com/charmbracelet/wish"
"github.com/muesli/termenv"
@@ -9,13 +9,13 @@ import (
"time"
"github.com/charmbracelet/log"
- "github.com/charmbracelet/soft-serve/server/backend"
- "github.com/charmbracelet/soft-serve/server/config"
- "github.com/charmbracelet/soft-serve/server/db"
- "github.com/charmbracelet/soft-serve/server/db/migrate"
- "github.com/charmbracelet/soft-serve/server/store"
- "github.com/charmbracelet/soft-serve/server/store/database"
- "github.com/charmbracelet/soft-serve/server/test"
+ "github.com/charmbracelet/soft-serve/pkg/backend"
+ "github.com/charmbracelet/soft-serve/pkg/config"
+ "github.com/charmbracelet/soft-serve/pkg/db"
+ "github.com/charmbracelet/soft-serve/pkg/db/migrate"
+ "github.com/charmbracelet/soft-serve/pkg/store"
+ "github.com/charmbracelet/soft-serve/pkg/store/database"
+ "github.com/charmbracelet/soft-serve/pkg/test"
"github.com/charmbracelet/ssh"
bm "github.com/charmbracelet/wish/bubbletea"
"github.com/charmbracelet/wish/testsession"
@@ -10,11 +10,11 @@ import (
"github.com/charmbracelet/keygen"
"github.com/charmbracelet/log"
- "github.com/charmbracelet/soft-serve/server/backend"
- "github.com/charmbracelet/soft-serve/server/config"
- "github.com/charmbracelet/soft-serve/server/db"
- "github.com/charmbracelet/soft-serve/server/proto"
- "github.com/charmbracelet/soft-serve/server/store"
+ "github.com/charmbracelet/soft-serve/pkg/backend"
+ "github.com/charmbracelet/soft-serve/pkg/config"
+ "github.com/charmbracelet/soft-serve/pkg/db"
+ "github.com/charmbracelet/soft-serve/pkg/proto"
+ "github.com/charmbracelet/soft-serve/pkg/store"
"github.com/charmbracelet/ssh"
"github.com/charmbracelet/wish"
bm "github.com/charmbracelet/wish/bubbletea"
@@ -8,13 +8,13 @@ import (
tea "github.com/charmbracelet/bubbletea"
"github.com/charmbracelet/lipgloss"
"github.com/charmbracelet/soft-serve/git"
- "github.com/charmbracelet/soft-serve/server/proto"
- "github.com/charmbracelet/soft-serve/server/ui/common"
- "github.com/charmbracelet/soft-serve/server/ui/components/footer"
- "github.com/charmbracelet/soft-serve/server/ui/components/header"
- "github.com/charmbracelet/soft-serve/server/ui/components/selector"
- "github.com/charmbracelet/soft-serve/server/ui/pages/repo"
- "github.com/charmbracelet/soft-serve/server/ui/pages/selection"
+ "github.com/charmbracelet/soft-serve/pkg/proto"
+ "github.com/charmbracelet/soft-serve/pkg/ui/common"
+ "github.com/charmbracelet/soft-serve/pkg/ui/components/footer"
+ "github.com/charmbracelet/soft-serve/pkg/ui/components/header"
+ "github.com/charmbracelet/soft-serve/pkg/ui/components/selector"
+ "github.com/charmbracelet/soft-serve/pkg/ui/pages/repo"
+ "github.com/charmbracelet/soft-serve/pkg/ui/pages/selection"
)
type page int
@@ -5,7 +5,7 @@ import (
"net/http"
"time"
- "github.com/charmbracelet/soft-serve/server/config"
+ "github.com/charmbracelet/soft-serve/pkg/config"
"github.com/prometheus/client_golang/prometheus/promhttp"
)
@@ -4,8 +4,8 @@ import (
"context"
"time"
- "github.com/charmbracelet/soft-serve/server/db"
- "github.com/charmbracelet/soft-serve/server/db/models"
+ "github.com/charmbracelet/soft-serve/pkg/db"
+ "github.com/charmbracelet/soft-serve/pkg/db/models"
)
// AccessTokenStore is an interface for managing access tokens.
@@ -3,9 +3,9 @@ package store
import (
"context"
- "github.com/charmbracelet/soft-serve/server/access"
- "github.com/charmbracelet/soft-serve/server/db"
- "github.com/charmbracelet/soft-serve/server/db/models"
+ "github.com/charmbracelet/soft-serve/pkg/access"
+ "github.com/charmbracelet/soft-serve/pkg/db"
+ "github.com/charmbracelet/soft-serve/pkg/db/models"
)
// CollaboratorStore is an interface for managing collaborators.
@@ -4,9 +4,9 @@ import (
"context"
"time"
- "github.com/charmbracelet/soft-serve/server/db"
- "github.com/charmbracelet/soft-serve/server/db/models"
- "github.com/charmbracelet/soft-serve/server/store"
+ "github.com/charmbracelet/soft-serve/pkg/db"
+ "github.com/charmbracelet/soft-serve/pkg/db/models"
+ "github.com/charmbracelet/soft-serve/pkg/store"
)
type accessTokenStore struct{}
@@ -4,11 +4,11 @@ import (
"context"
"strings"
- "github.com/charmbracelet/soft-serve/server/access"
- "github.com/charmbracelet/soft-serve/server/db"
- "github.com/charmbracelet/soft-serve/server/db/models"
- "github.com/charmbracelet/soft-serve/server/store"
- "github.com/charmbracelet/soft-serve/server/utils"
+ "github.com/charmbracelet/soft-serve/pkg/access"
+ "github.com/charmbracelet/soft-serve/pkg/db"
+ "github.com/charmbracelet/soft-serve/pkg/db/models"
+ "github.com/charmbracelet/soft-serve/pkg/store"
+ "github.com/charmbracelet/soft-serve/pkg/utils"
)
type collabStore struct{}
@@ -4,9 +4,9 @@ import (
"context"
"github.com/charmbracelet/log"
- "github.com/charmbracelet/soft-serve/server/config"
- "github.com/charmbracelet/soft-serve/server/db"
- "github.com/charmbracelet/soft-serve/server/store"
+ "github.com/charmbracelet/soft-serve/pkg/config"
+ "github.com/charmbracelet/soft-serve/pkg/db"
+ "github.com/charmbracelet/soft-serve/pkg/store"
)
type datastore struct {
@@ -4,9 +4,9 @@ import (
"context"
"strings"
- "github.com/charmbracelet/soft-serve/server/db"
- "github.com/charmbracelet/soft-serve/server/db/models"
- "github.com/charmbracelet/soft-serve/server/store"
+ "github.com/charmbracelet/soft-serve/pkg/db"
+ "github.com/charmbracelet/soft-serve/pkg/db/models"
+ "github.com/charmbracelet/soft-serve/pkg/store"
)
type lfsStore struct{}
@@ -3,10 +3,10 @@ package database
import (
"context"
- "github.com/charmbracelet/soft-serve/server/db"
- "github.com/charmbracelet/soft-serve/server/db/models"
- "github.com/charmbracelet/soft-serve/server/store"
- "github.com/charmbracelet/soft-serve/server/utils"
+ "github.com/charmbracelet/soft-serve/pkg/db"
+ "github.com/charmbracelet/soft-serve/pkg/db/models"
+ "github.com/charmbracelet/soft-serve/pkg/store"
+ "github.com/charmbracelet/soft-serve/pkg/utils"
)
type repoStore struct{}
@@ -3,9 +3,9 @@ package database
import (
"context"
- "github.com/charmbracelet/soft-serve/server/access"
- "github.com/charmbracelet/soft-serve/server/db"
- "github.com/charmbracelet/soft-serve/server/store"
+ "github.com/charmbracelet/soft-serve/pkg/access"
+ "github.com/charmbracelet/soft-serve/pkg/db"
+ "github.com/charmbracelet/soft-serve/pkg/store"
)
type settingsStore struct{}
@@ -4,11 +4,11 @@ import (
"context"
"strings"
- "github.com/charmbracelet/soft-serve/server/db"
- "github.com/charmbracelet/soft-serve/server/db/models"
- "github.com/charmbracelet/soft-serve/server/sshutils"
- "github.com/charmbracelet/soft-serve/server/store"
- "github.com/charmbracelet/soft-serve/server/utils"
+ "github.com/charmbracelet/soft-serve/pkg/db"
+ "github.com/charmbracelet/soft-serve/pkg/db/models"
+ "github.com/charmbracelet/soft-serve/pkg/sshutils"
+ "github.com/charmbracelet/soft-serve/pkg/store"
+ "github.com/charmbracelet/soft-serve/pkg/utils"
"golang.org/x/crypto/ssh"
)
@@ -3,9 +3,9 @@ package database
import (
"context"
- "github.com/charmbracelet/soft-serve/server/db"
- "github.com/charmbracelet/soft-serve/server/db/models"
- "github.com/charmbracelet/soft-serve/server/store"
+ "github.com/charmbracelet/soft-serve/pkg/db"
+ "github.com/charmbracelet/soft-serve/pkg/db/models"
+ "github.com/charmbracelet/soft-serve/pkg/store"
"github.com/google/uuid"
"github.com/jmoiron/sqlx"
)
@@ -3,8 +3,8 @@ package store
import (
"context"
- "github.com/charmbracelet/soft-serve/server/db"
- "github.com/charmbracelet/soft-serve/server/db/models"
+ "github.com/charmbracelet/soft-serve/pkg/db"
+ "github.com/charmbracelet/soft-serve/pkg/db/models"
)
// LFSStore is the interface for the LFS store.
@@ -3,8 +3,8 @@ package store
import (
"context"
- "github.com/charmbracelet/soft-serve/server/db"
- "github.com/charmbracelet/soft-serve/server/db/models"
+ "github.com/charmbracelet/soft-serve/pkg/db"
+ "github.com/charmbracelet/soft-serve/pkg/db/models"
)
// RepositoryStore is an interface for managing repositories.
@@ -3,8 +3,8 @@ package store
import (
"context"
- "github.com/charmbracelet/soft-serve/server/access"
- "github.com/charmbracelet/soft-serve/server/db"
+ "github.com/charmbracelet/soft-serve/pkg/access"
+ "github.com/charmbracelet/soft-serve/pkg/db"
)
// SettingStore is an interface for managing settings.
@@ -3,8 +3,8 @@ package store
import (
"context"
- "github.com/charmbracelet/soft-serve/server/db"
- "github.com/charmbracelet/soft-serve/server/db/models"
+ "github.com/charmbracelet/soft-serve/pkg/db"
+ "github.com/charmbracelet/soft-serve/pkg/db/models"
"golang.org/x/crypto/ssh"
)
@@ -3,8 +3,8 @@ package store
import (
"context"
- "github.com/charmbracelet/soft-serve/server/db"
- "github.com/charmbracelet/soft-serve/server/db/models"
+ "github.com/charmbracelet/soft-serve/pkg/db"
+ "github.com/charmbracelet/soft-serve/pkg/db/models"
"github.com/google/uuid"
)
@@ -5,10 +5,10 @@ import (
"github.com/charmbracelet/log"
"github.com/charmbracelet/soft-serve/git"
- "github.com/charmbracelet/soft-serve/server/backend"
- "github.com/charmbracelet/soft-serve/server/config"
- "github.com/charmbracelet/soft-serve/server/ui/keymap"
- "github.com/charmbracelet/soft-serve/server/ui/styles"
+ "github.com/charmbracelet/soft-serve/pkg/backend"
+ "github.com/charmbracelet/soft-serve/pkg/config"
+ "github.com/charmbracelet/soft-serve/pkg/ui/keymap"
+ "github.com/charmbracelet/soft-serve/pkg/ui/styles"
"github.com/charmbracelet/ssh"
zone "github.com/lrstanley/bubblezone"
"github.com/muesli/termenv"
@@ -6,7 +6,7 @@ import (
"github.com/alecthomas/chroma/lexers"
gansi "github.com/charmbracelet/glamour/ansi"
- "github.com/charmbracelet/soft-serve/server/ui/styles"
+ "github.com/charmbracelet/soft-serve/pkg/ui/styles"
"github.com/muesli/termenv"
)
@@ -4,7 +4,7 @@ import (
"fmt"
"net/url"
- "github.com/charmbracelet/soft-serve/server/utils"
+ "github.com/charmbracelet/soft-serve/pkg/utils"
"github.com/muesli/reflow/truncate"
)
@@ -10,8 +10,8 @@ import (
"github.com/charmbracelet/glamour"
gansi "github.com/charmbracelet/glamour/ansi"
"github.com/charmbracelet/lipgloss"
- "github.com/charmbracelet/soft-serve/server/ui/common"
- vp "github.com/charmbracelet/soft-serve/server/ui/components/viewport"
+ "github.com/charmbracelet/soft-serve/pkg/ui/common"
+ vp "github.com/charmbracelet/soft-serve/pkg/ui/components/viewport"
"github.com/muesli/termenv"
)
@@ -5,7 +5,7 @@ import (
"github.com/charmbracelet/bubbles/key"
tea "github.com/charmbracelet/bubbletea"
"github.com/charmbracelet/lipgloss"
- "github.com/charmbracelet/soft-serve/server/ui/common"
+ "github.com/charmbracelet/soft-serve/pkg/ui/common"
)
// ToggleFooterMsg is a message sent to show/hide the footer.
@@ -4,7 +4,7 @@ import (
"strings"
tea "github.com/charmbracelet/bubbletea"
- "github.com/charmbracelet/soft-serve/server/ui/common"
+ "github.com/charmbracelet/soft-serve/pkg/ui/common"
)
// Header represents a header component.
@@ -6,7 +6,7 @@ import (
"github.com/charmbracelet/bubbles/key"
"github.com/charmbracelet/bubbles/list"
tea "github.com/charmbracelet/bubbletea"
- "github.com/charmbracelet/soft-serve/server/ui/common"
+ "github.com/charmbracelet/soft-serve/pkg/ui/common"
)
// Selector is a list of items that can be selected.
@@ -3,7 +3,7 @@ package statusbar
import (
tea "github.com/charmbracelet/bubbletea"
"github.com/charmbracelet/lipgloss"
- "github.com/charmbracelet/soft-serve/server/ui/common"
+ "github.com/charmbracelet/soft-serve/pkg/ui/common"
"github.com/muesli/reflow/truncate"
)
@@ -5,7 +5,7 @@ import (
tea "github.com/charmbracelet/bubbletea"
"github.com/charmbracelet/lipgloss"
- "github.com/charmbracelet/soft-serve/server/ui/common"
+ "github.com/charmbracelet/soft-serve/pkg/ui/common"
)
// SelectTabMsg is a message that contains the index of the tab to select.
@@ -4,7 +4,7 @@ import (
"github.com/charmbracelet/bubbles/key"
"github.com/charmbracelet/bubbles/viewport"
tea "github.com/charmbracelet/bubbletea"
- "github.com/charmbracelet/soft-serve/server/ui/common"
+ "github.com/charmbracelet/soft-serve/pkg/ui/common"
)
// Viewport represents a viewport component.
@@ -3,8 +3,8 @@ package repo
import (
"fmt"
- "github.com/charmbracelet/soft-serve/server/config"
- "github.com/charmbracelet/soft-serve/server/ui/common"
+ "github.com/charmbracelet/soft-serve/pkg/config"
+ "github.com/charmbracelet/soft-serve/pkg/ui/common"
)
func defaultEmptyRepoMsg(cfg *config.Config, repo string) string {
@@ -11,10 +11,10 @@ import (
"github.com/charmbracelet/bubbles/spinner"
tea "github.com/charmbracelet/bubbletea"
"github.com/charmbracelet/soft-serve/git"
- "github.com/charmbracelet/soft-serve/server/proto"
- "github.com/charmbracelet/soft-serve/server/ui/common"
- "github.com/charmbracelet/soft-serve/server/ui/components/code"
- "github.com/charmbracelet/soft-serve/server/ui/components/selector"
+ "github.com/charmbracelet/soft-serve/pkg/proto"
+ "github.com/charmbracelet/soft-serve/pkg/ui/common"
+ "github.com/charmbracelet/soft-serve/pkg/ui/components/code"
+ "github.com/charmbracelet/soft-serve/pkg/ui/components/selector"
gitm "github.com/gogs/git-module"
)
@@ -11,7 +11,7 @@ import (
tea "github.com/charmbracelet/bubbletea"
"github.com/charmbracelet/lipgloss"
"github.com/charmbracelet/soft-serve/git"
- "github.com/charmbracelet/soft-serve/server/ui/common"
+ "github.com/charmbracelet/soft-serve/pkg/ui/common"
"github.com/dustin/go-humanize"
)
@@ -11,12 +11,12 @@ import (
gansi "github.com/charmbracelet/glamour/ansi"
"github.com/charmbracelet/lipgloss"
"github.com/charmbracelet/soft-serve/git"
- "github.com/charmbracelet/soft-serve/server/proto"
- "github.com/charmbracelet/soft-serve/server/ui/common"
- "github.com/charmbracelet/soft-serve/server/ui/components/footer"
- "github.com/charmbracelet/soft-serve/server/ui/components/selector"
- "github.com/charmbracelet/soft-serve/server/ui/components/viewport"
- "github.com/charmbracelet/soft-serve/server/ui/styles"
+ "github.com/charmbracelet/soft-serve/pkg/proto"
+ "github.com/charmbracelet/soft-serve/pkg/ui/common"
+ "github.com/charmbracelet/soft-serve/pkg/ui/components/footer"
+ "github.com/charmbracelet/soft-serve/pkg/ui/components/selector"
+ "github.com/charmbracelet/soft-serve/pkg/ui/components/viewport"
+ "github.com/charmbracelet/soft-serve/pkg/ui/styles"
"github.com/muesli/reflow/wrap"
"github.com/muesli/termenv"
)
@@ -11,7 +11,7 @@ import (
tea "github.com/charmbracelet/bubbletea"
"github.com/charmbracelet/lipgloss"
"github.com/charmbracelet/soft-serve/git"
- "github.com/charmbracelet/soft-serve/server/ui/common"
+ "github.com/charmbracelet/soft-serve/pkg/ui/common"
"github.com/muesli/reflow/truncate"
)
@@ -7,10 +7,10 @@ import (
"github.com/charmbracelet/bubbles/key"
"github.com/charmbracelet/bubbles/spinner"
tea "github.com/charmbracelet/bubbletea"
- "github.com/charmbracelet/soft-serve/server/backend"
- "github.com/charmbracelet/soft-serve/server/proto"
- "github.com/charmbracelet/soft-serve/server/ui/common"
- "github.com/charmbracelet/soft-serve/server/ui/components/code"
+ "github.com/charmbracelet/soft-serve/pkg/backend"
+ "github.com/charmbracelet/soft-serve/pkg/proto"
+ "github.com/charmbracelet/soft-serve/pkg/ui/common"
+ "github.com/charmbracelet/soft-serve/pkg/ui/components/code"
)
// ReadmeMsg is a message sent when the readme is loaded.
@@ -9,9 +9,9 @@ import (
"github.com/charmbracelet/bubbles/spinner"
tea "github.com/charmbracelet/bubbletea"
"github.com/charmbracelet/soft-serve/git"
- "github.com/charmbracelet/soft-serve/server/proto"
- "github.com/charmbracelet/soft-serve/server/ui/common"
- "github.com/charmbracelet/soft-serve/server/ui/components/selector"
+ "github.com/charmbracelet/soft-serve/pkg/proto"
+ "github.com/charmbracelet/soft-serve/pkg/ui/common"
+ "github.com/charmbracelet/soft-serve/pkg/ui/components/selector"
)
// RefMsg is a message that contains a git.Reference.
@@ -11,7 +11,7 @@ import (
tea "github.com/charmbracelet/bubbletea"
"github.com/charmbracelet/lipgloss"
"github.com/charmbracelet/soft-serve/git"
- "github.com/charmbracelet/soft-serve/server/ui/common"
+ "github.com/charmbracelet/soft-serve/pkg/ui/common"
"github.com/dustin/go-humanize"
"github.com/muesli/reflow/truncate"
)
@@ -10,12 +10,12 @@ import (
tea "github.com/charmbracelet/bubbletea"
"github.com/charmbracelet/lipgloss"
"github.com/charmbracelet/soft-serve/git"
- "github.com/charmbracelet/soft-serve/server/proto"
- "github.com/charmbracelet/soft-serve/server/ui/common"
- "github.com/charmbracelet/soft-serve/server/ui/components/footer"
- "github.com/charmbracelet/soft-serve/server/ui/components/selector"
- "github.com/charmbracelet/soft-serve/server/ui/components/statusbar"
- "github.com/charmbracelet/soft-serve/server/ui/components/tabs"
+ "github.com/charmbracelet/soft-serve/pkg/proto"
+ "github.com/charmbracelet/soft-serve/pkg/ui/common"
+ "github.com/charmbracelet/soft-serve/pkg/ui/components/footer"
+ "github.com/charmbracelet/soft-serve/pkg/ui/components/selector"
+ "github.com/charmbracelet/soft-serve/pkg/ui/components/statusbar"
+ "github.com/charmbracelet/soft-serve/pkg/ui/components/tabs"
)
type state int
@@ -8,10 +8,10 @@ import (
tea "github.com/charmbracelet/bubbletea"
"github.com/charmbracelet/lipgloss"
"github.com/charmbracelet/soft-serve/git"
- "github.com/charmbracelet/soft-serve/server/proto"
- "github.com/charmbracelet/soft-serve/server/ui/common"
- "github.com/charmbracelet/soft-serve/server/ui/components/code"
- "github.com/charmbracelet/soft-serve/server/ui/components/selector"
+ "github.com/charmbracelet/soft-serve/pkg/proto"
+ "github.com/charmbracelet/soft-serve/pkg/ui/common"
+ "github.com/charmbracelet/soft-serve/pkg/ui/components/code"
+ "github.com/charmbracelet/soft-serve/pkg/ui/components/selector"
gitm "github.com/gogs/git-module"
)
@@ -7,7 +7,7 @@ import (
"github.com/charmbracelet/bubbles/key"
"github.com/charmbracelet/bubbles/list"
tea "github.com/charmbracelet/bubbletea"
- "github.com/charmbracelet/soft-serve/server/ui/common"
+ "github.com/charmbracelet/soft-serve/pkg/ui/common"
gitm "github.com/gogs/git-module"
)
@@ -11,9 +11,9 @@ import (
"github.com/charmbracelet/bubbles/list"
tea "github.com/charmbracelet/bubbletea"
"github.com/charmbracelet/lipgloss"
- "github.com/charmbracelet/soft-serve/server/config"
- "github.com/charmbracelet/soft-serve/server/proto"
- "github.com/charmbracelet/soft-serve/server/ui/common"
+ "github.com/charmbracelet/soft-serve/pkg/config"
+ "github.com/charmbracelet/soft-serve/pkg/proto"
+ "github.com/charmbracelet/soft-serve/pkg/ui/common"
"github.com/dustin/go-humanize"
)
@@ -8,12 +8,12 @@ import (
"github.com/charmbracelet/bubbles/list"
tea "github.com/charmbracelet/bubbletea"
"github.com/charmbracelet/lipgloss"
- "github.com/charmbracelet/soft-serve/server/access"
- "github.com/charmbracelet/soft-serve/server/backend"
- "github.com/charmbracelet/soft-serve/server/ui/common"
- "github.com/charmbracelet/soft-serve/server/ui/components/code"
- "github.com/charmbracelet/soft-serve/server/ui/components/selector"
- "github.com/charmbracelet/soft-serve/server/ui/components/tabs"
+ "github.com/charmbracelet/soft-serve/pkg/access"
+ "github.com/charmbracelet/soft-serve/pkg/backend"
+ "github.com/charmbracelet/soft-serve/pkg/ui/common"
+ "github.com/charmbracelet/soft-serve/pkg/ui/components/code"
+ "github.com/charmbracelet/soft-serve/pkg/ui/components/selector"
+ "github.com/charmbracelet/soft-serve/pkg/ui/components/tabs"
)
const (
@@ -8,9 +8,9 @@ import (
"strings"
"github.com/charmbracelet/log"
- "github.com/charmbracelet/soft-serve/server/backend"
- "github.com/charmbracelet/soft-serve/server/config"
- "github.com/charmbracelet/soft-serve/server/proto"
+ "github.com/charmbracelet/soft-serve/pkg/backend"
+ "github.com/charmbracelet/soft-serve/pkg/config"
+ "github.com/charmbracelet/soft-serve/pkg/proto"
"github.com/golang-jwt/jwt/v5"
)
@@ -5,10 +5,10 @@ import (
"net/http"
"github.com/charmbracelet/log"
- "github.com/charmbracelet/soft-serve/server/backend"
- "github.com/charmbracelet/soft-serve/server/config"
- "github.com/charmbracelet/soft-serve/server/db"
- "github.com/charmbracelet/soft-serve/server/store"
+ "github.com/charmbracelet/soft-serve/pkg/backend"
+ "github.com/charmbracelet/soft-serve/pkg/config"
+ "github.com/charmbracelet/soft-serve/pkg/db"
+ "github.com/charmbracelet/soft-serve/pkg/store"
)
// NewContextHandler returns a new context middleware.
@@ -15,13 +15,13 @@ import (
"github.com/charmbracelet/log"
gitb "github.com/charmbracelet/soft-serve/git"
- "github.com/charmbracelet/soft-serve/server/access"
- "github.com/charmbracelet/soft-serve/server/backend"
- "github.com/charmbracelet/soft-serve/server/config"
- "github.com/charmbracelet/soft-serve/server/git"
- "github.com/charmbracelet/soft-serve/server/lfs"
- "github.com/charmbracelet/soft-serve/server/proto"
- "github.com/charmbracelet/soft-serve/server/utils"
+ "github.com/charmbracelet/soft-serve/pkg/access"
+ "github.com/charmbracelet/soft-serve/pkg/backend"
+ "github.com/charmbracelet/soft-serve/pkg/config"
+ "github.com/charmbracelet/soft-serve/pkg/git"
+ "github.com/charmbracelet/soft-serve/pkg/lfs"
+ "github.com/charmbracelet/soft-serve/pkg/proto"
+ "github.com/charmbracelet/soft-serve/pkg/utils"
"github.com/gorilla/mux"
"github.com/prometheus/client_golang/prometheus"
"github.com/prometheus/client_golang/prometheus/promauto"
@@ -14,15 +14,15 @@ import (
"strings"
"github.com/charmbracelet/log"
- "github.com/charmbracelet/soft-serve/server/access"
- "github.com/charmbracelet/soft-serve/server/backend"
- "github.com/charmbracelet/soft-serve/server/config"
- "github.com/charmbracelet/soft-serve/server/db"
- "github.com/charmbracelet/soft-serve/server/db/models"
- "github.com/charmbracelet/soft-serve/server/lfs"
- "github.com/charmbracelet/soft-serve/server/proto"
- "github.com/charmbracelet/soft-serve/server/storage"
- "github.com/charmbracelet/soft-serve/server/store"
+ "github.com/charmbracelet/soft-serve/pkg/access"
+ "github.com/charmbracelet/soft-serve/pkg/backend"
+ "github.com/charmbracelet/soft-serve/pkg/config"
+ "github.com/charmbracelet/soft-serve/pkg/db"
+ "github.com/charmbracelet/soft-serve/pkg/db/models"
+ "github.com/charmbracelet/soft-serve/pkg/lfs"
+ "github.com/charmbracelet/soft-serve/pkg/proto"
+ "github.com/charmbracelet/soft-serve/pkg/storage"
+ "github.com/charmbracelet/soft-serve/pkg/store"
"github.com/gorilla/mux"
)
@@ -7,9 +7,9 @@ import (
"text/template"
"github.com/charmbracelet/log"
- "github.com/charmbracelet/soft-serve/server/backend"
- "github.com/charmbracelet/soft-serve/server/config"
- "github.com/charmbracelet/soft-serve/server/utils"
+ "github.com/charmbracelet/soft-serve/pkg/backend"
+ "github.com/charmbracelet/soft-serve/pkg/config"
+ "github.com/charmbracelet/soft-serve/pkg/utils"
"github.com/gorilla/mux"
"github.com/prometheus/client_golang/prometheus"
"github.com/prometheus/client_golang/prometheus/promauto"
@@ -6,7 +6,7 @@ import (
"time"
"github.com/charmbracelet/log"
- "github.com/charmbracelet/soft-serve/server/config"
+ "github.com/charmbracelet/soft-serve/pkg/config"
)
// HTTPServer is an http server.
@@ -5,10 +5,10 @@ import (
"fmt"
"github.com/charmbracelet/soft-serve/git"
- "github.com/charmbracelet/soft-serve/server/config"
- "github.com/charmbracelet/soft-serve/server/db"
- "github.com/charmbracelet/soft-serve/server/proto"
- "github.com/charmbracelet/soft-serve/server/store"
+ "github.com/charmbracelet/soft-serve/pkg/config"
+ "github.com/charmbracelet/soft-serve/pkg/db"
+ "github.com/charmbracelet/soft-serve/pkg/proto"
+ "github.com/charmbracelet/soft-serve/pkg/store"
)
// BranchTagEvent is a branch or tag event.
@@ -3,10 +3,10 @@ package webhook
import (
"context"
- "github.com/charmbracelet/soft-serve/server/access"
- "github.com/charmbracelet/soft-serve/server/db"
- "github.com/charmbracelet/soft-serve/server/proto"
- "github.com/charmbracelet/soft-serve/server/store"
+ "github.com/charmbracelet/soft-serve/pkg/access"
+ "github.com/charmbracelet/soft-serve/pkg/db"
+ "github.com/charmbracelet/soft-serve/pkg/proto"
+ "github.com/charmbracelet/soft-serve/pkg/store"
)
// CollaboratorEvent is a collaborator event.
@@ -5,10 +5,10 @@ import (
"fmt"
"github.com/charmbracelet/soft-serve/git"
- "github.com/charmbracelet/soft-serve/server/config"
- "github.com/charmbracelet/soft-serve/server/db"
- "github.com/charmbracelet/soft-serve/server/proto"
- "github.com/charmbracelet/soft-serve/server/store"
+ "github.com/charmbracelet/soft-serve/pkg/config"
+ "github.com/charmbracelet/soft-serve/pkg/db"
+ "github.com/charmbracelet/soft-serve/pkg/proto"
+ "github.com/charmbracelet/soft-serve/pkg/store"
gitm "github.com/gogs/git-module"
)
@@ -3,10 +3,10 @@ package webhook
import (
"context"
- "github.com/charmbracelet/soft-serve/server/config"
- "github.com/charmbracelet/soft-serve/server/db"
- "github.com/charmbracelet/soft-serve/server/proto"
- "github.com/charmbracelet/soft-serve/server/store"
+ "github.com/charmbracelet/soft-serve/pkg/config"
+ "github.com/charmbracelet/soft-serve/pkg/db"
+ "github.com/charmbracelet/soft-serve/pkg/proto"
+ "github.com/charmbracelet/soft-serve/pkg/store"
)
// RepositoryEvent is a repository payload.
@@ -11,11 +11,11 @@ import (
"io"
"net/http"
- "github.com/charmbracelet/soft-serve/server/db"
- "github.com/charmbracelet/soft-serve/server/db/models"
- "github.com/charmbracelet/soft-serve/server/store"
- "github.com/charmbracelet/soft-serve/server/utils"
- "github.com/charmbracelet/soft-serve/server/version"
+ "github.com/charmbracelet/soft-serve/pkg/db"
+ "github.com/charmbracelet/soft-serve/pkg/db/models"
+ "github.com/charmbracelet/soft-serve/pkg/store"
+ "github.com/charmbracelet/soft-serve/pkg/utils"
+ "github.com/charmbracelet/soft-serve/pkg/version"
"github.com/google/go-querystring/query"
"github.com/google/uuid"
)
@@ -19,15 +19,15 @@ import (
"github.com/charmbracelet/keygen"
"github.com/charmbracelet/log"
- "github.com/charmbracelet/soft-serve/server"
- "github.com/charmbracelet/soft-serve/server/backend"
- "github.com/charmbracelet/soft-serve/server/config"
- "github.com/charmbracelet/soft-serve/server/db"
- "github.com/charmbracelet/soft-serve/server/db/migrate"
- logr "github.com/charmbracelet/soft-serve/server/log"
- "github.com/charmbracelet/soft-serve/server/store"
- "github.com/charmbracelet/soft-serve/server/store/database"
- "github.com/charmbracelet/soft-serve/server/test"
+ "github.com/charmbracelet/soft-serve/cmd/soft/serve"
+ "github.com/charmbracelet/soft-serve/pkg/backend"
+ "github.com/charmbracelet/soft-serve/pkg/config"
+ "github.com/charmbracelet/soft-serve/pkg/db"
+ "github.com/charmbracelet/soft-serve/pkg/db/migrate"
+ logr "github.com/charmbracelet/soft-serve/pkg/log"
+ "github.com/charmbracelet/soft-serve/pkg/store"
+ "github.com/charmbracelet/soft-serve/pkg/store/database"
+ "github.com/charmbracelet/soft-serve/pkg/test"
"github.com/rogpeppe/go-internal/testscript"
"github.com/spf13/cobra"
"golang.org/x/crypto/ssh"
@@ -153,7 +153,7 @@ func TestScript(t *testing.T) {
ctx = backend.WithContext(ctx, be)
lock.Lock()
- srv, err := server.NewServer(ctx)
+ srv, err := serve.NewServer(ctx)
if err != nil {
lock.Unlock()
return err