diff --git a/.github/workflows/go.yml b/.github/workflows/go.yml index a38b564a..66a46ea3 100644 --- a/.github/workflows/go.yml +++ b/.github/workflows/go.yml @@ -47,7 +47,7 @@ jobs: name: Test strategy: matrix: - go-version: [ 1.20.x ] + go-version: [ 1.20.x, 1.21.x ] platform: [ ubuntu-latest, macos-latest ] runs-on: ${{ matrix.platform }} steps: @@ -66,7 +66,7 @@ jobs: name: TestOnWindows strategy: matrix: - go-version: [ 1.20.x ] + go-version: [ 1.20.x, 1.21.x ] platform: [ windows-latest ] runs-on: ${{ matrix.platform }} steps: diff --git a/.gitignore b/.gitignore index 96f9f38d..3980640a 100644 --- a/.gitignore +++ b/.gitignore @@ -4,7 +4,10 @@ __debug_bin !*.example /config.yaml *.log -paopao-ce* +/paopao-ce +/paopao +/.env +/.envrc /release /data /custom diff --git a/CHANGELOG.md b/CHANGELOG.md index 8eafb109..fce87311 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -13,10 +13,18 @@ All notable changes to paopao-ce are documented in this file. CREATE VIEW p_post_by_comment AS SELECT P.*,C.user_id comment_user_id FROM (SELECT post_id,user_id FROM p_comment WHERE is_del=0 UNION SELECT post_id,reply.user_id user_id FROM p_comment_reply reply JOIN p_comment COMMENT ON reply.comment_id=COMMENT.ID WHERE reply.is_del=0 AND COMMENT.is_del=0) C JOIN p_post P ON C.post_id=P.ID WHERE P.is_del=0; ``` - add user highlight tweet support include custom tweet set to highlight and list in user/profile page. +- add cli subcommand to start paopao-ce serve or other task. [#354](https://github.com/rocboss/paopao-ce/pull/354) ### Changed -- change man content width to 600px and optimize tweet/comment/replay text length. [#333](https://github.com/rocboss/paopao-ce/pull/333) - +- change man content width to 600px and optimize tweet/comment/replay text length. [#333](https://github.com/rocboss/paopao-ce/pull/333) +- optimize embed web ui to paopao execute binary file logic. [#354](https://github.com/rocboss/paopao-ce/pull/354) + ```sh + # embed web ui to execute file default + make build + # use slim model to disable embed web ui to exectute file + make build TAGS='slim embed' + ``` + ## 0.3.1 ### Fixed - fixed: video player assets cdn error. [&caff8c0](https://github.com/rocboss/paopao-ce/commit/caff8c052be6c8d59576011192f830fd98e17ab3 'commit caff8c0') diff --git a/Dockerfile b/Dockerfile index 48190375..91fcdd6d 100644 --- a/Dockerfile +++ b/Dockerfile @@ -23,8 +23,8 @@ WORKDIR /paopao-ce COPY . . COPY --from=frontend /web/dist ./web/dist ENV GOPROXY=https://goproxy.cn -RUN [ $EMBED_UI != yes ] || make build TAGS='embed go_json' -RUN [ $EMBED_UI = yes ] || make build TAGS='go_json' +RUN [ $EMBED_UI != yes ] || make build TAGS='go_json' +RUN [ $EMBED_UI = yes ] || make build TAGS='slim embed go_json' FROM bitbus/paopao-ce-backend-runner:latest ARG API_HOST @@ -34,10 +34,11 @@ ARG USE_DIST=no ENV TZ=Asia/Shanghai WORKDIR /app/paopao-ce -COPY --from=backend /paopao-ce/release/paopao-ce . +COPY --from=backend /paopao-ce/release/paopao . COPY --from=backend /paopao-ce/config.yaml.sample config.yaml VOLUME ["/app/paopao-ce/custom"] EXPOSE 8008 -HEALTHCHECK --interval=5s --timeout=3s --retries=3 CMD ps -ef | grep paopao-ce || exit 1 -ENTRYPOINT ["/app/paopao-ce/paopao-ce"] +HEALTHCHECK --interval=5s --timeout=3s --retries=3 CMD ps -ef | grep paopao || exit 1 +ENTRYPOINT ["/app/paopao-ce/paopao"] +CMD ["serve"] diff --git a/Makefile b/Makefile index 8b1d1dae..1a6e807e 100644 --- a/Makefile +++ b/Makefile @@ -1,6 +1,7 @@ .PHONY: all build run test clean fmt pre-commit help -TARGET = paopao-ce +PROJECT = paopao-ce +TARGET = paopao ifeq ($(OS),Windows_NT) TARGET := $(TARGET).exe endif @@ -12,10 +13,10 @@ endif RELEASE_ROOT = release RELEASE_FILES = LICENSE README.md CHANGELOG.md config.yaml.sample docker-compose.yaml scripts docs -RELEASE_LINUX_AMD64 = $(RELEASE_ROOT)/linux-amd64/$(TARGET) -RELEASE_DARWIN_AMD64 = $(RELEASE_ROOT)/darwin-amd64/$(TARGET) -RELEASE_DARWIN_ARM64 = $(RELEASE_ROOT)/darwin-arm64/$(TARGET) -RELEASE_WINDOWS_AMD64 = $(RELEASE_ROOT)/windows-amd64/$(TARGET) +RELEASE_LINUX_AMD64 = $(RELEASE_ROOT)/linux-amd64/$(PROJECT) +RELEASE_DARWIN_AMD64 = $(RELEASE_ROOT)/darwin-amd64/$(PROJECT) +RELEASE_DARWIN_ARM64 = $(RELEASE_ROOT)/darwin-arm64/$(PROJECT) +RELEASE_WINDOWS_AMD64 = $(RELEASE_ROOT)/windows-amd64/$(PROJECT) BUILD_VERSION := $(shell git describe --tags --always | cut -f1 -f2 -d "-") BUILD_DATE := $(shell date +'%Y-%m-%d %H:%M:%S') @@ -35,7 +36,7 @@ build: @go build -pgo=auto -trimpath -tags '$(TAGS)' -ldflags '$(LDFLAGS)' -o $(RELEASE_ROOT)/$(TARGET) run: - @go run -pgo=auto -trimpath -gcflags "all=-N -l" -tags '$(TAGS)' -ldflags '$(LDFLAGS)' . + @go run -pgo=auto -trimpath -gcflags "all=-N -l" -tags '$(TAGS)' -ldflags '$(LDFLAGS)' . serve .PHONY: release release: linux-amd64 darwin-amd64 darwin-arm64 windows-x64 @@ -44,10 +45,10 @@ release: linux-amd64 darwin-amd64 darwin-arm64 windows-x64 @cp -rf $(RELEASE_FILES) $(RELEASE_DARWIN_AMD64) @cp -rf $(RELEASE_FILES) $(RELEASE_DARWIN_ARM64) @cp -rf $(RELEASE_FILES) $(RELEASE_WINDOWS_AMD64) - @cd $(RELEASE_LINUX_AMD64)/.. && rm -f *.zip && zip -r $(TARGET)-linux_amd64.zip $(TARGET) && cd - - @cd $(RELEASE_DARWIN_AMD64)/.. && rm -f *.zip && zip -r $(TARGET)-darwin_amd64.zip $(TARGET) && cd - - @cd $(RELEASE_DARWIN_ARM64)/.. && rm -f *.zip && zip -r $(TARGET)-darwin_arm64.zip $(TARGET) && cd - - @cd $(RELEASE_WINDOWS_AMD64)/.. && rm -f *.zip && zip -r $(TARGET)-windows_amd64.zip $(TARGET) && cd - + @cd $(RELEASE_LINUX_AMD64)/.. && rm -f *.zip && zip -r $(PROJECT)-linux_amd64.zip $(PROJECT) && cd - + @cd $(RELEASE_DARWIN_AMD64)/.. && rm -f *.zip && zip -r $(PROJECT)-darwin_amd64.zip $(PROJECT) && cd - + @cd $(RELEASE_DARWIN_ARM64)/.. && rm -f *.zip && zip -r $(PROJECT)-darwin_arm64.zip $(PROJECT) && cd - + @cd $(RELEASE_WINDOWS_AMD64)/.. && rm -f *.zip && zip -r $(PROJECT)-windows_amd64.zip $(PROJECT) && cd - .PHONY: linux-amd64 linux-amd64: diff --git a/README.md b/README.md index 7cf224b7..2908f224 100644 --- a/README.md +++ b/README.md @@ -97,11 +97,15 @@ PaoPao主要由以下优秀的开源项目/工具构建 ``` 编译api服务、内嵌web前端ui: ```sh - make build TAGS='embed' + make build + ``` + 也可以使用精简模式编译,不内嵌web前端ui: + ```sh + make build TAGS='slim embed' ``` 编译后在`release`目录可以找到对应可执行文件。 ```sh - release/paopao-ce + release/paopao ``` 4. 直接运行后端 diff --git a/build-release.sh b/build-release.sh index 9530c07f..b20909df 100755 --- a/build-release.sh +++ b/build-release.sh @@ -1,8 +1,8 @@ #!/bin/sh # eg.1 : sh build-image.sh -# eg.2, set tags: sh build-image.sh 'embed go_json' +# eg.2, set tags: sh build-image.sh 'go_json' -TAGS='embed go_json' +TAGS='go_json' if [ -n "$1" ]; then TAGS="$1" diff --git a/cmd/migrate/migrate.go b/cmd/migrate/migrate.go new file mode 100644 index 00000000..51f64381 --- /dev/null +++ b/cmd/migrate/migrate.go @@ -0,0 +1,27 @@ +// Copyright 2023 ROC. All rights reserved. +// Use of this source code is governed by a MIT style +// license that can be found in the LICENSE file. + +package migrate + +import ( + "fmt" + + "github.com/rocboss/paopao-ce/cmd" + "github.com/spf13/cobra" +) + +func init() { + migrateCmd := &cobra.Command{ + Use: "migrate", + Short: "migrate database data", + Long: "miegrate database data when paopao-ce upgrade", + Run: migrateRun, + } + cmd.Register(migrateCmd) +} + +func migrateRun(_cmd *cobra.Command, _args []string) { + // TODO: add some logic for migrate cmd feature + fmt.Println("sorry, this feature is not implemented yet.") +} diff --git a/cmd/root.go b/cmd/root.go new file mode 100644 index 00000000..e0e59974 --- /dev/null +++ b/cmd/root.go @@ -0,0 +1,36 @@ +// Copyright 2023 ROC. All rights reserved. +// Use of this source code is governed by a MIT style +// license that can be found in the LICENSE file. + +package cmd + +import ( + "github.com/spf13/cobra" +) + +var ( + rootCmd = &cobra.Command{ + Use: "paopao", + Short: `an artistic "twitter like" community`, + Long: `an artistic "twitter like" community`, + } +) + +// Setup set root command name,short-describe, long-describe +// return &cobra.Command to custom other options +func Setup(use, short, long string) *cobra.Command { + rootCmd.Use = use + rootCmd.Short = short + rootCmd.Long = long + return rootCmd +} + +// Register add sub-command +func Register(cmd *cobra.Command) { + rootCmd.AddCommand(cmd) +} + +// Execute start application +func Execute() { + rootCmd.Execute() +} diff --git a/cmd/serve/serve.go b/cmd/serve/serve.go new file mode 100644 index 00000000..5ffd7070 --- /dev/null +++ b/cmd/serve/serve.go @@ -0,0 +1,94 @@ +// Copyright 2023 ROC. All rights reserved. +// Use of this source code is governed by a MIT style +// license that can be found in the LICENSE file. + +package serve + +import ( + "fmt" + "log" + "os" + "os/signal" + "syscall" + "time" + + "github.com/alimy/cfg" + "github.com/fatih/color" + "github.com/getsentry/sentry-go" + "github.com/rocboss/paopao-ce/cmd" + "github.com/rocboss/paopao-ce/internal" + "github.com/rocboss/paopao-ce/internal/conf" + "github.com/rocboss/paopao-ce/internal/service" + "github.com/rocboss/paopao-ce/pkg/debug" + "github.com/rocboss/paopao-ce/pkg/utils" + "github.com/rocboss/paopao-ce/pkg/version" + "github.com/sourcegraph/conc" + "github.com/spf13/cobra" + "go.uber.org/automaxprocs/maxprocs" +) + +var ( + noDefaultFeatures bool + features []string +) + +func init() { + serveCmd := &cobra.Command{ + Use: "serve", + Short: "start paopao-ce server", + Long: "start paopao-ce server", + Run: serveRun, + } + + serveCmd.Flags().BoolVar(&noDefaultFeatures, "no-default-features", false, "whether not use default features") + serveCmd.Flags().StringSliceVarP(&features, "features", "f", []string{}, "use special features") + + cmd.Register(serveCmd) +} + +func deferFn() { + if cfg.If("Sentry") { + // Flush buffered events before the program terminates. + sentry.Flush(2 * time.Second) + } +} + +func serveRun(_cmd *cobra.Command, _args []string) { + utils.PrintHelloBanner(version.VersionInfo()) + + // set maxprocs automatic + maxprocs.Set(maxprocs.Logger(log.Printf)) + + // initial configure + conf.Initial(features, noDefaultFeatures) + internal.Initial() + ss := service.MustInitService() + if len(ss) < 1 { + fmt.Fprintln(color.Output, "no service need start so just exit") + return + } + + // do defer function + defer deferFn() + + // start pyroscope if need + debug.StartPyroscope() + + // start services + wg := conc.NewWaitGroup() + fmt.Fprintf(color.Output, "\nstarting run service...\n\n") + service.Start(wg) + + // graceful stop services + wg.Go(func() { + quit := make(chan os.Signal, 1) + // kill (no param) default send syscall.SIGTERM + // kill -2 is syscall.SIGINT + // kill -9 is syscall.SIGKILL but can't be catch, so don't need add it + signal.Notify(quit, syscall.SIGINT, syscall.SIGTERM) + <-quit + fmt.Fprintf(color.Output, "\nshutting down server...\n\n") + service.Stop() + }) + wg.Wait() +} diff --git a/cmd/version.go b/cmd/version.go new file mode 100644 index 00000000..fc7da675 --- /dev/null +++ b/cmd/version.go @@ -0,0 +1,25 @@ +// Copyright 2023 ROC. All rights reserved. +// Use of this source code is governed by a MIT style +// license that can be found in the LICENSE file. + +package cmd + +import ( + "github.com/rocboss/paopao-ce/pkg/utils" + "github.com/rocboss/paopao-ce/pkg/version" + "github.com/spf13/cobra" +) + +func init() { + versionCmd := &cobra.Command{ + Use: "version", + Short: "show version information", + Long: "show version information", + Run: versionRun, + } + Register(versionCmd) +} + +func versionRun(_cmd *cobra.Command, _args []string) { + utils.PrintHelloBanner(version.VersionInfo()) +} diff --git a/go.mod b/go.mod index cd9faef5..39f6661f 100644 --- a/go.mod +++ b/go.mod @@ -33,6 +33,7 @@ require ( github.com/sirupsen/logrus v1.9.3 github.com/smartwalle/alipay/v3 v3.2.15 github.com/sourcegraph/conc v0.3.0 + github.com/spf13/cobra v1.7.0 github.com/spf13/viper v1.16.0 github.com/tencentyun/cos-go-sdk-v5 v0.7.42 github.com/yinheli/mahonia v0.0.0-20131226213531-0eef680515cc @@ -76,6 +77,7 @@ require ( github.com/hashicorp/errwrap v1.1.0 // indirect github.com/hashicorp/go-multierror v1.1.1 // indirect github.com/hashicorp/hcl v1.0.0 // indirect + github.com/inconshreveable/mousetrap v1.1.0 // indirect github.com/jackc/pgpassfile v1.0.0 // indirect github.com/jackc/pgservicefile v0.0.0-20221227161230-091c0ba34f0a // indirect github.com/jackc/pgx/v5 v5.3.1 // indirect diff --git a/go.sum b/go.sum index 7e65b4f2..b0a16bcc 100644 --- a/go.sum +++ b/go.sum @@ -363,6 +363,7 @@ github.com/coreos/pkg v0.0.0-20160727233714-3ac0863d7acf/go.mod h1:E3G3o1h8I7cfc github.com/coreos/pkg v0.0.0-20180928190104-399ea9e2e55f/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA= github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= github.com/cpuguy83/go-md2man/v2 v2.0.0/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= +github.com/cpuguy83/go-md2man/v2 v2.0.2/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= github.com/creack/pty v1.1.7/go.mod h1:lj5s0c3V2DBrqTV7llrYr5NG6My20zk30Fl46Y7DoTY= github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= github.com/creack/pty v1.1.11/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= @@ -740,6 +741,8 @@ github.com/imdario/mergo v0.3.10/go.mod h1:jmQim1M+e3UYxmgPu/WyfjB3N3VflVyUjjjwH github.com/imdario/mergo v0.3.11/go.mod h1:jmQim1M+e3UYxmgPu/WyfjB3N3VflVyUjjjwH0dnCYA= github.com/imdario/mergo v0.3.12/go.mod h1:jmQim1M+e3UYxmgPu/WyfjB3N3VflVyUjjjwH0dnCYA= github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8= +github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8= +github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw= github.com/intel/goresctrl v0.2.0/go.mod h1:+CZdzouYFn5EsxgqAQTEzMfwKwuc0fVdMrT9FCCAVRQ= github.com/j-keck/arping v0.0.0-20160618110441-2cf9dc699c56/go.mod h1:ymszkNOg6tORTn+6F6j+Jc8TOr5osrynvN6ivFWZ2GA= github.com/j-keck/arping v1.0.2/go.mod h1:aJbELhR92bSk7tp79AWM/ftfc90EfEi2bQJrbBFOsPw= @@ -1130,6 +1133,7 @@ github.com/rs/xid v1.5.0/go.mod h1:trrq9SKmegXys3aeAKXMUTdJsYXVwGY3RLcfgqegfbg= github.com/rs/zerolog v1.13.0/go.mod h1:YbFCdg8HfsridGWAh22vktObvhZbQsZXe4/zB0OKkWU= github.com/rs/zerolog v1.15.0/go.mod h1:xYTKnLHcpfU2225ny5qZjxnj9NvkumZYjJHlAThCjNc= github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= +github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= github.com/ruudk/golang-pdf417 v0.0.0-20181029194003-1af4ab5afa58/go.mod h1:6lfFZQK844Gfx8o5WFuvpxWRwnSoipWe/p622j1v06w= github.com/ryanuber/columnize v0.0.0-20160712163229-9b3edd62028f/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts= github.com/safchain/ethtool v0.0.0-20190326074333-42ed695e3de8/go.mod h1:Z0q5wiBQGYcxhMZ6gUqHn6pYNLypFAvaL3UvgZLR0U4= @@ -1185,6 +1189,8 @@ github.com/spf13/cobra v0.0.2-0.20171109065643-2da4a54c5cee/go.mod h1:1l0Ry5zgKv github.com/spf13/cobra v0.0.3/go.mod h1:1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3XqQ= github.com/spf13/cobra v1.0.0/go.mod h1:/6GTrnGXV9HjY+aR4k0oJ5tcvakLuG6EuKReYlHNrgE= github.com/spf13/cobra v1.1.3/go.mod h1:pGADOWyqRD/YMrPZigI/zbliZ2wVD/23d+is3pSWzOo= +github.com/spf13/cobra v1.7.0 h1:hyqWnYt1ZQShIddO5kBpj3vu05/++x6tJ6dg8EC572I= +github.com/spf13/cobra v1.7.0/go.mod h1:uLxZILRyS/50WlhOIKD7W6V5bgeIt+4sICxh6uRMrb0= github.com/spf13/jwalterweatherman v1.0.0/go.mod h1:cQK4TGJAtQXfYWX+Ddv3mKDzgVb68N+wFjFa4jdeBTo= github.com/spf13/jwalterweatherman v1.1.0 h1:ue6voC5bR5F8YxI5S67j9i582FU4Qvo2bmqnqMYADFk= github.com/spf13/jwalterweatherman v1.1.0/go.mod h1:aNWZUN0dPAAO/Ljvb5BEdw96iTZ0EXowPYD95IqWIGo= diff --git a/internal/servants/statick/statick.go b/internal/servants/statick/statick.go index ef323b0b..fdde1a7d 100644 --- a/internal/servants/statick/statick.go +++ b/internal/servants/statick/statick.go @@ -2,8 +2,8 @@ // Use of this source code is governed by a MIT style // license that can be found in the LICENSE file. -//go:build !embed -// +build !embed +//go:build slim && embed +// +build slim,embed package statick diff --git a/internal/servants/statick/statick_embed.go b/internal/servants/statick/statick_embed.go index 96c37f95..51047289 100644 --- a/internal/servants/statick/statick_embed.go +++ b/internal/servants/statick/statick_embed.go @@ -2,8 +2,8 @@ // Use of this source code is governed by a MIT style // license that can be found in the LICENSE file. -//go:build embed -// +build embed +//go:build !(slim && embed) +// +build !slim !embed package statick diff --git a/main.go b/main.go index c2514e19..a193d55f 100644 --- a/main.go +++ b/main.go @@ -5,94 +5,11 @@ package main import ( - "flag" - "fmt" - "os" - "os/signal" - "strings" - "syscall" - "time" - - "github.com/alimy/cfg" - "github.com/fatih/color" - "github.com/getsentry/sentry-go" - "github.com/rocboss/paopao-ce/internal" - "github.com/rocboss/paopao-ce/internal/conf" - "github.com/rocboss/paopao-ce/internal/service" - "github.com/rocboss/paopao-ce/pkg/debug" - "github.com/rocboss/paopao-ce/pkg/utils" - "github.com/rocboss/paopao-ce/pkg/version" - "github.com/sourcegraph/conc" - _ "go.uber.org/automaxprocs" -) - -var ( - noDefaultFeatures bool - features suites + "github.com/rocboss/paopao-ce/cmd" + _ "github.com/rocboss/paopao-ce/cmd/migrate" + _ "github.com/rocboss/paopao-ce/cmd/serve" ) -type suites []string - -func (s *suites) String() string { - return strings.Join(*s, ",") -} - -func (s *suites) Set(value string) error { - for _, item := range strings.Split(value, ",") { - *s = append(*s, strings.TrimSpace(item)) - } - return nil -} - -func init() { - flagParse() - - conf.Initial(features, noDefaultFeatures) - internal.Initial() -} - -func deferFn() { - if cfg.If("Sentry") { - // Flush buffered events before the program terminates. - sentry.Flush(2 * time.Second) - } -} - -func flagParse() { - flag.BoolVar(&noDefaultFeatures, "no-default-features", false, "whether not use default features") - flag.Var(&features, "features", "use special features") - flag.Parse() -} - func main() { - utils.PrintHelloBanner(version.VersionInfo()) - ss := service.MustInitService() - if len(ss) < 1 { - fmt.Fprintln(color.Output, "no service need start so just exit") - return - } - - // do defer function - defer deferFn() - - // start pyroscope if need - debug.StartPyroscope() - - // start services - wg := conc.NewWaitGroup() - fmt.Fprintf(color.Output, "\nstarting run service...\n\n") - service.Start(wg) - - // graceful stop services - wg.Go(func() { - quit := make(chan os.Signal, 1) - // kill (no param) default send syscall.SIGTERM - // kill -2 is syscall.SIGINT - // kill -9 is syscall.SIGKILL but can't be catch, so don't need add it - signal.Notify(quit, syscall.SIGINT, syscall.SIGTERM) - <-quit - fmt.Fprintf(color.Output, "\nshutting down server...\n\n") - service.Stop() - }) - wg.Wait() + cmd.Execute() } diff --git a/pkg/version/version.go b/pkg/version/version.go index b3683bef..ce30181c 100644 --- a/pkg/version/version.go +++ b/pkg/version/version.go @@ -21,6 +21,9 @@ func VersionInfo() string { } func ReadBuildInfo() *BuildInfo { + if version == "" { + version = "unknow" + } return &BuildInfo{ Version: version, Sum: commitID, diff --git a/web/embed.go b/web/embed.go index a16df24a..1544fd4e 100644 --- a/web/embed.go +++ b/web/embed.go @@ -2,8 +2,8 @@ // Use of this source code is governed by a MIT style // license that can be found in the LICENSE file. -//go:build embed -// +build embed +//go:build !(slim && embed) +// +build !slim !embed package web