diff --git a/backend/app/cmd/backup_test.go b/backend/app/cmd/backup_test.go index 4eb6eb8f..e163d0f4 100644 --- a/backend/app/cmd/backup_test.go +++ b/backend/app/cmd/backup_test.go @@ -8,7 +8,7 @@ import ( "os" "testing" - flags "github.com/jessevdk/go-flags" + "github.com/jessevdk/go-flags" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" ) diff --git a/backend/app/cmd/cmd.go b/backend/app/cmd/cmd.go index 0eb8e157..664dba0b 100644 --- a/backend/app/cmd/cmd.go +++ b/backend/app/cmd/cmd.go @@ -16,9 +16,6 @@ import ( "github.com/pkg/errors" ) -// Revision sets from main -var Revision = "unknown" - // CommonOptionsCommander extends flags.Commander with SetCommon // All commands should implement this interfaces type CommonOptionsCommander interface { @@ -30,12 +27,15 @@ type CommonOptionsCommander interface { type CommonOpts struct { RemarkURL string SharedSecret string + Revision string } // SetCommon satisfies CommonOptionsCommander interface and sets common option fields +// The method called by main for each command func (c *CommonOpts) SetCommon(commonOpts CommonOpts) { c.RemarkURL = commonOpts.RemarkURL c.SharedSecret = commonOpts.SharedSecret + c.Revision = commonOpts.Revision } // fileParser used to convert template strings like blah-{{.SITE}}-{{.YYYYMMDD}} the final format diff --git a/backend/app/cmd/server.go b/backend/app/cmd/server.go index b1bd03f5..b1d7ab2f 100644 --- a/backend/app/cmd/server.go +++ b/backend/app/cmd/server.go @@ -149,7 +149,7 @@ func (s *ServerCommand) Execute(args []string) error { log.Fatalf("[ERROR] failed to setup application, %+v", err) } if err = app.run(ctx); err != nil { - log.Printf("[INFO] remark terminated with error %+v", err) + log.Printf("[WARN] remark terminated with error %+v", err) return err } log.Printf("[INFO] remark terminated") @@ -170,17 +170,18 @@ func (s *ServerCommand) newServerApp() (*serverApp, error) { storeEngine, err := s.makeDataStore() if err != nil { - return nil, err + return nil, errors.Wrap(err, "failed to make data store engine") } keyStore, err := s.makeKeyStore() if err != nil { - return nil, err + return nil, errors.Wrap(err, "failed to make key store") + } adminStore, err := s.makeAdminStore() if err != nil { - return nil, err + return nil, errors.Wrap(err, "failed to make admin store") } dataService := &service.DataStore{ @@ -193,7 +194,7 @@ func (s *ServerCommand) newServerApp() (*serverApp, error) { loadingCache, err := s.makeCache() if err != nil { - return nil, err + return nil, errors.Wrap(err, "failed to make cache") } // token TTL is 5 minutes, inactivity interval 7+ days by default @@ -225,7 +226,7 @@ func (s *ServerCommand) newServerApp() (*serverApp, error) { commentFormatter := store.NewCommentFormatter(imgProxy) srv := &api.Rest{ - Version: Revision, + Version: s.Revision, DataService: dataService, WebRoot: s.WebRoot, RemarkURL: s.RemarkURL, diff --git a/backend/app/cmd/server_test.go b/backend/app/cmd/server_test.go index 5016f7c1..c2985795 100644 --- a/backend/app/cmd/server_test.go +++ b/backend/app/cmd/server_test.go @@ -142,7 +142,7 @@ func TestServerApp_Failed(t *testing.T) { _, err := p.ParseArgs([]string{"--backup=/tmp", "--store.bolt.path=/dev/null"}) assert.Nil(t, err) _, err = opts.newServerApp() - assert.EqualError(t, err, "can't initialize data store: failed to make boltdb for /dev/null/remark.db: "+ + assert.EqualError(t, err, "failed to make data store engine: can't initialize data store: failed to make boltdb for /dev/null/remark.db: "+ "open /dev/null/remark.db: not a directory") t.Log(err) @@ -174,7 +174,7 @@ func TestServerApp_Failed(t *testing.T) { opts.Store.Type = "blah" _, err = opts.newServerApp() - assert.EqualError(t, err, "unsupported store type blah") + assert.EqualError(t, err, "failed to make data store engine: unsupported store type blah") t.Log(err) } diff --git a/backend/app/main.go b/backend/app/main.go index 00eed26f..36040c70 100644 --- a/backend/app/main.go +++ b/backend/app/main.go @@ -28,15 +28,18 @@ var revision = "unknown" func main() { fmt.Printf("remark42 %s\n", revision) - cmd.Revision = revision var opts Opts p := flags.NewParser(&opts, flags.Default) p.CommandHandler = func(command flags.Commander, args []string) error { setupLog(opts.Dbg) - commonOpts := cmd.CommonOpts{RemarkURL: opts.RemarkURL, SharedSecret: opts.SharedSecret} + // commands implements CommonOptionsCommander to allow passing set of extra options defined for all commands c := command.(cmd.CommonOptionsCommander) - c.SetCommon(commonOpts) + c.SetCommon(cmd.CommonOpts{ + RemarkURL: opts.RemarkURL, + SharedSecret: opts.SharedSecret, + Revision: revision, + }) err := c.Execute(args) if err != nil { log.Printf("[ERROR] failed with %+v", err)