It used to be that you had to upgrade in multiple steps, but not anymore. You can upgrade directly from 1.12.0 to 1.13.2
Make sure you backup your database
Attempted to upgrade to 1.17 this morning, and am now left with an instance that won't start
Below is the log
2021-04-22T08:57:53.289Z [4567/355660] - info: [plugins/spam-be-gone] Settings loaded
2021-04-22T08:57:53.299Z [4567/355660] - warn: [sso-discord-alt] Missing sso-discord-alt configuration. Not enabling authentication strategy.
2021-04-22T08:57:53.314Z [4567/355660] - info: [api] Adding 1 route(s) to `api/v3/plugins`
2021-04-22T08:57:53.325Z [4567/355660] - info: [router] Routes added
2021-04-22T08:57:53.329Z [4567/355660] - info: NodeBB Ready
2021-04-22T08:57:53.330Z [4567/355660] - info: Enabling 'trust proxy'
2021-04-22T08:57:53.332Z [4567/355660] - info: NodeBB is now listening on: 0.0.0.0:4567
2021-04-22T08:57:53.563Z [4567/355660] - error: /admin/dashboard
TypeError: Cannot read property 'length' of undefined
at module.getObjectsFields (/home/phenomlab/nodebb/src/database/mongo/hash.js:123:15)
at processTicksAndRejections (node:internal/process/task_queues:96:5)
at async User.getUsersFields (/home/phenomlab/nodebb/src/user/data.js:67:17)
at async User.getUsersData (/home/phenomlab/nodebb/src/user/data.js:141:10)
at async User.getUserData (/home/phenomlab/nodebb/src/user/data.js:136:17)
at async getLastRestart (/home/phenomlab/nodebb/src/controllers/admin/dashboard.js:235:19)
at async Promise.all (index 3)
at async dashboardController.get (/home/phenomlab/nodebb/src/controllers/admin/dashboard.js:21:64)
at async /home/phenomlab/nodebb/src/routes/helpers.js:61:5
2021-04-22T08:57:53.590Z [4567/355660] - error: uncaughtException: Cannot read property 'length' of undefined
TypeError: Cannot read property 'length' of undefined
at module.getObjectsFields (/home/phenomlab/nodebb/src/database/mongo/hash.js:123:15)
at Object.wrapperCallback [as getObjectsFields] (/home/phenomlab/nodebb/src/promisify.js:46:11)
at User.getUsersFields (/home/phenomlab/nodebb/src/user/data.js:67:26)
at processTicksAndRejections (node:internal/process/task_queues:96:5)
at async User.getUsersData (/home/phenomlab/nodebb/src/user/data.js:141:10)
at async User.getUserData (/home/phenomlab/nodebb/src/user/data.js:136:17)
at async Promise.all (index 4)
at async Object.renderHeader (/home/phenomlab/nodebb/src/middleware/header.js:72:18)
at async renderHeaderFooter (/home/phenomlab/nodebb/src/middleware/render.js:99:10)
at async Promise.all (index 0) {"error":{},"stack":"TypeError: Cannot read property 'length' of undefined\n at module.getObjectsFields (/home/phenomlab/nodebb/src/database/mongo/hash.js:123:15)\n at Object.wrapperCallback [as getObjectsFields] (/home/phenomlab/nodebb/src/promisify.js:46:11)\n at User.getUsersFields (/home/phenomlab/nodebb/src/user/data.js:67:26)\n at processTicksAndRejections (node:internal/process/task_queues:96:5)\n at async User.getUsersData (/home/phenomlab/nodebb/src/user/data.js:141:10)\n at async User.getUserData (/home/phenomlab/nodebb/src/user/data.js:136:17)\n at async Promise.all (index 4)\n at async Object.renderHeader (/home/phenomlab/nodebb/src/middleware/header.js:72:18)\n at async renderHeaderFooter (/home/phenomlab/nodebb/src/middleware/render.js:99:10)\n at async Promise.all (index 0)","exception":true,"date":"Thu Apr 22 2021 09:57:53 GMT+0100 (British Summer Time)","process":{"pid":355660,"uid":1000,"gid":1000,"cwd":"/home/phenomlab/nodebb","execPath":"/usr/bin/node","version":"v16.0.0","argv":["/usr/bin/node","/home/phenomlab/nodebb/app.js"],"memoryUsage":{"rss":295014400,"heapTotal":193429504,"heapUsed":162141056,"external":74595732,"arrayBuffers":71168333}},"os":{"loadavg":[1.18,0.67,0.47],"uptime":238331.53},"trace":[{"column":15,"file":"/home/phenomlab/nodebb/src/database/mongo/hash.js","function":"module.getObjectsFields","line":123,"method":"getObjectsFields","native":false},{"column":11,"file":"/home/phenomlab/nodebb/src/promisify.js","function":"Object.wrapperCallback [as getObjectsFields]","line":46,"method":"wrapperCallback [as getObjectsFields]","native":false},{"column":26,"file":"/home/phenomlab/nodebb/src/user/data.js","function":"User.getUsersFields","line":67,"method":"getUsersFields","native":false},{"column":5,"file":"node:internal/process/task_queues","function":"processTicksAndRejections","line":96,"method":null,"native":false},{"column":10,"file":"/home/phenomlab/nodebb/src/user/data.js","function":"async User.getUsersData","line":141,"method":"getUsersData","native":false},{"column":17,"file":"/home/phenomlab/nodebb/src/user/data.js","function":"async User.getUserData","line":136,"method":"getUserData","native":false},{"column":null,"file":null,"function":"async Promise.all","line":null,"method":"all","native":false},{"column":18,"file":"/home/phenomlab/nodebb/src/middleware/header.js","function":"async Object.renderHeader","line":72,"method":"renderHeader","native":false},{"column":10,"file":"/home/phenomlab/nodebb/src/middleware/render.js","function":"async renderHeaderFooter","line":99,"method":null,"native":false},{"column":null,"file":null,"function":"async Promise.all","line":null,"method":"all","native":false}]}
2021-04-22T08:57:53.591Z [4567/355660] - error: TypeError: Cannot read property 'length' of undefined
at module.getObjectsFields (/home/phenomlab/nodebb/src/database/mongo/hash.js:123:15)
at Object.wrapperCallback [as getObjectsFields] (/home/phenomlab/nodebb/src/promisify.js:46:11)
at User.getUsersFields (/home/phenomlab/nodebb/src/user/data.js:67:26)
at processTicksAndRejections (node:internal/process/task_queues:96:5)
at async User.getUsersData (/home/phenomlab/nodebb/src/user/data.js:141:10)
at async User.getUserData (/home/phenomlab/nodebb/src/user/data.js:136:17)
at async Promise.all (index 4)
at async Object.renderHeader (/home/phenomlab/nodebb/src/middleware/header.js:72:18)
at async renderHeaderFooter (/home/phenomlab/nodebb/src/middleware/render.js:99:10)
at async Promise.all (index 0)
2021-04-22T08:57:53.591Z [4567/355660] - info: [app] Shutdown (SIGTERM/SIGINT) Initialised.
2021-04-22T08:57:53.592Z [4567/355660] - info: [app] Web server closed to connections.
2021-04-22T08:57:53.592Z [4567/355660] - info: [app] Live analytics saved.
2021-04-22T08:57:53.602Z [4567/355660] - info: [app] Database connection closed.
2021-04-22T08:57:53.602Z [4567/355660] - info: [app] Shutdown complete.
3 restarts in 10 seconds, most likely an error on startup. Halting.
Help !!
@phenomlab Seems to be an incompatible plugin. Disabled them all, and NodeBB started. Working my way through to find the culprit.
Not a pretty site over at https://phenomlab.com. NodeBB is up, and the widget-essentials
plugin is installed and active, but doesn't work. This means my customised theme and layout is completely broken.