package
0.0.0-20240517080640-41b062771ca2
Repository: https://github.com/manzanit0/monocrat.git
Documentation: pkg.go.dev
# README
CI check
GitHub Application which leverages the Checks API to lint, build and push images.
This is just intended as a working prototype to validate how the GitHub APIs would work.
Implementation notes
Using golangci-lint programatically
Ideally I'd be able to use the packages exported by the linter, but one of the dependencies of the linter
module is in an internal
directory, which makes it impossible to reuse, namely pkgcache.
An alternative would be to fork it and move the package under pkg
, but I'm unsure it's worth it. The ergonomics of the packages aren't great either, it looked somewhat like this:
log := logutils.NewStderrLog("my-logger")
log.SetLevel(logutils.LogLevelDebug)
cfg := config.NewDefault()
cfg.Linters = config.Linters{EnableAll: true}
env := goutil.NewEnv(log)
fileCache := fsutils.NewFileCache()
lineCache := fsutils.NewLineCache(fileCache)
dbManager, err := lintersdb.NewManager(log, cfg, lintersdb.NewLinterBuilder(), lintersdb.NewPluginModuleBuilder(log), lintersdb.NewPluginGoBuilder(log))
if err != nil {
return nil, err
}
lintersToRun := dbManager.GetAllEnabledByDefaultLinters()
log.Debugf("amount of linters: %d", len(lintersToRun))
loadGuard := load.NewGuard()
pkgLoader := lint.NewPackageLoader(log, cfg, []string{}, env, loadGuard)
sw := timeutils.NewStopwatch("foo", log)
cache, err := pkgcache.NewCache(sw, log) // <--- This is the package that can't be imported.
if err != nil {
return nil, err
}
contextBuilder := lint.NewContextBuilder(cfg, pkgLoader, fileCache, cache, loadGuard)
lintCtx, err := contextBuilder.Build(context.TODO(), log, lintersToRun)
if err != nil {
return nil, fmt.Errorf("context loading failed: %w", err)
}
runner, err := lint.NewRunner(log, cfg, []string{}, env, lineCache, fileCache, dbManager, lintCtx)
if err != nil {
return nil, err
}
issues, err := runner.Run(context.TODO(), lintersToRun)
if err != nil {
return nil, err
}
return issues, nil