8000 feat: refactor by darkmatterpool · Pull Request #46 · formancehq/payments · GitHub
[go: up one dir, main page]
More Web Proxy on the site http://driver.im/
Skip to content

feat: refactor #46

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and c 8000 ontact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 9 commits into from
Oct 21, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 14 additions & 1 deletion .github/workflows/pr-open.yml
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,20 @@ jobs:
uses: formancehq/gh-workflows/.github/workflows/pr-style.yml@main

lint:
uses: formancehq/gh-workflows/.github/workflows/golang-lint.yml@main
# Temporary disabled due to outdated shared version
# uses: formancehq/gh-workflows/.github/workflows/golang-lint.yml@main
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: actions/setup-go@v3
with:
go-version-file: 'go.mod'
cache: true
- name: golangci-lint
uses: golangci/golangci-lint-action@v3
with:
version: v1.50.0
args: --verbose

test:
uses: formancehq/gh-workflows/.github/workflows/golang-test.yml@main
Expand Down
106 changes: 102 additions & 4 deletions .golangci.yml
Original file line number Diff line number Diff line change
@@ -1,8 +1,106 @@
linters-settings:
dupl:
threshold: 30
funlen:
lines: 150
statements: 30
goconst:
min-len: 2
min-occurrences: 2
gocritic:
enabled-tags:
- diagnostic
- experimental
- opinionated
- performance
- style
cyclop:
max-complexity: 20
gocyclo:
min-complexity: 20
goimports:
local-prefixes: github.com/numary/payments
govet:
check-shadowing: true
lll:
line-length: 120
nakedret:
max-func-lines: 0
tagliatelle:
case:
rules:
json: goCamel
yaml: goCamel
bson: goCamel
gomnd:
ignored-numbers:
- '2'
- '5'
- '10'
- '100'
- '64'
- '256'
- '512'
varnamelen:
ignore-names:
- id
- i
- db
- m
- r
- c
- fn
- w
- h
- to
- fs

linters:
enable:
- gofmt
- gci
- goimports
enable-all: true
disable:
- deadcode # deprecated
- maligned #deprecated
- golint # deprecated
- ifshort # deprecated
- structcheck # deprecated
- varcheck # deprecated
- interfacer # deprecated
- scopelint #deprecated
- nosnakecase # deprecated
- rowserrcheck # disabled due to generics
- sqlclosecheck # disabled due to generics
- structcheck # disabled due to generics
- wastedassign # disabled due to generics
- gci # conflicts with gofumpt
- goimports # conflicts with gofumpt
- testpackage # Disabled by design
- wrapcheck # Disabled by design
- exhaustivestruct # Disabled by design
- exhaustruct # Disabled by design
- exhaustive # Disabled by design
- dupl # Disabled by design
- godox # Disabled by design
- lll # Disabled by design
- funlen # Disabled by design
- misspell # Disabled by design
- ireturn # Disabled by design
- gocritic # TODO: FIX. Seems to have issues with generics
- gocognit # TODO: FIX
- goerr113 # TODO: FIX
- noctx # TODO: FIX
- contextcheck # TODO: FIX
- containedctx # TODO: FIX

issues:
exclude-rules:
- path: _test\.go
linters:
- goerr113
- varnamelen

- linters:
- nolintlint
text: "should be written without leading space"

run:
timeout: 5m
30 changes: 19 additions & 11 deletions Dockerfile
Original file line number Diff line number Diff line change
@@ -1,33 +1,41 @@
FROM --platform=$BUILDPLATFORM golang:1.18 AS builder
FROM golang:1.19.2-bullseye AS builder

RUN apt-get update && \
apt-get install -y gcc-aarch64-linux-gnu gcc-x86-64-linux-gnu && \
ln -s /usr/bin/aarch64-linux-gnu-gcc /usr/bin/arm64-linux-gnu-gcc && \
ln -s /usr/bin/x86_64-linux-gnu-gcc /usr/bin/amd64-linux-gnu-gcc

