diff --git a/Dockerfile b/Dockerfile index 345ba15a..6d084194 100644 --- a/Dockerfile +++ b/Dockerfile @@ -22,9 +22,10 @@ ARG USE_DIST=no WORKDIR /paopao-ce COPY . . COPY --from=frontend /web/dist ./web/dist -ENV GOPROXY=https://goproxy.cn -RUN [ $EMBED_UI != yes ] || make build TAGS='go_json' -RUN [ $EMBED_UI = yes ] || make build TAGS='slim embed go_json' +ENV GOPROXY=https://goproxy.cn,direct +RUN --mount=type=cache,target=/root/.cache/go-build,id=paopao-ce go mod download +RUN [ $EMBED_UI != yes ] || make buildx TAGS='go_json' +RUN [ $EMBED_UI = yes ] || make buildx TAGS='slim embed go_json' FROM bitbus/paopao-ce-backend-runner:latest ARG API_HOST diff --git a/Dockerfile.allinone b/Dockerfile.allinone index 1624b2b9..1bb6e475 100644 --- a/Dockerfile.allinone +++ b/Dockerfile.allinone @@ -23,8 +23,9 @@ WORKDIR /paopao-ce COPY . . COPY --from=frontend /web/dist ./web/dist ENV GOPROXY=https://goproxy.cn -RUN [ $EMBED_UI != yes ] || make build TAGS='go_json migration' -RUN [ $EMBED_UI = yes ] || make build TAGS='slim embed go_json migration' +RUN --mount=type=cache,target=/root/.cache/go-build,id=paopao-ce-allinone go mod download +RUN [ $EMBED_UI != yes ] || make buildx TAGS='go_json migration' +RUN [ $EMBED_UI = yes ] || make buildx TAGS='slim embed go_json migration' FROM bitbus/paopao-ce-allinone-runner:latest ARG API_HOST diff --git a/Makefile b/Makefile index c66e8c97..97de2457 100644 --- a/Makefile +++ b/Makefile @@ -36,6 +36,10 @@ build: @echo Build paopao-ce @go build -pgo=auto -trimpath -tags '$(TAGS)' -ldflags '$(LDFLAGS)' -o $(RELEASE_ROOT)/$(TARGET) +buildx: + @echo Build paopao-ce + @go build -pgo=auto -trimpath -tags '$(TAGS)' -ldflags '$(LDFLAGS)' -o $(RELEASE_ROOT)/$(TARGET) + build-web: @cd web && rm -rf dist/* && yarn build && cd - diff --git a/auto/api/m/v1/user.go b/auto/api/m/v1/user.go index 45d7fbba..bea939a4 100644 --- a/auto/api/m/v1/user.go +++ b/auto/api/m/v1/user.go @@ -1,6 +1,6 @@ // Code generated by go-mir. DO NOT EDIT. // versions: -// - mir v4.1.0 +// - mir v4.2.0 package v1 diff --git a/auto/api/r/v1/user.go b/auto/api/r/v1/user.go index 8c385f14..82850dc2 100644 --- a/auto/api/r/v1/user.go +++ b/auto/api/r/v1/user.go @@ -1,6 +1,6 @@ // Code generated by go-mir. DO NOT EDIT. // versions: -// - mir v4.1.0 +// - mir v4.2.0 package v1 diff --git a/auto/api/s/v1/user.go b/auto/api/s/v1/user.go index a876f6b7..ac25628d 100644 --- a/auto/api/s/v1/user.go +++ b/auto/api/s/v1/user.go @@ -1,6 +1,6 @@ // Code generated by go-mir. DO NOT EDIT. // versions: -// - mir v4.1.0 +// - mir v4.2.0 package v1 diff --git a/auto/api/v1/admin.go b/auto/api/v1/admin.go index 4c3af448..b3c208c7 100644 --- a/auto/api/v1/admin.go +++ b/auto/api/v1/admin.go @@ -1,6 +1,6 @@ // Code generated by go-mir. DO NOT EDIT. // versions: -// - mir v4.1.0 +// - mir v4.2.0 package v1 @@ -22,6 +22,7 @@ type _render_ interface { type _default_ interface { Bind(*gin.Context, any) mir.Error + BindJson(*gin.Context, any) mir.Error Render(*gin.Context, any, mir.Error) } diff --git a/auto/api/v1/alipay_priv.go b/auto/api/v1/alipay_priv.go index 3c3ee1f5..86669b89 100644 --- a/auto/api/v1/alipay_priv.go +++ b/auto/api/v1/alipay_priv.go @@ -1,6 +1,6 @@ // Code generated by go-mir. DO NOT EDIT. // versions: -// - mir v4.1.0 +// - mir v4.2.0 package v1 diff --git a/auto/api/v1/alipay_pub.go b/auto/api/v1/alipay_pub.go index e1c3e8b7..f4bbde51 100644 --- a/auto/api/v1/alipay_pub.go +++ b/auto/api/v1/alipay_pub.go @@ -1,6 +1,6 @@ // Code generated by go-mir. DO NOT EDIT. // versions: -// - mir v4.1.0 +// - mir v4.2.0 package v1 diff --git a/auto/api/v1/core.go b/auto/api/v1/core.go index 911445ab..cd564736 100644 --- a/auto/api/v1/core.go +++ b/auto/api/v1/core.go @@ -1,6 +1,6 @@ // Code generated by go-mir. DO NOT EDIT. // versions: -// - mir v4.1.0 +// - mir v4.2.0 package v1 diff --git a/auto/api/v1/followship.go b/auto/api/v1/followship.go index c0041feb..f1787fc4 100644 --- a/auto/api/v1/followship.go +++ b/auto/api/v1/followship.go @@ -1,6 +1,6 @@ // Code generated by go-mir. DO NOT EDIT. // versions: -// - mir v4.1.0 +// - mir v4.2.0 package v1 diff --git a/auto/api/v1/friendship.go b/auto/api/v1/friendship.go index 6165822b..78747933 100644 --- a/auto/api/v1/friendship.go +++ b/auto/api/v1/friendship.go @@ -1,6 +1,6 @@ // Code generated by go-mir. DO NOT EDIT. // versions: -// - mir v4.1.0 +// - mir v4.2.0 package v1 @@ -56,7 +56,7 @@ func RegisterFriendshipServant(e *gin.Engine, s Friendship) { default: } req := new(web.DeleteFriendReq) - if err := s.Bind(c, req); err != nil { + if err := s.BindJson(c, req); err != nil { s.Render(c, nil, err) return } @@ -69,7 +69,7 @@ func RegisterFriendshipServant(e *gin.Engine, s Friendship) { default: } req := new(web.RejectFriendReq) - if err := s.Bind(c, req); err != nil { + if err := s.BindJson(c, req); err != nil { s.Render(c, nil, err) return } @@ -82,7 +82,7 @@ func RegisterFriendshipServant(e *gin.Engine, s Friendship) { default: } req := new(web.AddFriendReq) - if err := s.Bind(c, req); err != nil { + if err := s.BindJson(c, req); err != nil { s.Render(c, nil, err) return } @@ -95,7 +95,7 @@ func RegisterFriendshipServant(e *gin.Engine, s Friendship) { default: } req := new(web.RequestingFriendReq) - if err := s.Bind(c, req); err != nil { + if err := s.BindJson(c, req); err != nil { s.Render(c, nil, err) return } diff --git a/auto/api/v1/loose.go b/auto/api/v1/loose.go index dbf598d2..80d4f4ae 100644 --- a/auto/api/v1/loose.go +++ b/auto/api/v1/loose.go @@ -1,6 +1,6 @@ // Code generated by go-mir. DO NOT EDIT. // versions: -// - mir v4.1.0 +// - mir v4.2.0 package v1 diff --git a/auto/api/v1/priv.go b/auto/api/v1/priv.go index a8f46943..a48ef256 100644 --- a/auto/api/v1/priv.go +++ b/auto/api/v1/priv.go @@ -1,6 +1,6 @@ // Code generated by go-mir. DO NOT EDIT. // versions: -// - mir v4.1.0 +// - mir v4.2.0 package v1 diff --git a/auto/api/v1/pub.go b/auto/api/v1/pub.go index 98a41440..28abcb46 100644 --- a/auto/api/v1/pub.go +++ b/auto/api/v1/pub.go @@ -1,6 +1,6 @@ // Code generated by go-mir. DO NOT EDIT. // versions: -// - mir v4.1.0 +// - mir v4.2.0 package v1 diff --git a/auto/api/v1/relax.go b/auto/api/v1/relax.go index bc24486c..65aac2aa 100644 --- a/auto/api/v1/relax.go +++ b/auto/api/v1/relax.go @@ -1,6 +1,6 @@ // Code generated by go-mir. DO NOT EDIT. // versions: -// - mir v4.1.0 +// - mir v4.2.0 package v1 diff --git a/auto/api/v1/site.go b/auto/api/v1/site.go index 3ec9fcc7..ba523c2d 100644 --- a/auto/api/v1/site.go +++ b/auto/api/v1/site.go @@ -1,6 +1,6 @@ // Code generated by go-mir. DO NOT EDIT. // versions: -// - mir v4.1.0 +// - mir v4.2.0 package v1 diff --git a/auto/api/v1/trends.go b/auto/api/v1/trends.go index cce1b739..959fa317 100644 --- a/auto/api/v1/trends.go +++ b/auto/api/v1/trends.go @@ -1,6 +1,6 @@ // Code generated by go-mir. DO NOT EDIT. // versions: -// - mir v4.1.0 +// - mir v4.2.0 package v1 diff --git a/auto/api/x/v1/user.go b/auto/api/x/v1/user.go index bf2e84a4..a6ae9a58 100644 --- a/auto/api/x/v1/user.go +++ b/auto/api/x/v1/user.go @@ -1,6 +1,6 @@ // Code generated by go-mir. DO NOT EDIT. // versions: -// - mir v4.1.0 +// - mir v4.2.0 package v1 diff --git a/build-allinone.sh b/build-allinone.sh new file mode 100755 index 00000000..06353b81 --- /dev/null +++ b/build-allinone.sh @@ -0,0 +1,26 @@ +#!/bin/sh +# eg.1 : sh build-image.sh +# eg.2, set image: sh build-image.sh bitbus/paopao-ce + +VERSION=`git describe --tags --always | cut -f1,2 -d "-"` # eg.: 0.2.5 +IMAGE="bitbus/paopao-ce" + +if [ -n "$1" ]; then + IMAGE="$1" +fi +if [ -n "$2" ]; then + VERSION="$2" +fi + +# build image +docker buildx build \ + --build-arg USE_DIST="yes" \ + --tag "$IMAGE:all-in-one-${VERSION}" \ + --tag "$IMAGE:all-in-one-latest" \ + . -f Dockerfile.allinone + +# push to image rep +# if [ -n "$1" ]; then +# docker push "$IMAGE:${VERSION}" +# docker push "$IMAGE:latest" +# fi diff --git a/go.mod b/go.mod index 61072b25..32381d8b 100644 --- a/go.mod +++ b/go.mod @@ -7,7 +7,7 @@ require ( github.com/Masterminds/semver/v3 v3.2.1 github.com/RoaringBitmap/roaring v1.9.0 github.com/afocus/captcha v0.0.0-20191010092841-4bd1f21c8868 - github.com/alimy/mir/v4 v4.1.0 + github.com/alimy/mir/v4 v4.2.0-alpha.5 github.com/alimy/tryst v0.10.1 github.com/aliyun/aliyun-oss-go-sdk v3.0.2+incompatible github.com/allegro/bigcache/v3 v3.1.0 diff --git a/go.sum b/go.sum index 64c81a69..e3433644 100644 --- a/go.sum +++ b/go.sum @@ -9,8 +9,8 @@ github.com/RoaringBitmap/roaring v1.9.0 h1:lwKhr90/j0jVXJyh5X+vQN1VVn77rQFfYnh6R github.com/RoaringBitmap/roaring v1.9.0/go.mod h1:6AXUsoIEzDTFFQCe1RbGA6uFONMhvejWj5rqITANK90= github.com/afocus/captcha v0.0.0-20191010092841-4bd1f21c8868 h1:uFrPOl1VBt/Abfl2z+A/DFc+AwmFLxEHR1+Yq6cXvww= github.com/afocus/captcha v0.0.0-20191010092841-4bd1f21c8868/go.mod h1:srphKZ1i+yGXxl/LpBS7ZIECTjCTPzZzAMtJWoG3sLo= -github.com/alimy/mir/v4 v4.1.0 h1:D6R0dkfsK1iH8MVu0b9yQ0UjdBU09goiui9PVI94G4o= -github.com/alimy/mir/v4 v4.1.0/go.mod h1:d58dBvw2KImcVbAUANrciEV/of0arMNsI9c/5UNCMMc= +github.com/alimy/mir/v4 v4.2.0-alpha.5 h1:ExSJpbFzKX3Avk1CoTOU3OLyvo4PTB2SnTSQXfeJNIc= +github.com/alimy/mir/v4 v4.2.0-alpha.5/go.mod h1:d58dBvw2KImcVbAUANrciEV/of0arMNsI9c/5UNCMMc= github.com/alimy/tryst v0.10.1 h1:ks0CwITNu8VuCBeIxov7acuXWfPn1ySR/FpKbdDOy7A= github.com/alimy/tryst v0.10.1/go.mod h1:6FcqEImav7S62em+p+MODh+stt/UPp23HobUOK3XwFY= github.com/aliyun/aliyun-oss-go-sdk v3.0.2+incompatible h1:8psS8a+wKfiLt1iVDX79F7Y6wUM49Lcha2FMXt4UM8g= diff --git a/internal/conf/db_gorm.go b/internal/conf/db_gorm.go index f9e27daf..66095f22 100644 --- a/internal/conf/db_gorm.go +++ b/internal/conf/db_gorm.go @@ -5,6 +5,7 @@ package conf import ( + "log" "sync" "time" @@ -27,7 +28,7 @@ func MustGormDB() *gorm.DB { _onceGorm.Do(func() { var err error if _gormdb, err = newGormDB(); err != nil { - logrus.Fatalf("new gorm db failed: %s", err) + log.Fatalf("new gorm db failed: %s", err) } }) return _gormdb diff --git a/internal/servants/base/base.go b/internal/servants/base/base.go index 4edf5e03..d031e344 100644 --- a/internal/servants/base/base.go +++ b/internal/servants/base/base.go @@ -29,7 +29,8 @@ import ( ) type BaseServant struct { - bindAny func(c *gin.Context, obj any) mir.Error + bindAny func(c *gin.Context, obj any) mir.Error + bindJson func(c *gin.Context, obj any) mir.Error } type DaoServant struct { @@ -158,6 +159,10 @@ func (s *BaseServant) Bind(c *gin.Context, obj any) mir.Error { return s.bindAny(c, obj) } +func (s *BaseServant) BindJson(c *gin.Context, obj any) mir.Error { + return s.bindJson(c, obj) +} + func (s *BaseServant) Render(c *gin.Context, data any, err mir.Error) { if err == nil { c.JSON(http.StatusOK, &joint.JsonResp{ @@ -420,9 +425,17 @@ func NewBindAnyFn() func(c *gin.Context, obj any) mir.Error { return bindAny } +func NewBindJsonFn() func(c *gin.Context, obj any) mir.Error { + if conf.UseSentryGin() { + return bindAnySentry + } + return bindAny +} + func NewBaseServant() *BaseServant { return &BaseServant{ - bindAny: NewBindAnyFn(), + bindAny: NewBindAnyFn(), + bindJson: NewBindJsonFn(), } } diff --git a/mirc/web/v1/friendship.go b/mirc/web/v1/friendship.go index b04f9622..95ba3002 100644 --- a/mirc/web/v1/friendship.go +++ b/mirc/web/v1/friendship.go @@ -16,16 +16,16 @@ type Friendship struct { Group `mir:"v1"` // RequestingFriend 请求添加朋友 - RequestingFriend func(Post, web.RequestingFriendReq) `mir:"/friend/requesting"` + RequestingFriend func(Post, web.RequestingFriendReq) `mir:"/friend/requesting" binding:"json"` // AddFriend 同意添加好友 - AddFriend func(Post, web.AddFriendReq) `mir:"/friend/add"` + AddFriend func(Post, web.AddFriendReq) `mir:"/friend/add" binding:"json"` // RejectFriend 拒绝添加好友 - RejectFriend func(Post, web.RejectFriendReq) `mir:"/friend/reject"` + RejectFriend func(Post, web.RejectFriendReq) `mir:"/friend/reject" binding:"json"` // DeleteFriend 删除好友 - DeleteFriend func(Post, web.DeleteFriendReq) `mir:"/friend/delete"` + DeleteFriend func(Post, web.DeleteFriendReq) `mir:"/friend/delete" binding:"json"` // GetContacts 获取好友列表 GetContacts func(Get, web.GetContactsReq) web.GetContactsResp `mir:"/user/contacts"`