[MAINT] Isolate harness app into harness package (#133)

jobatzil/rename
Enver Bisevac 2023-06-15 13:35:12 +00:00 committed by Harness
parent eb3cad3bec
commit 43f0be35e0
17 changed files with 169 additions and 525 deletions

View File

@ -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"

7
.vscode/launch.json vendored
View File

@ -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"]
}

106
Makefile
View File

@ -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:

View File

@ -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:]

View File

@ -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
}

View File

@ -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
}

View File

@ -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
}

View File

@ -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)
}

View File

@ -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,

View File

@ -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").

View File

@ -8,11 +8,5 @@
package main
import (
"github.com/harness/gitness/cli"
_ "github.com/lib/pq"
)
func main() {
cli.Command()
}

View File

@ -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"
)

View File

@ -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))
}

View File

@ -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
}

View File

@ -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
}

View File

@ -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

View File

@ -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
echo "Updating cmd/gitness/wire_gen.go"
go run github.com/google/wire/cmd/wire gen github.com/harness/gitness/cmd/gitness