Skip to content

[pull] main from TryGhost:main - #1525

Merged
pull[bot] merged 21 commits into
code:mainfrom
TryGhost:main
Sep 28, 2026
Merged

pull[bot] merged 21 commits into
code:mainfrom
TryGhost:main

Conversation

@pull

@pull pull Bot commented Sep 28, 2026 •

Copy link
Copy Markdown

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 : )

EvanHahn and others added 21 commits September 28, 2026 16:23
no ref

This change should have no user impact.
Keep the services catalogue focused on owned application capabilities by
moving shared magic-link support into `server/lib/magic-link`.

Magic-link token creation, validation and URL generation are shared by
members, newsletters, settings and welcome emails. They deserve a
dedicated library rather than a home under services or mail delivery.
This moves the implementation and unit tests and updates imports; the
implementation is unchanged.
no ref

This wires up Sentry to the same rough shape of logging and attribution that we used in the Ember implementation.
…icked (#30996)

no ref

Adjusted the save logic such that when no tier is selected (and tier access is chosen in the sidebar), a banner shows and saves are blocked to prevent malformed data.
no ref

A new table's shape usually changes several times before its feature
ships. Today every change needs its own versioned migration and schema
hash bump, so tables pick up a trail of migrations that only existed to
reshape them during development.

Tables listed in schema/in-development.ts are defined only in schema.js
until they are final. knex-migrator init creates them only where the new
createInDevelopmentTables config is enabled (development and testing),
boot creates them in an existing dev database if missing, and
`pnpm migrate:rebuild-in-development-tables` drops and recreates them to
pick up definition changes. They're left out of the integrity hash, and
finalised tables may not reference them. Once final, the table is removed
from the list and gets its versioned migration as usual.
no ref

Attempt to tighten up a flaky test. Closing Publish during its settings refresh left focus on the document body because the refresh disabled the Publish button ([example failure](https://github.com/TryGhost/Ghost/actions/runs/36449029590/job/109019899264)). Keeping validated cached settings usable during the refresh allows focus to return.
no ref

Moves the View site (`/site`) and migration (`/migrate/*`) screens to React and deletes the Ember versions. Both screens just host an iframe, so they ship without a flag.

This contains some small stylistic updates (consistency fixes) to the migrate iframe.
no ref

Tidied up test output so that passing tests don't leave 1ks of lines.
…31047)

no ref

The Stripe subscription methods in the member repository dereferenced the
result of `findOne` without checking it, so an unknown member id or email
produced a 500 instead of a 404. They now throw NotFoundError, matching the
rest of the repository.

In Portal, a `data-members-plan="monthly|yearly"` button on a site with no
available paid tier threw before the click handler was re-attached, leaving
the button dead with no error shown. The request now goes through without a
tier, so the server's 400 is surfaced and the button recovers.
no ref

This is a test-only cleanup.
towards https://linear.app/ghost/issue/NY-1617

This is a test-only change.

I think this useful on its own, but it'll also make an upcoming change
easier.
no refs

[I recommend reviewing this with whitespace
hidden.](https://github.com/TryGhost/Ghost/pull/30831/changes?w=1)

This PR is code formatting only; there should be no user-facing changes.
I generated this PR by running `tb fmt` on the `api_kpis.pipe` and
committed the result unmodified. Formatting these files will make it
easier to read the diff for future changes.
no ref

Welcome email rows render before the automated emails list loads, but
the edit handler ignores clicks until it does, so early clicks were
silently dropped. This also flaked the welcome-email acceptance specs on
slow CI. The row's edit triggers are now disabled until the list has
loaded.
ref https://ghost.slack.com/archives/C072AHLF4AE/p1790617814811729

Preserves filters and sort order when returning from either editor to the React Posts or Pages list. Browser Back also preserves them. Clicking the main Posts sidebar link opens a fresh, unfiltered list, matching Members; saved-view links retain their filters.
ref https://ghost.slack.com/archives/C072AHLF4AE/p1790617814811729

Preserves post selection while bulk-action modals are open, including dropdown interactions and Escape dismissal, so consecutive actions can reuse the same selected posts.
no ref

Split Admin acceptance tests across two CI shards to shorten the run, with separate failure artifacts and documented local commands.
no refs

_Note: this is a development only change, and should have no user
impact._

## Problem

Running `pnpm dev:analytics` does not currently watch and rebuild the
Tinybird files in local development. If you're working on changes to the
Tinybird files, you have to explicitly deploy them, or run `tb dev` in a
separate docker compose service in a separate terminal window. It's also
cumbersome to run the Tinybird tests, or any other arbitrary `tb` cli
commands against the tinybird-local service.

## Solution

- Add a new `tb-watch` service `pnpm dev:analytics` that watches and
re-deploys Tinybird files locally upon changes.
- Update the `pnpm tb` script to run arbitrary `tb` CLI commands against
the running tinybird-local service.
- Add a `pnpm tb:test` script to make running the tinybird tests much
easier.
- Remove all references to running Tinybird with Ghost locally,
bypassing the docker compose setup, now that `pnpm dev:analytics` is
quite stable. This was mostly a documentation & package.json script
change to reduce confusion.
@pull pull Bot locked and limited conversation to collaborators Sep 28, 2026
@pull pull Bot added the ⤵️ pull label Sep 28, 2026
@pull
pull Bot merged commit ae3febb into code:main Sep 28, 2026
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants