From 7317ec9d62dbf83e66adaf9b78c33a868713cc8f Mon Sep 17 00:00:00 2001 From: Johannes Batzill Date: Mon, 17 Oct 2022 17:12:52 -0700 Subject: [PATCH] Remove types dependency from gitrpc package, add back commits/content api (#36) --- cli/server/config.go | 21 ++++++++++++++++++ cli/server/harness.wire.go | 1 + cli/server/harness.wire_gen.go | 8 ++++--- cli/server/standalone.wire.go | 1 + cli/server/standalone.wire_gen.go | 6 ++++-- internal/api/controller/repo/getContent.go | 10 +++++---- internal/api/controller/repo/listCommits.go | 7 +++--- internal/gitrpc/config.go | 12 ++++++++--- internal/gitrpc/gitea.go | 24 +++++++++++---------- internal/gitrpc/rpc/repo.pb.go | 4 ++-- internal/gitrpc/rpc/repo_grpc.pb.go | 2 +- internal/gitrpc/rpc/shared.pb.go | 4 ++-- internal/gitrpc/wire.go | 9 ++++---- internal/router/api.go | 2 ++ internal/router/web.go | 1 + 15 files changed, 75 insertions(+), 37 deletions(-) diff --git a/cli/server/config.go b/cli/server/config.go index 9e37b0428..eb2daba66 100644 --- a/cli/server/config.go +++ b/cli/server/config.go @@ -9,6 +9,8 @@ import ( "os" "path/filepath" + "github.com/google/wire" + "github.com/harness/gitness/internal/gitrpc" "github.com/harness/gitness/types" "github.com/kelseyhightower/envconfig" @@ -45,3 +47,22 @@ func ensureGitRootIsSet(config *types.Config) error { return nil } + +// PackageConfigsWireSet contains providers that generate configs required for sub packages. +var PackageConfigsWireSet = wire.NewSet( + ProvideGitRPCServerConfig, + ProvideGitRPCClientConfig, +) + +func ProvideGitRPCServerConfig(config *types.Config) *gitrpc.ServerConfig { + return &gitrpc.ServerConfig{ + Bind: config.Server.GRPC.Bind, + GitRoot: config.Git.Root, + } +} + +func ProvideGitRPCClientConfig(config *types.Config) *gitrpc.ClientConfig { + return &gitrpc.ClientConfig{ + Bind: config.Server.GRPC.Bind, + } +} diff --git a/cli/server/harness.wire.go b/cli/server/harness.wire.go index c138de5f0..2a9d1bf60 100644 --- a/cli/server/harness.wire.go +++ b/cli/server/harness.wire.go @@ -33,6 +33,7 @@ import ( func initSystem(ctx context.Context, config *gitnessTypes.Config) (*system, error) { wire.Build( newSystem, + PackageConfigsWireSet, bootstrap.WireSet, database.WireSet, memory.WireSet, diff --git a/cli/server/harness.wire_gen.go b/cli/server/harness.wire_gen.go index ced99c4c7..dd51520c4 100644 --- a/cli/server/harness.wire_gen.go +++ b/cli/server/harness.wire_gen.go @@ -78,17 +78,19 @@ func initSystem(ctx context.Context, config *types.Config) (*system, error) { spaceStore := database.ProvideSpaceStore(db) repoStore := database.ProvideRepoStore(db) spaceController := space.NewController(authorizer, spaceStore, repoStore, serviceAccountStore) - gitrpcInterface, err := gitrpc.ProvideClient(config) + clientConfig := ProvideGitRPCClientConfig(config) + gitrpcInterface, err := gitrpc.ProvideClient(clientConfig) if err != nil { return nil, err } - repoController := repo.NewController(authorizer, spaceStore, repoStore, serviceAccountStore, gitrpcInterface) + repoController := repo.ProvideController(authorizer, spaceStore, repoStore, serviceAccountStore, gitrpcInterface) apiHandler := router.ProvideAPIHandler(systemStore, authenticator, accountClient, spaceController, repoController) gitHandler := router2.ProvideGitHandler(repoStore, authenticator) webHandler := router2.ProvideWebHandler(systemStore) routerRouter := router2.ProvideRouter(apiHandler, gitHandler, webHandler) serverServer := server.ProvideServer(config, routerRouter) - gitrpcServer, err := gitrpc.ProvideServer(config) + serverConfig := ProvideGitRPCServerConfig(config) + gitrpcServer, err := gitrpc.ProvideServer(serverConfig) if err != nil { return nil, err } diff --git a/cli/server/standalone.wire.go b/cli/server/standalone.wire.go index 7e5ce004b..82289cf1e 100644 --- a/cli/server/standalone.wire.go +++ b/cli/server/standalone.wire.go @@ -31,6 +31,7 @@ import ( func initSystem(ctx context.Context, config *types.Config) (*system, error) { wire.Build( newSystem, + PackageConfigsWireSet, bootstrap.WireSet, database.WireSet, memory.WireSet, diff --git a/cli/server/standalone.wire_gen.go b/cli/server/standalone.wire_gen.go index c3b97d6c5..7d8f6209a 100644 --- a/cli/server/standalone.wire_gen.go +++ b/cli/server/standalone.wire_gen.go @@ -41,7 +41,8 @@ func initSystem(ctx context.Context, config *types.Config) (*system, error) { authenticator := authn.ProvideAuthenticator(userStore, serviceAccountStore, tokenStore) spaceStore := database.ProvideSpaceStore(db) repoStore := database.ProvideRepoStore(db) - gitrpcInterface, err := gitrpc.ProvideClient(config) + clientConfig := ProvideGitRPCClientConfig(config) + gitrpcInterface, err := gitrpc.ProvideClient(clientConfig) if err != nil { return nil, err } @@ -53,7 +54,8 @@ func initSystem(ctx context.Context, config *types.Config) (*system, error) { webHandler := router.ProvideWebHandler(systemStore) routerRouter := router.ProvideRouter(apiHandler, gitHandler, webHandler) serverServer := server.ProvideServer(config, routerRouter) - gitrpcServer, err := gitrpc.ProvideServer(config) + serverConfig := ProvideGitRPCServerConfig(config) + gitrpcServer, err := gitrpc.ProvideServer(serverConfig) if err != nil { return nil, err } diff --git a/internal/api/controller/repo/getContent.go b/internal/api/controller/repo/getContent.go index a5fe20d44..1c11d1bac 100644 --- a/internal/api/controller/repo/getContent.go +++ b/internal/api/controller/repo/getContent.go @@ -240,14 +240,16 @@ func (c *Controller) getDirContent(ctx context.Context, gitRepoUID string, gitRe return nil, fmt.Errorf("failed to get content of dir: %w", err) } - entries := make([]ContentInfo, 0, len(output.Nodes)) - for _, v := range output.Nodes { + entries := make([]ContentInfo, len(output.Nodes)) + for i := range output.Nodes { + node := output.Nodes[i] + var entry *ContentInfo - entry, err = mapToContentInfo(&v.TreeNode, v.Commit) + entry, err = mapToContentInfo(&node.TreeNode, node.Commit) if err != nil { return nil, err } - entries = append(entries, *entry) + entries[i] = *entry } return &DirContent{ diff --git a/internal/api/controller/repo/listCommits.go b/internal/api/controller/repo/listCommits.go index 2e652dcc0..ba8d3422f 100644 --- a/internal/api/controller/repo/listCommits.go +++ b/internal/api/controller/repo/listCommits.go @@ -43,10 +43,9 @@ func (c *Controller) ListCommits(ctx context.Context, session *auth.Session, return nil, 0, err } - commits := make([]Commit, 0, len(rpcOut.Commits)) - for _, rpcCommit := range rpcOut.Commits { - commit := mapCommit(rpcCommit) - commits = append(commits, commit) + commits := make([]Commit, len(rpcOut.Commits)) + for i := range rpcOut.Commits { + commits[i] = mapCommit(rpcOut.Commits[i]) } return commits, rpcOut.TotalCount, nil diff --git a/internal/gitrpc/config.go b/internal/gitrpc/config.go index 780e1bcca..f478d7ea7 100644 --- a/internal/gitrpc/config.go +++ b/internal/gitrpc/config.go @@ -4,7 +4,13 @@ package gitrpc -type Config struct { - RepoRoot string - RPCAddress string +// ServerConfig represents the configuration for the gitrpc server. +type ServerConfig struct { + GitRoot string + Bind string +} + +// ClientConfig represents the config for the gitrpc client. +type ClientConfig struct { + Bind string } diff --git a/internal/gitrpc/gitea.go b/internal/gitrpc/gitea.go index 17ad91ad0..5a8337e56 100644 --- a/internal/gitrpc/gitea.go +++ b/internal/gitrpc/gitea.go @@ -231,26 +231,28 @@ func (g giteaAdapter) ListTreeNodes(ctx context.Context, repoPath string, return nil, fmt.Errorf("failed to list entries for tree '%s': %w", treePath, err) } - nodes := make([]treeNode, 0, len(giteaEntries)) - for _, giteaNode := range giteaEntries { + nodes := make([]treeNode, len(giteaEntries)) + for i := range giteaEntries { + giteaEntry := giteaEntries[i] + var nodeType treeNodeType var mode treeNodeMode - nodeType, mode, err = mapGiteaNodeToTreeNodeModeAndType(giteaNode.Mode()) + nodeType, mode, err = mapGiteaNodeToTreeNodeModeAndType(giteaEntry.Mode()) if err != nil { return nil, err } // giteaNode.Name() returns the path of the node relative to the tree. - relPath := giteaNode.Name() + relPath := giteaEntry.Name() name := filepath.Base(relPath) - nodes = append(nodes, treeNode{ + nodes[i] = treeNode{ nodeType: nodeType, mode: mode, - sha: giteaNode.ID.String(), + sha: giteaEntry.ID.String(), name: name, path: filepath.Join(treePath, relPath), - }) + } } return nodes, nil @@ -282,14 +284,14 @@ func (g giteaAdapter) ListCommits(ctx context.Context, repoPath string, return nil, 0, fmt.Errorf("error getting total commit count: %w", err) } - commits := make([]commit, 0, len(giteaCommits)) - for _, giteaCommit := range giteaCommits { + commits := make([]commit, len(giteaCommits)) + for i := range giteaCommits { var commit *commit - commit, err = mapGiteaCommit(giteaCommit) + commit, err = mapGiteaCommit(giteaCommits[i]) if err != nil { return nil, 0, err } - commits = append(commits, *commit) + commits[i] = *commit } // TODO: save to cast to int from int64, or we expect exceeding int.MaxValue? diff --git a/internal/gitrpc/rpc/repo.pb.go b/internal/gitrpc/rpc/repo.pb.go index b4405ad05..4b3d690b3 100644 --- a/internal/gitrpc/rpc/repo.pb.go +++ b/internal/gitrpc/rpc/repo.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.27.1 -// protoc v3.19.4 +// protoc-gen-go v1.28.1 +// protoc v3.21.7 // source: repo.proto package rpc diff --git a/internal/gitrpc/rpc/repo_grpc.pb.go b/internal/gitrpc/rpc/repo_grpc.pb.go index 1c48e2a57..607231308 100644 --- a/internal/gitrpc/rpc/repo_grpc.pb.go +++ b/internal/gitrpc/rpc/repo_grpc.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go-grpc. DO NOT EDIT. // versions: // - protoc-gen-go-grpc v1.2.0 -// - protoc v3.19.4 +// - protoc v3.21.7 // source: repo.proto package rpc diff --git a/internal/gitrpc/rpc/shared.pb.go b/internal/gitrpc/rpc/shared.pb.go index 6153c058b..16b116ae7 100644 --- a/internal/gitrpc/rpc/shared.pb.go +++ b/internal/gitrpc/rpc/shared.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.27.1 -// protoc v3.19.4 +// protoc-gen-go v1.28.1 +// protoc v3.21.7 // source: shared.proto package rpc diff --git a/internal/gitrpc/wire.go b/internal/gitrpc/wire.go index 7cc0ee220..0d8318b79 100644 --- a/internal/gitrpc/wire.go +++ b/internal/gitrpc/wire.go @@ -6,7 +6,6 @@ package gitrpc import ( "github.com/google/wire" - "github.com/harness/gitness/types" ) // WireSet provides a wire set for this package. @@ -15,10 +14,10 @@ var WireSet = wire.NewSet( ProvideServer, ) -func ProvideClient(config *types.Config) (Interface, error) { - return InitClient(config.Server.GRPC.Bind) +func ProvideClient(config *ClientConfig) (Interface, error) { + return InitClient(config.Bind) } -func ProvideServer(config *types.Config) (*Server, error) { - return NewServer(config.Server.GRPC.Bind, config.Git.Root) +func ProvideServer(config *ServerConfig) (*Server, error) { + return NewServer(config.Bind, config.GitRoot) } diff --git a/internal/router/api.go b/internal/router/api.go index 70c1c067e..6d2fdbd1c 100644 --- a/internal/router/api.go +++ b/internal/router/api.go @@ -153,6 +153,8 @@ func setupRepos(r chi.Router, config *types.Config, repoCtrl *repo.Controller) { r.Post("/move", handlerrepo.HandleMove(repoCtrl)) r.Get("/serviceAccounts", handlerrepo.HandleListServiceAccounts(repoCtrl)) + r.Get("/commits", handlerrepo.HandleListCommits(repoCtrl)) + r.Get("/content/*", handlerrepo.HandleGetContent(repoCtrl)) // repo path operations r.Route("/paths", func(r chi.Router) { diff --git a/internal/router/web.go b/internal/router/web.go index 24ae774b2..c79289c0b 100644 --- a/internal/router/web.go +++ b/internal/router/web.go @@ -54,6 +54,7 @@ func NewWebHandler(systemStore store.SystemStore) WebHandler { ) // openapi playground endpoints + // TODO: this should not be generated and marshaled on the fly every time? r.HandleFunc("/openapi.yaml", func(w http.ResponseWriter, r *http.Request) { spec := openapi.Generate() data, err := spec.MarshalYAML()