diff --git a/.vscode/settings.json b/.vscode/settings.json index 8917ea2b..d7ba09ea 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -1,4 +1,5 @@ { "go.lintOnSave": "workspace", - "go.lintTool": "golangci-lint" + "go.lintTool": "golangci-lint", + "go.inferGopath": false } diff --git a/docker-compose.uffizzi.yml b/docker-compose.uffizzi.yml index 42b0bb8f..e232eef4 100644 --- a/docker-compose.uffizzi.yml +++ b/docker-compose.uffizzi.yml @@ -11,7 +11,7 @@ services: image: "${MEMOS_IMAGE}" volumes: - memos_volume:/var/opt/memos - command: ["--mode", "dev"] + command: ["--mode", "demo"] volumes: memos_volume: diff --git a/server/profile/profile.go b/server/profile/profile.go index 0e1c8fe8..3ef9f7f8 100644 --- a/server/profile/profile.go +++ b/server/profile/profile.go @@ -12,7 +12,7 @@ import ( // Profile is the configuration to start main server. type Profile struct { - // Mode can be "prod" or "dev" + // Mode can be "prod" or "dev" or "demo" Mode string `json:"mode"` // Port is the binding port for server Port int `json:"-"` @@ -47,13 +47,13 @@ func checkDSN(dataDir string) (string, error) { // GetDevProfile will return a profile for dev or prod. func GetProfile() (*Profile, error) { profile := Profile{} - flag.StringVar(&profile.Mode, "mode", "dev", "mode of server") + flag.StringVar(&profile.Mode, "mode", "demo", "mode of server") flag.IntVar(&profile.Port, "port", 8081, "port of server") flag.StringVar(&profile.Data, "data", "", "data directory") flag.Parse() - if profile.Mode != "dev" && profile.Mode != "prod" { - profile.Mode = "dev" + if profile.Mode != "dev" && profile.Mode != "prod" && profile.Mode != "demo" { + profile.Mode = "demo" } if profile.Mode == "prod" && profile.Data == "" { diff --git a/server/version/version.go b/server/version/version.go index c1e3ee26..2df704de 100644 --- a/server/version/version.go +++ b/server/version/version.go @@ -15,7 +15,7 @@ var Version = "0.10.3" var DevVersion = "0.10.3" func GetCurrentVersion(mode string) string { - if mode == "dev" { + if mode == "dev" || mode == "demo" { return DevVersion } return Version diff --git a/store/activity.go b/store/activity.go index 2ebd94a7..caae9cb2 100644 --- a/store/activity.go +++ b/store/activity.go @@ -38,7 +38,7 @@ func (raw *activityRaw) toActivity() *api.Activity { // CreateActivity creates an instance of Activity. func (s *Store) CreateActivity(ctx context.Context, create *api.ActivityCreate) (*api.Activity, error) { - if s.profile.Mode != "dev" { + if s.profile.Mode == "prod" { return nil, nil } diff --git a/store/db/db.go b/store/db/db.go index 2a9d4e9e..279b22db 100644 --- a/store/db/db.go +++ b/store/db/db.go @@ -49,17 +49,7 @@ func (db *DB) Open(ctx context.Context) (err error) { } db.DBInstance = sqliteDB - if db.profile.Mode == "dev" { - // In dev mode, we should migrate and seed the database. - if _, err := os.Stat(db.profile.DSN); errors.Is(err, os.ErrNotExist) { - if err := db.applyLatestSchema(ctx); err != nil { - return fmt.Errorf("failed to apply latest schema: %w", err) - } - if err := db.seed(ctx); err != nil { - return fmt.Errorf("failed to seed: %w", err) - } - } - } else { + if db.profile.Mode == "prod" { // If db file not exists, we should migrate the database. if _, err := os.Stat(db.profile.DSN); errors.Is(err, os.ErrNotExist) { if err := db.applyLatestSchema(ctx); err != nil { @@ -120,6 +110,19 @@ func (db *DB) Open(ctx context.Context) (err error) { println(fmt.Sprintf("Failed to remove temp database file, err %v", err)) } } + } else { + // In non-prod mode, we should migrate the database. + if _, err := os.Stat(db.profile.DSN); errors.Is(err, os.ErrNotExist) { + if err := db.applyLatestSchema(ctx); err != nil { + return fmt.Errorf("failed to apply latest schema: %w", err) + } + // In demo mode, we should seed the database. + if db.profile.Mode == "demo" { + if err := db.seed(ctx); err != nil { + return fmt.Errorf("failed to seed: %w", err) + } + } + } } return nil diff --git a/web/src/pages/Auth.tsx b/web/src/pages/Auth.tsx index 0cb772e6..ae27e4fe 100644 --- a/web/src/pages/Auth.tsx +++ b/web/src/pages/Auth.tsx @@ -26,8 +26,8 @@ const Auth = () => { const actionBtnLoadingState = useLoading(false); const { appearance, locale, systemStatus } = globalStore.state; const mode = systemStatus.profile.mode; - const [username, setUsername] = useState(mode === "dev" ? "demohero" : ""); - const [password, setPassword] = useState(mode === "dev" ? "secret" : ""); + const [username, setUsername] = useState(mode === "demo" ? "demohero" : ""); + const [password, setPassword] = useState(mode === "demo" ? "secret" : ""); const [identityProviderList, setIdentityProviderList] = useState([]); useEffect(() => { diff --git a/web/src/store/module/global.ts b/web/src/store/module/global.ts index 458ec6ab..d994fa52 100644 --- a/web/src/store/module/global.ts +++ b/web/src/store/module/global.ts @@ -65,7 +65,7 @@ export const useGlobalStore = () => { return store.getState().global; }, isDev: () => { - return state.systemStatus.profile.mode === "dev"; + return state.systemStatus.profile.mode !== "prod"; }, fetchSystemStatus: async () => { const { data: systemStatus } = (await api.getSystemStatus()).data; diff --git a/web/src/store/reducer/global.ts b/web/src/store/reducer/global.ts index e03c5636..d1a005b0 100644 --- a/web/src/store/reducer/global.ts +++ b/web/src/store/reducer/global.ts @@ -14,7 +14,7 @@ const globalSlice = createSlice({ systemStatus: { host: undefined, profile: { - mode: "dev", + mode: "demo", version: "", }, dbSize: 0,