TryGhost
OSS
Ghost
Sign in / Sign up
Open main menu
Ghost
GitHub
Overview
Runs
Analytics
Loading workspace stats
Loading workspace insights...
Statistics interval
7 days
30 days
Latest CI Pipeline Executions
Status
Fix filter
Filter
Fuzzy
Filter range
Sort by
Sort by
Start time
Sort ascending
Sort descending
Succeeded
princi-hkg-1826-route-settings-parser-serializer-validation
9cf5e8ec Merge 435c8281b749438226bd126e314a88f65ef17bbd into cd4f5fde12b2c556995283257c75ebfe50f32475
by Princi Ver...
P
Succeeded
princi-hkg-1826-route-settings-parser-serializer-validation
9cf5e8ec Merge 435c8281b749438226bd126e314a88f65ef17bbd into cd4f5fde12b2c556995283257c75ebfe50f32475
by Princi Ver...
P
Succeeded
princi-hkg-1826-route-settings-parser-serializer-validation
9cf5e8ec Merge 435c8281b749438226bd126e314a88f65ef17bbd into cd4f5fde12b2c556995283257c75ebfe50f32475
by Princi Ver...
P
Succeeded
28990
435c8281 Added route-settings Zod parser, serializer and validation ref https://linear.app/ghost/issue/HKG-1826 - replaced hand-rolled parsing and validation with Zod schemas so raw YAML input is validated andtransformed in a single pass, eliminating unsafe `as` casts on the unknown input boundary - deleted validate-route-settings.ts; all validation rules now live in the Zod schemas inside route-settings-parser.ts - rewrote validate-route-settings tests to exercise parseRouteSettings directly with raw YAML-shaped objects - added roundtrip tests (model→yaml→model and yaml→model→yaml) to lock serializer fidelity
by Princi Ver...
P
Succeeded
28990
461aed44 Added route-settings Zod parser, serializer and validation ref https://linear.app/ghost/issue/HKG-1826 - replaced hand-rolled parsing and validation with Zod schemas so raw YAML input is validated and transformed in a single pass, eliminating unsafe `as` casts on the unknown input boundary - deleted validate-route-settings.ts; all validation rules now live in the Zod schemas inside route-settings-parser.ts - rewrote validate-route-settings tests to exercise parseRouteSettings directly with raw YAML-shaped objects - added roundtrip tests (model→yaml→model and yaml→model→yaml) to lock serializer fidelity
by Princi Ver...
P
Succeeded
28990
d3ccf79b Added route settings parser, serializer and validation ref https://linear.app/ghost/issue/HKG-1826 - The existing validate.js tangles 5 concerns (validation, slug conversion, data expansion, template normalization, defaults) and imports frontend RESOURCE_CONFIG — a cross-boundary violation. These new modules separate pure parsing/serialization from structural validation so the store layer can work with a clean domain model without pulling in frontend code. - Validation stays structural only — no controller resolution or data expansion — because that belongs to the activation bridge, keeping the storage and routing concerns decoupled. - Parser preserves user-written form ({slug} notation, short-form data) so what goes into the store matches what theuser wrote in routes.yaml.
by Princi Ver...
P
Succeeded
28990
375a1385 Added route settings parser, serializer and validation ref https://linear.app/ghost/issue/HKG-1826 - The existing validate.js tangles 5 concerns (validation, slug conversion, data expansion, template normalization, defaults) and imports frontend RESOURCE_CONFIG — a cross-boundary violation. These new modules separate pure parsing/serialization from structural validation so the store layer can work with a clean domain model without pulling in frontend code. - Validation stays structural only — no controller resolution or data expansion — because that belongs to the activation bridge, keeping the storage and routing concerns decoupled. - Parser preserves user-written form ({slug} notation, short-form data) so what goes into the store matches what the user wrote in routes.yaml.
by Princi Ver...
P
Succeeded
main
9164a534 Added RouteSettingsService to centralize route settings lifecycle (#28965) ref https://linear.app/tryghost/issue/HKG-1828/ - the route-settings module previously used module-level variables to hold settingsLoader and routeSettings, with boot.js directly calling routerManager.start() — scattering lifecycle orchestration across files - RouteSettingsService consolidates this: configure() wires storage deps early in boot (so the API surface works even without frontend), and start() wires routing deps and loads settings into the router - this is the first step toward swapping the file-based settings loader for a pluggable store without touching callers - updated test stubs from module getter pattern to direct service method stubs
by Princi Ver...
P
Succeeded
28965
357019b1 Changed RouteSettingsService to DynamicRoutingService - The service orchestrates more than just settings — it owns the full dynamic routing lifecycle (load settings, start routers, manage hashes). DynamicRoutingService better reflects this responsibility. - Renamed the file from route-settings-service.js to dynamic-routing-service.js to match the class name.
by Princi Ver...
P
Succeeded
28965
92b82222 Added RouteSettingsService to centralize route settings lifecycle ref https://linear.app/tryghost/issue/HKG-1828/ - the route-settings module previously used module-level variables to hold settingsLoader and routeSettings, with boot.js directly calling routerManager.start() — scattering lifecycle orchestration across files - RouteSettingsService consolidates this: configure() wires storage deps early in boot (so the API surface works even without frontend), and start() wires routing deps and loads settings into the router - this is the first step toward swapping the file-based settings loader for a pluggable store without touching callers - updated test stubs from module getter pattern to direct service method stubs
by Princi Ver...
P
Succeeded
main
983582fa Added RouteSettings type model, store contract and in-memory adapter (#28821) ref HKG-1825 - RouteSettings is the canonical domain model for routes.yaml — a flat typed structure that the new RouteSettingsService will use instead of the untyped objects that validate.js produces today - Domain model stores what the user wrote ({slug} notation, short-form data, templates as string[]) so round-tripping through any future store is lossless — no expansion or normalisation at the storage layer - Store contract (get/replace) defines the interface that FileStore and GCS will implement — foundation for swapping storage backends - Contract tests verify immutability semantics so no future store implementation can leak internal references to callers
by Princi Ver...
P
Succeeded
28821
6fc20b0c Renamed template to templates in RouteSettings types - The downstream routing layer (StaticRoutesRouter, CollectionRouter, res.routerOptions) universally uses `templates` (plural, string[]). Aligning the domain model avoids a rename at the activation bridge and lets routers consume RouteSettings directly.
by Princi Ver...
P
Succeeded
28821
40ada228 Renamed template to templates in RouteSettings types - The downstream routing layer (StaticRoutesRouter, CollectionRouter, res.routerOptions) universally uses `templates` (plural, string[]). Aligning the domain model avoids a rename at the activation bridge and lets routers consume RouteSettings directly.
by Princi Ver...
P
Succeeded
28821
fab4bb6c Lint fix
by Princi Ver...
P
Succeeded
28821
6ca8f075 Lint fix
by Princi Ver...
P
Failed
princi-hkg-1825-route-settings-store-contract-and-parser
17e3373b Improved RouteSettings type model - Tightened DataShortForm from plain string to `${DataShortFormResource}.${string}` template literal so invalid short-form patterns are rejected at compile time - Normalized template from string | string[] to string[] to avoid a confusing union type — the parser will flatten single strings into arrays on parse, and the serializer will emit scalars for single-element arrays on download
by Princi Ver...
P
Failed
28821
8729a8b8 Improved RouteSettings type model - Tightened DataShortForm from plain string to `${DataShortFormResource}.${string}` template literal so invalid short-form patterns are rejected at compile time - Normalized template from string | string[] to string[] to avoid a confusing union type — the parser will flatten single strings into arrays on parse, and the serializer will emit scalars for single-element arrays on download
by Princi Ver...
P
Failed
28821
2f801205 Added RouteSettings type model, store contract and in-memory adapter - defined the RouteSettings domain model based on analysis of 41k+ real Ghost Pro routes.yaml files and the public routing docs, with strict discriminated unions for route types and data read/browse entries - introduced RouteSettingsStoreBase as the adapter contract (get/replace) following the same pattern as the redirects storage migration, so the backing store can later move from disk to GCS - added a reusable store contract test suite that any adapter implementation can run to verify correctness, immutability and overwrite semantics - added an in-memory store as the reference adapter implementation and validated it against the contract
by Princi Ver...
P
Succeeded
princi-hkg-1825-route-settings-store-contract-and-parser
b3892c32 Merge 3a1e2292eda19b586d80c8477d976b3eebdd8c93 into 03221006efdbba76494b505d2fda8d646f7f075f
by Princi Ver...
P
Failed
princi-hkg-1825-route-settings-store-contract-and-parser
4ee44109 Defined the route-settings store contract and canonical RouteSettings type ref HKG-1825 - Defined the canonical `RouteSettings` type and the `RouteSettingsStore` interface + base class, co-locating each with the module that owns it rather than a central types.ts, so the dependency direction stays clear and the types don't drift into a catch-all file. - Modelled routes/collections/taxonomies as arrays because router registration is positional with no key-based lookup, so array order is the mount order; typed the fields from the real post-validation output the system already operates on so the contract matches runtime. - Added a reusable `runStoreContract` runner exercised by an in-memory store, so FileStore and the future remote store verify against one contract. Left "returns defaults on empty" out of the shared contract since that's FileStore-specific. - Purely additive — nothing wires this in yet.
by Princi Ver...
P
Previous page
Previous
Next
Next page