Skip to content

Moved @tryghost/api-framework into the Ghost monorepo#28704

Draft
allouis wants to merge 119 commits into
mainfrom
move-api-framework-into-monorepo
Draft

Moved @tryghost/api-framework into the Ghost monorepo#28704
allouis wants to merge 119 commits into
mainfrom
move-api-framework-into-monorepo

Conversation

@allouis

@allouis allouis commented Jun 18, 2026

Copy link
Copy Markdown
Collaborator

What

Relocates @tryghost/api-framework from the standalone TryGhost/framework repo into ghost/api-framework, with its full commit history preserved. Ghost is the package's only consumer, so co-locating it removes the cross-repo publish + version-bump cycle for every change to it.

Validation

  • pnpm install resolves clean under strict catalog mode.
  • pnpm --filter @tryghost/api-framework test:unit → 115/115 pass.
  • oxlint clean; oxfmt --check clean.

Note for reviewers

The merge joins two previously-unrelated histories, so the commit list includes the package's full upstream history. The diff against main is just the added ghost/api-framework/ tree plus the small workspace-wiring changes.

daniellockyer and others added 30 commits August 11, 2022 17:44
refs https://github.com/TryGhost/Toolbox/issues/363

- this API framework is standalone and should be pulled out into a
  separate package so we can define its boundaries more clearly, and
  promote better testing of smaller parts
- these tests have moved from `core/` so the names are no longer
  relevant
- it's better suited here given this package is now the API framework
- if the API controller endpoint is a function, we early return as we
  expect the function to handle the response but we still ended up
  calculating the headers beforehand, only to be thrown away
- this commit moves the header fetching code down in the flow so it's
  only executed when needed
- this doesn't really have a big effect for us because 99% of our
  controllers follow the object pattern
- this file was mostly just missing tests for the other content
  disposition types, which are easily added
- bumps coverage of this file to 100%
- this makes the code more readable and succinct
- because of how the npm scripts were set up, we were running the full
  Admin integration tests during the unit tests phase of CI
- this commit renames the majority of `test` to `test:unit` in the
  package.json files, and aliases `test` to `test:unit`
- special packages like Admin have no-op'd `test:unit` scripts so we
  don't end up running its tests
- cleaned up unused dependencies
- adds missing dependencies that are used in the code
- this should help us be more explicit about the dependencies a package
  uses
- fixes a bunch of red squiggly lines due to type issues
- this in turn makes it slightly easier to read the API pipeline code
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
refs: #14882

- Removing bluebird specific methods in favour of the Ghost sequence method so we can remove the bluebird dependency
- also includes `knex-migrator` with a simple `sqlite3` bump
- this was all getting terribly behind so I've done several things:
  - majority of `@tryghost/*` except Lexical packages
  - gscan + knex-migrator to remove old `@tryghost/errors` usage
  - bumped lockfile
- there's a weird situation when we have mixed versions of the
  dependency because different libraries try to compare instances
- this brings the usage up to 1.2.21 so we can fix the build for now
refs https://github.com/TryGhost/Toolbox/issues/522

- API-level response caching allows to cache responses bypassing the "pipeline" processing
- The main usecase for these caches is caching GET requests for expensive Content API requests
- To enable response caching add a "cache" key with a cache instance as a value, for example for posts public cache configuration can look like:
```
module.exports = {
    docName: 'posts',

    browse: {
        cache: postsPublicService.api.cache,
        options: [ ...
```
- this is being done manually instead of merging the Renovate PR because
  the PR bundles another bump which doesn't pass yet
- we keep ending up with multiple versions of the depedency in our tree,
  and it's causing problems when comparing instances
- the workaround I'm implementing for now is to bump the package
  everywhere and set a resolution so we only have 1 shared instance
- hopefully we can come up with a better method down the line
- we previously used `@stdlib/utils` instead of the child package
  `@stdlib/copy`, which is a lot smaller and contains our only use of
  the parent
- this saves 140+MB of dependencies
9larsons and others added 27 commits March 10, 2026 10:46
- project: @tryghost/bookshelf-transaction-events 2.0.1

- project: @tryghost/bookshelf-include-count 2.0.1

