Skip to content

[pull] main from TryGhost:main#1018

Merged
pull[bot] merged 9 commits into
code:mainfrom
TryGhost:main
Apr 1, 2026
Merged

[pull] main from TryGhost:main#1018
pull[bot] merged 9 commits into
code:mainfrom
TryGhost:main

Conversation

@pull
Copy link
Copy Markdown

@pull pull Bot commented Mar 31, 2026

See Commits and Changes for more details.


Created by pull[bot] (v2.0.0-alpha.4)

Can you help keep this open source service alive? 💖 Please sponsor : )

cmraible and others added 9 commits March 31, 2026 11:15
closes
https://linear.app/ghost/issue/NY-1181/add-email-design-setting-permissions

Adds CRUD permissions for the new `email_design_setting` resource,
restricted to `Administrator` and `Admin Integration` roles.

**Changes:**
- Added database migration to create browse, read, edit, add, and
destroy permissions for `email_design_setting`
- Updated fixtures to include the new permissions and assign them to
Administrator and Admin Integration roles
- Updated fixtures hash in integrity test
closes
https://linear.app/ghost/issue/NY-1180/add-email-design-setting-id-fk-to-automated-emails

## Summary

- Added nullable `email_design_setting_id` FK column to
`automated_emails` table
- Plan to backfill all existing `automated_emails` rows with the default
`email_design_settings` row, then make this column non-nullable in two
follow up migration PRs to come.

Stacked on #27006
…7022)

closes
https://linear.app/ghost/issue/NY-1184/backfill-the-email-design-setting-id-column-on-automated-emails-table

Stacked on #27008

## Summary

- Added a backfill migration that sets `email_design_setting_id` to the
default email design setting (`default-automated-email` slug) for all
existing `automated_emails` rows
- Added an `onCreating` hook to the `AutomatedEmail` model that
auto-assigns the default email design setting when none is provided
- Added test fixtures for `EmailDesignSetting` and updated e2e API
snapshots
- Added unit tests for the `onCreating` behavior

## Test plan

- [x] Unit tests for `onCreating` hook (default assignment, custom ID
preserved, missing default throws)
- [x] Updated e2e API snapshots include `email_design_setting_id` in
responses
- [x] Backfill migration has reversible `down` function
…mated_emails` table (#27033)

closes
https://linear.app/ghost/issue/NY-1185/drop-nullable-on-the-email-design-setting-id-column-on-automated

## Summary
- Changed `email_design_setting_id` column on `automated_emails` table
from nullable to non-nullable
- Added a database migration using `createDropNullableMigration` to
alter the column constraint
- Updated schema definition and schema integrity hash

This is the final step after backfilling existing rows in #27022,
completing the column constraint tightening.

## Test plan
- [x] Schema integrity test updated with new hash
- [x] Run `yarn test:unit` in `ghost/core` to verify schema integrity
- [x] Run migration against a database with existing `automated_emails`
rows to confirm no errors
…nce tests (#27034)

ref https://github.com/TryGhost/Ghost/actions/runs/23812667343/attempts/1

We had a flaky test. In general, these browser tests have been incredibly fussy. I'm going to look at shifting more of them into acceptance/component tests rather than E2E and pare E2E back to more of the 'core' workflow/validation.

- Refactored 4 visibility/access e2e tests to create posts via the Admin
API instead of driving the full admin UI (editor → settings sidebar →
dropdown → publish flow), eliminating the `waitForResponse`,
`waitForFunction`, and `clearVisibilityTiers` workarounds that were
causing CI flakiness
- Added `tiers` field to the e2e `Post` interface so the factory can
create posts with tier-based visibility directly
- Added Ember acceptance tests for the editor sidebar visibility
dropdown (members, paid, tiers selector appearance, API save
verification) to cover the UI interaction removed from e2e
- Kept the publish-flow e2e tests (publish-only, email-only, schedule,
update) as full UI flows since the modal interaction is what they test
)

ref https://linear.app/ghost/issue/PLA-10/

The test verifies that the post settings menu date-time-picker displays
the correct time when the site timezone changes. This is a client-side
formatting concern that doesn't need a full browser e2e test — Mirage
can mock the settings and post data directly - it likely never should've
been an e2e test.
…27037)

ref https://linear.app/ghost/issue/PLA-10/

The test verifies that the publish flow defaults to "Publish" (not "Publish and email") when newsletter defaults are set to "Usually nobody" — this is a client-side setting read that Mirage can mock directly.
ref https://linear.app/ghost/issue/PLA-10/
- Removes the entire `ghost/core/test/e2e-browser/` directory and all
associated infrastructure
- Removes the `job_browser-tests` CI workflow job (saves ~60min CI time
per run)
- Removes `@playwright/test` devDependency from ghost/core
- Removes `test:browser` scripts from root and ghost/core package.json
- Removes Playwright config, browser test runner script, and Nx browser
test targets
@pull pull Bot merged commit 9e856de into code:main Apr 1, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants