From 43f0be35e00d0e46acd4b7d6cef9b3a1820edec6 Mon Sep 17 00:00:00 2001 From: Enver Bisevac Date: Thu, 15 Jun 2023 13:35:12 +0000 Subject: [PATCH] [MAINT] Isolate harness app into harness package (#133) --- .harness.env | 35 --- .vscode/launch.json | 7 +- Makefile | 106 ++++----- cli/cli.go | 40 +--- cli/server/harness.config.go | 19 -- cli/server/harness.wire.go | 97 --------- cli/server/harness.wire_gen.go | 202 ------------------ cli/server/server.go | 38 ++-- cli/server/system.go | 12 +- cli/swagger.go | 2 +- cmd/gitness/{pg.go => driver_pq.go} | 6 - cmd/gitness/driver_sqlite.go | 12 ++ cmd/gitness/main.go | 35 ++- .../standalone.wire.go => cmd/gitness/wire.go | 23 +- .../gitness/wire_gen.go | 46 ++-- scripts/wire/server/harness.sh | 7 - scripts/wire/server/standalone.sh | 7 +- 17 files changed, 169 insertions(+), 525 deletions(-) delete mode 100644 .harness.env delete mode 100644 cli/server/harness.config.go delete mode 100644 cli/server/harness.wire.go delete mode 100644 cli/server/harness.wire_gen.go rename cmd/gitness/{pg.go => driver_pq.go} (80%) create mode 100644 cmd/gitness/driver_sqlite.go rename cli/server/standalone.wire.go => cmd/gitness/wire.go (86%) rename cli/server/standalone.wire_gen.go => cmd/gitness/wire_gen.go (84%) delete mode 100755 scripts/wire/server/harness.sh diff --git a/.harness.env b/.harness.env deleted file mode 100644 index 8d676f62e..000000000 --- a/.harness.env +++ /dev/null @@ -1,35 +0,0 @@ -# Gitness values -GITNESS_TRACE=true -GITNESS_WEBHOOK_ALLOW_LOOPBACK=true - -GITNESS_PRINCIPAL_SYSTEM_UID="harness" -GITNESS_PRINCIPAL_SYSTEM_DISPLAY_NAME="Harness" -GITNESS_PRINCIPAL_SYSTEM_EMAIL="noreply@harness.io" - -GITNESS_WEBHOOK_HEADER_IDENTITY="Harness" - -# Harness specifc values -HARNESS_JWT_IDENTITY="code" -HARNESS_JWT_SECRET="IC04LYMBf1lDP5oeY4hupxd4HJhLmN6azUku3xEbeE3SUx5G3ZYzhbiwVtK4i7AmqyU9OZkwB4v8E9qM" -HARNESS_JWT_VALIDINMIN=1440 -HARNESS_JWT_BEARER_SECRET="dOkdsVqdRPPRJG31XU0qY4MPqmBBMk0PTAGIKM6O7TGqhjyxScIdJe80mwh5Yb5zF3KxYBHw6B3Lfzlq" - -HARNESS_SERVICES_IDENTITY_JWT_IDENTITY="IdentityService" -HARNESS_SERVICES_IDENTITY_JWT_SECRET="HVSKUYqD4e5Rxu12hFDdCJKGM64sxgEynvdDhaOHaTHhwwn0K4Ttr0uoOxSsEVYNrUU" - -HARNESS_SERVICES_ACL_IGNORE=true -HARNESS_SERVICES_ACL_CLIENT_SECURE=false -HARNESS_SERVICES_ACL_CLIENT_BASEURL="http://localhost:9006/api" - -HARNESS_SERVICES_MANAGER_CLIENT_SECURE=false -HARNESS_SERVICES_MANAGER_CLIENT_BASEURL="http://localhost:3457/api" -HARNESS_SERVICES_MANAGER_JWT_IDENTITY="Manager" -HARNESS_SERVICES_MANAGER_JWT_SECRET="dOkdsVqdRPPRJG31XU0qY4MPqmBBMk0PTAGIKM6O7TGqhjyxScIdJe80mwh5Yb5zF3KxYBHw6B3Lfzlq" - -HARNESS_SERVICES_NGMANAGER_CLIENT_SECURE=false -HARNESS_SERVICES_NGMANAGER_CLIENT_BASEURL="http://localhost:7457" -HARNESS_SERVICES_NGMANAGER_JWT_IDENTITY="NextGenManager" -HARNESS_SERVICES_NGMANAGER_JWT_SECRET="IC04LYMBf1lDP5oeY4hupxd4HJhLmN6azUku3xEbeE3SUx5G3ZYzhbiwVtK4i7AmqyU9OZkwB4v8E9qM" - -HARNESS_SERVICES_CIMANAGER_JWT_IDENTITY="CIManager" -HARNESS_SERVICES_CIMANAGER_JWT_SECRET="IC04LYMBf1lDP5oeY4hupxd4HJhLmN6azUku3xEbeE3SUx5G3ZYzhbiwVtK4i7AmqyU9OZkwB4v8E9qM" \ No newline at end of file diff --git a/.vscode/launch.json b/.vscode/launch.json index eecfe0d76..7e2c30cf7 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -9,15 +9,16 @@ "type": "go", "request": "launch", "mode": "auto", - "buildFlags": "-tags=harness", - "program": "cmd/gitness", - "args": ["server", "../../.harness.env"] + "buildFlags": "-tags=sqlite", + "program": "./harness", + "args": ["server", ".env"] }, { "name": "Standalone", "type": "go", "request": "launch", "mode": "auto", + "buildFlags": "-tags=sqlite", "program": "cmd/gitness", "args": ["server", "../../.local.env"] } diff --git a/Makefile b/Makefile index db37b67d0..19b73428a 100644 --- a/Makefile +++ b/Makefile @@ -20,6 +20,16 @@ endif .DEFAULT_GOAL := all +ifeq ($(BUILD_TAGS),) + BUILD_TAGS := sqlite +endif + +############################################################################### +# +# Initialization +# +############################################################################### + init: ## Install git hooks to perform pre-commit checks git config core.hooksPath .githooks git config commit.template .gitmessage @@ -34,18 +44,11 @@ dep: $(deps) ## Install the deps required to generate code and build gitness tools: $(tools) ## Install tools required for the build @echo "Installed tools" -mocks: $(mocks) - @echo "Generating Test Mocks" - -wire: cli/server/harness.wire_gen.go cli/server/standalone.wire_gen.go cmd/gitrpcserver/wire_gen.go - -force-wire: ## Force wire code generation - @sh ./scripts/wire/server/standalone.sh - @sh ./scripts/wire/server/harness.sh - @sh ./scripts/wire/gitrpcserver/wire.sh - -generate: $(mocks) wire mocks/mock_client.go proto - @echo "Generating Code" +############################################################################### +# +# Build and testing rules +# +############################################################################### build: generate ## Build the all-in-one gitness binary @echo "Building Gitness Server" @@ -65,34 +68,14 @@ test: generate ## Run the go tests go tool cover -html=coverage.out run: dep ## Run the gitness binary from source - @go run -race -ldflags=${LDFLAGS} . + @go run -race -ldflags=${LDFLAGS} ./cmd/gitness -clean-db: ## delete all data from local database - psql postgresql://gitness:gitness@localhost:5432/gitness -f scripts/db/cleanup.sql - -populate-db: ## inject sample data into local database - psql postgresql://gitness:gitness@localhost:5432/gitness -f scripts/db/sample_data.sql - -update-tools: delete-tools $(tools) ## Update the tools by deleting and re-installing - -delete-tools: ## Delete the tools - @rm $(tools) || true - -######################################### +############################################################################### +# # Docker environment commands # The following targets relate to running gitness and its dependent services -######################################### -start: ## Run all dependent services and start the gitness server locally - the service will listen on :3000 by default - docker-compose -f ./docker/docker-compose.yml up ${DOCKER_BUILD_OPTS} --remove-orphans - -stop: ## Stop all services - docker-compose -f ./docker/docker-compose.yml down --remove-orphans - -dev: ## Run local dev environment this starts the services which gitness depends on - docker-compose -f ./docker/docker-compose.yml up ${DOCKER_BUILD_OPTS} --remove-orphans db redis - -test-env: stop ## Run test environment - this runs all services and the gitness in test mode. - docker-compose -f ./docker/docker-compose.yml -f ./docker/docker-compose.test.yml up -d ${DOCKER_BUILD_OPTS} --remove-orphans +# +############################################################################### image: ## Build the gitness docker image @echo "Building Gitness Standalone Image" @@ -115,14 +98,11 @@ gitrpc-image: ## Build the gitness gitrpc docker image -t gitness-gitrpc:latest \ -f ./docker/Dockerfile.gitrpc . -e2e: generate test-env ## Run e2e tests - chmod +x wait-for-gitness.sh && ./wait-for-gitness.sh - go test -p 1 -v -coverprofile=e2e_cov.out ./tests/... -env=".env.local" - - -########################################### +############################################################################### +# # Code Formatting and linting -########################################### +# +############################################################################### format: tools # Format go code and error if any changes are made @echo "Formating ..." @@ -138,16 +118,26 @@ lint: tools generate # lint the golang code @echo "Linting $(1)" @golangci-lint run --timeout=3m --verbose -########################################### +############################################################################### # Code Generation # # Some code generation can be slow, so we only run it if # the source file has changed. -########################################### -cli/server/harness.wire_gen.go: cli/server/harness.wire.go - @sh ./scripts/wire/server/harness.sh +############################################################################### -cli/server/standalone.wire_gen.go: cli/server/standalone.wire.go +generate: $(mocks) wire mocks/mock_client.go proto + @echo "Generating Code" + +mocks: $(mocks) + @echo "Generating Test Mocks" + +wire: cmd/gitness/wire_gen.go cmd/gitrpcserver/wire_gen.go + +force-wire: ## Force wire code generation + @sh ./scripts/wire/server/standalone.sh + @sh ./scripts/wire/gitrpcserver/wire.sh + +cmd/gitness/wire_gen.go: cmd/gitness/wire.go @sh ./scripts/wire/server/standalone.sh cmd/gitrpcserver/wire_gen.go: cmd/gitrpcserver/wire.go @@ -156,7 +146,7 @@ cmd/gitrpcserver/wire_gen.go: cmd/gitrpcserver/wire.go mocks/mock_client.go: internal/store/database.go client/client.go go generate mocks/mock.go -proto: +proto: ## generate proto files for gitrpc integration @protoc --proto_path=./gitrpc/proto \ --go_out=./gitrpc/rpc \ --go_opt=paths=source_relative \ @@ -164,19 +154,17 @@ proto: --go-grpc_opt=paths=source_relative \ ./gitrpc/proto/*.proto -harness-proto: - @protoc --proto_path=./harness/proto \ - --go_out=./harness/rpc \ - --go_opt=paths=source_relative \ - --go-grpc_out=./harness/rpc \ - --go-grpc_opt=paths=source_relative \ - ./harness/proto/*.proto -########################################### +############################################################################### # Install Tools and deps # # These targets specify the full path to where the tool is installed # If the tool already exists it wont be re-installed. -########################################### +############################################################################### + +update-tools: delete-tools $(tools) ## Update the tools by deleting and re-installing + +delete-tools: ## Delete the tools + @rm $(tools) || true # Install golangci-lint $(GOBIN)/golangci-lint: diff --git a/cli/cli.go b/cli/cli.go index 14dae1320..dbb81cf10 100644 --- a/cli/cli.go +++ b/cli/cli.go @@ -7,49 +7,11 @@ package cli import ( "os" - "github.com/harness/gitness/cli/operations/account" "github.com/harness/gitness/cli/operations/hooks" - "github.com/harness/gitness/cli/operations/migrate" - "github.com/harness/gitness/cli/operations/user" - "github.com/harness/gitness/cli/operations/users" - "github.com/harness/gitness/cli/server" "github.com/harness/gitness/internal/githook" - "github.com/harness/gitness/version" - - "gopkg.in/alecthomas/kingpin.v2" ) -const ( - application = "gitness" - description = "description goes here" // TODO edit this application description -) - -// Command parses the command line arguments and then executes a -// subcommand program. -func Command() { - args := getArguments() - - app := kingpin.New(application, description) - - migrate.Register(app) - server.Register(app) - - user.Register(app) - users.Register(app) - - account.RegisterLogin(app) - account.RegisterRegister(app) - account.RegisterLogout(app) - - hooks.Register(app) - - registerSwagger(app) - - kingpin.Version(version.Version.String()) - kingpin.MustParse(app.Parse(args)) -} - -func getArguments() []string { +func GetArguments() []string { command := os.Args[0] args := os.Args[1:] diff --git a/cli/server/harness.config.go b/cli/server/harness.config.go deleted file mode 100644 index 566904373..000000000 --- a/cli/server/harness.config.go +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright 2022 Harness Inc. All rights reserved. -// Use of this source code is governed by the Polyform Free Trial License -// that can be found in the LICENSE.md file for this repository. - -// go:build harness - -package server - -import ( - "github.com/harness/gitness/harness/types" - - "github.com/kelseyhightower/envconfig" -) - -func ProvideHarnessConfig() (*types.Config, error) { - config := new(types.Config) - err := envconfig.Process("", config) - return config, err -} diff --git a/cli/server/harness.wire.go b/cli/server/harness.wire.go deleted file mode 100644 index 4556f5c27..000000000 --- a/cli/server/harness.wire.go +++ /dev/null @@ -1,97 +0,0 @@ -// Copyright 2021 Harness Inc. All rights reserved. -// Use of this source code is governed by the Polyform Free Trial License -// that can be found in the LICENSE.md file for this repository. - -//go:build wireinject && harness -// +build wireinject,harness - -package server - -import ( - "context" - - "github.com/harness/gitness/events" - "github.com/harness/gitness/gitrpc" - gitrpcserver "github.com/harness/gitness/gitrpc/server" - gitrpccron "github.com/harness/gitness/gitrpc/server/cron" - "github.com/harness/gitness/harness/auth/authn" - "github.com/harness/gitness/harness/auth/authz" - "github.com/harness/gitness/harness/bootstrap" - "github.com/harness/gitness/harness/client" - "github.com/harness/gitness/harness/router" - harnessservices "github.com/harness/gitness/harness/services" - harnessevents "github.com/harness/gitness/harness/services/events" - "github.com/harness/gitness/harness/store" - "github.com/harness/gitness/harness/types/check" - checkcontroller "github.com/harness/gitness/internal/api/controller/check" - "github.com/harness/gitness/internal/api/controller/githook" - "github.com/harness/gitness/internal/api/controller/principal" - "github.com/harness/gitness/internal/api/controller/pullreq" - "github.com/harness/gitness/internal/api/controller/repo" - "github.com/harness/gitness/internal/api/controller/service" - "github.com/harness/gitness/internal/api/controller/serviceaccount" - "github.com/harness/gitness/internal/api/controller/space" - "github.com/harness/gitness/internal/api/controller/user" - controllerwebhook "github.com/harness/gitness/internal/api/controller/webhook" - gitevents "github.com/harness/gitness/internal/events/git" - pullreqevents "github.com/harness/gitness/internal/events/pullreq" - "github.com/harness/gitness/internal/server" - "github.com/harness/gitness/internal/services/codecomments" - pullreqservice "github.com/harness/gitness/internal/services/pullreq" - "github.com/harness/gitness/internal/services/webhook" - "github.com/harness/gitness/internal/store/cache" - "github.com/harness/gitness/internal/store/database" - "github.com/harness/gitness/internal/url" - "github.com/harness/gitness/lock" - "github.com/harness/gitness/pubsub" - gitnesstypes "github.com/harness/gitness/types" - - "github.com/google/wire" -) - -func initSystem(ctx context.Context, config *gitnesstypes.Config) (*system, error) { - wire.Build( - newSystem, - ProvideHarnessConfig, - harnessevents.WireSet, - ProvideRedis, - bootstrap.WireSet, - database.WireSet, - pullreqservice.WireSet, - harnessservices.WireSet, - cache.WireSet, - server.WireSet, - url.WireSet, - space.WireSet, - repo.WireSet, - pullreq.WireSet, - controllerwebhook.WireSet, - user.WireSet, - service.WireSet, - serviceaccount.WireSet, - principal.WireSet, - gitevents.WireSet, - pullreqevents.WireSet, - ProvideGitRPCServerConfig, - gitrpcserver.WireSet, - ProvideGitRPCClientConfig, - gitrpc.WireSet, - router.WireSet, - authn.WireSet, - authz.WireSet, - client.WireSet, - store.WireSet, - check.WireSet, - ProvideEventsConfig, - events.WireSet, - ProvideWebhookConfig, - webhook.WireSet, - githook.WireSet, - lock.WireSet, - pubsub.WireSet, - codecomments.WireSet, - gitrpccron.WireSet, - checkcontroller.WireSet, - ) - return &system{}, nil -} diff --git a/cli/server/harness.wire_gen.go b/cli/server/harness.wire_gen.go deleted file mode 100644 index ab785268a..000000000 --- a/cli/server/harness.wire_gen.go +++ /dev/null @@ -1,202 +0,0 @@ -// Code generated by Wire. DO NOT EDIT. - -//go:build !wireinject && harness -// +build !wireinject,harness - -package server - -import ( - "context" - "github.com/harness/gitness/events" - "github.com/harness/gitness/gitrpc" - server2 "github.com/harness/gitness/gitrpc/server" - "github.com/harness/gitness/gitrpc/server/cron" - "github.com/harness/gitness/harness/auth/authn" - "github.com/harness/gitness/harness/auth/authz" - "github.com/harness/gitness/harness/bootstrap" - "github.com/harness/gitness/harness/client" - "github.com/harness/gitness/harness/router" - "github.com/harness/gitness/harness/services" - events4 "github.com/harness/gitness/harness/services/events" - "github.com/harness/gitness/harness/store" - "github.com/harness/gitness/harness/types/check" - check2 "github.com/harness/gitness/internal/api/controller/check" - "github.com/harness/gitness/internal/api/controller/githook" - "github.com/harness/gitness/internal/api/controller/principal" - "github.com/harness/gitness/internal/api/controller/pullreq" - "github.com/harness/gitness/internal/api/controller/repo" - "github.com/harness/gitness/internal/api/controller/service" - "github.com/harness/gitness/internal/api/controller/serviceaccount" - "github.com/harness/gitness/internal/api/controller/space" - "github.com/harness/gitness/internal/api/controller/user" - webhook2 "github.com/harness/gitness/internal/api/controller/webhook" - events3 "github.com/harness/gitness/internal/events/git" - events2 "github.com/harness/gitness/internal/events/pullreq" - router2 "github.com/harness/gitness/internal/router" - "github.com/harness/gitness/internal/server" - "github.com/harness/gitness/internal/services/codecomments" - pullreq2 "github.com/harness/gitness/internal/services/pullreq" - "github.com/harness/gitness/internal/services/webhook" - "github.com/harness/gitness/internal/store/cache" - "github.com/harness/gitness/internal/store/database" - "github.com/harness/gitness/internal/url" - "github.com/harness/gitness/lock" - "github.com/harness/gitness/pubsub" - "github.com/harness/gitness/types" -) - -// Injectors from harness.wire.go: - -func initSystem(ctx context.Context, config *types.Config) (*system, error) { - principalUID := check.ProvidePrincipalUIDCheck() - typesConfig, err := ProvideHarnessConfig() - if err != nil { - return nil, err - } - serviceJWTProvider, err := client.ProvideServiceJWTProvider(typesConfig) - if err != nil { - return nil, err - } - acl, err := client.ProvideACL(ctx, serviceJWTProvider, typesConfig) - if err != nil { - return nil, err - } - authorizer := authz.ProvideAuthorizer(ctx, typesConfig, config, acl) - db, err := database.ProvideDatabase(ctx, config) - if err != nil { - return nil, err - } - principalUIDTransformation := store.ProvidePrincipalUIDTransformation() - principalStore := database.ProvidePrincipalStore(db, principalUIDTransformation) - tokenStore := database.ProvideTokenStore(db) - controller := user.NewController(principalUID, authorizer, principalStore, tokenStore) - serviceController := service.NewController(principalUID, authorizer, principalStore) - bootstrapBootstrap := bootstrap.ProvideBootstrap(config, controller, serviceController) - tokenClient, err := client.ProvideTokenClient(serviceJWTProvider, typesConfig) - if err != nil { - return nil, err - } - userClient, err := client.ProvideUserClient(serviceJWTProvider, typesConfig) - if err != nil { - return nil, err - } - serviceAccountClient, err := client.ProvideServiceAccountClient(serviceJWTProvider, typesConfig) - if err != nil { - return nil, err - } - pathTransformation := store.ProvidePathTransformation() - pathStore := database.ProvidePathStore(db, pathTransformation) - pathCache := cache.ProvidePathCache(pathStore, pathTransformation) - spaceStore := database.ProvideSpaceStore(db, pathCache) - repoStore := database.ProvideRepoStore(db, pathCache) - serviceaccountController := serviceaccount.NewController(principalUID, authorizer, principalStore, spaceStore, repoStore, tokenStore) - provider, err := url.ProvideURLProvider(config) - if err != nil { - return nil, err - } - pathUID := check.ProvidePathUIDCheck() - gitrpcConfig, err := ProvideGitRPCClientConfig() - if err != nil { - return nil, err - } - gitrpcInterface, err := gitrpc.ProvideClient(gitrpcConfig) - if err != nil { - return nil, err - } - repoController := repo.ProvideController(config, db, provider, pathUID, authorizer, pathStore, repoStore, spaceStore, principalStore, gitrpcInterface) - spaceController := space.ProvideController(db, provider, pathUID, authorizer, pathStore, spaceStore, repoStore, principalStore, repoController) - accountClient, err := client.ProvideAccountClient(serviceJWTProvider, typesConfig) - if err != nil { - return nil, err - } - authenticator, err := authn.ProvideAuthenticator(controller, tokenClient, userClient, typesConfig, serviceAccountClient, serviceaccountController, serviceController, spaceController, accountClient) - if err != nil { - return nil, err - } - principalController := principal.NewController(principalStore) - principalInfoView := database.ProvidePrincipalInfoView(db) - principalInfoCache := cache.ProvidePrincipalInfoCache(principalInfoView) - pullReqStore := database.ProvidePullReqStore(db, principalInfoCache) - pullReqActivityStore := database.ProvidePullReqActivityStore(db, principalInfoCache) - codeCommentView := database.ProvideCodeCommentView(db) - pullReqReviewStore := database.ProvidePullReqReviewStore(db) - pullReqReviewerStore := database.ProvidePullReqReviewerStore(db, principalInfoCache) - eventsConfig, err := ProvideEventsConfig() - if err != nil { - return nil, err - } - universalClient, err := ProvideRedis(config) - if err != nil { - return nil, err - } - eventsSystem, err := events.ProvideSystem(eventsConfig, universalClient) - if err != nil { - return nil, err - } - reporter, err := events2.ProvideReporter(eventsSystem) - if err != nil { - return nil, err - } - lockConfig := lock.ProvideConfig(config) - mutexManager := lock.ProvideMutexManager(lockConfig, universalClient) - migrator := codecomments.ProvideMigrator(gitrpcInterface) - pullreqController := pullreq.ProvideController(db, provider, authorizer, pullReqStore, pullReqActivityStore, codeCommentView, pullReqReviewStore, pullReqReviewerStore, repoStore, principalStore, gitrpcInterface, reporter, mutexManager, migrator) - webhookConfig, err := ProvideWebhookConfig() - if err != nil { - return nil, err - } - webhookStore := database.ProvideWebhookStore(db) - webhookExecutionStore := database.ProvideWebhookExecutionStore(db) - readerFactory, err := events3.ProvideReaderFactory(eventsSystem) - if err != nil { - return nil, err - } - eventsReaderFactory, err := events2.ProvideReaderFactory(eventsSystem) - if err != nil { - return nil, err - } - webhookService, err := webhook.ProvideService(ctx, webhookConfig, readerFactory, eventsReaderFactory, webhookStore, webhookExecutionStore, repoStore, pullReqStore, provider, principalStore, gitrpcInterface) - if err != nil { - return nil, err - } - webhookController := webhook2.ProvideController(webhookConfig, db, authorizer, webhookStore, webhookExecutionStore, repoStore, webhookService) - eventsReporter, err := events3.ProvideReporter(eventsSystem) - if err != nil { - return nil, err - } - githookController := githook.ProvideController(db, authorizer, principalStore, repoStore, eventsReporter) - checkStore := database.ProvideCheckStore(db, principalInfoCache) - checkController := check2.ProvideController(db, authorizer, checkStore, repoStore, gitrpcInterface) - apiHandler := router.ProvideAPIHandler(config, authenticator, accountClient, controller, principalController, spaceController, repoController, pullreqController, webhookController, githookController, checkController) - gitHandler := router.ProvideGitHandler(config, provider, repoStore, authenticator, authorizer, gitrpcInterface) - webHandler := router2.ProvideWebHandler(config) - routerRouter := router2.ProvideRouter(config, apiHandler, gitHandler, webHandler) - serverServer := server.ProvideServer(config, routerRouter) - serverConfig, err := ProvideGitRPCServerConfig() - if err != nil { - return nil, err - } - server3, err := server2.ProvideServer(serverConfig) - if err != nil { - return nil, err - } - manager := cron.ProvideManager(serverConfig) - repoGitInfoView := database.ProvideRepoGitInfoView(db) - repoGitInfoCache := cache.ProvideRepoGitInfoCache(repoGitInfoView) - pubsubConfig := pubsub.ProvideConfig(config) - pubSub := pubsub.ProvidePubSub(pubsubConfig, universalClient) - pullreqService, err := pullreq2.ProvideService(ctx, config, readerFactory, eventsReaderFactory, reporter, gitrpcInterface, db, repoGitInfoCache, principalInfoCache, repoStore, pullReqStore, pullReqActivityStore, codeCommentView, migrator, pubSub) - if err != nil { - return nil, err - } - eventsService, err := events4.ProvideEventService(ctx, typesConfig, spaceController, config) - if err != nil { - return nil, err - } - servicesServices, err := services.ProvideServices(ctx, webhookService, pullreqService, eventsService) - if err != nil { - return nil, err - } - serverSystem := newSystem(bootstrapBootstrap, serverServer, server3, manager, servicesServices) - return serverSystem, nil -} diff --git a/cli/server/server.go b/cli/server/server.go index 2622e9869..e7ad72780 100644 --- a/cli/server/server.go +++ b/cli/server/server.go @@ -30,7 +30,9 @@ const ( ) type command struct { - envfile string + envfile string + enableGitRPC bool + initializer func(context.Context, *types.Config) (*System, error) } func (c *command) run(*kingpin.ParseContext) error { @@ -57,7 +59,7 @@ func (c *command) run(*kingpin.ParseContext) error { ctx = log.WithContext(ctx) // initialize system - system, err := initSystem(ctx, config) + system, err := c.initializer(ctx, config) if err != nil { return fmt.Errorf("encountered an error while wiring the system: %w", err) } @@ -83,15 +85,17 @@ func (c *command) run(*kingpin.ParseContext) error { Stringer("version", version.Version). Msg("server started") - // start grpc server - g.Go(system.gitRPCServer.Start) - log.Info().Msg("gitrpc server started") + if c.enableGitRPC { + // start grpc server + g.Go(system.gitRPCServer.Start) + log.Info().Msg("gitrpc server started") - // run the gitrpc cron jobs - g.Go(func() error { - return system.gitRPCCronMngr.Run(ctx) - }) - log.Info().Msg("gitrpc cron manager subroutine started") + // run the gitrpc cron jobs + g.Go(func() error { + return system.gitRPCCronMngr.Run(ctx) + }) + log.Info().Msg("gitrpc cron manager subroutine started") + } // wait until the error group context is done <-gCtx.Done() @@ -108,8 +112,10 @@ func (c *command) run(*kingpin.ParseContext) error { log.Err(sErr).Msg("failed to shutdown http server gracefully") } - if rpcErr := system.gitRPCServer.Stop(); rpcErr != nil { - log.Err(rpcErr).Msg("failed to shutdown grpc server gracefully") + if c.enableGitRPC { + if rpcErr := system.gitRPCServer.Stop(); rpcErr != nil { + log.Err(rpcErr).Msg("failed to shutdown grpc server gracefully") + } } log.Info().Msg("wait for subroutines to complete") @@ -147,8 +153,9 @@ func SetupLogger(config *types.Config) { } // Register the server command. -func Register(app *kingpin.Application) { +func Register(app *kingpin.Application, initializer func(context.Context, *types.Config) (*System, error)) { c := new(command) + c.initializer = initializer cmd := app.Command("server", "starts the server"). Action(c.run) @@ -156,4 +163,9 @@ func Register(app *kingpin.Application) { cmd.Arg("envfile", "load the environment variable file"). Default(""). StringVar(&c.envfile) + + cmd.Flag("enable-gitrpc", "start the gitrpc server"). + Default("true"). + Envar("ENABLE_GITRPC"). + BoolVar(&c.enableGitRPC) } diff --git a/cli/server/system.go b/cli/server/system.go index 680975568..8094d5882 100644 --- a/cli/server/system.go +++ b/cli/server/system.go @@ -12,8 +12,8 @@ import ( "github.com/harness/gitness/internal/services" ) -// system stores high level system sub-routines. -type system struct { +// System stores high level System sub-routines. +type System struct { bootstrap bootstrap.Bootstrap server *server.Server gitRPCServer *gitrpcserver.Server @@ -21,10 +21,10 @@ type system struct { gitRPCCronMngr *gitrpccron.Manager } -// newSystem returns a new system structure. -func newSystem(bootstrap bootstrap.Bootstrap, server *server.Server, gitRPCServer *gitrpcserver.Server, - gitrpccron *gitrpccron.Manager, services services.Services) *system { - return &system{ +// NewSystem returns a new system structure. +func NewSystem(bootstrap bootstrap.Bootstrap, server *server.Server, gitRPCServer *gitrpcserver.Server, + gitrpccron *gitrpccron.Manager, services services.Services) *System { + return &System{ bootstrap: bootstrap, server: server, gitRPCServer: gitRPCServer, diff --git a/cli/swagger.go b/cli/swagger.go index e6d219df7..624d86a9a 100644 --- a/cli/swagger.go +++ b/cli/swagger.go @@ -27,7 +27,7 @@ func (c *swaggerCommand) run(*kingpin.ParseContext) error { } // helper function to register the swagger command. -func registerSwagger(app *kingpin.Application) { +func RegisterSwagger(app *kingpin.Application) { c := new(swaggerCommand) cmd := app.Command("swagger", "generate swagger file"). diff --git a/cmd/gitness/pg.go b/cmd/gitness/driver_pq.go similarity index 80% rename from cmd/gitness/pg.go rename to cmd/gitness/driver_pq.go index d9c63c264..11dc29c00 100644 --- a/cmd/gitness/pg.go +++ b/cmd/gitness/driver_pq.go @@ -8,11 +8,5 @@ package main import ( - "github.com/harness/gitness/cli" - _ "github.com/lib/pq" ) - -func main() { - cli.Command() -} diff --git a/cmd/gitness/driver_sqlite.go b/cmd/gitness/driver_sqlite.go new file mode 100644 index 000000000..8f6a7d1ff --- /dev/null +++ b/cmd/gitness/driver_sqlite.go @@ -0,0 +1,12 @@ +// Copyright 2022 Harness Inc. All rights reserved. +// Use of this source code is governed by the Polyform Free Trial License +// that can be found in the LICENSE.md file for this repository. + +//go:build sqlite +// +build sqlite + +package main + +import ( + _ "github.com/mattn/go-sqlite3" +) diff --git a/cmd/gitness/main.go b/cmd/gitness/main.go index e005cb7ea..8e14cf1df 100644 --- a/cmd/gitness/main.go +++ b/cmd/gitness/main.go @@ -9,10 +9,41 @@ package main import ( "github.com/harness/gitness/cli" + "github.com/harness/gitness/cli/operations/account" + "github.com/harness/gitness/cli/operations/hooks" + "github.com/harness/gitness/cli/operations/migrate" + "github.com/harness/gitness/cli/operations/user" + "github.com/harness/gitness/cli/operations/users" + "github.com/harness/gitness/cli/server" + "github.com/harness/gitness/version" - _ "github.com/mattn/go-sqlite3" + "gopkg.in/alecthomas/kingpin.v2" +) + +const ( + application = "gitness" + description = "Gitness Open source edition" ) func main() { - cli.Command() + args := cli.GetArguments() + + app := kingpin.New(application, description) + + migrate.Register(app) + server.Register(app, initSystem) + + user.Register(app) + users.Register(app) + + account.RegisterLogin(app) + account.RegisterRegister(app) + account.RegisterLogout(app) + + hooks.Register(app) + + cli.RegisterSwagger(app) + + kingpin.Version(version.Version.String()) + kingpin.MustParse(app.Parse(args)) } diff --git a/cli/server/standalone.wire.go b/cmd/gitness/wire.go similarity index 86% rename from cli/server/standalone.wire.go rename to cmd/gitness/wire.go index 963ce1ae5..ce844c963 100644 --- a/cli/server/standalone.wire.go +++ b/cmd/gitness/wire.go @@ -2,14 +2,15 @@ // Use of this source code is governed by the Polyform Free Trial License // that can be found in the LICENSE.md file for this repository. -//go:build wireinject && !harness -// +build wireinject,!harness +//go:build wireinject +// +build wireinject -package server +package main import ( "context" + cliserver "github.com/harness/gitness/cli/server" "github.com/harness/gitness/events" "github.com/harness/gitness/gitrpc" gitrpcserver "github.com/harness/gitness/gitrpc/server" @@ -47,10 +48,10 @@ import ( "github.com/google/wire" ) -func initSystem(ctx context.Context, config *types.Config) (*system, error) { +func initSystem(ctx context.Context, config *types.Config) (*cliserver.System, error) { wire.Build( - newSystem, - ProvideRedis, + cliserver.NewSystem, + cliserver.ProvideRedis, bootstrap.WireSet, database.WireSet, cache.WireSet, @@ -71,15 +72,15 @@ func initSystem(ctx context.Context, config *types.Config) (*system, error) { authz.WireSet, gitevents.WireSet, pullreqevents.WireSet, - ProvideGitRPCServerConfig, + cliserver.ProvideGitRPCServerConfig, gitrpcserver.WireSet, - ProvideGitRPCClientConfig, + cliserver.ProvideGitRPCClientConfig, gitrpc.WireSet, store.WireSet, check.WireSet, - ProvideEventsConfig, + cliserver.ProvideEventsConfig, events.WireSet, - ProvideWebhookConfig, + cliserver.ProvideWebhookConfig, webhook.WireSet, githook.WireSet, lock.WireSet, @@ -88,5 +89,5 @@ func initSystem(ctx context.Context, config *types.Config) (*system, error) { gitrpccron.WireSet, checkcontroller.WireSet, ) - return &system{}, nil + return &cliserver.System{}, nil } diff --git a/cli/server/standalone.wire_gen.go b/cmd/gitness/wire_gen.go similarity index 84% rename from cli/server/standalone.wire_gen.go rename to cmd/gitness/wire_gen.go index 2d35ecc5a..c87896b6d 100644 --- a/cli/server/standalone.wire_gen.go +++ b/cmd/gitness/wire_gen.go @@ -1,15 +1,17 @@ // Code generated by Wire. DO NOT EDIT. -//go:build !wireinject && !harness -// +build !wireinject,!harness +//go:generate go run github.com/google/wire/cmd/wire +//go:build !wireinject +// +build !wireinject -package server +package main import ( "context" + "github.com/harness/gitness/cli/server" "github.com/harness/gitness/events" "github.com/harness/gitness/gitrpc" - server2 "github.com/harness/gitness/gitrpc/server" + server3 "github.com/harness/gitness/gitrpc/server" "github.com/harness/gitness/gitrpc/server/cron" check2 "github.com/harness/gitness/internal/api/controller/check" "github.com/harness/gitness/internal/api/controller/githook" @@ -27,7 +29,7 @@ import ( events3 "github.com/harness/gitness/internal/events/git" events2 "github.com/harness/gitness/internal/events/pullreq" "github.com/harness/gitness/internal/router" - "github.com/harness/gitness/internal/server" + server2 "github.com/harness/gitness/internal/server" "github.com/harness/gitness/internal/services" "github.com/harness/gitness/internal/services/codecomments" pullreq2 "github.com/harness/gitness/internal/services/pullreq" @@ -42,9 +44,13 @@ import ( "github.com/harness/gitness/types/check" ) -// Injectors from standalone.wire.go: +import ( + _ "github.com/mattn/go-sqlite3" +) -func initSystem(ctx context.Context, config *types.Config) (*system, error) { +// Injectors from wire.go: + +func initSystem(ctx context.Context, config *types.Config) (*server.System, error) { principalUID := check.ProvidePrincipalUIDCheck() authorizer := authz.ProvideAuthorizer() db, err := database.ProvideDatabase(ctx, config) @@ -68,7 +74,7 @@ func initSystem(ctx context.Context, config *types.Config) (*system, error) { pathCache := cache.ProvidePathCache(pathStore, pathTransformation) repoStore := database.ProvideRepoStore(db, pathCache) spaceStore := database.ProvideSpaceStore(db, pathCache) - gitrpcConfig, err := ProvideGitRPCClientConfig() + gitrpcConfig, err := server.ProvideGitRPCClientConfig() if err != nil { return nil, err } @@ -85,19 +91,19 @@ func initSystem(ctx context.Context, config *types.Config) (*system, error) { codeCommentView := database.ProvideCodeCommentView(db) pullReqReviewStore := database.ProvidePullReqReviewStore(db) pullReqReviewerStore := database.ProvidePullReqReviewerStore(db, principalInfoCache) - eventsConfig, err := ProvideEventsConfig() + eventsConfig, err := server.ProvideEventsConfig() if err != nil { return nil, err } - universalClient, err := ProvideRedis(config) + universalClient, err := server.ProvideRedis(config) if err != nil { return nil, err } - eventsSystem, err := events.ProvideSystem(eventsConfig, universalClient) + system, err := events.ProvideSystem(eventsConfig, universalClient) if err != nil { return nil, err } - reporter, err := events2.ProvideReporter(eventsSystem) + reporter, err := events2.ProvideReporter(system) if err != nil { return nil, err } @@ -105,17 +111,17 @@ func initSystem(ctx context.Context, config *types.Config) (*system, error) { mutexManager := lock.ProvideMutexManager(lockConfig, universalClient) migrator := codecomments.ProvideMigrator(gitrpcInterface) pullreqController := pullreq.ProvideController(db, provider, authorizer, pullReqStore, pullReqActivityStore, codeCommentView, pullReqReviewStore, pullReqReviewerStore, repoStore, principalStore, gitrpcInterface, reporter, mutexManager, migrator) - webhookConfig, err := ProvideWebhookConfig() + webhookConfig, err := server.ProvideWebhookConfig() if err != nil { return nil, err } webhookStore := database.ProvideWebhookStore(db) webhookExecutionStore := database.ProvideWebhookExecutionStore(db) - readerFactory, err := events3.ProvideReaderFactory(eventsSystem) + readerFactory, err := events3.ProvideReaderFactory(system) if err != nil { return nil, err } - eventsReaderFactory, err := events2.ProvideReaderFactory(eventsSystem) + eventsReaderFactory, err := events2.ProvideReaderFactory(system) if err != nil { return nil, err } @@ -124,7 +130,7 @@ func initSystem(ctx context.Context, config *types.Config) (*system, error) { return nil, err } webhookController := webhook2.ProvideController(webhookConfig, db, authorizer, webhookStore, webhookExecutionStore, repoStore, webhookService) - eventsReporter, err := events3.ProvideReporter(eventsSystem) + eventsReporter, err := events3.ProvideReporter(system) if err != nil { return nil, err } @@ -137,12 +143,12 @@ func initSystem(ctx context.Context, config *types.Config) (*system, error) { gitHandler := router.ProvideGitHandler(config, provider, repoStore, authenticator, authorizer, gitrpcInterface) webHandler := router.ProvideWebHandler(config) routerRouter := router.ProvideRouter(config, apiHandler, gitHandler, webHandler) - serverServer := server.ProvideServer(config, routerRouter) - serverConfig, err := ProvideGitRPCServerConfig() + serverServer := server2.ProvideServer(config, routerRouter) + serverConfig, err := server.ProvideGitRPCServerConfig() if err != nil { return nil, err } - server3, err := server2.ProvideServer(serverConfig) + server4, err := server3.ProvideServer(serverConfig) if err != nil { return nil, err } @@ -156,6 +162,6 @@ func initSystem(ctx context.Context, config *types.Config) (*system, error) { return nil, err } servicesServices := services.ProvideServices(webhookService, pullreqService) - serverSystem := newSystem(bootstrapBootstrap, serverServer, server3, manager, servicesServices) + serverSystem := server.NewSystem(bootstrapBootstrap, serverServer, server4, manager, servicesServices) return serverSystem, nil } diff --git a/scripts/wire/server/harness.sh b/scripts/wire/server/harness.sh deleted file mode 100755 index c21f88e3f..000000000 --- a/scripts/wire/server/harness.sh +++ /dev/null @@ -1,7 +0,0 @@ -#!/usr/bin/env sh - -echo "Updating cli/server/harness.wire_gen.go" -go run github.com/google/wire/cmd/wire gen -tags=harness -output_file_prefix="harness." github.com/harness/gitness/cli/server -perl -ni -e 'print unless /go:generate/' cli/server/harness.wire_gen.go -perl -i -pe's/\+build !wireinject/\+build !wireinject,harness/g' cli/server/harness.wire_gen.go -perl -i -pe's/go:build !wireinject/go:build !wireinject && harness/g' cli/server/harness.wire_gen.go \ No newline at end of file diff --git a/scripts/wire/server/standalone.sh b/scripts/wire/server/standalone.sh index ba01dad78..ed3f58866 100755 --- a/scripts/wire/server/standalone.sh +++ b/scripts/wire/server/standalone.sh @@ -1,7 +1,4 @@ #!/usr/bin/env sh -echo "Updating cli/server/standalone.wire_gen.go" -go run github.com/google/wire/cmd/wire gen -tags= -output_file_prefix="standalone." github.com/harness/gitness/cli/server -perl -ni -e 'print unless /go:generate/' cli/server/standalone.wire_gen.go -perl -i -pe's/\+build !wireinject/\+build !wireinject,!harness/g' cli/server/standalone.wire_gen.go -perl -i -pe's/go:build !wireinject/go:build !wireinject && !harness/g' cli/server/standalone.wire_gen.go \ No newline at end of file +echo "Updating cmd/gitness/wire_gen.go" +go run github.com/google/wire/cmd/wire gen github.com/harness/gitness/cmd/gitness \ No newline at end of file