Skip to content

Commit 89c950a

Browse files
committed
chore: quick update feat/genai at 2025-12-29 23:45:52
1 parent c2f77c6 commit 89c950a

File tree

41 files changed

+2527
-657
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

41 files changed

+2527
-657
lines changed

.goreleaser.yaml

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -13,10 +13,10 @@ builds:
1313
- "linux_amd64"
1414
- "linux_arm64"
1515
ldflags:
16-
- -X 'github.com/pubgo/funk/version.version=v{{ .Version }}'
17-
- -X 'github.com/pubgo/funk/version.project=fastcommit'
18-
- -X 'github.com/pubgo/funk/version.buildTime={{ .CommitDate }}'
19-
- -X 'github.com/pubgo/funk/version.commitID={{ .ShortCommit }}'
16+
- -X 'github.com/pubgo/funk/v2/buildinfo.version=v{{ .Version }}'
17+
- -X 'github.com/pubgo/funk/v2/buildinfo.project=fastcommit'
18+
- -X 'github.com/pubgo/funk/v2/buildinfo.buildTime={{ .CommitDate }}'
19+
- -X 'github.com/pubgo/funk/v2/buildinfo.commitID={{ .ShortCommit }}'
2020
flags:
2121
- -trimpath
2222
- -tags=releaser

.version

Lines changed: 0 additions & 1 deletion
This file was deleted.

.version/VERSION

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
v0.0.9

Makefile

Lines changed: 0 additions & 30 deletions
This file was deleted.

README.md

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,4 +9,3 @@ agentic git commit generate tool
99
- OPENAI_API_KEY
1010
- OPENAI_BASE_URL, default: https://api.deepseek.com/v1
1111
- OPENAI_MODEL, default: deepseek-chat
12-

bootstrap/boot.go

Lines changed: 65 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -1,44 +1,80 @@
11
package bootstrap
22

33
import (
4-
"log/slog"
4+
"context"
5+
"fmt"
6+
"os"
57

68
_ "github.com/adrg/xdg"
79
_ "github.com/charmbracelet/bubbletea"
8-
"github.com/pubgo/dix"
9-
"github.com/pubgo/funk/config"
10-
"github.com/pubgo/funk/log"
11-
"github.com/pubgo/funk/recovery"
12-
_ "github.com/sashabaranov/go-openai"
13-
10+
"github.com/charmbracelet/x/term"
11+
"github.com/pubgo/dix/v2"
12+
"github.com/pubgo/dix/v2/dixcontext"
1413
"github.com/pubgo/fastcommit/cmds/configcmd"
15-
"github.com/pubgo/fastcommit/cmds/envcmd"
16-
"github.com/pubgo/fastcommit/cmds/fastcommit"
14+
"github.com/pubgo/fastcommit/cmds/fastcommitcmd"
1715
"github.com/pubgo/fastcommit/cmds/historycmd"
16+
"github.com/pubgo/fastcommit/cmds/pullcmd"
1817
"github.com/pubgo/fastcommit/cmds/tagcmd"
1918
"github.com/pubgo/fastcommit/cmds/upgradecmd"
2019
"github.com/pubgo/fastcommit/cmds/versioncmd"
21-
"github.com/pubgo/fastcommit/configs"
2220
"github.com/pubgo/fastcommit/utils"
21+
"github.com/pubgo/funk/v2/assert"
22+
"github.com/pubgo/funk/v2/config"
23+
"github.com/pubgo/funk/v2/errors"
24+
"github.com/pubgo/funk/v2/log"
25+
"github.com/pubgo/funk/v2/recovery"
26+
"github.com/pubgo/redant"
27+
_ "github.com/sashabaranov/go-openai"
2328
)
2429