- project: @tryghost/bookshelf-custom-query 2.0.1

- project: @tryghost/webhook-mock-receiver 2.0.1

- project: @tryghost/bookshelf-eager-load 2.0.1

- project: @tryghost/bookshelf-pagination 2.0.1

- project: @tryghost/bookshelf-collision 2.0.1

- project: @tryghost/bookshelf-has-posts 2.0.1

- project: @tryghost/email-mock-receiver 2.0.1

- project: @tryghost/prometheus-metrics 3.0.1

- project: @tryghost/bookshelf-plugins 2.0.1

- project: @tryghost/bookshelf-filter 2.0.1

- project: @tryghost/bookshelf-search 2.0.1

- project: @tryghost/http-cache-utils 2.0.1

- project: @tryghost/mw-error-handler 3.0.1

- project: @tryghost/bookshelf-order 2.0.1

- project: @tryghost/api-framework 3.0.1

- project: @tryghost/database-info 2.0.1

- project: @tryghost/domain-events 3.0.1

- project: @tryghost/elasticsearch 5.0.1

- project: @tryghost/jest-snapshot 2.0.1

- project: @tryghost/pretty-stream 2.0.1

- project: @tryghost/express-test 2.0.1

- project: @tryghost/http-stream 2.0.1

- project: @tryghost/job-manager 3.0.1

- project: @tryghost/nodemailer 2.0.1

- project: @tryghost/pretty-cli 3.0.1

- project: @tryghost/root-utils 2.0.1

- project: @tryghost/validator 2.0.1

- project: @tryghost/mw-vhost 3.0.1

- project: @tryghost/security 3.0.1

- project: @tryghost/logging 4.0.1

- project: @tryghost/metrics 3.0.1

- project: @tryghost/promise 2.0.1

- project: @tryghost/request 3.0.1

- project: @tryghost/version 2.0.1

- project: @tryghost/config 2.0.1

- project: @tryghost/errors 3.0.1

- project: @tryghost/server 2.0.1

- project: @tryghost/debug 2.0.1

- project: @tryghost/tpl 2.0.1

- project: @tryghost/zip 3.0.1
- project: @tryghost/bookshelf-transaction-events 2.0.2

- project: @tryghost/bookshelf-include-count 2.0.2

- project: @tryghost/bookshelf-custom-query 2.0.2

- project: @tryghost/webhook-mock-receiver 2.0.2

- project: @tryghost/bookshelf-eager-load 2.0.2

- project: @tryghost/bookshelf-pagination 2.0.2

- project: @tryghost/bookshelf-collision 2.0.2

- project: @tryghost/bookshelf-has-posts 2.0.2

- project: @tryghost/email-mock-receiver 2.0.2

- project: @tryghost/prometheus-metrics 3.0.2

- project: @tryghost/bookshelf-plugins 2.0.2

- project: @tryghost/bookshelf-filter 2.0.2

- project: @tryghost/bookshelf-search 2.0.2

- project: @tryghost/http-cache-utils 2.0.2

- project: @tryghost/mw-error-handler 3.0.2

- project: @tryghost/bookshelf-order 2.0.2

- project: @tryghost/api-framework 3.0.2

- project: @tryghost/database-info 2.0.2

- project: @tryghost/domain-events 3.0.2

- project: @tryghost/elasticsearch 5.0.2

- project: @tryghost/jest-snapshot 2.0.2

- project: @tryghost/pretty-stream 2.0.2

- project: @tryghost/express-test 2.0.2

- project: @tryghost/http-stream 2.0.2

- project: @tryghost/job-manager 3.0.2

- project: @tryghost/nodemailer 2.0.2

- project: @tryghost/pretty-cli 3.0.2

- project: @tryghost/root-utils 2.0.2

- project: @tryghost/validator 2.0.2

- project: @tryghost/mw-vhost 3.0.2

- project: @tryghost/security 3.0.2

- project: @tryghost/logging 4.0.2

- project: @tryghost/metrics 3.0.2

- project: @tryghost/promise 2.0.2

- project: @tryghost/request 3.0.2

- project: @tryghost/version 2.0.2

- project: @tryghost/config 2.0.2

