ci: release#1418
Conversation
Deploying with
|
| Status | Name | Latest Commit | Updated (UTC) |
|---|---|---|---|
| ✅ Deployment successful! View logs |
docs | fb71b13 | Jun 12 2026, 07:02 PM |
Scope checkThis PR touches 29 files. PRs with a broad scope are harder to review. Please confirm the scope hasn't drifted beyond the intended change. If this scope is intentional, no action needed. A maintainer will review it. If not, please consider splitting this into smaller PRs. See CONTRIBUTING.md for contribution guidelines. |
Deploying with
|
| Status | Name | Latest Commit | Updated (UTC) |
|---|---|---|---|
| ✅ Deployment successful! View logs |
emdash-demo-cache | fb71b13 | Jun 12 2026, 07:05 PM |
Deploying with
|
| Status | Name | Latest Commit | Updated (UTC) |
|---|---|---|---|
| ✅ Deployment successful! View logs |
emdash-playground | fb71b13 | Jun 12 2026, 07:04 PM |
@emdash-cms/admin
@emdash-cms/auth
@emdash-cms/auth-atproto
@emdash-cms/blocks
@emdash-cms/cloudflare
@emdash-cms/contentful-to-portable-text
emdash
create-emdash
@emdash-cms/gutenberg-to-portable-text
@emdash-cms/plugin-cli
@emdash-cms/plugin-types
@emdash-cms/registry-client
@emdash-cms/registry-lexicons
@emdash-cms/sandbox-workerd
@emdash-cms/x402
@emdash-cms/plugin-ai-moderation
@emdash-cms/plugin-atproto
@emdash-cms/plugin-audit-log
@emdash-cms/plugin-color
@emdash-cms/plugin-embeds
@emdash-cms/plugin-field-kit
@emdash-cms/plugin-forms
@emdash-cms/plugin-webhook-notifier
commit: |
1e55bc9 to
466b5c5
Compare
3b9ab21 to
d6b13df
Compare
d6b13df to
fb71b13
Compare
This PR was opened by the Changesets release GitHub action. When you're ready to do a release, you can merge this and the packages will be published to npm automatically. If you're not ready to do a release yet, that's fine, whenever you add more changesets to main, this PR will be updated.
Releases
@emdash-cms/admin@0.19.0
Minor Changes
e96587fThanks @ascorbic! - Add status, author, and date-range filtering to the admin content list (#1288). The content list API gainsauthorId,dateField,dateFrom, anddateToquery params (all additive and optional), and a newGET /_emdash/api/content/{collection}/authorsendpoint lists the distinct authors of a collection's content (gated oncontent:read). Filtering runs server-side, so it works across the whole collection rather than only the loaded page.Patch Changes
#1307
cedfcc5Thanks @emdashbot! - Forwardlocalequery param through admin content edit route, content list navigation links, and API client to resolve correct i18n variant for slug-based lookups (#1242)#1417
7e70abcThanks @emdashbot! - Fix taxonomy term edit dialog overflow with many locales (#1269)Adds
max-h-[85vh] flex flex-colto theTermFormDialogand makes its bodyscrollable with
flex-1 overflow-y-auto, keeping the header and footer pinned.This prevents the Cancel/Update buttons from falling off-screen when the
Translations panel lists a large number of locales.
#1440
783e663Thanks @diogoascarneiro! - Add a visible WYSIWYG toolbar button for inserting HTML blocks, matching the existing/htmlshortcut.#1142
157237dThanks @OrangeManLi! - Fixes nested-list serialization in the Portable Text editor.convertListnow recurses into nestedbulletList/orderedListchildren and emits each block with the correctlevelvalue, so Tab-indented list items in the editor round-trip throughonChangeas real nested portable-text blocks instead of being flattened to a single top-level list with every item atlevel: 1.Updated dependencies []:
@emdash-cms/cloudflare@0.19.0
Minor Changes
#1312
c39789cThanks @ascorbic! - Drive scheduled publishing from a real heartbeat instead of request side effects (#1303).Content scheduled via the admin now actually transitions to
publishedwhen its time arrives. Previously nothing promoted the row —statusstayedscheduledandpublished_atstayed null forever.A new sweep (
publishDueContent) promotes due content and runs alongside the existing cron tick and system cleanup:scheduled()handler driven by a Cron Trigger now runs the sweep. The request-drivenPiggybackScheduleris gone, so there are no maintenance side effects on visitor requests.@emdash-cms/cloudflareships a Worker entry that wraps Astro's handler with thescheduled()handler (@emdash-cms/cloudflare/worker, pluscreateScheduledHandler()for hand-assembled Workers). When a cache provider is configured, the handler also purges edge-cache tags for whatever it published, so stale snapshots produced before the scheduled time are evicted.Migration for existing Cloudflare sites. New sites get this from the templates. Existing deployments must update two files:
Without the Cron Trigger, scheduled publishing and plugin cron do not run on Workers.
Scheduled publishing matches manual publishing exactly: it fires
content:afterPublishhooks (search indexing, webhooks, syndication), and records the scheduled time aspublished_aton first publication rather than the (later) sweep time. The sweep claims each row atomically before promoting it, so an entry unscheduled or rescheduled just before its time is never published, and overlapping sweeps can't double-publish. Localastro devkeeps running the timer-driven sweep even under the Cloudflare adapter (where production relies on the Cron Trigger).Each tick promotes at most 100 items per collection (a large backlog drains over successive ticks) so a single Worker invocation can't exhaust its CPU/subrequest budget, and edge-cache tags are purged incrementally after each collection's batch rather than only at the end. On Node, the maintenance interval is capped at 60s so scheduled-publish latency matches the Cloudflare Cron Trigger cadence instead of lagging up to five minutes when no plugin cron is due.
Patch Changes
e96587f,023893a,f41092b,cedfcc5,c63f9ca,61ea3c9,a4c2af2,850c1b7,c39789c]:emdash@0.19.0
Minor Changes
#1442
e96587fThanks @ascorbic! - Add status, author, and date-range filtering to the admin content list (#1288). The content list API gainsauthorId,dateField,dateFrom, anddateToquery params (all additive and optional), and a newGET /_emdash/api/content/{collection}/authorsendpoint lists the distinct authors of a collection's content (gated oncontent:read). Filtering runs server-side, so it works across the whole collection rather than only the loaded page.#1439
023893aThanks @ascorbic! - Add content filtering by byline credit.getEmDashCollectionnow accepts a reservedbylinekey inwherethat returns entries credited to a byline in any position, including co-authored entries where the byline is a secondary credit. This makes author archive pages possible without querying the database directly. Pass a single byline translation group or an array to match any of several.A
getEntriesByByline(collection, byline, options)helper wraps the same filter, mirroringgetEntriesByTerm.#1367
f41092bThanks @MA2153! - Add content-reference database schema:_emdash_relations(relationship-type definitions, row-per-locale) and_emdash_content_references(directed, locale-agnostic edges between content entries linked bytranslation_group). Additive, forward-only migration043; no existing tables change. Groundwork for reference fields — no field type, API, or admin UI yet.#1438
850c1b7Thanks @ascorbic! - Generate responsivesrcsets for media rendered with theImageand Portable Text image components. EmDash now routes locally/R2-stored media through Astro's configured image service (astro:assets) -- the Cloudflare Images binding on Workers, sharp on Node -- producing width-appropriate candidates and modern formats (e.g. WebP) instead of a single full-size<img>.This works automatically:
publicUrl(R2 custom domain, S3/CDN) is authorized and optimized.siteUrlis set; the matchingimage.remotePatternsentry is registered for you, scoped to the media route.astro devit works out of the box without configuration.When optimization isn't possible (no image service available, an unauthorized host, or unknown dimensions) the components fall back to a plain
<img>, so existing sites keep rendering exactly as before. No template changes are required.#1312
c39789cThanks @ascorbic! - Drive scheduled publishing from a real heartbeat instead of request side effects (#1303).Content scheduled via the admin now actually transitions to
publishedwhen its time arrives. Previously nothing promoted the row —statusstayedscheduledandpublished_atstayed null forever.A new sweep (
publishDueContent) promotes due content and runs alongside the existing cron tick and system cleanup:scheduled()handler driven by a Cron Trigger now runs the sweep. The request-drivenPiggybackScheduleris gone, so there are no maintenance side effects on visitor requests.@emdash-cms/cloudflareships a Worker entry that wraps Astro's handler with thescheduled()handler (@emdash-cms/cloudflare/worker, pluscreateScheduledHandler()for hand-assembled Workers). When a cache provider is configured, the handler also purges edge-cache tags for whatever it published, so stale snapshots produced before the scheduled time are evicted.Migration for existing Cloudflare sites. New sites get this from the templates. Existing deployments must update two files:
Without the Cron Trigger, scheduled publishing and plugin cron do not run on Workers.
Scheduled publishing matches manual publishing exactly: it fires
content:afterPublishhooks (search indexing, webhooks, syndication), and records the scheduled time aspublished_aton first publication rather than the (later) sweep time. The sweep claims each row atomically before promoting it, so an entry unscheduled or rescheduled just before its time is never published, and overlapping sweeps can't double-publish. Localastro devkeeps running the timer-driven sweep even under the Cloudflare adapter (where production relies on the Cron Trigger).Each tick promotes at most 100 items per collection (a large backlog drains over successive ticks) so a single Worker invocation can't exhaust its CPU/subrequest budget, and edge-cache tags are purged incrementally after each collection's batch rather than only at the end. On Node, the maintenance interval is capped at 60s so scheduled-publish latency matches the Cloudflare Cron Trigger cadence instead of lagging up to five minutes when no plugin cron is due.
Patch Changes
#1307
cedfcc5Thanks @emdashbot! - Read?locale=in content write routes (DELETE, publish, unpublish, discard-draft, schedule, unschedule) and forward it tohandleContentGetfor locale-aware slug resolution (#1242)#1420
c63f9caThanks @swissky! -getTaxonomyTerms()now returns the termdescriptionfor flat(non-hierarchical) taxonomies (#1419)
The query already fetched the
datacolumn, but the non-hierarchical branchdropped it when mapping rows to
TaxonomyTerm— only hierarchical taxonomies(via
buildTree) parsed the description. Descriptions set in the admin UI arenow returned for both kinds of taxonomies.
#1426
61ea3c9Thanks @MA2153! - Fix seed CLI hardcodingenas the default locale (#1421)emdash export-seednow emits a top-leveldefaultLocalefor single-localeprojects, and
emdash seed(applySeed) honors it when backfilling the localeof menus, taxonomies, and content rows that omit an explicit
locale. Previouslyan
export-seed→seedround-trip silently rewrote a non-endefault locale(e.g.
de) toen, since the CLI runs outside the Astro runtime and thefallback collapsed to
en. Projects whose default locale isenare unaffected.#1445
a4c2af2Thanks @ascorbic! - FixgetEmDashEntry/getEmDashCollectionhydrating taxonomy terms in the request-context or default locale instead of the entry's resolved locale (#1441). When querying with an explicitlocale(or via a localized route),entry.data.termscould return default-locale term variants even though the content row was correctly localized. Term hydration now uses the same resolved locale as the content query.Updated dependencies [
e96587f,cedfcc5,7e70abc,783e663,157237d]:@emdash-cms/auth-atproto@0.2.15
Patch Changes
@emdash-cms/plugin-embeds@0.1.23
Patch Changes
@emdash-cms/plugin-forms@0.2.4
Patch Changes
298895dThanks @jcheese1! - Fixes enhanced form submissions so standard EmDash plugin API responses wrapped in{ data }show the configured success message instead of the generic error state.@emdash-cms/sandbox-workerd@0.1.7
Patch Changes
e96587f,023893a,f41092b,cedfcc5,c63f9ca,61ea3c9,a4c2af2,850c1b7,c39789c]:@emdash-cms/auth@0.19.0
@emdash-cms/blocks@0.19.0
create-emdash@0.19.0
@emdash-cms/gutenberg-to-portable-text@0.19.0
@emdash-cms/x402@0.19.0
@emdash-cms/fixture-perf-site@0.0.18
Patch Changes
e96587f,023893a,f41092b,cedfcc5,c63f9ca,61ea3c9,a4c2af2,850c1b7,c39789c]:@emdash-cms/perf-demo-site@0.0.18
Patch Changes
e96587f,023893a,f41092b,cedfcc5,c63f9ca,61ea3c9,a4c2af2,298895d,850c1b7,c39789c]:@emdash-cms/cache-demo-site@0.0.18
Patch Changes
e96587f,023893a,f41092b,cedfcc5,c63f9ca,61ea3c9,a4c2af2,298895d,850c1b7,c39789c]: