diff --git a/.github/workflows/docker.yml b/.github/workflows/docker.yml deleted file mode 100644 index 7a345ce..0000000 --- a/.github/workflows/docker.yml +++ /dev/null @@ -1,17 +0,0 @@ -name: Docker -on: - pull_request: - paths: - - Dockerfile -jobs: - hadolint: - name: Dockerfile lint - runs-on: ubuntu-latest - steps: - - name: checkout - uses: actions/checkout@v3 - - name: hadolint - uses: reviewdog/action-hadolint@v1 - with: - reporter: github-pr-review - hadolint_flags: Dockerfile diff --git a/Dockerfile b/Dockerfile deleted file mode 100644 index ca8a625..0000000 --- a/Dockerfile +++ /dev/null @@ -1,16 +0,0 @@ -FROM golang:1.19 as builder - -WORKDIR /go/src/app - -COPY . . - -RUN CGO_ENABLED=0 GOOS=linux go build -mod=readonly -v -tags netgo -ldflags '-s -w -extldflags "-static"' -o app ./cmd/app - -FROM gcr.io/distroless/static-debian11:nonroot as runner - -WORKDIR / - -COPY --from=builder /go/src/app/sample.env /sample.env -COPY --from=builder /go/src/app/app /app - -ENTRYPOINT ["/app"] diff --git a/Makefile b/Makefile index c1fbefc..f504d74 100644 --- a/Makefile +++ b/Makefile @@ -2,16 +2,6 @@ format: $(call format) -.PHONY: generate.mock -generate.mock: - @go generate ./domain/... - $(call format) - -.PHONY: generate.wire -generate.wire: - @go run github.com/google/wire/cmd/wire ./... - $(call format) - define format @go run mvdan.cc/gofumpt -l -w . @go run golang.org/x/tools/cmd/goimports -w . diff --git a/cmd/app/main.go b/cmd/app/main.go deleted file mode 100644 index 01e0657..0000000 --- a/cmd/app/main.go +++ /dev/null @@ -1,10 +0,0 @@ -package main - -func main() { - app, err := initialize() - if err != nil { - panic(err) - } - - app.logger.Info("Hello, World!", app.logger.Field("config", app.config.Config())) -} diff --git a/cmd/app/wire.go b/cmd/app/wire.go deleted file mode 100644 index 0f2104e..0000000 --- a/cmd/app/wire.go +++ /dev/null @@ -1,29 +0,0 @@ -//go:build wireinject -// +build wireinject - -package main - -import ( - domainconfiguration "github.com/Pranc1ngPegasus/golang-template/domain/configuration" - domainlogger "github.com/Pranc1ngPegasus/golang-template/domain/logger" - "github.com/Pranc1ngPegasus/golang-template/infra/configuration" - "github.com/Pranc1ngPegasus/golang-template/infra/logger" - "github.com/google/wire" -) - -type app struct { - logger domainlogger.Logger - config domainconfiguration.Configuration -} - -func initialize() (*app, error) { - wire.Build( - logger.NewLoggerSet, - - configuration.NewConfigurationSet, - - wire.Struct(new(app), "*"), - ) - - return nil, nil -} diff --git a/cmd/app/wire_gen.go b/cmd/app/wire_gen.go deleted file mode 100644 index 22bd8c3..0000000 --- a/cmd/app/wire_gen.go +++ /dev/null @@ -1,39 +0,0 @@ -// Code generated by Wire. DO NOT EDIT. - -//go:generate go run github.com/google/wire/cmd/wire -//go:build !wireinject -// +build !wireinject - -package main - -import ( - configuration2 "github.com/Pranc1ngPegasus/golang-template/domain/configuration" - logger2 "github.com/Pranc1ngPegasus/golang-template/domain/logger" - "github.com/Pranc1ngPegasus/golang-template/infra/configuration" - "github.com/Pranc1ngPegasus/golang-template/infra/logger" -) - -// Injectors from wire.go: - -func initialize() (*app, error) { - loggerLogger, err := logger.NewLogger() - if err != nil { - return nil, err - } - configurationConfiguration, err := configuration.NewConfiguration(loggerLogger) - if err != nil { - return nil, err - } - mainApp := &app{ - logger: loggerLogger, - config: configurationConfiguration, - } - return mainApp, nil -} - -// wire.go: - -type app struct { - logger logger2.Logger - config configuration2.Configuration -} diff --git a/domain/configuration/configuration.go b/domain/configuration/configuration.go deleted file mode 100644 index fc8ed49..0000000 --- a/domain/configuration/configuration.go +++ /dev/null @@ -1,13 +0,0 @@ -//go:generate go run github.com/golang/mock/mockgen -source=$GOFILE -destination=mock/$GOFILE -package=mock - -package configuration - -type Configuration interface { - Config() *Config -} - -type ( - Config struct { - Debug bool `mapstructure:"DEBUG"` - } -) diff --git a/domain/configuration/mock/configuration.go b/domain/configuration/mock/configuration.go deleted file mode 100644 index 710d9cd..0000000 --- a/domain/configuration/mock/configuration.go +++ /dev/null @@ -1,49 +0,0 @@ -// Code generated by MockGen. DO NOT EDIT. -// Source: configuration.go - -// Package mock is a generated GoMock package. -package mock - -import ( - reflect "reflect" - - configuration "github.com/Pranc1ngPegasus/golang-template/domain/configuration" - gomock "github.com/golang/mock/gomock" -) - -// MockConfiguration is a mock of Configuration interface -type MockConfiguration struct { - ctrl *gomock.Controller - recorder *MockConfigurationMockRecorder -} - -// MockConfigurationMockRecorder is the mock recorder for MockConfiguration -type MockConfigurationMockRecorder struct { - mock *MockConfiguration -} - -// NewMockConfiguration creates a new mock instance -func NewMockConfiguration(ctrl *gomock.Controller) *MockConfiguration { - mock := &MockConfiguration{ctrl: ctrl} - mock.recorder = &MockConfigurationMockRecorder{mock} - return mock -} - -// EXPECT returns an object that allows the caller to indicate expected use -func (m *MockConfiguration) EXPECT() *MockConfigurationMockRecorder { - return m.recorder -} - -// Config mocks base method -func (m *MockConfiguration) Config() *configuration.Config { - m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "Config") - ret0, _ := ret[0].(*configuration.Config) - return ret0 -} - -// Config indicates an expected call of Config -func (mr *MockConfigurationMockRecorder) Config() *gomock.Call { - mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Config", reflect.TypeOf((*MockConfiguration)(nil).Config)) -} diff --git a/domain/logger/logger.go b/domain/logger/logger.go deleted file mode 100644 index 9874e54..0000000 --- a/domain/logger/logger.go +++ /dev/null @@ -1,16 +0,0 @@ -//go:generate go run github.com/golang/mock/mockgen -source=$GOFILE -destination=mock/$GOFILE -package=mock - -package logger - -type Logger interface { - Field(string, interface{}) Field - Info(string, ...Field) - Error(string, error, ...Field) -} - -type ( - Field struct { - Key string - Interface interface{} - } -) diff --git a/domain/logger/mock/logger.go b/domain/logger/mock/logger.go deleted file mode 100644 index 8317fe8..0000000 --- a/domain/logger/mock/logger.go +++ /dev/null @@ -1,83 +0,0 @@ -// Code generated by MockGen. DO NOT EDIT. -// Source: logger.go - -// Package mock is a generated GoMock package. -package mock - -import ( - reflect "reflect" - - logger "github.com/Pranc1ngPegasus/golang-template/domain/logger" - gomock "github.com/golang/mock/gomock" -) - -// MockLogger is a mock of Logger interface -type MockLogger struct { - ctrl *gomock.Controller - recorder *MockLoggerMockRecorder -} - -// MockLoggerMockRecorder is the mock recorder for MockLogger -type MockLoggerMockRecorder struct { - mock *MockLogger -} - -// NewMockLogger creates a new mock instance -func NewMockLogger(ctrl *gomock.Controller) *MockLogger { - mock := &MockLogger{ctrl: ctrl} - mock.recorder = &MockLoggerMockRecorder{mock} - return mock -} - -// EXPECT returns an object that allows the caller to indicate expected use -func (m *MockLogger) EXPECT() *MockLoggerMockRecorder { - return m.recorder -} - -// Field mocks base method -func (m *MockLogger) Field(arg0 string, arg1 interface{}) logger.Field { - m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "Field", arg0, arg1) - ret0, _ := ret[0].(logger.Field) - return ret0 -} - -// Field indicates an expected call of Field -func (mr *MockLoggerMockRecorder) Field(arg0, arg1 interface{}) *gomock.Call { - mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Field", reflect.TypeOf((*MockLogger)(nil).Field), arg0, arg1) -} - -// Info mocks base method -func (m *MockLogger) Info(arg0 string, arg1 ...logger.Field) { - m.ctrl.T.Helper() - varargs := []interface{}{arg0} - for _, a := range arg1 { - varargs = append(varargs, a) - } - m.ctrl.Call(m, "Info", varargs...) -} - -// Info indicates an expected call of Info -func (mr *MockLoggerMockRecorder) Info(arg0 interface{}, arg1 ...interface{}) *gomock.Call { - mr.mock.ctrl.T.Helper() - varargs := append([]interface{}{arg0}, arg1...) - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Info", reflect.TypeOf((*MockLogger)(nil).Info), varargs...) -} - -// Error mocks base method -func (m *MockLogger) Error(arg0 string, arg1 error, arg2 ...logger.Field) { - m.ctrl.T.Helper() - varargs := []interface{}{arg0, arg1} - for _, a := range arg2 { - varargs = append(varargs, a) - } - m.ctrl.Call(m, "Error", varargs...) -} - -// Error indicates an expected call of Error -func (mr *MockLoggerMockRecorder) Error(arg0, arg1 interface{}, arg2 ...interface{}) *gomock.Call { - mr.mock.ctrl.T.Helper() - varargs := append([]interface{}{arg0, arg1}, arg2...) - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Error", reflect.TypeOf((*MockLogger)(nil).Error), varargs...) -} diff --git a/infra/configuration/configuration.go b/infra/configuration/configuration.go deleted file mode 100644 index 939946f..0000000 --- a/infra/configuration/configuration.go +++ /dev/null @@ -1,50 +0,0 @@ -package configuration - -import ( - "fmt" - - domain "github.com/Pranc1ngPegasus/golang-template/domain/configuration" - "github.com/Pranc1ngPegasus/golang-template/domain/logger" - "github.com/google/wire" - "github.com/spf13/viper" -) - -var _ domain.Configuration = (*Configuration)(nil) - -var NewConfigurationSet = wire.NewSet( - wire.Bind(new(domain.Configuration), new(*Configuration)), - NewConfiguration, -) - -type Configuration struct { - config *domain.Config -} - -func NewConfiguration( - logger logger.Logger, -) (*Configuration, error) { - viper.SetConfigFile("sample.env") - viper.AutomaticEnv() - - if err := viper.ReadInConfig(); err != nil { - logger.Error("failed to load environment variable", err) - - return nil, fmt.Errorf("failed to load environment variable: %w", err) - } - - var config domain.Config - - if err := viper.Unmarshal(&config); err != nil { - logger.Error("failed to unmarshal environment variable", err) - - return nil, fmt.Errorf("failed to unmarshal environment variable: %w", err) - } - - return &Configuration{ - config: &config, - }, nil -} - -func (c *Configuration) Config() *domain.Config { - return c.config -} diff --git a/infra/logger/logger.go b/infra/logger/logger.go deleted file mode 100644 index ba119d6..0000000 --- a/infra/logger/logger.go +++ /dev/null @@ -1,70 +0,0 @@ -package logger - -import ( - "fmt" - - domain "github.com/Pranc1ngPegasus/golang-template/domain/logger" - "github.com/google/wire" - "github.com/samber/lo" - "go.uber.org/zap" -) - -var _ domain.Logger = (*Logger)(nil) - -type Logger struct { - logger *zap.Logger -} - -var NewLoggerSet = wire.NewSet( - wire.Bind(new(domain.Logger), new(*Logger)), - NewLogger, -) - -func NewLogger() (*Logger, error) { - log, err := zap.NewProduction() - if err != nil { - return nil, fmt.Errorf("failed to initialize logger: %w", err) - } - - return &Logger{ - logger: log, - }, nil -} - -func (l *Logger) Field(key string, message interface{}) domain.Field { - return domain.Field{ - Key: key, - Interface: message, - } -} - -func (l *Logger) field(field domain.Field) zap.Field { - switch i := field.Interface.(type) { - case string: - return zap.String(field.Key, i) - case int: - return zap.Int(field.Key, i) - case bool: - return zap.Bool(field.Key, i) - default: - return zap.Any(field.Key, i) - } -} - -func (l *Logger) Info(message string, fields ...domain.Field) { - zapfields := lo.Map(fields, func(field domain.Field, _ int) zap.Field { - return l.field(field) - }) - - l.logger.Info(message, zapfields...) -} - -func (l *Logger) Error(message string, err error, fields ...domain.Field) { - zapfields := lo.Map(fields, func(field domain.Field, _ int) zap.Field { - return l.field(field) - }) - - zapfields = append(zapfields, zap.Error(err)) - - l.logger.Error(message, zapfields...) -} diff --git a/main.go b/main.go new file mode 100644 index 0000000..06ab7d0 --- /dev/null +++ b/main.go @@ -0,0 +1 @@ +package main diff --git a/sample.env b/sample.env deleted file mode 100644 index 99d137a..0000000 --- a/sample.env +++ /dev/null @@ -1 +0,0 @@ -DEBUG=true diff --git a/tools/tools.go b/tools/tools.go index 4e855ab..fe0177f 100644 --- a/tools/tools.go +++ b/tools/tools.go @@ -4,8 +4,6 @@ package tools import ( - _ "github.com/golang/mock/mockgen" - _ "github.com/google/wire/cmd/wire" _ "golang.org/x/tools/cmd/goimports" _ "mvdan.cc/gofumpt" )