- project: @tryghost/errors 3.0.2

- project: @tryghost/server 2.0.2

- project: @tryghost/debug 2.0.2

- project: @tryghost/tpl 2.0.2

- project: @tryghost/zip 3.0.2
- project: @tryghost/bookshelf-transaction-events 2.0.3

- project: @tryghost/bookshelf-include-count 2.0.3

- project: @tryghost/bookshelf-custom-query 2.0.3

- project: @tryghost/webhook-mock-receiver 2.0.3

- project: @tryghost/bookshelf-eager-load 2.0.3

- project: @tryghost/bookshelf-pagination 2.0.3

- project: @tryghost/bookshelf-collision 2.0.3

- project: @tryghost/bookshelf-has-posts 2.1.0

- project: @tryghost/email-mock-receiver 2.0.3

- project: @tryghost/prometheus-metrics 3.0.3

- project: @tryghost/bookshelf-plugins 2.0.3

- project: @tryghost/bookshelf-filter 2.0.3

- project: @tryghost/bookshelf-search 2.0.3

- project: @tryghost/http-cache-utils 2.0.3

- project: @tryghost/mw-error-handler 3.0.3

- project: @tryghost/bookshelf-order 2.0.3

- project: @tryghost/api-framework 3.0.3

- project: @tryghost/database-info 2.0.3

- project: @tryghost/domain-events 3.0.3

- project: @tryghost/elasticsearch 5.0.3

- project: @tryghost/jest-snapshot 2.0.3

- project: @tryghost/pretty-stream 2.0.3

- project: @tryghost/express-test 2.0.3

- project: @tryghost/http-stream 2.0.3

- project: @tryghost/job-manager 3.0.3

- project: @tryghost/nodemailer 2.0.3

- project: @tryghost/pretty-cli 3.0.3

- project: @tryghost/root-utils 2.0.3

- project: @tryghost/validator 2.0.3

- project: @tryghost/mw-vhost 3.0.3

- project: @tryghost/security 3.0.3

- project: @tryghost/logging 4.0.3

- project: @tryghost/metrics 3.0.3

- project: @tryghost/promise 2.0.3

- project: @tryghost/request 3.0.3

- project: @tryghost/version 2.0.3

- project: @tryghost/config 2.0.3

- project: @tryghost/errors 3.0.3

- project: @tryghost/server 2.0.3

- project: @tryghost/debug 2.0.3

- project: @tryghost/tpl 2.0.3

- project: @tryghost/zip 3.0.3
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
ref https://linear.app/ghost/issue/PLA-12/
- migrated from eslint to oxfmt/oxlint

This PR moves this repo over to oxfmt/oxlint. We are keeping the default rules and not applying the Ghost-specific rules (these will be evaluated later as a separate effort, on whether or not we want to bring them back). The idea here is to update tooling to a faster, modern tool and leverage **defaults**. The only rule we have adjusted here is single quotes.
no ref

