chore: Update versions to 8.0.0-beta01#453
Open
github-actions[bot] wants to merge 9 commits into
Open
Conversation
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
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
This PR updates version references in the codebase following the release of version 8.0.0-beta01.
Changes
Additional Info
This PR was automatically created by the release workflow.