From ab4ea4850d86a1e29cb3ebfd839d121988ff42cd Mon Sep 17 00:00:00 2001 From: Simon Backx Date: Mon, 2 May 2022 12:16:58 +0200 Subject: [PATCH] Fixed null values in settings default newsletter migration (#14638) refs https://ghost.slack.com/archives/C02G9E68C/p1651484563907609 - When the site has an empty name, it is set to `NULL` in settings. - The name column is not nullable in newsletters, breaking the migration in that case. - Fixed by excluding all non-nullable columns - Replaced JS Date object with raw SQL `CURRENT_TIMESTAMP` --- ...2022-04-13-13-00-add-default-newsletter.js | 61 +++++++++++-------- 1 file changed, 34 insertions(+), 27 deletions(-) diff --git a/core/server/data/migrations/versions/4.46/2022-04-13-13-00-add-default-newsletter.js b/core/server/data/migrations/versions/4.46/2022-04-13-13-00-add-default-newsletter.js index e6647f928f..81befd208d 100644 --- a/core/server/data/migrations/versions/4.46/2022-04-13-13-00-add-default-newsletter.js +++ b/core/server/data/migrations/versions/4.46/2022-04-13-13-00-add-default-newsletter.js @@ -4,35 +4,35 @@ const logging = require('@tryghost/logging'); const startsWith = require('lodash/startsWith'); const {createTransactionalMigration} = require('../../utils'); -// This uses the default settings from core/server/data/schema/default-settings/default-settings.json -const newsletter = { - id: (new ObjectId()).toHexString(), - uuid: uuid.v4(), - name: 'Ghost', - description: '', - slug: 'default-newsletter', - sender_name: null, - sender_email: null, - sender_reply_to: 'newsletter', - status: 'active', - visibility: 'members', - subscribe_on_signup: true, - sort_order: 0, - body_font_category: 'sans_serif', - footer_content: '', - header_image: null, - show_badge: true, - show_feature_image: true, - show_header_icon: true, - show_header_title: true, - show_header_name: false, - title_alignment: 'center', - title_font_category: 'sans_serif', - created_at: new Date() -}; - module.exports = createTransactionalMigration( async function up(knex) { + // This uses the default settings from core/server/data/schema/default-settings/default-settings.json + const newsletter = { + id: (new ObjectId()).toHexString(), + uuid: uuid.v4(), + name: 'Ghost', + description: '', + slug: 'default-newsletter', + sender_name: null, + sender_email: null, + sender_reply_to: 'newsletter', + status: 'active', + visibility: 'members', + subscribe_on_signup: true, + sort_order: 0, + body_font_category: 'sans_serif', + footer_content: '', + header_image: null, + show_badge: true, + show_feature_image: true, + show_header_icon: true, + show_header_title: true, + show_header_name: false, + title_alignment: 'center', + title_font_category: 'sans_serif', + created_at: knex.raw('CURRENT_TIMESTAMP') + }; + // Make sure the newsletter table is empty const newsletters = await knex('newsletters').count('*', {as: 'total'}); @@ -68,6 +68,13 @@ module.exports = createTransactionalMigration( if (startsWith(key, 'newsletter_')) { key = key.slice(11); } + + if (value === null && ['name', 'body_font_category', 'show_badge', 'show_feature_image', 'show_header_icon', 'show_header_title', 'title_alignment', 'title_font_category'].includes(key)) { + // Prevent setting null to non-nullable columns + // Default to defaults above in that case + continue; + } + if (typeof newsletter[key] === 'boolean') { newsletter[key] = value === 'true'; } else {