# 1. Precompile the entire go standard library into the first Docker cache layer: useful for other projects too!
RUN CGO_ENABLED=0 GOOS=linux go install -v -installsuffix cgo -a std

ARG TARGETARCH
ARG APP_SHA
ARG VERSION

WORKDIR /go/src/github.com/numary/payments

# get deps first so it's cached
COPY go.mod .
COPY go.sum .
RUN --mount=type=cache,id=gomod,target=/go/bridge/mod \
--mount=type=cache,id=gobuild,target=/root/.cache/go-build \
go mod download

RUN go mod download

COPY . .
RUN --mount=type=cache,id=gomod,target=/go/bridge/mod \
--mount=type=cache,id=gobuild,target=/root/.cache/go-build \
CGO_ENABLED=0 GOOS=linux GOARCH=$TARGETARCH \

RUN CGO_ENABLED=0 GOOS=linux GOARCH=$TARGETARCH \
CC=$TARGETARCH-linux-gnu-gcc \
go build -o payments \
go build -o bin/payments \
-ldflags="-X github.com/numary/payments/cmd.Version=${VERSION} \
-X github.com/numary/payments/cmd.BuildDate=$(date +%s) \
-X github.com/numary/payments/cmd.Commit=${APP_SHA}" ./

FROM ubuntu:jammy
RUN apt update && apt install -y ca-certificates && rm -rf /var/lib/apt/lists/*
COPY --from=builder /go/src/github.com/numary/payments/payments /usr/local/bin/payments
FROM scratch

COPY --from=builder /etc/ssl/certs/ca-certificates.crt /etc/ssl/certs/
COPY --from=builder /go/src/github.com/numary/payments/bin/payments /usr/local/bin/payments

EXPOSE 8080

ENTRYPOINT ["payments"]

CMD ["server"]
9 changes: 9 additions & 0 deletions Makefile
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
docker-build:
DOCKER_BUILDKIT=1 docker build -t payments:local --build-arg BUILDPLATFORM=amd64 .

lint:
golangci-lint run

lint-fix:
golangci-lint run --fix

47 changes: 30 additions & 17 deletions cmd/root.go
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
//nolint:gochecknoglobals,golint,revive // allow for cobra & logrus init
package cmd

import (
Expand All @@ -20,7 +21,7 @@ var (
Commit = "-"
)

func NewRootCommand() *cobra.Command {
func rootCommand() *cobra.Command {
viper.SetDefault("version", Version)

root := &cobra.Command{
Expand All @@ -29,45 +30,56 @@ func NewRootCommand() *cobra.Command {
DisableAutoGenTag: true,
}

version := NewVersion()
version := newVersion()
root.AddCommand(version)
server := NewServer()

server := newServer()
root.AddCommand(server)

root.PersistentFlags().Bool(debugFlag, false, "Debug mode")
root.Flags().BoolP("toggle", "t", false, "Help message for toggle")
root.Flags().Bool(debugFlag, false, "Debug mode")
root.Flags().String(mongodbUriFlag, "mongodb://localhost:27017", "MongoDB address")
root.Flags().String(mongodbURIFlag, "mongodb://localhost:27017", "MongoDB address")
root.Flags().String(mongodbDatabaseFlag, "payments", "MongoDB database name")
root.Flags().Bool(otelTracesFlag, false, "Enable OpenTelemetry traces support")
root.Flags().String(otelTracesExporterFlag, "stdout", "OpenTelemetry traces exporter")
root.Flags().String(otelTracesExporterJaegerEndpointFlag, "", "OpenTelemetry traces Jaeger exporter endpoint")
root.Flags().String(otelTracesExporterJaegerUserFlag, "", "OpenTelemetry traces Jaeger exporter user")
root.Flags().String(otelTracesExporterJaegerPasswordFlag, "", "OpenTelemetry traces Jaeger exporter password")
root.Flags().String(otelTracesExporterOTLPModeFlag, "grpc", "OpenTelemetry traces OTLP exporter mode (grpc|http)")
root.Flags().String(otelTracesExporterOTLPEndpointFlag, "", "OpenTelemetry traces grpc endpoint")
root.Flags().Bool(otelTracesExporterOTLPInsecureFlag, false, "OpenTelemetry traces grpc insecure")
root.Flags().String(otelTracesExporterJaegerEndpointFlag,
"", "OpenTelemetry traces Jaeger exporter endpoint")
root.Flags().String(otelTracesExporterJaegerUserFlag,
"", "OpenTelemetry traces Jaeger exporter user")
root.Flags().String(otelTracesExporterJaegerPasswordFlag,
"", "OpenTelemetry traces Jaeger exporter password")
root.Flags().String(otelTracesExporterOTLPModeFlag,
"grpc", "OpenTelemetry traces OTLP exporter mode (grpc|http)")
root.Flags().String(otelTracesExporterOTLPEndpointFlag,
"", "OpenTelemetry traces grpc endpoint")
root.Flags().Bool(otelTracesExporterOTLPInsecureFlag,
false, "OpenTelemetry traces grpc insecure")
root.Flags().String(envFlag, "local", "Environment")
root.Flags().Bool(publisherKafkaEnabledFlag, false, "Publish write events to kafka")
root.Flags().StringSlice(publisherKafkaBrokerFlag, []string{}, "Kafka address is kafka enabled")
root.Flags().StringSlice(publisherTopicMappingFlag, []string{}, "Define mapping between internal event types and topics")
root.Flags().Bool(publisherHttpEnabledFlag, false, "Sent write event to http endpoint")
root.Flags().StringSlice(publisherTopicMappingFlag,
[]string{}, "Define mapping between internal event types and topics")
root.Flags().Bool(publisherHTTPEnabledFlag, false, "Sent write event to http endpoint")
root.Flags().Bool(publisherKafkaSASLEnabled, false, "Enable SASL authentication on kafka publisher")
root.Flags().String(publisherKafkaSASLUsername, "", "SASL username")
root.Flags().String(publisherKafkaSASLPassword, "", "SASL password")
root.Flags().String(publisherKafkaSASLMechanism, "", "SASL authentication mechanism")
root.Flags().Int(publisherKafkaSASLScramSHASize, 512, "SASL SCRAM SHA size")
root.Flags().Bool(publisherKafkaTLSEnabled, false, "Enable TLS to connect on kafka")
root.Flags().Bool(authBasicEnabledFlag, false, "Enable basic auth")
root.Flags().StringSlice(authBasicCredentialsFlag, []string{}, "HTTP basic auth credentials (<username>:<password>)")
root.Flags().StringSlice(authBasicCredentialsFlag, []string{},
"HTTP basic auth credentials (<username>:<password>)")
root.Flags().Bool(authBearerEnabledFlag, false, "Enable bearer auth")
root.Flags().String(authBearerIntrospectUrlFlag, "", "OAuth2 introspect URL")
root.Flags().String(authBearerIntrospectURLFlag, "", "OAuth2 introspect URL")
root.Flags().StringSlice(authBearerAudienceFlag, []string{}, "Allowed audiences")
root.Flags().Bool(authBearerAudiencesWildcardFlag, false, "Don't check audience")
root.Flags().Bool(authBearerUseScopesFlag, false, "Use scopes as defined by rfc https://datatracker.ietf.org/doc/html/rfc8693")
root.Flags().Bool(authBearerUseScopesFlag,
false, "Use scopes as defined by rfc https://datatracker.ietf.org/doc/html/rfc8693")

viper.SetEnvKeyReplacer(strings.NewReplacer(".", "_", "-", "_"))
viper.AutomaticEnv()

err := viper.BindPFlags(root.Flags())
if err != nil {
panic(err)
Expand All @@ -77,10 +89,11 @@ func NewRootCommand() *cobra.Command {
}

func Execute() {
if err := NewRootCommand().Execute(); err != nil {
if _, err := fmt.Fprintln(os.Stderr, err); err != nil {
if err := rootCommand().Execute(); err != nil {
if _, err = fmt.Fprintln(os.Stderr, err); err != nil {
panic(err)
}

os.Exit(1)
}
}
Loading
0