2024-04-10 22:10:09 +08:00
|
|
|
// https://github.com/google/go-containerregistry
|
|
|
|
|
|
|
|
package main
|
|
|
|
|
|
|
|
import (
|
|
|
|
"context"
|
2024-04-15 18:02:54 +08:00
|
|
|
"flag"
|
2024-12-23 00:07:44 -08:00
|
|
|
"net/url"
|
|
|
|
"os/signal"
|
|
|
|
"path"
|
|
|
|
"syscall"
|
|
|
|
|
|
|
|
"github.com/loveuer/nf/nft/log"
|
|
|
|
|
2024-04-10 22:10:09 +08:00
|
|
|
"nf-repo/internal/api"
|
2024-04-15 18:02:54 +08:00
|
|
|
"nf-repo/internal/interfaces"
|
2024-04-10 22:10:09 +08:00
|
|
|
"nf-repo/internal/interfaces/blobs"
|
2024-05-05 19:11:57 +08:00
|
|
|
"nf-repo/internal/interfaces/dbs"
|
2024-04-10 22:10:09 +08:00
|
|
|
"nf-repo/internal/interfaces/manifests"
|
|
|
|
"nf-repo/internal/interfaces/uploads"
|
2024-04-15 18:02:54 +08:00
|
|
|
"nf-repo/internal/opt"
|
2024-12-23 00:07:44 -08:00
|
|
|
"nf-repo/internal/tool/tools"
|
2024-04-10 22:10:09 +08:00
|
|
|
)
|
|
|
|
|
|
|
|
var (
|
2024-12-23 00:07:44 -08:00
|
|
|
bh interfaces.BlobHandler
|
|
|
|
uh interfaces.UploadHandler
|
|
|
|
mh interfaces.ManifestHandler
|
2024-04-10 22:10:09 +08:00
|
|
|
)
|
|
|
|
|
|
|
|
func init() {
|
2024-12-23 00:07:44 -08:00
|
|
|
flag.BoolVar(&opt.Cfg.Debug, "debug", false, "debug mode")
|
|
|
|
flag.StringVar(&opt.Cfg.RepoName, "repo", "repo.me", "repo name")
|
|
|
|
flag.StringVar(&opt.Cfg.Address, "address", "127.0.0.1:8383", "listen address")
|
|
|
|
flag.StringVar(&opt.Cfg.DataPath, "data", "/data", "images, sqlite ... data path")
|
|
|
|
flag.StringVar(&opt.Cfg.Proxy, "proxy", "", "proxy url")
|
2024-04-15 18:02:54 +08:00
|
|
|
flag.Parse()
|
|
|
|
|
2024-12-23 00:07:44 -08:00
|
|
|
tools.TablePrinter(opt.Cfg)
|
2024-04-10 22:10:09 +08:00
|
|
|
|
2024-12-23 00:07:44 -08:00
|
|
|
var err error
|
2024-04-10 22:10:09 +08:00
|
|
|
|
2024-12-23 00:07:44 -08:00
|
|
|
if opt.Cfg.Debug {
|
|
|
|
log.SetLogLevel(log.LogLevelDebug)
|
|
|
|
}
|
2024-04-15 18:02:54 +08:00
|
|
|
|
2024-12-23 00:07:44 -08:00
|
|
|
mh = manifests.NewManifestDBHandler(dbs.Must(dbs.NewSqliteTX(path.Join(opt.Cfg.DataPath, "data.sqlite"))))
|
|
|
|
bh = blobs.NewLocalBlobHandler(path.Join(opt.Cfg.DataPath, "layers"))
|
2024-06-14 17:39:00 +08:00
|
|
|
//bh = blobs.NewS3BlobHandler(
|
|
|
|
// context.TODO(),
|
|
|
|
// "http://10.230.200.74:9000",
|
|
|
|
// "xWcwG0zcdR3iDXBa",
|
|
|
|
// "NavjSle5qQjE2rjz81hEwZW3S2fUVa66",
|
|
|
|
// "repo.me",
|
|
|
|
//)
|
2024-12-23 00:07:44 -08:00
|
|
|
uh = uploads.NewLocalUploader(path.Join(opt.Cfg.DataPath, "uploads"))
|
|
|
|
|
|
|
|
if opt.Cfg.Proxy != "" {
|
|
|
|
if opt.Proxy, err = url.Parse(opt.Cfg.Proxy); err != nil {
|
|
|
|
log.Fatal("invalid proxy address")
|
|
|
|
}
|
|
|
|
}
|
2024-04-10 22:10:09 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
func main() {
|
2024-12-23 00:07:44 -08:00
|
|
|
ctx, cancel := signal.NotifyContext(context.Background(), syscall.SIGHUP, syscall.SIGINT, syscall.SIGTERM, syscall.SIGQUIT)
|
|
|
|
defer cancel()
|
|
|
|
|
|
|
|
app := api.NewApi(ctx, bh, uh, mh)
|
|
|
|
|
|
|
|
go func() {
|
|
|
|
app.Run(opt.Cfg.Address)
|
|
|
|
}()
|
|
|
|
|
|
|
|
go func() {
|
|
|
|
<-ctx.Done()
|
|
|
|
app.Shutdown(tools.Timeout(3))
|
|
|
|
}()
|
2024-04-10 22:10:09 +08:00
|
|
|
|
2024-12-23 00:07:44 -08:00
|
|
|
<-ctx.Done()
|
|
|
|
log.Warn("received quit signal...")
|
|
|
|
<-tools.Timeout(3).Done()
|
2024-04-10 22:10:09 +08:00
|
|
|
}
|