25-
func Main(ver string) {
26-
defer recovery.Exit()
27-
28-
slog.SetDefault(slog.New(log.NewSlog(log.GetLogger("fastcommit"))))
29-
30-
initConfig()
31-
32-
var di = dix.New(dix.WithValuesNull())
33-
di.Provide(versioncmd.New)
34-
di.Provide(upgradecmd.New)
35-
di.Provide(configs.New)
36-
di.Provide(tagcmd.New)
37-
di.Provide(config.Load[ConfigProvider])
38-
di.Provide(utils.NewOpenaiClient)
39-
di.Provide(envcmd.New)
40-
di.Provide(historycmd.New)
41-
di.Provide(fastcommit.New(ver))
42-
di.Provide(configcmd.New)
43-
di.Inject(func(cmd *fastcommit.Command) { cmd.Run() })
30+
func Main() {
31+
run(
32+
versioncmd.New(),
33+
upgradecmd.New(),
34+
tagcmd.New(),
35+
historycmd.New(),
36+
fastcommitcmd.New(),
37+
configcmd.New(),
38+
pullcmd.New(),
39+
)
40+
}
41+
42+
func run(cmds ...*redant.Command) {
43+
defer recovery.Exit(func(err error) error {
44+
if errors.Is(err, context.Canceled) {
45+
return nil
46+
}
47+
48+
if err.Error() == "signal: interrupt" {
49+
return nil
50+
}
51+
52+
log.Err(err).Msg("failed to run command")
53+
return nil
54+
})
55+
56+
app := &redant.Command{
57+
Use: "fastcommit",
58+
Short: "Intelligent generation of git commit message",
59+
Children: cmds,
60+
Middleware: func(next redant.HandlerFunc) redant.HandlerFunc {
61+
return func(ctx context.Context, i *redant.Invocation) error {
62+
if utils.IsHelp() {
63+
return redant.DefaultHelpFn()(ctx, i)
64+
}
65+
66+
if !term.IsTerminal(os.Stdin.Fd()) {
67+
return fmt.Errorf("stdin is not terminal")
68+
}
69+
70+
initConfig()
71+
di := dix.New(dix.WithValuesNull())
72+
di.Provide(config.Load[configProvider])
73+
di.Provide(utils.NewOpenaiClient)
74+
return next(dixcontext.Create(ctx, di), i)
75+
}
76+
},
77+
}
78+
79+
assert.Must(app.Run(utils.Context()))
4480
}

bootstrap/config.go

Lines changed: 34 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,49 +1,65 @@
11
package bootstrap
22

33
import (
4+
"context"
5+
"log/slog"
46
"os"
57

6-
"github.com/pubgo/dix/dixinternal"
7-
"github.com/pubgo/funk/assert"
8-
"github.com/pubgo/funk/config"
9-
"github.com/pubgo/funk/log"
10-
"github.com/pubgo/funk/pathutil"
11-
"github.com/rs/zerolog"
8+
"github.com/pubgo/funk/v2/assert"
9+
"github.com/pubgo/funk/v2/config"
10+
"github.com/pubgo/funk/v2/env"
11+
"github.com/pubgo/funk/v2/log"
12+
"github.com/pubgo/funk/v2/pathutil"
13+
"github.com/pubgo/funk/v2/running"
1214
"gopkg.in/yaml.v3"
1315

16+
"github.com/pubgo/fastcommit/cmds/fastcommitcmd"
1417
"github.com/pubgo/fastcommit/configs"
1518
"github.com/pubgo/fastcommit/utils"
1619
)
1720

18-
type ConfigProvider struct {
19-
Version *configs.Version `yaml:"version"`
20-
OpenaiConfig *utils.OpenaiConfig `yaml:"openai"`
21+
type configProvider struct {
22+
Version *configs.Version `yaml:"version"`
23+
OpenaiConfig *utils.OpenaiConfig `yaml:"openai"`
24+
CommitConfig *fastcommitcmd.Config `yaml:"commit"`
2125
}
2226

2327
func initConfig() {
24-
configs.InitEnv()
28+
slog.SetDefault(slog.New(log.NewSlog(log.GetLogger(""))))
29+
log.SetEnableChecker(func(ctx context.Context, lvl log.Level, name, message string, fields log.Fields) bool {
30+
if running.Debug() {
31+
return true
32+
}
2533

26-
dixinternal.SetLog(func(logger log.Logger) log.Logger {
27-
if configs.IsDebug() {
28-
return logger.WithLevel(zerolog.DebugLevel)
34+
if name == "dix" || name == "env" || fields["module"] == "env" {
35+
return false
2936
}
30-
return logger.WithLevel(zerolog.InfoLevel)
37+
return true
3138
})
3239

40+
env.MustSet("LC_ALL", "C")
41+
env.LoadFiles(configs.GetLocalEnvPath()).Must()
42+
3343
configPath := configs.GetConfigPath()
34-
defaultConfigData := configs.GetDefaultConfig()
44+
envPath := configs.GetEnvPath()
3545
if pathutil.IsNotExist(configPath) {
36-
assert.Must(os.WriteFile(configPath, defaultConfigData, 0644))
46+
assert.Must(os.WriteFile(configPath, configs.GetDefaultConfig(), 0644))
47+
assert.Must(os.WriteFile(envPath, configs.GetEnvConfig(), 0644))
3748
return
3849
}
3950

40-
var cfg ConfigProvider
51+
type versionConfigProvider struct {
52+
Version *configs.Version `yaml:"version"`
53+
}
54+
var cfg versionConfigProvider
4155
config.LoadFromPath(&cfg, configPath)
4256

43-
var defaultCfg ConfigProvider
57+
var defaultCfg versionConfigProvider
58+
defaultConfigData := configs.GetDefaultConfig()
4459
assert.Must(yaml.Unmarshal(defaultConfigData, &defaultCfg))
4560
if cfg.Version == nil || cfg.Version.Name == "" || defaultCfg.Version.Name != cfg.Version.Name {
4661
assert.Must(os.WriteFile(configPath, defaultConfigData, 0644))
62+
assert.Must(os.WriteFile(envPath, configs.GetEnvConfig(), 0644))
4763
}
4864

4965
config.SetConfigPath(configPath)

cmds/cmdutils/utils.go

Lines changed: 0 additions & 17 deletions
This file was deleted.

0 commit comments

Comments
 (0)