diff --git a/.github/workflows/basic_check.yml b/.github/workflows/basic_check.yml new file mode 100644 index 0000000..3ba1737 --- /dev/null +++ b/.github/workflows/basic_check.yml @@ -0,0 +1,43 @@ +name: basic-check + +on: + push: + branches: + - master + pull_request: + branches: + - '**' + +jobs: + check: + runs-on: ubuntu-22.04 + steps: + - uses: actions/checkout@v4 + + - name: Set up Go + uses: actions/setup-go@v4 + with: + go-version: '1.20.9' + cache: true + + - name: install deps + run: | + sudo apt-get update + sudo apt-get -o Acquire::Retries=3 install make gcc git curl wget -y + + - name: Build + env: + GOPROXY: "https://proxy.golang.org,direct" + GO111MODULE: "on" + run: | + make build + + - name: Lint + run: | + curl -sSfL https://raw.githubusercontent.com/golangci/golangci-lint/master/install.sh | sh -s -- -d -b $(go env GOPATH)/bin v1.55.1 + golangci-lint run --timeout 10m + + - name: Detect changes + run: | + git status --porcelain + test -z "$(git status --porcelain)" diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml new file mode 100644 index 0000000..03f2143 --- /dev/null +++ b/.github/workflows/test.yml @@ -0,0 +1,46 @@ +name: basic-check + +on: + push: + branches: + - master + pull_request: + branches: + - '**' + +jobs: + test: + runs-on: ubuntu-22.04 + steps: + - uses: actions/checkout@v4 + + - name: Set up Go + uses: actions/setup-go@v4 + with: + go-version: '1.20.9' + cache: true + + - name: install deps + run: | + sudo apt-get update + sudo apt-get -o Acquire::Retries=3 install make gcc git curl wget -y + + - name: Build + env: + GOPROXY: "https://proxy.golang.org,direct" + GO111MODULE: "on" + run: | + make build + + - name: Test + run: | + go test -coverpkg=./... -coverprofile=coverage.txt -covermode=atomic -timeout=30m -parallel=4 -v ./... + + - name: Upload + uses: codecov/codecov-action@v3 + with: + token: + files: ./coverage.txt + name: jzfs + fail_ci_if_error: true + verbose: true diff --git a/.gitignore b/.gitignore index 73da75d..8dbb396 100644 --- a/.gitignore +++ b/.gitignore @@ -16,8 +16,8 @@ jzfs # Test binary, built with `go test -c` *.test -# Output of the go coverage tool, specifically when used with LiteIDE -*.out +# Test coverage file +coverage.txt # Dependency directories (remove the comment below to include it) # vendor/ diff --git a/.golangci.yml b/.golangci.yml new file mode 100644 index 0000000..5ba01f7 --- /dev/null +++ b/.golangci.yml @@ -0,0 +1,29 @@ +linters: + disable-all: true + enable: + - gofmt + - govet + - misspell + - goconst + - revive + - errcheck + - unconvert + - staticcheck + - unused + - stylecheck + - gosimple + - goimports +issues: + exclude: + - "should have( a package)? comment" + + exclude-rules: + exclude-use-default: false + +linters-settings: + goconst: + min-occurrences: 6 + +run: + skip-dirs: + skip-files: diff --git a/api/api_impl/common.go b/api/api_impl/common.go index 4f409c8..dd71cde 100644 --- a/api/api_impl/common.go +++ b/api/api_impl/common.go @@ -1,10 +1,11 @@ -package api_impl +package apiimpl import ( + "net/http" + "github.com/jiaozifs/jiaozifs/api" "github.com/jiaozifs/jiaozifs/version" "go.uber.org/fx" - "net/http" ) var _ api.ServerInterface = (*APIController)(nil) @@ -13,7 +14,7 @@ type APIController struct { fx.In } -func (A APIController) GetVersion(w *api.JiaozifsResponse, r *http.Request) { +func (A APIController) GetVersion(w *api.JiaozifsResponse, _ *http.Request) { swagger, err := api.GetSwagger() if err != nil { w.RespError(err) diff --git a/api/api_impl/server.go b/api/api_impl/server.go index 9f3c73c..480e42d 100644 --- a/api/api_impl/server.go +++ b/api/api_impl/server.go @@ -1,8 +1,14 @@ -package api_impl +package apiimpl import ( "context" "errors" + + "net" + "net/http" + + "net/url" + "github.com/getkin/kin-openapi/openapi3filter" "github.com/go-chi/chi/v5" "github.com/go-chi/cors" @@ -11,9 +17,6 @@ import ( "github.com/jiaozifs/jiaozifs/config" middleware "github.com/oapi-codegen/nethttp-middleware" "go.uber.org/fx" - "net" - "net/http" - "net/url" ) var log = logging.Logger("rpc") diff --git a/api/api_impl/utils.go b/api/api_impl/utils.go deleted file mode 100644 index a8d3856..0000000 --- a/api/api_impl/utils.go +++ /dev/null @@ -1,22 +0,0 @@ -package api_impl - -import ( - "encoding/json" - "net/http" -) - -func writeJson(w http.ResponseWriter, v interface{}) { - data, err := json.Marshal(v) - if err != nil { - writeError(w, err) - return - } - w.Header().Set("Content-Type", "application/json") - w.WriteHeader(http.StatusOK) - _, _ = w.Write(data) -} - -func writeError(w http.ResponseWriter, err error) { - w.WriteHeader(http.StatusOK) - w.Write([]byte(err.Error())) -} diff --git a/api/custom_response.go b/api/custom_response.go index ede45c7..0823c89 100644 --- a/api/custom_response.go +++ b/api/custom_response.go @@ -22,5 +22,5 @@ func (response *JiaozifsResponse) RespJSON(v interface{}) { func (response *JiaozifsResponse) RespError(err error) { response.WriteHeader(http.StatusOK) - response.Write([]byte(err.Error())) + _, _ = response.Write([]byte(err.Error())) } diff --git a/api/docs.go b/api/docs.go index 290454b..7e11850 100644 --- a/api/docs.go +++ b/api/docs.go @@ -1,4 +1,4 @@ -// Package apigen provides generated code for our OpenAPI +// Package api provides generated code for our OpenAPI package api //go:generate go run github.com/deepmap/oapi-codegen/v2/cmd/oapi-codegen -package api -templates ./tmpls -generate "types,client,chi-server,spec" -o jiaozifs.gen.go ./swagger.yml diff --git a/api/jiaozifs.gen.go b/api/jiaozifs.gen.go index bf5b805..89dbb80 100644 --- a/api/jiaozifs.gen.go +++ b/api/jiaozifs.gen.go @@ -414,7 +414,9 @@ func HandlerWithOptions(si ServerInterface, options ChiServerOptions) http.Handl }) return r -} // Base64 encoded, gzipped, json marshaled Swagger object +} + +// Base64 encoded, gzipped, json marshaled Swagger object var swaggerSpec = []string{ "H4sIAAAAAAAC/3xTwW7bMAz9FYPb0bPd7uZbMXRbt2Eo1qI7BEHAyEzM1JY0iW6QBf73QXLqOOiSUyzq", diff --git a/cmd/daemon.go b/cmd/daemon.go index e6db8d3..556e194 100644 --- a/cmd/daemon.go +++ b/cmd/daemon.go @@ -1,12 +1,10 @@ -/* -Copyright © 2023 NAME HERE -*/ package cmd import ( "context" + logging "github.com/ipfs/go-log/v2" - "github.com/jiaozifs/jiaozifs/api/api_impl" + apiImpl "github.com/jiaozifs/jiaozifs/api/api_impl" "github.com/jiaozifs/jiaozifs/config" "github.com/jiaozifs/jiaozifs/fx_opt" "github.com/jiaozifs/jiaozifs/models" @@ -48,7 +46,7 @@ var daemonCmd = &cobra.Command{ fx_opt.Override(fx_opt.NextInvoke(), migrations.MigrateDatabase), fx_opt.Override(new(*models.IUserRepo), models.NewUserRepo), //api - fx_opt.Override(fx_opt.NextInvoke(), api_impl.SetupAPI), + fx_opt.Override(fx_opt.NextInvoke(), apiImpl.SetupAPI), ) if err != nil { return err @@ -59,7 +57,6 @@ var daemonCmd = &cobra.Command{ <-shutdown log.Info("graceful shutdown") return stop(cmd.Context()) - return nil }, } @@ -68,6 +65,6 @@ func init() { daemonCmd.Flags().String("db", "", "pg connection string eg. postgres://user:pass@localhost:5432/jiaozifs?sslmode=disable") daemonCmd.Flags().String("log-level", "INFO", "set log level eg. DEBUG INFO ERROR") - viper.BindPFlag("database.connection", daemonCmd.Flags().Lookup("db")) - viper.BindPFlag("log.level", daemonCmd.Flags().Lookup("log-level")) + _ = viper.BindPFlag("database.connection", daemonCmd.Flags().Lookup("db")) + _ = viper.BindPFlag("log.level", daemonCmd.Flags().Lookup("log-level")) } diff --git a/cmd/init.go b/cmd/init.go index 7a1b3de..3168af9 100644 --- a/cmd/init.go +++ b/cmd/init.go @@ -1,6 +1,3 @@ -/* -Copyright © 2023 NAME HERE -*/ package cmd import ( @@ -14,9 +11,9 @@ var initCmd = &cobra.Command{ Use: "init", Short: "init jiaozifs ", Long: `create default config file for jiaoozifs`, - PreRun: func(cmd *cobra.Command, args []string) { - //provent duplicate bind flag with daemon - viper.BindPFlag("database.connection", cmd.Flags().Lookup("db")) + PreRunE: func(cmd *cobra.Command, args []string) error { + //protect duplicate bind flag with daemon + return viper.BindPFlag("database.connection", cmd.Flags().Lookup("db")) }, RunE: func(cmd *cobra.Command, args []string) error { return config.InitConfig() diff --git a/cmd/root.go b/cmd/root.go index 17194f1..c8b1ed5 100644 --- a/cmd/root.go +++ b/cmd/root.go @@ -1,12 +1,10 @@ -/* -Copyright © 2023 githun.com/jiaozifs/jiaozifs -*/ package cmd import ( + "os" + "github.com/spf13/cobra" "github.com/spf13/viper" - "os" ) var cfgFile string @@ -29,5 +27,5 @@ func Execute() { func init() { rootCmd.PersistentFlags().StringVar(&cfgFile, "config", "", "config file (default is $HOME/.jiaozifs/config.yaml)") - viper.BindPFlag("config", rootCmd.Flags().Lookup("config")) + _ = viper.BindPFlag("config", rootCmd.Flags().Lookup("config")) } diff --git a/cmd/version.go b/cmd/version.go index 84c8738..523361c 100644 --- a/cmd/version.go +++ b/cmd/version.go @@ -1,12 +1,10 @@ -/* -Copyright © 2023 NAME HERE -*/ package cmd import ( "fmt" + "github.com/jiaozifs/jiaozifs/api" - "github.com/jiaozifs/jiaozifs/api/api_impl" + apiimpl "github.com/jiaozifs/jiaozifs/api/api_impl" "github.com/jiaozifs/jiaozifs/config" "github.com/jiaozifs/jiaozifs/version" "github.com/spf13/cobra" @@ -30,7 +28,7 @@ var versionCmd = &cobra.Command{ if err != nil { return err } - client, err := api.NewClient(cfg.API.Listen + api_impl.APIV1Prefix) + client, err := api.NewClient(cfg.API.Listen + apiimpl.APIV1Prefix) if err != nil { return err } diff --git a/config/config.go b/config/config.go index 4a1d905..213ff4f 100644 --- a/config/config.go +++ b/config/config.go @@ -2,16 +2,15 @@ package config import ( "fmt" - logging "github.com/ipfs/go-log/v2" + + "os" + "path" + ms "github.com/mitchellh/mapstructure" "github.com/spf13/cobra" "github.com/spf13/viper" - "os" - "path" ) -var log = logging.Logger("log") - type Config struct { Path string `mapstructure:"config"` Log LogConfig `mapstructure:"log"` diff --git a/models/migrations/20210505110026_init_project.go b/models/migrations/20210505110026_init_project.go index 9aed711..e317fe6 100644 --- a/models/migrations/20210505110026_init_project.go +++ b/models/migrations/20210505110026_init_project.go @@ -2,6 +2,7 @@ package migrations import ( "context" + "github.com/jiaozifs/jiaozifs/models" "github.com/uptrace/bun" ) diff --git a/models/migrations/main.go b/models/migrations/main.go index c3e2697..dce0dfd 100644 --- a/models/migrations/main.go +++ b/models/migrations/main.go @@ -2,6 +2,7 @@ package migrations import ( "context" + "github.com/uptrace/bun" "github.com/uptrace/bun/migrate" ) diff --git a/models/models.go b/models/models.go index 422dfe4..1d62321 100644 --- a/models/models.go +++ b/models/models.go @@ -3,6 +3,7 @@ package models import ( "context" "database/sql" + "github.com/jiaozifs/jiaozifs/config" "github.com/uptrace/bun" "github.com/uptrace/bun/dialect/pgdialect" diff --git a/models/user.go b/models/user.go index 4ceb932..9b11a8b 100644 --- a/models/user.go +++ b/models/user.go @@ -2,9 +2,11 @@ package models import ( "context" + + "time" + "github.com/google/uuid" "github.com/uptrace/bun" - "time" ) var _user = (*User)(nil) @@ -40,7 +42,7 @@ func NewUserRepo(db *bun.DB) IUserRepo { func (userRepo *UserRepo) GetUser(ctx context.Context, id uuid.UUID) (*User, error) { user := &User{} - return user, userRepo.DB.NewSelect().Model(_user).Where("id = 1").Scan(ctx, &user) + return user, userRepo.DB.NewSelect().Model(_user).Where("id = :id", id).Scan(ctx, &user) } func (userRepo *UserRepo) Insert(ctx context.Context, user *User) (*User, error) {