Skip to content

chore: Update versions to 8.0.0-beta01#453

Open
github-actions[bot] wants to merge 9 commits into
mainfrom
release/update-versions-8.0.0-beta01
Open

chore: Update versions to 8.0.0-beta01#453
github-actions[bot] wants to merge 9 commits into
mainfrom
release/update-versions-8.0.0-beta01

Conversation

@github-actions

Copy link
Copy Markdown
Contributor

Summary

This PR updates version references in the codebase following the release of version 8.0.0-beta01.

Changes

  • Updated version references in .csproj files
  • Updated README.md with the latest version information
  • Updated Umbraco marketplace README files with the latest version information

Additional Info


This PR was automatically created by the release workflow.

claude and others added 9 commits May 18, 2026 17:21
Investigation of Umbraco 18 beta breaking changes that affect Clean, with
a phased plan to upgrade to 18.0.0-beta2 / Clean 8.0.0-beta1. Covers the
OpenAPI Swashbuckle removal, IPublishedContent.Parent/Children property
removal, csproj bumps, and items confirmed unaffected.

https://claude.ai/code/session_01HLE33GSbBEKgKVsSV6D2AM
Bump Umbraco.Cms.* package references from 17.1.0 to 18.0.0-beta2 across
all five projects, and bump the four packaged Clean.* projects from 7.0.5
to 8.0.0-beta1. uSync references in Clean.Blog are intentionally left at
17.0.1 / 16.1.0 until a v18-compatible release is published.

OpenAPI registration is rewritten for the Swashbuckle.AspNetCore removal
in Umbraco 18: AddOpenApi("clean-starter", ...) + AddOpenApiDocumentToUi
replaces SwaggerDoc/SwaggerGenOptions. The renamed file
CleanStarterOpenApiExtensions.cs exposes an AddCleanStarterOpenApi
extension that the HeadlessApiComposer calls.

IPublishedContent.Parent and IPublishedContent.Children properties were
removed in v18 in favour of the extension methods, so Author.cshtml,
mainNavigation.cshtml and xmlSitemap.cshtml are updated to call
Parent() / Children() instead.

https://claude.ai/code/session_01HLE33GSbBEKgKVsSV6D2AM
Installs .NET 10 via the official dot.net install script into ~/.dotnet
on each remote Claude Code session, then writes DOTNET_ROOT, PATH,
DOTNET_CLI_TELEMETRY_OPTOUT and DOTNET_NOLOGO into CLAUDE_ENV_FILE so the
SDK is on PATH for the rest of the session. Guarded by CLAUDE_CODE_REMOTE
so it's a no-op outside the web container, and idempotent (only downloads
if ~/.dotnet/dotnet is missing).

https://claude.ai/code/session_01HLE33GSbBEKgKVsSV6D2AM
Run a full build against 18.0.0-beta2 surfaced four remaining breaks:

- AssemblyVersion cannot be a prerelease string; split into a numeric
  AssemblyVersion/FileVersion (8.0.0.0) plus the prerelease Version and
  InformationalVersion (8.0.0-beta1).
- The new Microsoft.AspNetCore.OpenApi source generator requires
  InterceptorsNamespaces to include Microsoft.AspNetCore.OpenApi.Generated;
  added to Clean.Headless.csproj.
- IBlockReference.ContentUdi was removed in favour of ContentKey
  (kjac umbraco/Umbraco-CMS#17365). blockgrid/items.cshtml and
  blocklist/default.cshtml updated; the block list null guard now checks
  Content instead of the old Udi.
- UmbracoHelper.RenderMacroAsync is gone (macros removed in v14+). The
  legacy grid macro editor partial is neutered with a migration note
  pointing at Block Grid/List.

Also pulls in the regenerated v18 umbraco-package-schema.json that the
build emits.

https://claude.ai/code/session_01HLE33GSbBEKgKVsSV6D2AM
Drop the uSync and uSync.Command.Setup package references and adopt the
same AsyncPackageMigrationBase pattern Clean already uses (which is the
underlying API the management/packaging endpoints call):

- Embed Clean/Migrations/package.zip into the Clean.Blog assembly as
  Clean.Blog.Migrations.package.zip (linked, not duplicated).
- ImportPackageXmlMigration calls ImportPackage.FromEmbeddedResource at
  startup.
- BlogPackageMigrationPlan ("Clean.Blog", new GUID) keeps the migration
  idempotent so it only runs once per environment.
- PostMigrationNotificationHandler walks the imported tree and publishes
  every branch under the home root.
- BlogComposer wires the handler into IUmbracoBuilder so
  MigrationPlansExecutedNotification reaches it.

First-boot result: 37 doc types, 25 content items, 37 media items
imported in ~4s; SuccessPublish on all 25 nodes; /, /about, /blog,
/authors/paul-seal etc. return HTTP 200 with the real template HTML.

The uSync/ data folder, appsettings uSync sections and
appsettings-schema.usync.json are left in place per request.

https://claude.ai/code/session_01HLE33GSbBEKgKVsSV6D2AM
Replaces what uSync.Command.Setup did before that package was removed:
the CI workflow (.github/workflows/powershell/CreateNuGetPackages.ps1)
boots Clean.Blog and authenticates to /umbraco/management/api/v1 as
'umbraco-back-office-clean-api-user' to export a fresh package.zip
via the management API. Without that client, the OAuth call fails
with invalid_client and the package export aborts.

ApiClientSetupHandler listens for UmbracoApplicationStartedNotification,
reads the existing uSync:Command:* keys from appsettings.Development.json,
creates an Api-kind user via IUserService.CreateAsync, attaches the
client id, and registers the OpenIddict application via
IBackOfficeApplicationManager.EnsureBackOfficeClientCredentialsApplicationAsync.

Logic mirrors uSync.Command.Setup 16.1.0 line-for-line but uses
Umbraco 18 Core types directly; verified by acquiring a Bearer token
from /security/back-office/token with the configured credentials.

https://claude.ai/code/session_01HLE33GSbBEKgKVsSV6D2AM
The previous notification-based approach raced against CI: Kestrel was
listening on /umbraco within ~1s of boot, but the
UmbracoApplicationStartedNotification handler that provisioned the OAuth
client didn't fire for another ~7s, so CI's first /token call always
got invalid_client. Even moving to UmbracoApplicationStartingNotification
didn't help — both fire after the listener accepts requests.

Replace the notification handler with a static ApiClientSetup helper
called directly from Program.cs between BootUmbracoAsync() and the
middleware pipeline. At that point the core schema exists but the
listener hasn't started, so user/OpenIddict creation is race-free.

Also invoke PackageMigrationRunner.RunPendingPackageMigrations("Clean.Blog")
synchronously in the same window. Umbraco normally defers package
migrations to a hosted service that runs in parallel with the listener,
which made /token return 503 "application is currently being upgraded"
even when the API client existed. Running migrations inline finishes
content publishing before the listener opens.

Verified locally by reproducing CI's race (curl /umbraco until 200, then
immediately POST /token + GET /api/v1/package/$Version): both return
HTTP 200 on first attempt, with /, /about, /blog, /authors/paul-seal
serving real HTML.

https://claude.ai/code/session_01HLE33GSbBEKgKVsSV6D2AM
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.

1 participant