-
-
Notifications
You must be signed in to change notification settings - Fork 107
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Move Git hook logic to Opengist (#213)
- Loading branch information
Showing
16 changed files
with
407 additions
and
193 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,38 @@ | ||
package cli | ||
|
||
import ( | ||
"github.com/thomiceli/opengist/internal/hooks" | ||
"github.com/urfave/cli/v2" | ||
"os" | ||
) | ||
|
||
var CmdHook = cli.Command{ | ||
Name: "hook", | ||
Usage: "Run Git server hooks, used and should only be called by Opengist itself", | ||
Subcommands: []*cli.Command{ | ||
&CmdHookPreReceive, | ||
&CmdHookPostReceive, | ||
}, | ||
} | ||
|
||
var CmdHookPreReceive = cli.Command{ | ||
Name: "pre-receive", | ||
Usage: "Run Git server pre-receive hook for a repository", | ||
Action: func(ctx *cli.Context) error { | ||
if err := hooks.PreReceive(os.Stdin, os.Stdout, os.Stderr); err != nil { | ||
os.Exit(1) | ||
} | ||
return nil | ||
}, | ||
} | ||
|
||
var CmdHookPostReceive = cli.Command{ | ||
Name: "post-receive", | ||
Usage: "Run Git server post-receive hook for a repository", | ||
Action: func(ctx *cli.Context) error { | ||
if err := hooks.PostReceive(os.Stdin, os.Stdout, os.Stderr); err != nil { | ||
os.Exit(1) | ||
} | ||
return nil | ||
}, | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,131 @@ | ||
package cli | ||
|
||
import ( | ||
"fmt" | ||
"github.com/rs/zerolog/log" | ||
"github.com/thomiceli/opengist/internal/config" | ||
"github.com/thomiceli/opengist/internal/db" | ||
"github.com/thomiceli/opengist/internal/git" | ||
"github.com/thomiceli/opengist/internal/index" | ||
"github.com/thomiceli/opengist/internal/memdb" | ||
"github.com/thomiceli/opengist/internal/ssh" | ||
"github.com/thomiceli/opengist/internal/web" | ||
"github.com/urfave/cli/v2" | ||
"os" | ||
"path" | ||
"path/filepath" | ||
) | ||
|
||
var CmdVersion = cli.Command{ | ||
Name: "version", | ||
Usage: "Print the version of Opengist", | ||
Action: func(c *cli.Context) error { | ||
fmt.Println("Opengist v" + config.OpengistVersion) | ||
return nil | ||
}, | ||
} | ||
|
||
var CmdStart = cli.Command{ | ||
Name: "start", | ||
Usage: "Start Opengist server", | ||
Action: func(ctx *cli.Context) error { | ||
Initialize(ctx) | ||
go web.NewServer(os.Getenv("OG_DEV") == "1").Start() | ||
go ssh.Start() | ||
select {} | ||
}, | ||
} | ||
|
||
var ConfigFlag = cli.StringFlag{ | ||
Name: "config", | ||
Aliases: []string{"c"}, | ||
Usage: "Path to a config file in YAML format", | ||
} | ||
|
||
func App() error { | ||
app := cli.NewApp() | ||
app.Name = "Opengist" | ||
app.Usage = "A self-hosted pastebin powered by Git." | ||
app.HelpName = "opengist" | ||
|
||
app.Commands = []*cli.Command{&CmdVersion, &CmdStart, &CmdHook} | ||
app.DefaultCommand = CmdStart.Name | ||
app.Flags = []cli.Flag{ | ||
&ConfigFlag, | ||
} | ||
return app.Run(os.Args) | ||
} | ||
|
||
func Initialize(ctx *cli.Context) { | ||
fmt.Println("Opengist v" + config.OpengistVersion) | ||
|
||
if err := config.InitConfig(ctx.String("config")); err != nil { | ||
panic(err) | ||
} | ||
if err := os.MkdirAll(filepath.Join(config.GetHomeDir()), 0755); err != nil { | ||
panic(err) | ||
} | ||
|
||
config.InitLog() | ||
|
||
gitVersion, err := git.GetGitVersion() | ||
if err != nil { | ||
log.Fatal().Err(err).Send() | ||
} | ||
|
||
if ok, err := config.CheckGitVersion(gitVersion); err != nil { | ||
log.Fatal().Err(err).Send() | ||
} else if !ok { | ||
log.Warn().Msg("Git version may be too old, as Opengist has not been tested prior git version 2.28 and some features would not work. " + | ||
"Current git version: " + gitVersion) | ||
} | ||
|
||
homePath := config.GetHomeDir() | ||
log.Info().Msg("Data directory: " + homePath) | ||
|
||
if err := createSymlink(); err != nil { | ||
log.Fatal().Err(err).Send() | ||
} | ||
|
||
if err := os.MkdirAll(filepath.Join(homePath, "repos"), 0755); err != nil { | ||
log.Fatal().Err(err).Send() | ||
} | ||
if err := os.MkdirAll(filepath.Join(homePath, "tmp", "repos"), 0755); err != nil { | ||
log.Fatal().Err(err).Send() | ||
} | ||
if err := os.MkdirAll(filepath.Join(homePath, "custom"), 0755); err != nil { | ||
log.Fatal().Err(err).Send() | ||
} | ||
log.Info().Msg("Database file: " + filepath.Join(homePath, config.C.DBFilename)) | ||
if err := db.Setup(filepath.Join(homePath, config.C.DBFilename), false); err != nil { | ||
log.Fatal().Err(err).Msg("Failed to initialize database") | ||
} | ||
|
||
if err := memdb.Setup(); err != nil { | ||
log.Fatal().Err(err).Msg("Failed to initialize in memory database") | ||
} | ||
|
||
if config.C.IndexEnabled { | ||
log.Info().Msg("Index directory: " + filepath.Join(homePath, config.C.IndexDirname)) | ||
if err := index.Open(filepath.Join(homePath, config.C.IndexDirname)); err != nil { | ||
log.Fatal().Err(err).Msg("Failed to open index") | ||
} | ||
} | ||
} | ||
|
||
func createSymlink() error { | ||
exePath, err := os.Executable() | ||
if err != nil { | ||
return err | ||
} | ||
|
||
symlinkPath := path.Join(config.GetHomeDir(), "opengist-bin") | ||
|
||
if _, err := os.Lstat(symlinkPath); err == nil { | ||
if err := os.Remove(symlinkPath); err != nil { | ||
return err | ||
} | ||
} | ||
|
||
return os.Symlink(exePath, symlinkPath) | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.