Migrated to pnpm 10.33 to match TryGhost/Ghost.
no ref
- Convert every internal @tryghost/* ref in dependencies/devDependencies
  to workspace:*. pnpm pack rewrites this to the real version at publish
  time, so consumers outside the monorepo are unaffected.
- Declare @tryghost/debug in prometheus-metrics (phantom import from
  MetricsServer.ts that only resolved under yarn's flat layout).
- Declare @types/node as a direct devDep on the two TypeScript packages
  (errors, prometheus-metrics). These were the only packages relying on
  the hoisted @types/node to satisfy the shared tsconfig's types:[node].
- Delete .npmrc. link-workspace-packages and both public-hoist-pattern
  entries are no longer needed.
no ref

Some more pnpm optimizations:
- Move overrides and onlyBuiltDependencies from root package.json's pnpm
  key into pnpm-workspace.yaml. This is where pnpm 10 recommends these
  live, alongside the packages glob.
- Introduce a default catalog for three devDeps that were duplicated
  across packages at identical versions:
    sinon       (35 packages + root)
    ts-node     (2 packages + root)
    typescript  (2 packages)
  Every reference becomes "catalog:". Bumping any of these is now a
  one-line change in pnpm-workspace.yaml instead of a 35-file PR.
  typescript and ts-node will grow further with the ts-esm-migration,
  so cataloguing them now avoids having to re-touch each manifest later.

pnpm pack continues to rewrite "catalog:" to real versions at publish
time (verified: @tryghost/api-framework pack emits "sinon": "21.1.2"),
so consumers outside the monorepo are unaffected.
…558)

no ref

Sweep across all package READMEs to bring install/develop/test instructions in line with the current toolchain. No code changes.
- project: @tryghost/bookshelf-transaction-events 2.1.0

- project: @tryghost/bookshelf-include-count 2.1.0

- project: @tryghost/bookshelf-custom-query 2.1.0

- project: @tryghost/webhook-mock-receiver 2.1.0

- project: @tryghost/bookshelf-eager-load 2.1.0

- project: @tryghost/bookshelf-pagination 2.1.0

- project: @tryghost/bookshelf-collision 2.1.0

- project: @tryghost/bookshelf-has-posts 2.2.0

- project: @tryghost/email-mock-receiver 2.1.0

- project: @tryghost/prometheus-metrics 3.1.0

- project: @tryghost/bookshelf-plugins 2.1.0

- project: @tryghost/bookshelf-filter 2.1.0

- project: @tryghost/bookshelf-search 2.1.0

- project: @tryghost/http-cache-utils 2.1.0

- project: @tryghost/mw-error-handler 3.1.0

- project: @tryghost/bookshelf-order 2.1.0

- project: @tryghost/api-framework 3.1.0

- project: @tryghost/database-info 2.1.0

- project: @tryghost/domain-events 3.1.0

- project: @tryghost/elasticsearch 5.1.0

- project: @tryghost/jest-snapshot 2.1.0

- project: @tryghost/pretty-stream 2.1.0

- project: @tryghost/express-test 2.1.0

- project: @tryghost/http-stream 2.1.0

- project: @tryghost/job-manager 3.1.0

- project: @tryghost/nodemailer 2.1.0

- project: @tryghost/pretty-cli 3.1.0

- project: @tryghost/root-utils 2.1.0

- project: @tryghost/validator 2.1.0

- project: @tryghost/mw-vhost 3.1.0

- project: @tryghost/security 3.1.0

- project: @tryghost/logging 4.1.0

- project: @tryghost/metrics 3.1.0

- project: @tryghost/promise 2.1.0

- project: @tryghost/request 3.1.0

- project: @tryghost/version 2.1.0

- project: @tryghost/config 2.1.0

- project: @tryghost/errors 3.1.0

- project: @tryghost/server 2.1.0

- project: @tryghost/debug 2.1.0

- project: @tryghost/tpl 2.1.0

- project: @tryghost/zip 3.1.0
ref ONC-1676

The pipeline built its cache key with `JSON.stringify(cacheKeyData,
Object.keys(cacheKeyData).sort())`. The array form of the replacer is a
recursive key whitelist — it is applied at every depth, not just the
top level — so any key in a nested object that did not also appear as a
top-level key of `cacheKeyData` was silently dropped from the
serialized output. As a result, two calls whose `cacheKeyData` agreed
on the top-level keys but differed inside a nested object produced the
same cache key.

Replaced the replacer array with a `sortKeysReplacer` function that
returns each plain object with its keys sorted while leaving the values
intact, so the output stays deterministic at every depth and no nested
keys are lost. Added a regression test in `pipeline.test.js` that
exercises two requests with identical top-level keys but different
nested fields and asserts the resulting cache keys are distinct.
no ref
- concurrency groups cancel stale PR runs and serialize publishes
- format:check gate catches oxfmt drift before it lands
- .nx/cache is restored between CI runs for cache hits on re-runs
- drop redundant npm 11 install (Node 24 ships with it)
- drop duplicated pnpm version pin (packageManager field drives it)
- reformat 5 test files that had pre-existing oxfmt drift so the new
  gate is green
Every package's test script is now the same shape:
  "test": "NODE_ENV=testing vitest run --coverage"

Three kinds of drift collapsed:
- "--config ../../vitest.config.ts" flag removed (vitest auto-discovers
  the root vitest.config.ts from a package dir — verified behavior is
  identical with and without the flag)
- Vestigial test:unit indirection removed from 8 packages that had
  test: "pnpm run test:unit" → test:unit: "vitest ..." with no other
  sub-targets. The indirection was left over from an aspirational
  unit/integration split that never happened.
- prometheus-metrics keeps its test: "test:types && test:unit"
  compound since it has a legitimate tsc --noEmit type check alongside
  tests
- project: @tryghost/prometheus-metrics 3.1.1

- project: @tryghost/api-framework 3.1.1

- project: @tryghost/domain-events 3.1.1

- project: @tryghost/http-stream 2.1.1

- project: @tryghost/job-manager 3.1.1

- project: @tryghost/validator 3.0.0

- project: @tryghost/logging 4.1.1

- project: @tryghost/request 3.1.1

- project: @tryghost/server 2.1.1
- project: @tryghost/bookshelf-transaction-events 2.2.0

- project: @tryghost/bookshelf-include-count 2.2.0

- project: @tryghost/bookshelf-custom-query 2.2.0

- project: @tryghost/webhook-mock-receiver 2.2.0

- project: @tryghost/bookshelf-eager-load 2.2.0

- project: @tryghost/bookshelf-pagination 2.2.0

- project: @tryghost/bookshelf-collision 2.2.0

- project: @tryghost/bookshelf-has-posts 2.3.0

- project: @tryghost/email-mock-receiver 2.2.0

- project: @tryghost/prometheus-metrics 3.2.0

- project: @tryghost/bookshelf-plugins 2.2.0

- project: @tryghost/bookshelf-filter 2.2.0

- project: @tryghost/bookshelf-search 2.2.0

- project: @tryghost/http-cache-utils 2.2.0

- project: @tryghost/mw-error-handler 3.2.0

- project: @tryghost/bookshelf-order 2.2.0

- project: @tryghost/api-framework 3.2.0

- project: @tryghost/database-info 2.2.0

- project: @tryghost/domain-events 3.2.0

- project: @tryghost/elasticsearch 5.2.0

- project: @tryghost/jest-snapshot 2.2.0

- project: @tryghost/pretty-stream 2.2.0

- project: @tryghost/express-test 2.2.0

- project: @tryghost/http-stream 2.2.0

- project: @tryghost/job-manager 3.2.0

- project: @tryghost/nodemailer 2.2.0

- project: @tryghost/pretty-cli 3.2.0

- project: @tryghost/root-utils 2.2.0

- project: @tryghost/validator 3.1.0

- project: @tryghost/mw-vhost 3.2.0

- project: @tryghost/security 3.2.0

- project: @tryghost/logging 4.2.0

- project: @tryghost/metrics 3.2.0

- project: @tryghost/promise 2.2.0

- project: @tryghost/request 3.2.0

- project: @tryghost/version 2.2.0

- project: @tryghost/config 2.2.0

- project: @tryghost/errors 3.2.0

- project: @tryghost/server 2.2.0

- project: @tryghost/debug 2.2.0

- project: @tryghost/tpl 2.2.0

- project: @tryghost/zip 3.2.0
- project: @tryghost/bookshelf-pagination 2.2.1

- project: @tryghost/bookshelf-collision 2.2.1

- project: @tryghost/prometheus-metrics 3.2.1

- project: @tryghost/bookshelf-plugins 2.2.1

- project: @tryghost/bookshelf-filter 2.2.1

- project: @tryghost/mw-error-handler 3.2.1

- project: @tryghost/api-framework 3.2.1

- project: @tryghost/domain-events 3.2.1

- project: @tryghost/jest-snapshot 2.2.1

- project: @tryghost/express-test 2.2.1

- project: @tryghost/http-stream 2.2.1

- project: @tryghost/job-manager 3.2.1

- project: @tryghost/nodemailer 2.2.1

- project: @tryghost/validator 3.1.1

- project: @tryghost/logging 4.2.1

- project: @tryghost/request 3.2.1

- project: @tryghost/errors 3.2.1

- project: @tryghost/server 2.2.1

- project: @tryghost/zip 3.3.1
- project: @tryghost/bookshelf-transaction-events 2.2.1

- project: @tryghost/bookshelf-include-count 2.2.1

- project: @tryghost/bookshelf-custom-query 2.2.1

- project: @tryghost/webhook-mock-receiver 2.2.1

- project: @tryghost/bookshelf-eager-load 2.2.1

- project: @tryghost/bookshelf-pagination 2.2.2

- project: @tryghost/bookshelf-collision 2.2.2

- project: @tryghost/bookshelf-has-posts 2.3.1

- project: @tryghost/email-mock-receiver 2.2.1

- project: @tryghost/prometheus-metrics 4.0.1

- project: @tryghost/bookshelf-plugins 2.2.2

- project: @tryghost/bookshelf-filter 2.2.2

- project: @tryghost/bookshelf-search 2.2.1

- project: @tryghost/http-cache-utils 2.2.1

- project: @tryghost/mw-error-handler 3.2.2

- project: @tryghost/bookshelf-order 2.2.1

- project: @tryghost/api-framework 3.2.2

- project: @tryghost/database-info 2.2.1

- project: @tryghost/domain-events 3.2.3

- project: @tryghost/elasticsearch 5.2.1

- project: @tryghost/jest-snapshot 2.2.2

- project: @tryghost/pretty-stream 2.2.1

- project: @tryghost/express-test 2.2.2

- project: @tryghost/http-stream 2.2.2

- project: @tryghost/job-manager 4.0.2

- project: @tryghost/nodemailer 2.2.2

- project: @tryghost/pretty-cli 3.2.1

- project: @tryghost/root-utils 2.2.1

- project: @tryghost/validator 3.1.2

- project: @tryghost/mw-vhost 3.2.1

- project: @tryghost/security 3.2.1

- project: @tryghost/logging 5.0.1

- project: @tryghost/metrics 3.2.1

- project: @tryghost/promise 2.2.1

- project: @tryghost/request 3.2.2

- project: @tryghost/version 2.2.1

- project: @tryghost/config 2.2.1

- project: @tryghost/errors 3.2.2

- project: @tryghost/server 3.0.1

- project: @tryghost/debug 2.2.1

- project: @tryghost/tpl 2.2.1

- project: @tryghost/zip 3.3.2
Kept request parameter handling aligned with the documented accepted values.
- project: @tryghost/bookshelf-transaction-events 2.2.3

- project: @tryghost/bookshelf-include-count 2.2.3

- project: @tryghost/bookshelf-custom-query 2.2.3

- project: @tryghost/webhook-mock-receiver 2.2.3

- project: @tryghost/bookshelf-eager-load 2.2.3

- project: @tryghost/bookshelf-pagination 2.2.4

- project: @tryghost/bookshelf-collision 2.2.4

- project: @tryghost/bookshelf-has-posts 2.3.3

- project: @tryghost/email-mock-receiver 2.2.3

- project: @tryghost/prometheus-metrics 4.0.3

- project: @tryghost/bookshelf-plugins 2.2.4

- project: @tryghost/bookshelf-filter 2.2.4

- project: @tryghost/bookshelf-search 2.2.3

- project: @tryghost/http-cache-utils 2.2.3

- project: @tryghost/mw-error-handler 3.2.4

- project: @tryghost/bookshelf-order 2.2.3

- project: @tryghost/api-framework 3.2.4

- project: @tryghost/database-info 2.2.3

- project: @tryghost/domain-events 3.2.5

- project: @tryghost/elasticsearch 5.2.3

- project: @tryghost/jest-snapshot 2.2.4

- project: @tryghost/pretty-stream 2.2.3

- project: @tryghost/express-test 2.2.4

- project: @tryghost/http-stream 2.2.4

- project: @tryghost/job-manager 4.0.4

- project: @tryghost/nodemailer 2.2.4

- project: @tryghost/pretty-cli 3.2.3

- project: @tryghost/root-utils 2.2.3

- project: @tryghost/validator 3.1.4

- project: @tryghost/mw-vhost 3.2.3

- project: @tryghost/security 3.2.3

- project: @tryghost/logging 5.0.3

- project: @tryghost/metrics 3.2.3

- project: @tryghost/promise 2.2.3

- project: @tryghost/request 3.2.4

- project: @tryghost/version 2.2.3

- project: @tryghost/config 2.2.3

- project: @tryghost/errors 3.2.4

- project: @tryghost/server 3.0.3

- project: @tryghost/debug 2.2.3

- project: @tryghost/tpl 2.2.3

- project: @tryghost/zip 3.3.4
- api-framework lived in the standalone TryGhost/framework repo, but Ghost is its only consumer; co-locating it removes the cross-repo publish + version-bump cycle for every change
- grafted via a path-filtered subtree merge so the package's full commit history (authors, dates, messages) is preserved under ghost/api-framework
- pure move with no behaviour change; pnpm/Nx workspace integration follows in the next commit
- pointed ghost/core at the workspace package (workspace:*) and removed the now-unused catalog entry, so the in-tree package is the single source
- mirrored ghost/core's dependency specs (debug + lodash via catalog, errors/promise/tpl/validator pinned) to avoid installing duplicate copies
- swapped the framework repo's oxlint script + root vitest inheritance for a local vitest config and test:unit/test targets so Nx discovers and runs the suite; eslint lint wiring left as a follow-up
- marked the package private since it is no longer published from the framework repo
- the package was linted with oxlint/oxfmt in the framework repo; keeping that toolchain self-contained (local .oxlintrc.json/.oxfmtrc.json + catalog'd devDeps) preserves its lint coverage without pulling the code through Ghost's eslint rules
- the lint target runs oxlint so Nx run-many -t lint discovers it; format/format:check use oxfmt scoped to js/ts/md so package.json and JSON configs keep Ghost's 2-space manifest style
@coderabbitai

coderabbitai Bot commented Jun 18, 2026

Copy link
Copy Markdown
Contributor

Important

Review skipped

Draft detected.

Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

Run ID: 05899aaf-8975-407c-9ccd-f924c7e0db1f

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch move-api-framework-into-monorepo

Comment @coderabbitai help to get the list of available commands and usage tips.

@nx-cloud

nx-cloud Bot commented Jun 18, 2026

Copy link
Copy Markdown

🤖 Nx Cloud AI Fix

Ensure the fix-ci command is configured to always run in your CI pipeline to get automatic fixes in future runs. For more information, please see https://nx.dev/ci/features/self-healing-ci


View your CI Pipeline Execution ↗ for commit 2e48e47

Command Status Duration Result
nx run @tryghost/admin-x-settings:test:acceptance ❌ Failed 10m 24s View ↗
nx build @tryghost/signup-form ✅ Succeeded <1s View ↗
nx build @tryghost/sodo-search ✅ Succeeded <1s View ↗
nx build @tryghost/portal ✅ Succeeded <1s View ↗
nx build @tryghost/activitypub ✅ Succeeded 1s View ↗
nx build @tryghost/comments-ui ✅ Succeeded <1s View ↗
nx build @tryghost/admin-toolbar ✅ Succeeded 1s View ↗
nx build @tryghost/announcement-bar ✅ Succeeded <1s View ↗
Additional runs (15) ✅ Succeeded ... View ↗

💡 Dealing with memory or CPU issues? See memory and CPU details with the resource usage add-on ↗.


☁️ Nx Cloud last updated this comment at 2026-06-18 08:57:29 UTC

@codecov

codecov Bot commented Jun 18, 2026

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 73.89%. Comparing base (83fffa9) to head (2e48e47).
⚠️ Report is 69 commits behind head on main.

Additional details and impacted files
@@            Coverage Diff             @@
##             main   #28704      +/-   ##
==========================================
- Coverage   73.90%   73.89%   -0.02%     
==========================================
  Files        1540     1550      +10     
  Lines      132108   133544    +1436     
  Branches    15901    16088     +187     
==========================================
+ Hits        97640    98679    +1039     
- Misses      33483    33892     +409     
+ Partials      985      973      -12     
Flag Coverage Δ
admin-tests 55.10% <ø> (+0.20%) ⬆️
e2e-tests 76.02% <ø> (-0.06%) ⬇️

Flags with carried forward coverage won't be shown. Click here to find out more.

☔ View full report in Codecov by Harness.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

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.