Skip to content

Commit

Permalink
fix-lint: added golangci-lint
Browse files Browse the repository at this point in the history
  • Loading branch information
F1bonacc1 committed Oct 3, 2024
1 parent f3a41fd commit 0e68b4d
Show file tree
Hide file tree
Showing 19 changed files with 349 additions and 99 deletions.
12 changes: 11 additions & 1 deletion Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ endif
buildrun: build run

setup:
go mod tidy
go mod download

ci: setup build testrace

Expand Down Expand Up @@ -88,16 +88,26 @@ docs:
for f in ${DOCS_DIR}/*.md ; do sed -i 's/${USER}/<user>/g' $$f ; done
for f in ${DOCS_DIR}/*.md ; do sed -i 's/process-compose-[0-9]\+.sock/process-compose-<pid>.sock/g' $$f ; done

lint: golangci-lint
./bin/golangci-lint run --show-stats -c golangci.yaml

## Location to install dependencies to
LOCALBIN ?= $(shell pwd)/bin
$(LOCALBIN):
mkdir -p $(LOCALBIN)

## Tool Binaries
SWAG2OP_GEN ?= $(LOCALBIN)/swag2op
GOLANGCI_LINT ?= $(LOCALBIN)/golangci-lint

.PHONY: swag2op
swag2op: $(SWAG2OP_GEN) ## Download swag2op locally if necessary.
$(SWAG2OP_GEN): $(LOCALBIN)
test -s $(LOCALBIN)/swag2op || \
GOBIN=$(LOCALBIN) go install github.com/zxmfke/swagger2openapi3/cmd/swag2op@latest

.PHONY: golangci-lint
golangci-lint: $(GOLANGCI_LINT) ## Download golangci-lint locally if necessary.
$(GOLANGCI_LINT): $(LOCALBIN)
test -s $(LOCALBIN)/golangci-lint || \
GOBIN=$(LOCALBIN) go install github.com/golangci/golangci-lint/cmd/golangci-lint@v1.61.0
111 changes: 111 additions & 0 deletions golangci.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,111 @@
linters:
disable-all: true
# Enable specific linter
# https://golangci-lint.run/usage/linters/#enabled-by-default
enable:
- asasalint
- asciicheck
- bidichk
# - bodyclose
- canonicalheader
# - containedctx
- contextcheck
# - copyloopvar
# - cyclop
- decorder
# - depguard
# - dogsled
# - dupl
- dupword
- durationcheck
# - err113
- errcheck
- errchkjson
- errname
# - errorlint
# - execinquery
# - exhaustive
# - exhaustruct
# - exportloopref
- fatcontext
# - forbidigo
# - forcetypeassert
# - funlen
# - gci
- ginkgolinter
- gocheckcompilerdirectives
# - gochecknoglobals
# - gochecknoinits
- gochecksumtype
# - gocognit
# - goconst
# - gocritic
- gocyclo
# - godot
# - godox
# - gofmt
# - gofumpt
- goheader
# - goimports
# - gomoddirectives
- gomodguard
# - goprintffuncname
# - gosec
- gosimple
- gosmopolitan
- govet
- grouper
- importas
# - inamedparam
- ineffassign
# - interfacebloat
# - intrange
# - ireturn
# - lll
- loggercheck
- maintidx
# - makezero
- mirror
- misspell
# - mnd
# - musttag
- nakedret
# - nestif
- nilerr
# - nilnil
# - nlreturn
# - noctx
- nolintlint
# - nonamedreturns
- nosprintfhostport
# - paralleltest
# - perfsprint
# - prealloc
# - predeclared
- promlinter
- protogetter
- reassign
# - revive
- rowserrcheck
- sloglint
- spancheck
- sqlclosecheck
- staticcheck
# - stylecheck
# - tagalign
- tenv
- testableexamples
- testifylint
# - testpackage
# - thelper
- tparallel
- unconvert
# - unparam
# - unused
- usestdlibvars
# - varnamelen
- wastedassign
# - whitespace
# - wrapcheck
# - wsl
- zerologlint
2 changes: 1 addition & 1 deletion src/api/pc_api.go
Original file line number Diff line number Diff line change
Expand Up @@ -315,7 +315,7 @@ func (api *PcApi) GetProcessPorts(c *gin.Context) {
// @Success 200 {object} map[string]string "Stopped Server"
// @Router /project/stop [post]
func (api *PcApi) ShutDownProject(c *gin.Context) {
api.project.ShutDownProject()
_ = api.project.ShutDownProject()
c.JSON(http.StatusOK, gin.H{"status": "stopped"})
}

Expand Down
14 changes: 12 additions & 2 deletions src/api/ws_api.go
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package api

import (
"github.com/f1bonacc1/process-compose/src/app"
"github.com/f1bonacc1/process-compose/src/pclog"
"github.com/gin-gonic/gin"
"github.com/gorilla/websocket"
Expand Down Expand Up @@ -64,11 +65,20 @@ func (api *PcApi) HandleLogsStream(c *gin.Context) {
if follow {
go handleIncoming(ws, done)
}
api.project.GetLogsAndSubscribe(procName, connector)
err = api.project.GetLogsAndSubscribe(procName, connector)
if err != nil {
log.Err(err).Msg("Failed to subscribe to logger")
return
}
}

func (api *PcApi) handleLog(ws *websocket.Conn, procName string, connector *pclog.Connector, logChan chan LogMessage, done chan struct{}) {
defer api.project.UnSubscribeLogger(procName, connector)
defer func(project app.IProject, name string, observer pclog.LogObserver) {
err := project.UnSubscribeLogger(name, observer)
if err != nil {
log.Err(err).Msg("Failed to unsubscribe from logger")
}
}(api.project, procName, connector)
defer ws.Close()
for {
select {
Expand Down
13 changes: 12 additions & 1 deletion src/app/process.go
Original file line number Diff line number Diff line change
Expand Up @@ -562,7 +562,7 @@ func (p *Process) handleInput(pipe io.WriteCloser) {
Msg("error reading from stdin")
continue
}
pipe.Write([]byte(input))
_, _ = pipe.Write([]byte(input))
}
}

Expand Down Expand Up @@ -663,6 +663,17 @@ func (p *Process) getState() *types.ProcessState {
return p.procState
}

type filterFn func(*types.ProcessState)

func (p *Process) getStateData(filter filterFn) {
p.updateProcState()
p.stateMtx.Lock()
defer p.stateMtx.Unlock()
if filter != nil {
filter(p.procState)
}
}

func (p *Process) getStatusName() string {
p.updateProcState()
p.stateMtx.Lock()
Expand Down
4 changes: 2 additions & 2 deletions src/app/project_opts.go
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,6 @@ func (p *ProjectOpts) WithOrderedShutDown(isOrderedShutDown bool) *ProjectOpts {
return p
}

func (o *ProjectOpts) WithDotEnvDisabled(disabled bool) {
o.disableDotenv = disabled
func (p *ProjectOpts) WithDotEnvDisabled(disabled bool) {
p.disableDotenv = disabled
}
34 changes: 32 additions & 2 deletions src/app/project_runner.go
Original file line number Diff line number Diff line change
Expand Up @@ -63,7 +63,9 @@ func (p *ProjectRunner) init() {
}

func (p *ProjectRunner) Run() error {
p.runProcMutex.Lock()
p.runningProcesses = make(map[string]*Process)
p.runProcMutex.Unlock()
runOrder := []types.ProcessConfig{}
err := p.project.WithProcesses([]string{}, func(process types.ProcessConfig) error {
runOrder = append(runOrder, process)
Expand Down Expand Up @@ -186,14 +188,14 @@ func (p *ProjectRunner) waitIfNeeded(process *types.ProcessConfig) error {
func (p *ProjectRunner) onProcessEnd(exitCode int, procConf *types.ProcessConfig) {
if (exitCode != 0 && procConf.RestartPolicy.Restart == types.RestartPolicyExitOnFailure) ||
procConf.RestartPolicy.ExitOnEnd {
p.ShutDownProject()
_ = p.ShutDownProject()
p.exitCode = exitCode
}
}

func (p *ProjectRunner) onProcessSkipped(procConf *types.ProcessConfig) {
if procConf.RestartPolicy.ExitOnSkipped {
p.ShutDownProject()
_ = p.ShutDownProject()
p.exitCode = 1
}
}
Expand Down Expand Up @@ -234,6 +236,24 @@ func (p *ProjectRunner) GetProcessState(name string) (*types.ProcessState, error
}
}

func (p *ProjectRunner) getProcessStateData(name string, filter filterFn) error {
proc := p.getRunningProcess(name)
if proc != nil {
proc.getStateData(filter)
} else {
p.statesMutex.Lock()
defer p.statesMutex.Unlock()
state, ok := p.processStates[name]
if !ok {
log.Error().Msgf("Error: process %s doesn't exist", name)
return fmt.Errorf("can't get state of process %s: no such process", name)
}
filter(state)
return nil
}
return nil
}

func (p *ProjectRunner) GetProcessesState() (*types.ProcessesState, error) {
states := &types.ProcessesState{
States: make([]types.ProcessState, 0),
Expand All @@ -249,6 +269,16 @@ func (p *ProjectRunner) GetProcessesState() (*types.ProcessesState, error) {
return states, nil
}

func (p *ProjectRunner) getProcessesStateData(filter filterFn) error {
for name := range p.project.Processes {
err := p.getProcessStateData(name, filter)
if err != nil {
return err
}
}
return nil
}

func (p *ProjectRunner) addRunningProcess(process *Process) {
p.runProcMutex.Lock()
p.runningProcesses[process.getName()] = process
Expand Down
Loading

0 comments on commit 0e68b4d

Please sign in to comment.