diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json index 05964183340..dd069871808 100644 --- a/.devcontainer/devcontainer.json +++ b/.devcontainer/devcontainer.json @@ -14,7 +14,7 @@ }, "ghcr.io/devcontainers/features/node:2": { "version": "24" } }, - "image": "mcr.microsoft.com/dotnet/sdk:10.0.402", + "image": "mcr.microsoft.com/dotnet/sdk:11.0.100-rc.2", "postStartCommand": "dotnet workload install wasm-tools && dotnet dev-certs https --trust", "waitFor": "onCreateCommand", "customizations": { diff --git a/.github/actions/submit-to-winget/action.yml b/.github/actions/submit-to-winget/action.yml new file mode 100644 index 00000000000..ff5790671fb --- /dev/null +++ b/.github/actions/submit-to-winget/action.yml @@ -0,0 +1,61 @@ +name: Submit to WinGet +description: Sends one version of a Windows app to the WinGet community repository, as a new package the first time and as an update after that. + +inputs: + id: + description: The WinGet package identifier, such as BitPlatform.Todo. + required: true + version: + description: The app's version. + required: true + installer: + description: Path of the installer the job built. + required: true + installer-url: + description: The URL of that installer, whose file must never change. + required: true + architecture: + description: x64 or x86. + required: true + product-code: + description: The key of the app's Add/Remove Programs entry. + required: true + name: + description: The package's name. + required: true + short-description: + description: One sentence about the app. + required: true + package-url: + description: The app's web page. + required: true + privacy-url: + description: The app's privacy policy. + default: '' + token: + description: A classic GitHub token with the public_repo scope. The pull request comes from its owner's fork of winget-pkgs. + required: true + +runs: + using: composite + + steps: + + - name: Submit to WinGet + shell: pwsh + env: + WINGET_CREATE_GITHUB_TOKEN: ${{ inputs.token }} + DOTNET_ROLL_FORWARD: Major + run: > + & "${{ github.action_path }}/submit-to-winget.ps1" + -Id "${{ inputs.id }}" + -Version "${{ inputs.version }}" + -Installer "${{ inputs.installer }}" + -InstallerUrl "${{ inputs.installer-url }}" + -Architecture "${{ inputs.architecture }}" + -ProductCode "${{ inputs.product-code }}" + -Name "${{ inputs.name }}" + -ShortDescription "${{ inputs.short-description }}" + -PackageUrl "${{ inputs.package-url }}" + -PrivacyUrl "${{ inputs.privacy-url }}" + -WorkFolder "${{ runner.temp }}/winget" diff --git a/.github/actions/submit-to-winget/submit-to-winget.ps1 b/.github/actions/submit-to-winget/submit-to-winget.ps1 new file mode 100644 index 00000000000..a5b7df6240b --- /dev/null +++ b/.github/actions/submit-to-winget/submit-to-winget.ps1 @@ -0,0 +1,112 @@ +#Requires -Version 7.4 +param( + [Parameter(Mandatory)] [string] $Id, + [Parameter(Mandatory)] [string] $Version, + [Parameter(Mandatory)] [string] $Installer, + [Parameter(Mandatory)] [string] $InstallerUrl, + [Parameter(Mandatory)] [ValidateSet('x64', 'x86')] [string] $Architecture, + [Parameter(Mandatory)] [string] $ProductCode, + [Parameter(Mandatory)] [string] $Name, + [Parameter(Mandatory)] [string] $ShortDescription, + [Parameter(Mandatory)] [string] $PackageUrl, + [string] $PrivacyUrl, + [Parameter(Mandatory)] [string] $WorkFolder +) + +$ErrorActionPreference = 'Stop' +$PSNativeCommandUseErrorActionPreference = $true + +function ConvertTo-YamlString([string] $value) { + "'" + $value.Replace("'", "''") + "'" +} + +function New-Manifests([string] $folder) { + New-Item -ItemType Directory -Force $folder | Out-Null + $sha256 = (Get-FileHash $Installer -Algorithm SHA256).Hash + $privacy = $PrivacyUrl ? "PrivacyUrl: $(ConvertTo-YamlString $PrivacyUrl)`n" : '' + + Set-Content (Join-Path $folder "$Id.yaml") -Encoding utf8NoBOM -NoNewline -Value @" +# yaml-language-server: `$schema=https://aka.ms/winget-manifest.version.1.10.0.schema.json +PackageIdentifier: $Id +PackageVersion: $Version +DefaultLocale: en-US +ManifestType: version +ManifestVersion: 1.10.0 + +"@ + + Set-Content (Join-Path $folder "$Id.installer.yaml") -Encoding utf8NoBOM -NoNewline -Value @" +# yaml-language-server: `$schema=https://aka.ms/winget-manifest.installer.1.10.0.schema.json +PackageIdentifier: $Id +PackageVersion: $Version +InstallerType: exe +Scope: user +InstallModes: +- interactive +- silent +- silentWithProgress +InstallerSwitches: + Silent: --silent + SilentWithProgress: --silent +UpgradeBehavior: install +RequireExplicitUpgrade: true +ProductCode: $(ConvertTo-YamlString $ProductCode) +Installers: +- Architecture: $Architecture + InstallerUrl: $(ConvertTo-YamlString $InstallerUrl) + InstallerSha256: $sha256 +ManifestType: installer +ManifestVersion: 1.10.0 + +"@ + + Set-Content (Join-Path $folder "$Id.locale.en-US.yaml") -Encoding utf8NoBOM -NoNewline -Value @" +# yaml-language-server: `$schema=https://aka.ms/winget-manifest.defaultLocale.1.10.0.schema.json +PackageIdentifier: $Id +PackageVersion: $Version +PackageLocale: en-US +Publisher: BitPlatform +PublisherUrl: https://bitplatform.dev +PublisherSupportUrl: https://github.com/bitfoundation/bitplatform/issues +$($privacy)PackageName: $(ConvertTo-YamlString $Name) +PackageUrl: $(ConvertTo-YamlString $PackageUrl) +License: MIT +LicenseUrl: https://github.com/bitfoundation/bitplatform/blob/develop/LICENSE +ShortDescription: $(ConvertTo-YamlString $ShortDescription) +ManifestType: defaultLocale +ManifestVersion: 1.10.0 + +"@ +} + +$publisher, $package = $Id -split '\.', 2 +$manifests = Join-Path $WorkFolder "manifests/$($publisher.Substring(0, 1).ToLowerInvariant())/$publisher/$package/$Version" + +$wingetcreate = Join-Path $WorkFolder 'wingetcreate.exe' +New-Item -ItemType Directory -Force $WorkFolder | Out-Null +Invoke-WebRequest https://github.com/microsoft/winget-create/releases/download/v1.12.13.0/wingetcreate.exe -OutFile $wingetcreate + +if ((Get-FileHash $wingetcreate -Algorithm SHA256).Hash -ne '24042BD37915805615E6CF969AC57C6439124C3FE85823327F5F3FB24BD9FFEA') { + throw 'wingetcreate.exe is not the build this script pins.' +} + +$listed = $true + +try { + Invoke-RestMethod "https://api.github.com/repos/microsoft/winget-pkgs/contents/manifests/$($publisher.Substring(0, 1).ToLowerInvariant())/$publisher/$package" -Headers @{ Authorization = "Bearer $env:WINGET_CREATE_GITHUB_TOKEN" } | Out-Null +} +catch { + if ($_.Exception.Response.StatusCode -ne [Net.HttpStatusCode]::NotFound) { + throw + } + + $listed = $false +} + +if ($listed) { + & $wingetcreate update $Id --version $Version --urls "$InstallerUrl|$Architecture" --submit --no-open +} +else { + New-Manifests $manifests + & $wingetcreate submit $manifests --prtitle "New package: $Id version $Version" --no-open +} diff --git a/.github/agents/dependency-update.md b/.github/agents/dependency-update.md index eba5f53d91d..5d2b5c52c2b 100644 --- a/.github/agents/dependency-update.md +++ b/.github/agents/dependency-update.md @@ -83,7 +83,7 @@ consumes a test project, so every band takes the newest patch of its own band. L **Version ranges stay.** `[8.0.0,9.0.0)` is a compatibility contract, not a pin. -**`Bit.*` self-references track the in-development version**, currently `10.7.0-pre-02`. Never read +**`Bit.*` self-references track the in-development version**, currently `11.0.0-pre-10`. Never read these off nuget.org — the published `latest` is behind the working tree by design, and unrelated higher-numbered lines exist there. @@ -108,13 +108,24 @@ gh api "repos///git/trees/?recursive=1" --jq '[.tree[]|select( A non-zero count on a JavaScript action that vendors `node_modules` means it will not stage. This is worth checking for *any* action bump, not just this one — it is invisible in the release notes. -**A MAUI bump needs one MAUI build.** MAUI's resizetizer bundles an `Svg.Skia`, and from 10.0.101 to -10.0.110 that `Svg.Skia` called a SkiaSharp overload missing from the SkiaSharp next to it, so any SVG -with a `` failed the build with `MAUIR0001` / -`MissingMethodException: SKImageFilter.CreateMatrixConvolution` -([dotnet/maui#38319](https://github.com/dotnet/maui/issues/38319)). The app icons of the Boilerplate -and the BlazorUI demo have one, so before moving MAUI, build a MAUI app with the Boilerplate's -`appicon.svg` as its icon, for any target. +**MAUI's resizetizer breaks on SVG filters.** MAUI 10.0.101 to 10.0.110 and 11.0.0-rc.2 bundle an `Svg.Skia` that +calls a SkiaSharp overload missing from the SkiaSharp next to it, so any SVG it resizes that has a `` fails +the build with `MAUIR0001` / `MissingMethodException: SKImageFilter.CreateMatrixConvolution` +([dotnet/maui#38319](https://github.com/dotnet/maui/issues/38319)). 10.0.120 fixed it for .NET 10, and a .NET 10 +Boilerplate project takes develop's MAUI. On this branch MAUI can't stay behind for .NET 11: a MAUI built for an +older preview doesn't compile against the newer preview's Android workload (CS1705 on `Java.Interop`). So MAUI +follows the SDK here, and the app icons of the Boilerplate and the BlazorUI demo carry no drop shadow (their +``) until a .NET 11 MAUI builds an app with the Boilerplate's `appicon.svg` as its icon. + +**bit Boilerplate builds for .NET 10 and .NET 11.** Its `framework` option picks one; the template's own tree is +the .NET 11 project. In its `Directory.Packages.props`, a package whose 11.x build has no `net10.0` assets has a +version in each of the two framework groups at the end of the file: the 11.x one, and a 10.x one that moves within +10.x. So do the `Microsoft.Extensions.*` packages, although their 11.x builds have `net10.0` assets: they bring +`Microsoft.Extensions.Logging.Abstractions` 11 into the .NET 10 server projects, whose targets file then overrides +the one `Microsoft.Extensions.Telemetry.Abstractions` turns the framework's logging generator off with, depending +on import order, and the build fails with CS0757. Every other package takes one version for both. The few literals that differ per framework are switch +symbols in `template.json` (the SDK and its `rollForward`, the dev container image, the `dotnet-ef` version, the +runner image), so they move together with the files they replace. **`Xamarin.Firebase.Messaging` is held at 125.1.1.** 125.1.2 pulls `Xamarin.AndroidX.Fragment` 1.9.0 (through `GooglePlayServices.Base` 118.10.1), which absorbed the ktx classes, while the rest of the @@ -124,10 +135,20 @@ the graph already brings `Fragment.Ktx` 1.9.0 (an empty stub), rather than pinni `Xamarin.GooglePlayServices.Auth.Api.Phone` is held at 118.3.1 for the same reason: 118.3.1.1 pulls `GooglePlayServices.Basement` 118.10.0.3, which brings Fragment 1.9.0. -**Linux runners are held at `ubuntu-24.04`**, in the GitHub workflows and the Azure DevOps `vmImage`. -`ubuntu-26.04` defaults to JDK 25 (`(default)` in the image readme's Java table), and .NET for Android -10 accepts up to 21 (`LatestSupportedJavaVersion` 21.0.99), so every Android build there fails. .NET 11 -raises the limit to 25.0.99; move the runners together with the .NET 11 move. +**EF Core in the Boilerplate follows its PostgreSQL provider.** A preview of +`Npgsql.EntityFrameworkCore.PostgreSQL` asks for one exact EF Core version, and a provider built for another +one fails at runtime ("Method not found"). So the Boilerplate's EF Core stays on the version the newest Npgsql +names, together with every package that requires it (`Microsoft.EntityFrameworkCore.*`, +`Microsoft.AspNetCore.Identity.EntityFrameworkCore`, `Microsoft.AspNetCore.DataProtection.EntityFrameworkCore`, +`Microsoft.Extensions.Diagnostics.HealthChecks.EntityFrameworkCore`) and its `dnx dotnet-ef` calls, while the +rest of ASP.NET Core moves on. A NU1608 on Npgsql in a restore means this was missed. + +**Linux runners are on `ubuntu-26.04`**, in the GitHub workflows and the Azure DevOps `vmImage`. It +defaults to JDK 25 (`(default)` in the image readme's Java table), which .NET for Android accepts from .NET 11 +RC2 on (`LatestSupportedJavaVersion` 25.0.99 in `Xamarin.Android.Common.props.in`). develop stays on +`ubuntu-24.04`, since .NET for Android 10 accepts up to 21, so a runner pin that comes over from develop moves +to `ubuntu-26.04` here, except in the jobs that build a .NET 10 Boilerplate project (the Todo and Sales CDs), which +keep develop's runners. When a held pin's rationale no longer holds — the oldest supported SDK moved, TS 7 was adopted repo-wide — say so in the report rather than acting on it. @@ -245,14 +266,16 @@ There are no `.config/dotnet-tools.json` manifests any more: every tool is run w @`, so the pins live in the workflow and doc lines that call them (`grep -rn "dnx .*@"`). `vpk` must equal the `Velopack` PackageReference version in the same project — Velopack requires the CLI and the library to match, and this has drifted before. `dotnet-ef` should equal the -EF Core package version. Likewise the `npx playwright@` command in the Boilerplate's two +EF Core package version of the project it runs on: the .NET 11 one in the template's files, the .NET 10 one in +`template.json`'s `efToolVersion` and in the Todo CD. Likewise the `npx playwright@` command in the Boilerplate's two `.runsettings` (`src/Tests` and `src/Internal/Boilerplate.Tests.E2E`) must equal `Microsoft.Playwright.MSTest.v4`: a remote Playwright server of any other version refuses the client, and every test that runs on it fails at connect. -`src/global.json` is `rollForward: disable` and tracks the newest SDK. The two template -`global.json` files are `10.0.100` + `latestFeature` deliberately — they must accept any 10.0.x on a -consumer's machine. Do not "update" them. +`src/global.json` is `rollForward: disable` and tracks the newest SDK. While .NET 11 is a release +candidate, the two template `global.json` files pin the same RC SDK, also `rollForward: disable`, and +move with it. Once .NET 11 ships they go back to `11.0.100` + `latestFeature`, so they accept any +11.0.x on a consumer's machine. A .NET 10 project gets `10.0.100` + `latestFeature` from `template.json`. ### Container images diff --git a/.github/agents/test-platform.md b/.github/agents/test-platform.md index cfaf1d8447f..12b7d26ebce 100644 --- a/.github/agents/test-platform.md +++ b/.github/agents/test-platform.md @@ -106,8 +106,8 @@ websites - is checked. Every command prints what it checked and exits non-zero o | `windows [-Force]` | Opens each Windows app that is behind and taps its version, which updates it and restarts it. | | `e2e [-Stage ] [-Filter ] [-PrereleasePackages]` | Signs the global admin in once, then runs the E2E suite stage by stage like `RunTests.bat` - skipping the mac's stages when its Playwright server is down or on another version - keeping each stage's log and TRX. With `-PrereleasePackages`, it builds the suite with the Bit packages of the newest Prerelease nuget packages run. | | `mcp [-McpVersion ] [-Tool -Arguments ]` | One `tools/list` or `tools/call` on `https://bitplatform.dev/mcp`. | -| `devcontainer [-Sha [-PrereleasePackages]] [-Keep]` | Creates a project with `bit new`, brings its dev container up with the devcontainers CLI and runs `bit doctor` in it, with bit and the template from that commit or from nuget.org. Then removes the container, its volumes and its image, and keeps the logs. | -| `aspire [-Sha [-PrereleasePackages]] [-Keep]` | Creates a project with `bit new` the same way and runs its Aspire app host three times with `dotnet run`: the second run must reuse the first one's containers, they must stop once the app host has sat idle for its idle time, and the third run must bring them back on the same volumes. Then removes the project, its containers and their volumes, and keeps the logs. | +| `devcontainer [-Sha [-PrereleasePackages]] [-Framework ] [-Keep]` | Creates a project with `bit new`, for the template's default .NET or the one `-Framework` names, brings its dev container up with the devcontainers CLI and runs `bit doctor` in it, with bit and the template from that commit or from nuget.org. Then removes the container, its volumes and its image, and keeps the logs. | +| `aspire [-Sha [-PrereleasePackages]] [-Framework ] [-Keep]` | Creates a project with `bit new` the same way and runs its Aspire app host three times with `dotnet run`: the second run must reuse the first one's containers, they must stop once the app host has sat idle for its idle time, and the third run must bring them back on the same volumes. Then removes the project, its containers and their volumes, and keeps the logs. | ## 1. The CI run @@ -319,7 +319,8 @@ Triage every failure: tell flaky from broken. A stage's console log counts every failed attempt of a test that retries, its TRX only the last one: a test the TRX shows passed failed once and passed on its retry. Compare a failure only with earlier runs against a deployment from the same branch: the demos run whichever branch the last CD built, and the - branches differ in their .NET. + branches differ in their .NET. On one branch the demos can differ too: each demo's CD names the `--framework` it + builds with, so a failure in one app and not another may be the .NET version rather than the app. 2. Read the server's side. The demo backends run on this machine and log to the Windows **Application** event log, source `.NET Runtime`. How much gets there is each site's own `Logging` section in its server-owned `appsettings.json` under `C:\inetpub\`: the Boilerplate backends log from Information up, the platform @@ -345,9 +346,9 @@ no `Content-Length`, was compressed again on the way. Compare the libraries' ass with a publish of the commit the expected sizes were measured on. The service worker's own scripts, its asset list included, report no size to Playwright, so the total leaves them out. -Two failures on .NET 11 are known gaps of third-party libraries; report them as known and don't triage them: the -template's MySQL provider doesn't work there (All CI keeps its MySQL job off), and CommunityToolkit.Datasync doesn't -sync, so the offline Todo test that waits for an item added offline to reach the server fails every time. Check them +Two gaps of third-party libraries on .NET 11 are known: the template's MySQL provider doesn't work there, and +CommunityToolkit.Datasync doesn't sync. That is why All CI's MySQL job and the offline Todo demo build .NET 10 +projects. A .NET 11 project that uses either fails by design: report it as known and don't triage it. Check them again once those libraries support .NET 11. **A fix is proven only by the next CD.** The suite tests the deployed build, so a fix to the template or to a demo @@ -475,8 +476,10 @@ alive for its idle time. `aspire` checks that the way a developer meets it: - `-Sha` and `-PrereleasePackages` work as for `devcontainer`. With `-PrereleasePackages` the project restores into a packages folder of its own, since this machine's cache may hold nuget.org's build of the same version; without it the Bit packages come from nuget.org at the version the template asks for. The project's `global.json` asks for - the repository's SDK, which needs the workloads the template's clients build with (`wasm-tools`): an SDK that - Visual Studio installed brings only its own. + the SDK of its .NET version, which needs the workloads the template's clients build with (`wasm-tools`): an SDK + that Visual Studio installed brings only its own. +- Without `-Framework`, both `aspire` and `devcontainer` create a project for the template's default .NET. When a + change touches what differs between the .NET versions, run `aspire` once with each. - It takes about half an hour, most of it the idle wait, and a few GB of Docker's memory while the app runs. Start it in the background once the CD's deploy jobs are done, and never next to `devcontainer` or the Android stage. Its containers hold that memory, and Docker's VM keeps it for a while after they stop: IIS sites diff --git a/.github/agents/test-platform/test-platform.ps1 b/.github/agents/test-platform/test-platform.ps1 index 2aabb63b7b1..defd90c360e 100644 --- a/.github/agents/test-platform/test-platform.ps1 +++ b/.github/agents/test-platform/test-platform.ps1 @@ -23,6 +23,7 @@ finds something missing. aspire Runs a new project's Aspire app host three times: the second run reuses the first one's containers, they stop once it sits idle, and the third run brings them back on the same volumes. -Sha and -Keep as above. + Both create the project for the template's default .NET version unless -Framework names another. What is deployed where is read from those CD workflows and from the E2E suite's DeployedApps.cs and RunTests.bat rather than repeated here, so this script follows them. @@ -83,7 +84,11 @@ param( [switch] $PrereleasePackages, - [switch] $Keep + [switch] $Keep, + + # devcontainer, aspire: the project's --framework; the template's default when omitted. + [ValidateSet('net10.0', 'net11.0')] + [string] $Framework ) $ErrorActionPreference = 'Stop' @@ -1003,9 +1008,10 @@ function New-BitProject([string] $lab, $bit, [string] $name, [string[]] $options Push-Location $lab $templateArguments = $bit.TemplateArguments + $frameworkArguments = $Framework ? @('--framework', $Framework) : @() try { - & $bit.Path new $name --yes --no-open --no-trust --no-setup @options @templateArguments *> (Join-Path $lab 'new.log') + & $bit.Path new $name --yes --no-open --no-trust --no-setup @options @frameworkArguments @templateArguments *> (Join-Path $lab 'new.log') $newExitCode = $LASTEXITCODE } finally { diff --git a/.github/workflows/admin-sample.cd.yml b/.github/workflows/admin-sample.cd.yml index 95fd01ff900..53beb7a98de 100644 --- a/.github/workflows/admin-sample.cd.yml +++ b/.github/workflows/admin-sample.cd.yml @@ -41,6 +41,10 @@ on: description: Bit packages of the latest Prerelease nuget packages run instead of nuget.org type: boolean default: false + windows_stores: + description: For WinGet and the Microsoft Store, sign every file of the Windows app, keep its installer at a URL of its own version and submit that version to both + type: boolean + default: false workflow_call: inputs: server: @@ -61,6 +65,9 @@ on: prerelease_packages: type: boolean default: false + windows_stores: + type: boolean + default: false permissions: contents: read @@ -100,7 +107,7 @@ jobs: uses: ./.github/actions/setup-bit-cli - name: Create project with bit new - run: bit new AdminPanel --database PostgreSQL --module Admin --appInsights --apiServerUrl ${{ env.SERVER_API_ADDRESS }} --webAppUrl ${{ env.SERVER_WEB_ADDRESS }} --filesStorage S3 --notification --captcha reCaptcha --signalR --ads --api Standalone --template-package "${{ env.BIT_TEMPLATE_PACKAGE }}" --yes --no-build --no-format --no-migration --no-trust + run: bit new AdminPanel --framework net11.0 --database PostgreSQL --module Admin --appInsights --apiServerUrl ${{ env.SERVER_API_ADDRESS }} --webAppUrl ${{ env.SERVER_WEB_ADDRESS }} --filesStorage S3 --notification --captcha reCaptcha --signalR --ads --api Standalone --template-package "${{ env.BIT_TEMPLATE_PACKAGE }}" --yes --no-build --no-format --no-migration --no-trust - name: Translate .resx files run: | @@ -233,7 +240,7 @@ jobs: deploy_blazor_wasm_standalone: name: build blazor wasm standalone if: inputs.wasm - runs-on: ubuntu-24.04 + runs-on: ubuntu-26.04 steps: @@ -246,6 +253,7 @@ jobs: uses: actions/setup-dotnet@a98b56852c35b8e3190ac28c8c2271da59106c68 # v6.0.0 with: global-json-file: src/global.json + dotnet-version: 10.0.x - name: Use prerelease packages if: inputs.prerelease_packages @@ -257,7 +265,7 @@ jobs: uses: ./.github/actions/setup-bit-cli - name: Create project with bit new - run: bit new AdminPanel --database PostgreSQL --module Admin --sentry --apiServerUrl ${{ env.SERVER_API_ADDRESS }} --webAppUrl ${{ env.SERVER_WEB_ADDRESS }} --filesStorage S3 --notification --captcha reCaptcha --signalR --ads --theme Material --template-package "${{ env.BIT_TEMPLATE_PACKAGE }}" --yes --no-build --no-format --no-migration --no-trust + run: bit new AdminPanel --framework net10.0 --database PostgreSQL --module Admin --sentry --apiServerUrl ${{ env.SERVER_API_ADDRESS }} --webAppUrl ${{ env.SERVER_WEB_ADDRESS }} --filesStorage S3 --notification --captcha reCaptcha --signalR --ads --theme Material --template-package "${{ env.BIT_TEMPLATE_PACKAGE }}" --yes --no-build --no-format --no-migration --no-trust - name: Update core appsettings.json uses: devops-actions/variable-substitution@ae7b1f3676ae374dc70282e6b9650bc50b611222 # v1.2 @@ -271,7 +279,8 @@ jobs: - name: Publish - run: dotnet publish AdminPanel/src/Client/AdminPanel.Client.Web/AdminPanel.Client.Web.csproj -c Release -o client -p:WasmEnableSIMD=true -p:Version="${{ vars.APP_VERSION}}" -p:BitMinifyAggressive=true -p:BitMinifyMapOutputPath="${{ github.workspace }}/bit-minifier.map" + working-directory: AdminPanel + run: dotnet publish src/Client/AdminPanel.Client.Web/AdminPanel.Client.Web.csproj -c Release -o ../client -p:WasmEnableSIMD=true -p:Version="${{ vars.APP_VERSION}}" -p:BitMinifyAggressive=true -p:BitMinifyMapOutputPath="${{ github.workspace }}/bit-minifier.map" # what the stack traces this client logs are read back through: see the note in the server web job - name: Upload minifier map artifact @@ -318,7 +327,7 @@ jobs: uses: ./.github/actions/setup-bit-cli - name: Create project with bit new - run: bit new AdminPanel --database PostgreSQL --module Admin --sentry --apiServerUrl ${{ env.SERVER_API_ADDRESS }} --webAppUrl ${{ env.SERVER_WEB_ADDRESS }} --filesStorage S3 --captcha reCaptcha --signalR --ads --template-package "${{ env.BIT_TEMPLATE_PACKAGE }}" --yes --platforms windows --no-build --no-format --no-migration --no-trust + run: bit new AdminPanel --framework net11.0 --database PostgreSQL --module Admin --sentry --apiServerUrl ${{ env.SERVER_API_ADDRESS }} --webAppUrl ${{ env.SERVER_WEB_ADDRESS }} --filesStorage S3 --captcha reCaptcha --signalR --ads --template-package "${{ env.BIT_TEMPLATE_PACKAGE }}" --yes --platforms windows --no-build --no-format --no-migration --no-trust - name: Translate .resx files run: | @@ -335,6 +344,8 @@ jobs: Logging.Sentry.Dsn: ${{ secrets.ADMINPANEL_SENTRY_DSN }} GoogleRecaptchaSiteKey: ${{ secrets.GOOGLE_RECAPTCHA_SITE_KEY }} WindowsUpdate.FilesUrl: https://windows-adminpanel.bitplatform.dev + Kiosk.Enabled: true + Kiosk.PreventSleep: true - name: Install vpk shell: pwsh @@ -366,13 +377,13 @@ jobs: run: | @{ Endpoint = '${{ vars.CODE_SIGNING_ENDPOINT }}'; CodeSigningAccountName = '${{ vars.CODE_SIGNING_ACCOUNT }}'; CertificateProfileName = '${{ vars.CODE_SIGNING_CERTIFICATE_PROFILE }}'; ExcludeCredentials = @('ManagedIdentityCredential', 'WorkloadIdentityCredential', 'SharedTokenCacheCredential', 'VisualStudioCredential', 'VisualStudioCodeCredential') } | ConvertTo-Json | Set-Content "$env:RUNNER_TEMP\code-signing.json" "VPK_AZURE_TRUSTED_SIGN_FILE=$env:RUNNER_TEMP\code-signing.json" >> $env:GITHUB_ENV - 'VPK_SIGN_EXCLUDE=\.dll$' >> $env:GITHUB_ENV + if ('${{ inputs.windows_stores }}' -ne 'true') { 'VPK_SIGN_EXCLUDE=\.dll$' >> $env:GITHUB_ENV } - name: Publish run: | cd AdminPanel\src\Client\AdminPanel.Client.Windows\ dotnet publish AdminPanel.Client.Windows.csproj -c Release -o .\publish-result -r win-x64 -p:Version="${{ vars.APP_VERSION}}" -p:PublishReadyToRun=true -p:PublishReadyToRunComposite=true --self-contained - vpk pack -u AdminPanel.Client.Windows -v "${{ vars.APP_VERSION }}" -p .\publish-result -e AdminPanel.Client.Windows.exe -r win-x64 --framework webview2 --icon .\wwwroot\favicon.ico --packTitle 'AdminPanel' + vpk pack -u AdminPanel.Client.Windows -v "${{ vars.APP_VERSION }}" -p .\publish-result -e AdminPanel.Client.Windows.exe -r win-x64 --framework webview2 --icon .\wwwroot\favicon.ico --packTitle 'AdminPanel' --packAuthors BitPlatform - name: Attest the installer and packages uses: actions/attest-build-provenance@4d101475d8b20a2381f78447822ac1eab6504dd8 # v4.2.2 @@ -388,10 +399,56 @@ jobs: cd AdminPanel\src\Client\AdminPanel.Client.Windows\ vpk upload s3 --endpoint ${{ vars.R2_ENDPOINT }} --bucket ${{ env.R2_BUCKET }} --keyId ${{ secrets.R2_ACCESS_KEY_ID }} --secret ${{ secrets.R2_SECRET_ACCESS_KEY }} -o .\Releases --keepMaxReleases 10 + - name: Upload this version's installer to R2 + if: inputs.windows_stores + env: + AWS_ACCESS_KEY_ID: ${{ secrets.R2_ACCESS_KEY_ID }} + AWS_SECRET_ACCESS_KEY: ${{ secrets.R2_SECRET_ACCESS_KEY }} + AWS_DEFAULT_REGION: auto + AWS_REQUEST_CHECKSUM_CALCULATION: WHEN_REQUIRED + AWS_RESPONSE_CHECKSUM_VALIDATION: WHEN_REQUIRED + run: | + $key = "${{ vars.APP_VERSION }}/AdminPanel.Client.Windows-win-Setup.exe" + aws s3api head-object --bucket ${{ env.R2_BUCKET }} --key $key --endpoint-url ${{ vars.R2_ENDPOINT }} *> $null + if ($LASTEXITCODE -eq 0) { throw "$key is already on R2, and WinGet and the Microsoft Store need it unchanged. Raise APP_VERSION." } + aws s3 cp AdminPanel\src\Client\AdminPanel.Client.Windows\Releases\AdminPanel.Client.Windows-win-Setup.exe "s3://${{ env.R2_BUCKET }}/$key" --endpoint-url ${{ vars.R2_ENDPOINT }} + "::notice title=Installer::https://windows-adminpanel.bitplatform.dev/$key" + + - name: Submit this version to WinGet + if: inputs.windows_stores + uses: ./.github/actions/submit-to-winget + with: + id: BitPlatform.AdminPanel + version: ${{ vars.APP_VERSION }} + installer: AdminPanel\src\Client\AdminPanel.Client.Windows\Releases\AdminPanel.Client.Windows-win-Setup.exe + installer-url: https://windows-adminpanel.bitplatform.dev/${{ vars.APP_VERSION }}/AdminPanel.Client.Windows-win-Setup.exe + architecture: x64 + product-code: AdminPanel.Client.Windows + name: AdminPanel + short-description: An admin panel for products, categories and users, built with bit Boilerplate. + package-url: https://adminpanel.bitplatform.dev + privacy-url: https://adminpanel.bitplatform.dev/en-US/privacy-policy + token: ${{ secrets.WINGET_TOKEN }} + + - name: Set up the Microsoft Store CLI + if: inputs.windows_stores + uses: microsoft/microsoft-store-apppublisher@cc9910a8d59f2eb55cbb83df0a3800cf3b5300e0 # v1.4 + with: + version: v0.4.3 + + - name: Submit this version to the Microsoft Store + if: inputs.windows_stores + run: | + $PSNativeCommandUseErrorActionPreference = $true + msstore reconfigure --tenantId ${{ secrets.MSSTORE_TENANT_ID }} --sellerId ${{ secrets.MSSTORE_SELLER_ID }} --clientId ${{ secrets.MSSTORE_CLIENT_ID }} --clientSecret ${{ secrets.MSSTORE_CLIENT_SECRET }} + $package = @{ packages = @(@{ packageUrl = "https://windows-adminpanel.bitplatform.dev/${{ vars.APP_VERSION }}/AdminPanel.Client.Windows-win-Setup.exe"; languages = @('en'); architectures = @('X64'); installerParameters = '--silent'; isSilentInstall = $true }) } | ConvertTo-Json -Depth 4 -Compress + msstore submission update ${{ vars.ADMINPANEL_MSSTORE_PRODUCT_ID }} $package + msstore submission publish ${{ vars.ADMINPANEL_MSSTORE_PRODUCT_ID }} + build_blazor_hybrid_android: name: build blazor hybrid (android) if: inputs.android - runs-on: ubuntu-24.04 + runs-on: ubuntu-26.04 permissions: contents: read actions: read @@ -420,7 +477,7 @@ jobs: uses: ./.github/actions/setup-bit-cli - name: Create project with bit new - run: bit new AdminPanel --database PostgreSQL --module Admin --sentry --apiServerUrl ${{ env.SERVER_API_ADDRESS }} --webAppUrl ${{ env.SERVER_WEB_ADDRESS }} --filesStorage S3 --notification --captcha reCaptcha --signalR --ads --template-package "${{ env.BIT_TEMPLATE_PACKAGE }}" --yes --platforms android --no-build --no-format --no-migration --no-trust + run: bit new AdminPanel --framework net11.0 --database PostgreSQL --module Admin --sentry --apiServerUrl ${{ env.SERVER_API_ADDRESS }} --webAppUrl ${{ env.SERVER_WEB_ADDRESS }} --filesStorage S3 --notification --captcha reCaptcha --signalR --ads --template-package "${{ env.BIT_TEMPLATE_PACKAGE }}" --yes --platforms android --no-build --no-format --no-migration --no-trust - name: Extract Android signing key from env uses: timheuer/base64-to-file@dfa5a5dd38803cb4f5c3a081eeb28e8362d43e9c # v2.0.0 @@ -453,14 +510,15 @@ jobs: - name: Publish aab - run: dotnet publish AdminPanel/src/Client/AdminPanel.Client.Maui/AdminPanel.Client.Maui.csproj -c Release -p:EnableLLVM=true -p:AndroidEnableProfiledAot=false -p:AndroidPackageFormats=aab%3Bapk -p:AndroidKeyStore=true -p:AndroidSigningKeyStore="AdminPanel.keystore" -p:AndroidSigningKeyAlias=bitplatform -p:AndroidSigningKeyPass="${{ secrets.ANDROID_RELEASE_KEYSTORE_PASSWORD }}" -p:AndroidSigningStorePass="${{ secrets.ANDROID_RELEASE_SIGNING_PASSWORD }}" -p:Version="${{ vars.APP_VERSION }}" -p:ApplicationTitle="AdminPanel" -p:ApplicationId="${{ env.APP_BUNDLE_ID }}" -f net10.0-android + # NETSDK1242 refuses Mono on .NET 11 android; the private opt-out turns it off, which is what makes EnableLLVM and AndroidEnableProfiledAot mean something again. + run: dotnet publish AdminPanel/src/Client/AdminPanel.Client.Maui/AdminPanel.Client.Maui.csproj -c Release -p:UseMonoRuntime=true -p:_DisableCheckForUnsupportedMonoMobileRuntime=true -p:EnableLLVM=true -p:AndroidEnableProfiledAot=false -p:AndroidPackageFormats=aab%3Bapk -p:AndroidKeyStore=true -p:AndroidSigningKeyStore="AdminPanel.keystore" -p:AndroidSigningKeyAlias=bitplatform -p:AndroidSigningKeyPass="${{ secrets.ANDROID_RELEASE_KEYSTORE_PASSWORD }}" -p:AndroidSigningStorePass="${{ secrets.ANDROID_RELEASE_SIGNING_PASSWORD }}" -p:Version="${{ vars.APP_VERSION }}" -p:ApplicationTitle="AdminPanel" -p:ApplicationId="${{ env.APP_BUNDLE_ID }}" -f net11.0-android - name: Upload artifact id: artifact uses: actions/upload-artifact@cf430e030ddbb5b0abf93d22962f4752f3646cd9 # v7.0.2 with: name: android-bundle - path: AdminPanel/src/Client/AdminPanel.Client.Maui/bin/Release/net10.0-android/*-Signed.apk + path: AdminPanel/src/Client/AdminPanel.Client.Maui/bin/Release/net11.0-android/*-Signed.apk - name: Attest artifact uses: actions/attest-build-provenance@4d101475d8b20a2381f78447822ac1eab6504dd8 # v4.2.2 @@ -474,7 +532,7 @@ jobs: with: serviceAccountJsonPlainText: ${{ secrets.GOOGLE_PLAY_SERVICE_ACCOUNT_JSON }} packageName: ${{ env.APP_BUNDLE_ID }} - releaseFiles: AdminPanel/src/Client/AdminPanel.Client.Maui/bin/Release/net10.0-android/*-Signed.aab + releaseFiles: AdminPanel/src/Client/AdminPanel.Client.Maui/bin/Release/net11.0-android/*-Signed.aab releaseName: ${{ vars.APP_VERSION }} track: internal status: completed @@ -503,7 +561,7 @@ jobs: - uses: maxim-lobanov/setup-xcode@ed7a3b1fda3918c0306d1b724322adc0b8cc0a90 # v1.7.0 with: - xcode-version: '27.1' + xcode-version: '27.0' - name: Use prerelease packages if: inputs.prerelease_packages @@ -515,7 +573,7 @@ jobs: uses: ./.github/actions/setup-bit-cli - name: Create project with bit new - run: bit new AdminPanel --database PostgreSQL --module Admin --sentry --apiServerUrl ${{ env.SERVER_API_ADDRESS }} --webAppUrl ${{ env.SERVER_WEB_ADDRESS }} --filesStorage S3 --notification --captcha reCaptcha --signalR --ads --template-package "${{ env.BIT_TEMPLATE_PACKAGE }}" --yes --platforms ios --no-build --no-format --no-migration --no-trust + run: bit new AdminPanel --framework net11.0 --database PostgreSQL --module Admin --sentry --apiServerUrl ${{ env.SERVER_API_ADDRESS }} --webAppUrl ${{ env.SERVER_WEB_ADDRESS }} --filesStorage S3 --notification --captcha reCaptcha --signalR --ads --template-package "${{ env.BIT_TEMPLATE_PACKAGE }}" --yes --platforms ios --no-build --no-format --no-migration --no-trust - name: Translate .resx files run: | @@ -548,11 +606,11 @@ jobs: - name: Build ipa - run: dotnet publish AdminPanel/src/Client/AdminPanel.Client.Maui/AdminPanel.Client.Maui.csproj -p:RuntimeIdentifier=ios-arm64 -c Release -p:ArchiveOnBuild=true -p:CodesignKey="iPhone Distribution" -p:CodesignProvision="AdminPanel" -p:Version="${{ vars.APP_VERSION }}" -p:ApplicationTitle="AdminPanel" -p:ApplicationId="${{ env.APP_BUNDLE_ID }}" -f net10.0-ios + run: dotnet publish AdminPanel/src/Client/AdminPanel.Client.Maui/AdminPanel.Client.Maui.csproj -p:RuntimeIdentifier=ios-arm64 -c Release -p:ArchiveOnBuild=true -p:CodesignKey="iPhone Distribution" -p:CodesignProvision="AdminPanel" -p:Version="${{ vars.APP_VERSION }}" -p:ApplicationTitle="AdminPanel" -p:ApplicationId="${{ env.APP_BUNDLE_ID }}" -f net11.0-ios - name: Locate ipa id: ipa - run: echo "path=$(ls AdminPanel/src/Client/AdminPanel.Client.Maui/bin/release/net10.0-ios/ios-arm64/publish/*.ipa | head -n 1)" >> $GITHUB_OUTPUT + run: echo "path=$(ls AdminPanel/src/Client/AdminPanel.Client.Maui/bin/release/net11.0-ios/ios-arm64/publish/*.ipa | head -n 1)" >> $GITHUB_OUTPUT - name: Attest ipa uses: actions/attest-build-provenance@4d101475d8b20a2381f78447822ac1eab6504dd8 # v4.2.2 diff --git a/.github/workflows/all.cd.yml b/.github/workflows/all.cd.yml index 7bb87601bdf..dfeb3df7104 100644 --- a/.github/workflows/all.cd.yml +++ b/.github/workflows/all.cd.yml @@ -30,6 +30,10 @@ on: description: Bit packages of the latest Prerelease nuget packages run instead of nuget.org (AdminPanel, Sales, Todo, and the platform and sales websites) type: boolean default: false + windows_stores: + description: For WinGet and the Microsoft Store, sign every file of the Windows apps, keep their installers at a URL of their own version and submit that version to both (AdminPanel, Sales, Todo and the Blazor UI demo) + type: boolean + default: false permissions: contents: read @@ -181,6 +185,7 @@ jobs: windows: ${{ inputs.windows }} android: ${{ inputs.android }} ios: ${{ inputs.ios }} + windows_stores: ${{ inputs.windows_stores }} sales_module_demo: name: sales module demo @@ -195,6 +200,7 @@ jobs: server: ${{ inputs.server }} windows: ${{ inputs.windows }} prerelease_packages: ${{ inputs.prerelease_packages }} + windows_stores: ${{ inputs.windows_stores }} admin_sample: name: admin sample @@ -212,6 +218,7 @@ jobs: android: ${{ inputs.android }} ios: ${{ inputs.ios }} prerelease_packages: ${{ inputs.prerelease_packages }} + windows_stores: ${{ inputs.windows_stores }} todo_sample: name: todo sample @@ -229,3 +236,4 @@ jobs: android: ${{ inputs.android }} ios: ${{ inputs.ios }} prerelease_packages: ${{ inputs.prerelease_packages }} + windows_stores: ${{ inputs.windows_stores }} diff --git a/.github/workflows/all.ci.utilities.yml b/.github/workflows/all.ci.utilities.yml index 9e95b7194d6..1912237f0fb 100644 --- a/.github/workflows/all.ci.utilities.yml +++ b/.github/workflows/all.ci.utilities.yml @@ -19,7 +19,7 @@ jobs: build_nuget_packages: name: build utilities nuget packages locally if: ${{ inputs.nuget_packages }} - runs-on: ubuntu-24.04 + runs-on: ubuntu-26.04 steps: - name: Checkout source code diff --git a/.github/workflows/all.ci.yml b/.github/workflows/all.ci.yml index 1c0c62c72b0..4691662bd65 100644 --- a/.github/workflows/all.ci.yml +++ b/.github/workflows/all.ci.yml @@ -65,7 +65,7 @@ jobs: test_boilerplate_postgres: name: create project with bit new with postgresql and test it if: ${{ inputs.boilerplate_postgres }} - runs-on: ubuntu-24.04 + runs-on: ubuntu-26.04 steps: - name: Checkout source code @@ -73,10 +73,11 @@ jobs: with: persist-credentials: false - - name: Setup .NET 10 + - name: Setup .NET uses: actions/setup-dotnet@a98b56852c35b8e3190ac28c8c2271da59106c68 # v6.0.0 with: global-json-file: src/global.json + dotnet-version: 10.0.x - name: Use prerelease packages if: inputs.prerelease_packages @@ -88,7 +89,7 @@ jobs: uses: ./.github/actions/setup-bit-cli - name: Create project with bit new - run: bit new TestPostgreSQL --database PostgreSQL --module Sales --signalR --aspire --redis --advancedTests --template-package "$BIT_TEMPLATE_PACKAGE" --yes --no-trust + run: bit new TestPostgreSQL --framework net10.0 --database PostgreSQL --module Sales --signalR --aspire --redis --advancedTests --template-package "$BIT_TEMPLATE_PACKAGE" --yes --no-trust - name: Create appsettings.json for Client.Web run: | @@ -150,7 +151,7 @@ jobs: test_boilerplate_mysql: name: create project with bit new with mysql and test it if: ${{ inputs.boilerplate_mysql }} - runs-on: ubuntu-24.04 + runs-on: ubuntu-26.04 steps: - name: Checkout source code @@ -158,10 +159,11 @@ jobs: with: persist-credentials: false - - name: Setup .NET 10 + - name: Setup .NET uses: actions/setup-dotnet@a98b56852c35b8e3190ac28c8c2271da59106c68 # v6.0.0 with: global-json-file: src/global.json + dotnet-version: 10.0.x - name: Use prerelease packages if: inputs.prerelease_packages @@ -173,7 +175,7 @@ jobs: uses: ./.github/actions/setup-bit-cli - name: Create project with bit new - run: bit new TestMySql --database MySql --module Sales --signalR --aspire --redis --advancedTests --template-package "$BIT_TEMPLATE_PACKAGE" --yes --no-trust + run: bit new TestMySql --framework net10.0 --database MySql --module Sales --signalR --aspire --redis --advancedTests --template-package "$BIT_TEMPLATE_PACKAGE" --yes --no-trust - name: Create appsettings.json for Client.Web run: | @@ -235,7 +237,7 @@ jobs: test_boilerplate_mssql: name: create project with bit new with sql server and test it if: ${{ inputs.boilerplate_mssql }} - runs-on: ubuntu-24.04 + runs-on: ubuntu-26.04 steps: - name: Checkout source code @@ -243,7 +245,7 @@ jobs: with: persist-credentials: false - - name: Setup .NET 10 + - name: Setup .NET 11 uses: actions/setup-dotnet@a98b56852c35b8e3190ac28c8c2271da59106c68 # v6.0.0 with: global-json-file: src/global.json @@ -258,7 +260,7 @@ jobs: uses: ./.github/actions/setup-bit-cli - name: Create project with bit new - run: bit new TestSqlServer --database SqlServer --module Admin --signalR --aspire false --api Standalone --advancedTests --template-package "$BIT_TEMPLATE_PACKAGE" --yes --no-trust + run: bit new TestSqlServer --framework net11.0 --database SqlServer --module Admin --signalR --aspire false --api Standalone --advancedTests --template-package "$BIT_TEMPLATE_PACKAGE" --yes --no-trust - name: Create appsettings.json for Client.Web run: | @@ -319,7 +321,7 @@ jobs: build_boilerplate_configurations: name: create several projects with bit new and build them if: ${{ inputs.boilerplate_configurations }} - runs-on: ubuntu-24.04 + runs-on: ubuntu-26.04 steps: - name: Checkout source code @@ -327,7 +329,7 @@ jobs: with: persist-credentials: false - - name: Setup .NET 10 + - name: Setup .NET 11 uses: actions/setup-dotnet@a98b56852c35b8e3190ac28c8c2271da59106c68 # v6.0.0 with: global-json-file: src/global.json @@ -351,15 +353,15 @@ jobs: env: EnforceCodeStyleInBuild: true run: | - bit new TestStandalone --api Standalone --template-package "$BIT_TEMPLATE_PACKAGE" --yes --no-trust --no-format --no-browsers + bit new TestStandalone --framework net11.0 --api Standalone --template-package "$BIT_TEMPLATE_PACKAGE" --yes --no-trust --no-format --no-browsers rm -r "TestStandalone" - bit new TestIntegrated --api Integrated --template-package "$BIT_TEMPLATE_PACKAGE" --yes --no-trust --no-format --no-browsers + bit new TestIntegrated --framework net11.0 --api Integrated --template-package "$BIT_TEMPLATE_PACKAGE" --yes --no-trust --no-format --no-browsers rm -r "TestIntegrated" - name: Build sample configuration 1 working-directory: ${{ runner.temp }} run: | - bit new MyCompany.TestProject --database SqlServer --filesStorage AzureBlobStorage --api Integrated --captcha reCaptcha --pipeline Azure --module Admin --offlineDb --appInsights --sentry --signalR --notification --cloudflare --ads --aspire --redis --multitenant --brouter --platforms web,android --template-package "$BIT_TEMPLATE_PACKAGE" --yes --no-trust --no-format --no-browsers -p:InvariantGlobalization=false -p:Environment=Staging -p:EnforceCodeStyleInBuild=true + bit new MyCompany.TestProject --framework net11.0 --database SqlServer --filesStorage AzureBlobStorage --api Integrated --captcha reCaptcha --pipeline Azure --module Admin --offlineDb --appInsights --sentry --signalR --notification --cloudflare --ads --aspire --redis --multitenant --brouter --platforms web,android --template-package "$BIT_TEMPLATE_PACKAGE" --yes --no-trust --no-format --no-browsers -p:InvariantGlobalization=false -p:Environment=Staging -p:EnforceCodeStyleInBuild=true cd MyCompany.TestProject git log --oneline --decorate --all git status --short @@ -372,14 +374,14 @@ jobs: - name: Build sample configuration 2 working-directory: ${{ runner.temp }} run: | - bit new TestProject2 --database Other --filesStorage S3 --api Standalone --captcha None --pipeline None --module None --offlineDb false --appInsights false --sentry false --signalR false --notification false --cloudflare false --ads false --aspire true --redis false --multitenant false --brouter false --platforms web,android --template-package "$BIT_TEMPLATE_PACKAGE" --yes --no-trust --no-browsers -p:InvariantGlobalization=true -p:Environment=Development -p:EnforceCodeStyleInBuild=true + bit new TestProject2 --framework net11.0 --database Other --filesStorage S3 --api Standalone --captcha None --pipeline None --module None --offlineDb false --appInsights false --sentry false --signalR false --notification false --cloudflare false --ads false --aspire true --redis false --multitenant false --brouter false --platforms web,android --template-package "$BIT_TEMPLATE_PACKAGE" --yes --no-trust --no-browsers -p:InvariantGlobalization=true -p:Environment=Development -p:EnforceCodeStyleInBuild=true rm -r "TestProject2" build_blazorempty_configurations: name: build blazorempty based projects - runs-on: ubuntu-24.04 + runs-on: ubuntu-26.04 steps: - name: Checkout source code @@ -387,7 +389,7 @@ jobs: with: persist-credentials: false - - name: Setup .NET 10 + - name: Setup .NET 11 uses: actions/setup-dotnet@a98b56852c35b8e3190ac28c8c2271da59106c68 # v6.0.0 with: global-json-file: src/global.json @@ -426,7 +428,7 @@ jobs: build_nuget_packages: name: build nuget packages locally if: ${{ inputs.nuget_packages }} - runs-on: ubuntu-24.04 + runs-on: ubuntu-26.04 steps: - name: Checkout source code @@ -477,6 +479,23 @@ jobs: cp aspnetcore/src/Components/Web.JS/dist/Release/blazor.*.js src/BlazorES2019/wwwroot.net10/ rm -rf aspnetcore + - name: Generate ES2019 based blazor.*.js files for .NET 11 + run: | + git clone https://github.com/dotnet/aspnetcore.git + cd aspnetcore + git switch release/11.0 + git submodule update --init --recursive + sed -i 's/"target": "ES2024"/"target": "ES2019"/' src/Components/Shared.JS/tsconfig.json + npm install + npm run-script build + cd src/Components/Web.JS + npm install + npm run-script build:production + cd ../../../../ + mkdir -p src/BlazorES2019/wwwroot.net11/ + cp aspnetcore/src/Components/Web.JS/dist/Release/blazor.*.js aspnetcore/src/Components/Web.JS/dist/Release/_framework/blazor.*.js src/BlazorES2019/wwwroot.net11/ + rm -rf aspnetcore + - name: Build and pack BlazorES2019 run: | dotnet build src/BlazorES2019/Bit.BlazorES2019/Bit.BlazorES2019.csproj -c Release -p:GeneratePackageOnBuild=false -p:WarningLevel=0 -p:RunCodeAnalysis=false diff --git a/.github/workflows/balette.demo.cd.yml b/.github/workflows/balette.demo.cd.yml index 710cff3c532..c4f0f533a8d 100644 --- a/.github/workflows/balette.demo.cd.yml +++ b/.github/workflows/balette.demo.cd.yml @@ -11,7 +11,7 @@ jobs: build_blazor_wasm: name: build blazor wasm - runs-on: ubuntu-24.04 + runs-on: ubuntu-26.04 steps: diff --git a/.github/workflows/bbscanner.demo.cd.yml b/.github/workflows/bbscanner.demo.cd.yml index c2f47ac7a20..c767d50edbe 100644 --- a/.github/workflows/bbscanner.demo.cd.yml +++ b/.github/workflows/bbscanner.demo.cd.yml @@ -11,7 +11,7 @@ jobs: build_blazor_wasm: name: build blazor wasm - runs-on: ubuntu-24.04 + runs-on: ubuntu-26.04 steps: diff --git a/.github/workflows/bcrdt.demo.cd.yml b/.github/workflows/bcrdt.demo.cd.yml index b0551165116..3a92fdca3c9 100644 --- a/.github/workflows/bcrdt.demo.cd.yml +++ b/.github/workflows/bcrdt.demo.cd.yml @@ -11,7 +11,7 @@ jobs: build_blazor_wasm: name: build blazor wasm - runs-on: ubuntu-24.04 + runs-on: ubuntu-26.04 steps: diff --git a/.github/workflows/bdnd.demo.cd.yml b/.github/workflows/bdnd.demo.cd.yml index 050c65cdd54..7758dd220f3 100644 --- a/.github/workflows/bdnd.demo.cd.yml +++ b/.github/workflows/bdnd.demo.cd.yml @@ -11,7 +11,7 @@ jobs: build_blazor_wasm: name: build blazor wasm - runs-on: ubuntu-24.04 + runs-on: ubuntu-26.04 steps: diff --git a/.github/workflows/belemetry.demo.cd.yml b/.github/workflows/belemetry.demo.cd.yml index 6b4d04421db..0b6934bc3fb 100644 --- a/.github/workflows/belemetry.demo.cd.yml +++ b/.github/workflows/belemetry.demo.cd.yml @@ -11,7 +11,7 @@ jobs: build_blazor_wasm: name: build blazor wasm - runs-on: ubuntu-24.04 + runs-on: ubuntu-26.04 steps: diff --git a/.github/workflows/bevtools.demo.cd.yml b/.github/workflows/bevtools.demo.cd.yml index d83b3d0b639..f36e0fb080d 100644 --- a/.github/workflows/bevtools.demo.cd.yml +++ b/.github/workflows/bevtools.demo.cd.yml @@ -11,7 +11,7 @@ jobs: build_blazor_wasm: name: build blazor wasm - runs-on: ubuntu-24.04 + runs-on: ubuntu-26.04 steps: diff --git a/.github/workflows/bink.demo.cd.yml b/.github/workflows/bink.demo.cd.yml index b0e0e4e9ec7..20c5afe6d5e 100644 --- a/.github/workflows/bink.demo.cd.yml +++ b/.github/workflows/bink.demo.cd.yml @@ -11,7 +11,7 @@ jobs: build_blazor_wasm: name: build blazor wasm - runs-on: ubuntu-24.04 + runs-on: ubuntu-26.04 steps: diff --git a/.github/workflows/bit.ci.Balette.e2e.yml b/.github/workflows/bit.ci.Balette.e2e.yml index fb5d2bb755e..b9c471c3c91 100644 --- a/.github/workflows/bit.ci.Balette.e2e.yml +++ b/.github/workflows/bit.ci.Balette.e2e.yml @@ -19,7 +19,7 @@ jobs: e2e: name: Balette E2E (Chromium) - runs-on: ubuntu-24.04 + runs-on: ubuntu-26.04 steps: @@ -28,7 +28,7 @@ jobs: with: persist-credentials: false - - name: Setup .NET 10.0 + - name: Setup .NET 11.0 uses: actions/setup-dotnet@a98b56852c35b8e3190ac28c8c2271da59106c68 # v6.0.0 with: global-json-file: src/global.json @@ -50,7 +50,7 @@ jobs: run: dotnet build src/Utilities/Balette/Tests/Bit.Balette.Tests.E2E/Bit.Balette.Tests.E2E.csproj -c Release - name: Install Playwright Chromium - run: pwsh src/Utilities/Balette/Tests/Bit.Balette.Tests.E2E/bin/Release/net10.0/playwright.ps1 install --with-deps chromium + run: pwsh src/Utilities/Balette/Tests/Bit.Balette.Tests.E2E/bin/Release/net11.0/playwright.ps1 install --with-deps chromium - name: Start the published demo run: | diff --git a/.github/workflows/bit.ci.Balette.yml b/.github/workflows/bit.ci.Balette.yml index 5e03847b2c5..9b079e4e82e 100644 --- a/.github/workflows/bit.ci.Balette.yml +++ b/.github/workflows/bit.ci.Balette.yml @@ -22,7 +22,7 @@ jobs: build-Balette: if: startsWith(github.event.pull_request.title, 'Prerelease') != true && startsWith(github.event.pull_request.title, 'Release') != true && startsWith(github.event.pull_request.title, 'Version') != true name: build Bit.Balette - runs-on: ubuntu-24.04 + runs-on: ubuntu-26.04 steps: @@ -31,11 +31,16 @@ jobs: with: persist-credentials: false - - name: Setup .NET 10.0 + - name: Setup .NET 11.0 uses: actions/setup-dotnet@a98b56852c35b8e3190ac28c8c2271da59106c68 # v6.0.0 with: global-json-file: src/global.json + - name: Setup .NET 10.0 + uses: actions/setup-dotnet@a98b56852c35b8e3190ac28c8c2271da59106c68 # v6.0.0 + with: + dotnet-version: 10.0.x + - name: Setup .NET 9.0 uses: actions/setup-dotnet@a98b56852c35b8e3190ac28c8c2271da59106c68 # v6.0.0 with: @@ -56,7 +61,7 @@ jobs: - name: dotnet build run: dotnet build src/Utilities/Balette/Bit.Balette.slnx - - name: dotnet test (model, search + component tests, net8.0/net9.0/net10.0) + - name: dotnet test (model, search + component tests, net8.0/net9.0/net10.0/net11.0) # Run from inside src so src/global.json's "test" runner setting applies # (from the repo root the SDK falls back to the unsupported VSTest path). run: cd src/Utilities/Balette/Tests/Bit.Balette.Tests && dotnet test --no-build diff --git a/.github/workflows/bit.ci.BbScanner.e2e.yml b/.github/workflows/bit.ci.BbScanner.e2e.yml index 43ced75df61..e36892a907d 100644 --- a/.github/workflows/bit.ci.BbScanner.e2e.yml +++ b/.github/workflows/bit.ci.BbScanner.e2e.yml @@ -19,7 +19,7 @@ jobs: e2e: name: BbScanner E2E (Chromium) - runs-on: ubuntu-24.04 + runs-on: ubuntu-26.04 steps: @@ -28,7 +28,7 @@ jobs: with: persist-credentials: false - - name: Setup .NET 10.0 + - name: Setup .NET 11.0 uses: actions/setup-dotnet@a98b56852c35b8e3190ac28c8c2271da59106c68 # v6.0.0 with: global-json-file: src/global.json @@ -43,7 +43,7 @@ jobs: dotnet build src/Utilities/BbScanner/Tests/Bit.BbScanner.Tests.E2E/Bit.BbScanner.Tests.E2E.csproj -c Release - name: Install Playwright Chromium - run: pwsh src/Utilities/BbScanner/Tests/Bit.BbScanner.Tests.E2E/bin/Release/net10.0/playwright.ps1 install --with-deps chromium + run: pwsh src/Utilities/BbScanner/Tests/Bit.BbScanner.Tests.E2E/bin/Release/net11.0/playwright.ps1 install --with-deps chromium - name: Run E2E tests # Run from inside src so src/global.json's Microsoft.Testing.Platform runner setting applies. diff --git a/.github/workflows/bit.ci.BbScanner.yml b/.github/workflows/bit.ci.BbScanner.yml index 08bb4d7d38f..62ce967f070 100644 --- a/.github/workflows/bit.ci.BbScanner.yml +++ b/.github/workflows/bit.ci.BbScanner.yml @@ -22,7 +22,7 @@ jobs: build-BbScanner: if: startsWith(github.event.pull_request.title, 'Prerelease') != true && startsWith(github.event.pull_request.title, 'Release') != true && startsWith(github.event.pull_request.title, 'Version') != true name: build Bit.BbScanner - runs-on: ubuntu-24.04 + runs-on: ubuntu-26.04 steps: @@ -31,11 +31,16 @@ jobs: with: persist-credentials: false - - name: Setup .NET 10.0 + - name: Setup .NET 11.0 uses: actions/setup-dotnet@a98b56852c35b8e3190ac28c8c2271da59106c68 # v6.0.0 with: global-json-file: src/global.json + - name: Setup .NET 10.0 + uses: actions/setup-dotnet@a98b56852c35b8e3190ac28c8c2271da59106c68 # v6.0.0 + with: + dotnet-version: 10.0.x + - name: Setup .NET 9.0 uses: actions/setup-dotnet@a98b56852c35b8e3190ac28c8c2271da59106c68 # v6.0.0 with: @@ -56,7 +61,7 @@ jobs: - name: dotnet build run: dotnet build src/Utilities/BbScanner/Bit.BbScanner.slnx - - name: dotnet test (decoder + component tests, net8.0/net9.0/net10.0) + - name: dotnet test (decoder + component tests, net8.0/net9.0/net10.0/net11.0) # Run from inside src so src/global.json's "test" runner setting applies # (from the repo root the SDK falls back to the unsupported VSTest path). run: cd src/Utilities/BbScanner/Tests/Bit.BbScanner.Tests && dotnet test --no-build diff --git a/.github/workflows/bit.ci.Bcrdt.e2e.yml b/.github/workflows/bit.ci.Bcrdt.e2e.yml index cc60e5e4964..61eebbc2495 100644 --- a/.github/workflows/bit.ci.Bcrdt.e2e.yml +++ b/.github/workflows/bit.ci.Bcrdt.e2e.yml @@ -19,7 +19,7 @@ jobs: e2e: name: Bcrdt E2E (Chromium) - runs-on: ubuntu-24.04 + runs-on: ubuntu-26.04 timeout-minutes: 60 steps: @@ -29,7 +29,7 @@ jobs: with: persist-credentials: false - - name: Setup .NET 10.0 + - name: Setup .NET 11.0 uses: actions/setup-dotnet@a98b56852c35b8e3190ac28c8c2271da59106c68 # v6.0.0 with: global-json-file: src/global.json @@ -48,7 +48,7 @@ jobs: dotnet build src/Utilities/Bcrdt/Tests/Bit.Bcrdt.Tests.E2E/Bit.Bcrdt.Tests.E2E.csproj -c Release - name: Install Playwright Chromium - run: pwsh src/Utilities/Bcrdt/Tests/Bit.Bcrdt.Tests.E2E/bin/Release/net10.0/playwright.ps1 install --with-deps chromium + run: pwsh src/Utilities/Bcrdt/Tests/Bit.Bcrdt.Tests.E2E/bin/Release/net11.0/playwright.ps1 install --with-deps chromium - name: Run E2E tests # Run from inside src so src/global.json's Microsoft.Testing.Platform runner setting applies. diff --git a/.github/workflows/bit.ci.Bcrdt.yml b/.github/workflows/bit.ci.Bcrdt.yml index 89ba805eedc..955b7c80130 100644 --- a/.github/workflows/bit.ci.Bcrdt.yml +++ b/.github/workflows/bit.ci.Bcrdt.yml @@ -22,7 +22,7 @@ jobs: build-Bcrdt: if: startsWith(github.event.pull_request.title, 'Prerelease') != true && startsWith(github.event.pull_request.title, 'Release') != true && startsWith(github.event.pull_request.title, 'Version') != true name: build Bit.Bcrdt - runs-on: ubuntu-24.04 + runs-on: ubuntu-26.04 steps: @@ -31,11 +31,16 @@ jobs: with: persist-credentials: false - - name: Setup .NET 10.0 + - name: Setup .NET 11.0 uses: actions/setup-dotnet@a98b56852c35b8e3190ac28c8c2271da59106c68 # v6.0.0 with: global-json-file: src/global.json + - name: Setup .NET 10.0 + uses: actions/setup-dotnet@a98b56852c35b8e3190ac28c8c2271da59106c68 # v6.0.0 + with: + dotnet-version: 10.0.x + - name: Setup .NET 9.0 uses: actions/setup-dotnet@a98b56852c35b8e3190ac28c8c2271da59106c68 # v6.0.0 with: @@ -56,7 +61,7 @@ jobs: - name: dotnet build run: dotnet build src/Utilities/Bcrdt/Bit.Bcrdt.slnx - - name: dotnet test (engine, transports, relays and components - net8.0/net9.0/net10.0) + - name: dotnet test (engine, transports, relays and components - net8.0/net9.0/net10.0/net11.0) # Run from inside src so src/global.json's "test" runner setting applies # (from the repo root the SDK falls back to the unsupported VSTest path). run: cd src/Utilities/Bcrdt/Tests/Bit.Bcrdt.Tests && dotnet test --no-build diff --git a/.github/workflows/bit.ci.Bdnd.e2e.yml b/.github/workflows/bit.ci.Bdnd.e2e.yml index e252f19fb45..08f34967230 100644 --- a/.github/workflows/bit.ci.Bdnd.e2e.yml +++ b/.github/workflows/bit.ci.Bdnd.e2e.yml @@ -18,7 +18,7 @@ jobs: e2e: name: Bdnd E2E (Chromium) - runs-on: ubuntu-24.04 + runs-on: ubuntu-26.04 timeout-minutes: 60 steps: @@ -28,7 +28,7 @@ jobs: with: persist-credentials: false - - name: Setup .NET 10.0 + - name: Setup .NET 11.0 uses: actions/setup-dotnet@a98b56852c35b8e3190ac28c8c2271da59106c68 # v6.0.0 with: global-json-file: src/global.json @@ -46,7 +46,7 @@ jobs: dotnet build src/Utilities/Bdnd/Tests/Bit.Bdnd.Tests.E2E/Bit.Bdnd.Tests.E2E.csproj -c Release - name: Install Playwright Chromium - run: pwsh src/Utilities/Bdnd/Tests/Bit.Bdnd.Tests.E2E/bin/Release/net10.0/playwright.ps1 install --with-deps chromium + run: pwsh src/Utilities/Bdnd/Tests/Bit.Bdnd.Tests.E2E/bin/Release/net11.0/playwright.ps1 install --with-deps chromium - name: Run E2E tests # Run from inside src so src/global.json's Microsoft.Testing.Platform runner setting applies. @@ -70,7 +70,7 @@ jobs: # reads and writes through reflection lose their members, and none of it is visible in a build output. publish-gate: name: Bdnd publish gate (${{ matrix.name }}) - runs-on: ubuntu-24.04 + runs-on: ubuntu-26.04 # The whole browser suite runs after the publish, which in the AOT leg compiles the entire client ahead of time. timeout-minutes: ${{ matrix.timeout }} strategy: @@ -91,7 +91,7 @@ jobs: with: persist-credentials: false - - name: Setup .NET 10.0 + - name: Setup .NET 11.0 uses: actions/setup-dotnet@a98b56852c35b8e3190ac28c8c2271da59106c68 # v6.0.0 with: global-json-file: src/global.json @@ -113,7 +113,7 @@ jobs: run: dotnet build src/Utilities/Bdnd/Tests/Bit.Bdnd.Tests.E2E/Bit.Bdnd.Tests.E2E.csproj -c Release - name: Install Playwright Chromium - run: pwsh src/Utilities/Bdnd/Tests/Bit.Bdnd.Tests.E2E/bin/Release/net10.0/playwright.ps1 install --with-deps chromium + run: pwsh src/Utilities/Bdnd/Tests/Bit.Bdnd.Tests.E2E/bin/Release/net11.0/playwright.ps1 install --with-deps chromium - name: Run E2E tests against the published demo env: diff --git a/.github/workflows/bit.ci.Bdnd.yml b/.github/workflows/bit.ci.Bdnd.yml index 92e9530e27d..8533e7a5a41 100644 --- a/.github/workflows/bit.ci.Bdnd.yml +++ b/.github/workflows/bit.ci.Bdnd.yml @@ -19,7 +19,7 @@ jobs: build-Bdnd: if: startsWith(github.event.pull_request.title, 'Prerelease') != true && startsWith(github.event.pull_request.title, 'Release') != true && startsWith(github.event.pull_request.title, 'Version') != true name: build Bit.Bdnd - runs-on: ubuntu-24.04 + runs-on: ubuntu-26.04 steps: @@ -28,11 +28,16 @@ jobs: with: persist-credentials: false - - name: Setup .NET 10.0 + - name: Setup .NET 11.0 uses: actions/setup-dotnet@a98b56852c35b8e3190ac28c8c2271da59106c68 # v6.0.0 with: global-json-file: src/global.json + - name: Setup .NET 10.0 + uses: actions/setup-dotnet@a98b56852c35b8e3190ac28c8c2271da59106c68 # v6.0.0 + with: + dotnet-version: 10.0.x + - name: Setup .NET 9.0 uses: actions/setup-dotnet@a98b56852c35b8e3190ac28c8c2271da59106c68 # v6.0.0 with: diff --git a/.github/workflows/bit.ci.Belemetry.e2e.yml b/.github/workflows/bit.ci.Belemetry.e2e.yml index 104aa50531d..1415f0aa74e 100644 --- a/.github/workflows/bit.ci.Belemetry.e2e.yml +++ b/.github/workflows/bit.ci.Belemetry.e2e.yml @@ -19,11 +19,11 @@ jobs: # each runtime the library ships for. e2e-web: name: Belemetry E2E - web render modes (${{ matrix.framework }}) - runs-on: ubuntu-24.04 + runs-on: ubuntu-26.04 strategy: fail-fast: false matrix: - framework: [ net10.0, net9.0, net8.0 ] + framework: [ net11.0, net10.0, net9.0, net8.0 ] steps: - name: Checkout source code @@ -31,11 +31,16 @@ jobs: with: persist-credentials: false - - name: Setup .NET 10.0 + - name: Setup .NET 11.0 uses: actions/setup-dotnet@a98b56852c35b8e3190ac28c8c2271da59106c68 # v6.0.0 with: global-json-file: src/global.json + - name: Setup .NET 10.0 + uses: actions/setup-dotnet@a98b56852c35b8e3190ac28c8c2271da59106c68 # v6.0.0 + with: + dotnet-version: 10.0.x + - name: Setup .NET 9.0 uses: actions/setup-dotnet@a98b56852c35b8e3190ac28c8c2271da59106c68 # v6.0.0 with: @@ -57,7 +62,7 @@ jobs: run: dotnet build src/Utilities/Belemetry/Tests/Bit.Belemetry.Tests.E2E/Bit.Belemetry.Tests.E2E.csproj -c Release - name: Install Playwright Chromium - run: pwsh src/Utilities/Belemetry/Tests/Bit.Belemetry.Tests.E2E/bin/Release/net10.0/playwright.ps1 install --with-deps chromium + run: pwsh src/Utilities/Belemetry/Tests/Bit.Belemetry.Tests.E2E/bin/Release/net11.0/playwright.ps1 install --with-deps chromium - name: Run E2E tests env: @@ -90,7 +95,7 @@ jobs: with: persist-credentials: false - - name: Setup .NET 10.0 + - name: Setup .NET 11.0 uses: actions/setup-dotnet@a98b56852c35b8e3190ac28c8c2271da59106c68 # v6.0.0 with: global-json-file: src/global.json @@ -119,7 +124,7 @@ jobs: # The hybrid app exports to the receiver of the static SSR web host, which the suite starts from this build output. - name: Build the web harness host - run: dotnet build src/Utilities/Belemetry/Tests/Bit.Belemetry.Tests.Harness.Web/Bit.Belemetry.Tests.Harness.Web.csproj -c Release -f net10.0 + run: dotnet build src/Utilities/Belemetry/Tests/Bit.Belemetry.Tests.Harness.Web/Bit.Belemetry.Tests.Harness.Web.csproj -c Release -f net11.0 - name: Build the E2E suite run: dotnet build src/Utilities/Belemetry/Tests/Bit.Belemetry.Tests.E2E/Bit.Belemetry.Tests.E2E.csproj -c Release @@ -149,7 +154,7 @@ jobs: # in a Debug build. publish-gate: name: Belemetry publish gate (${{ matrix.name }}) - runs-on: ubuntu-24.04 + runs-on: ubuntu-26.04 strategy: fail-fast: false matrix: @@ -165,7 +170,7 @@ jobs: with: persist-credentials: false - - name: Setup .NET 10.0 + - name: Setup .NET 11.0 uses: actions/setup-dotnet@a98b56852c35b8e3190ac28c8c2271da59106c68 # v6.0.0 with: global-json-file: src/global.json @@ -185,7 +190,7 @@ jobs: run: dotnet build src/Utilities/Belemetry/Tests/Bit.Belemetry.Tests.E2E/Bit.Belemetry.Tests.E2E.csproj -c Release - name: Install Playwright Chromium - run: pwsh src/Utilities/Belemetry/Tests/Bit.Belemetry.Tests.E2E/bin/Release/net10.0/playwright.ps1 install --with-deps chromium + run: pwsh src/Utilities/Belemetry/Tests/Bit.Belemetry.Tests.E2E/bin/Release/net11.0/playwright.ps1 install --with-deps chromium - name: Run E2E tests against the published host env: diff --git a/.github/workflows/bit.ci.Belemetry.yml b/.github/workflows/bit.ci.Belemetry.yml index e45a6feb243..0c003d38e6f 100644 --- a/.github/workflows/bit.ci.Belemetry.yml +++ b/.github/workflows/bit.ci.Belemetry.yml @@ -20,7 +20,7 @@ jobs: build-Belemetry: if: startsWith(github.event.pull_request.title, 'Prerelease') != true && startsWith(github.event.pull_request.title, 'Release') != true && startsWith(github.event.pull_request.title, 'Version') != true name: build Bit.Belemetry - runs-on: ubuntu-24.04 + runs-on: ubuntu-26.04 steps: @@ -29,11 +29,16 @@ jobs: with: persist-credentials: false - - name: Setup .NET 10.0 + - name: Setup .NET 11.0 uses: actions/setup-dotnet@a98b56852c35b8e3190ac28c8c2271da59106c68 # v6.0.0 with: global-json-file: src/global.json + - name: Setup .NET 10.0 + uses: actions/setup-dotnet@a98b56852c35b8e3190ac28c8c2271da59106c68 # v6.0.0 + with: + dotnet-version: 10.0.x + - name: Setup .NET 9.0 uses: actions/setup-dotnet@a98b56852c35b8e3190ac28c8c2271da59106c68 # v6.0.0 with: @@ -59,10 +64,10 @@ jobs: - name: dotnet test run: cd src/Utilities/Belemetry/Tests/Bit.Belemetry.Tests && dotnet test --no-build - - name: dotnet test (Entity Framework Core instrumentation, net8.0/net9.0/net10.0) + - name: dotnet test (Entity Framework Core instrumentation, net8.0/net9.0/net10.0/net11.0) run: cd src/Utilities/Belemetry/Tests/Bit.Belemetry.Tests.EntityFrameworkCore && dotnet test --no-build - - name: dotnet test (Hangfire instrumentation, net8.0/net9.0/net10.0) + - name: dotnet test (Hangfire instrumentation, net8.0/net9.0/net10.0/net11.0) run: cd src/Utilities/Belemetry/Tests/Bit.Belemetry.Tests.Hangfire && dotnet test --no-build - name: npm test (browser script) @@ -71,5 +76,5 @@ jobs: - name: dotnet test (MCP server and OTLP receiver) run: cd src/Utilities/Belemetry/Tests/Bit.Belemetry.Tests.Mcp && dotnet test --no-build - - name: dotnet test (hosting - every render mode over HTTP, net8.0/net9.0/net10.0) + - name: dotnet test (hosting - every render mode over HTTP, net8.0/net9.0/net10.0/net11.0) run: cd src/Utilities/Belemetry/Tests/Bit.Belemetry.Tests.Hosting && dotnet test --no-build diff --git a/.github/workflows/bit.ci.Besql.yml b/.github/workflows/bit.ci.Besql.yml index 1d174d19471..78062f84ab3 100644 --- a/.github/workflows/bit.ci.Besql.yml +++ b/.github/workflows/bit.ci.Besql.yml @@ -17,7 +17,7 @@ jobs: build-Besql: if: startsWith(github.event.pull_request.title, 'Prerelease') != true && startsWith(github.event.pull_request.title, 'Release') != true && startsWith(github.event.pull_request.title, 'Version') != true name: build Bit.Besql - runs-on: ubuntu-24.04 + runs-on: ubuntu-26.04 steps: @@ -26,11 +26,16 @@ jobs: with: persist-credentials: false - - name: Setup .NET 10.0 + - name: Setup .NET 11.0 uses: actions/setup-dotnet@a98b56852c35b8e3190ac28c8c2271da59106c68 # v6.0.0 with: global-json-file: src/global.json + - name: Setup .NET 10.0 + uses: actions/setup-dotnet@a98b56852c35b8e3190ac28c8c2271da59106c68 # v6.0.0 + with: + dotnet-version: 10.0.x + - name: Setup .NET 9.0 uses: actions/setup-dotnet@a98b56852c35b8e3190ac28c8c2271da59106c68 # v6.0.0 with: diff --git a/.github/workflows/bit.ci.BevTools.yml b/.github/workflows/bit.ci.BevTools.yml index 640a298e985..cc9929c60cf 100644 --- a/.github/workflows/bit.ci.BevTools.yml +++ b/.github/workflows/bit.ci.BevTools.yml @@ -17,7 +17,7 @@ jobs: build-BevTools: if: startsWith(github.event.pull_request.title, 'Prerelease') != true && startsWith(github.event.pull_request.title, 'Release') != true && startsWith(github.event.pull_request.title, 'Version') != true name: build Bit.BevTools - runs-on: ubuntu-24.04 + runs-on: ubuntu-26.04 steps: @@ -26,11 +26,16 @@ jobs: with: persist-credentials: false - - name: Setup .NET 10.0 + - name: Setup .NET 11.0 uses: actions/setup-dotnet@a98b56852c35b8e3190ac28c8c2271da59106c68 # v6.0.0 with: global-json-file: src/global.json + - name: Setup .NET 10.0 + uses: actions/setup-dotnet@a98b56852c35b8e3190ac28c8c2271da59106c68 # v6.0.0 + with: + dotnet-version: 10.0.x + - name: Setup .NET 9.0 uses: actions/setup-dotnet@a98b56852c35b8e3190ac28c8c2271da59106c68 # v6.0.0 with: @@ -51,7 +56,7 @@ jobs: - name: dotnet build run: dotnet build src/Utilities/BevTools/Bit.BevTools.slnx - - name: dotnet test (instrumentation, stores, diagnostics, panels - net8.0/net9.0/net10.0) + - name: dotnet test (instrumentation, stores, diagnostics, panels - net8.0/net9.0/net10.0/net11.0) # Run from inside src so src/global.json's "test" runner setting applies # (from the repo root the SDK falls back to the unsupported VSTest path). run: cd src/Utilities/BevTools/Tests/Bit.BevTools.Tests && dotnet test --no-build diff --git a/.github/workflows/bit.ci.Bink.e2e.yml b/.github/workflows/bit.ci.Bink.e2e.yml index 90cf91e72bf..9963e66b31f 100644 --- a/.github/workflows/bit.ci.Bink.e2e.yml +++ b/.github/workflows/bit.ci.Bink.e2e.yml @@ -18,7 +18,7 @@ jobs: e2e: name: Bink E2E (Chromium) - runs-on: ubuntu-24.04 + runs-on: ubuntu-26.04 steps: @@ -27,7 +27,7 @@ jobs: with: persist-credentials: false - - name: Setup .NET 10.0 + - name: Setup .NET 11.0 uses: actions/setup-dotnet@a98b56852c35b8e3190ac28c8c2271da59106c68 # v6.0.0 with: global-json-file: src/global.json @@ -49,7 +49,7 @@ jobs: run: dotnet build src/Utilities/Bink/Tests/Bit.Bink.Tests.E2E/Bit.Bink.Tests.E2E.csproj -c Release - name: Install Playwright Chromium - run: pwsh src/Utilities/Bink/Tests/Bit.Bink.Tests.E2E/bin/Release/net10.0/playwright.ps1 install --with-deps chromium + run: pwsh src/Utilities/Bink/Tests/Bit.Bink.Tests.E2E/bin/Release/net11.0/playwright.ps1 install --with-deps chromium - name: Start the published demo run: | diff --git a/.github/workflows/bit.ci.Bink.yml b/.github/workflows/bit.ci.Bink.yml index c62aa533bcd..7a13f59cfa8 100644 --- a/.github/workflows/bit.ci.Bink.yml +++ b/.github/workflows/bit.ci.Bink.yml @@ -22,7 +22,7 @@ jobs: build-Bink: if: startsWith(github.event.pull_request.title, 'Prerelease') != true && startsWith(github.event.pull_request.title, 'Release') != true && startsWith(github.event.pull_request.title, 'Version') != true name: build Bit.Bink - runs-on: ubuntu-24.04 + runs-on: ubuntu-26.04 steps: @@ -31,11 +31,16 @@ jobs: with: persist-credentials: false - - name: Setup .NET 10.0 + - name: Setup .NET 11.0 uses: actions/setup-dotnet@a98b56852c35b8e3190ac28c8c2271da59106c68 # v6.0.0 with: global-json-file: src/global.json + - name: Setup .NET 10.0 + uses: actions/setup-dotnet@a98b56852c35b8e3190ac28c8c2271da59106c68 # v6.0.0 + with: + dotnet-version: 10.0.x + - name: Setup .NET 9.0 uses: actions/setup-dotnet@a98b56852c35b8e3190ac28c8c2271da59106c68 # v6.0.0 with: @@ -56,7 +61,7 @@ jobs: - name: dotnet build run: dotnet build src/Utilities/Bink/Bit.Bink.slnx - - name: dotnet test (engine + component tests, net8.0/net9.0/net10.0) + - name: dotnet test (engine + component tests, net8.0/net9.0/net10.0/net11.0) # Run from inside src so src/global.json's "test" runner setting applies # (from the repo root the SDK falls back to the unsupported VSTest path). run: cd src/Utilities/Bink/Tests/Bit.Bink.Tests && dotnet test --no-build diff --git a/.github/workflows/bit.ci.BlazeDb.e2e.yml b/.github/workflows/bit.ci.BlazeDb.e2e.yml index 45918140df3..6ca4e67d2d2 100644 --- a/.github/workflows/bit.ci.BlazeDb.e2e.yml +++ b/.github/workflows/bit.ci.BlazeDb.e2e.yml @@ -18,7 +18,7 @@ jobs: e2e: name: BlazeDb E2E (Chromium) - runs-on: ubuntu-24.04 + runs-on: ubuntu-26.04 steps: @@ -27,7 +27,7 @@ jobs: with: persist-credentials: false - - name: Setup .NET 10.0 + - name: Setup .NET 11.0 uses: actions/setup-dotnet@a98b56852c35b8e3190ac28c8c2271da59106c68 # v6.0.0 with: global-json-file: src/global.json @@ -42,7 +42,7 @@ jobs: dotnet build src/Utilities/BlazeDb/Tests/Bit.BlazeDb.Tests.E2E/Bit.BlazeDb.Tests.E2E.csproj -c Release - name: Install Playwright Chromium - run: pwsh src/Utilities/BlazeDb/Tests/Bit.BlazeDb.Tests.E2E/bin/Release/net10.0/playwright.ps1 install --with-deps chromium + run: pwsh src/Utilities/BlazeDb/Tests/Bit.BlazeDb.Tests.E2E/bin/Release/net11.0/playwright.ps1 install --with-deps chromium - name: Run E2E tests # Run from inside src so src/global.json's Microsoft.Testing.Platform runner setting applies. diff --git a/.github/workflows/bit.ci.BlazeDb.yml b/.github/workflows/bit.ci.BlazeDb.yml index 936d4a7d35f..4c360d09169 100644 --- a/.github/workflows/bit.ci.BlazeDb.yml +++ b/.github/workflows/bit.ci.BlazeDb.yml @@ -22,7 +22,7 @@ jobs: build-BlazeDb: if: startsWith(github.event.pull_request.title, 'Prerelease') != true && startsWith(github.event.pull_request.title, 'Release') != true && startsWith(github.event.pull_request.title, 'Version') != true name: build Bit.BlazeDb - runs-on: ubuntu-24.04 + runs-on: ubuntu-26.04 steps: @@ -31,11 +31,16 @@ jobs: with: persist-credentials: false - - name: Setup .NET 10.0 + - name: Setup .NET 11.0 uses: actions/setup-dotnet@a98b56852c35b8e3190ac28c8c2271da59106c68 # v6.0.0 with: global-json-file: src/global.json + - name: Setup .NET 10.0 + uses: actions/setup-dotnet@a98b56852c35b8e3190ac28c8c2271da59106c68 # v6.0.0 + with: + dotnet-version: 10.0.x + - name: Setup .NET 9.0 uses: actions/setup-dotnet@a98b56852c35b8e3190ac28c8c2271da59106c68 # v6.0.0 with: @@ -56,7 +61,7 @@ jobs: - name: dotnet build run: dotnet build src/Utilities/BlazeDb/Bit.BlazeDb.slnx - - name: dotnet test (engine + EF Core provider, net8.0/net9.0/net10.0) + - name: dotnet test (engine + EF Core provider, net8.0/net9.0/net10.0/net11.0) # Run from inside src so src/global.json's "test" runner setting applies # (from the repo root the SDK falls back to the unsupported VSTest path). run: cd src/Utilities/BlazeDb/Tests/Bit.BlazeDb.Tests && dotnet test --no-build diff --git a/.github/workflows/bit.ci.BlazorES2019.yml b/.github/workflows/bit.ci.BlazorES2019.yml index 7fb2b4e93ac..461056308cc 100644 --- a/.github/workflows/bit.ci.BlazorES2019.yml +++ b/.github/workflows/bit.ci.BlazorES2019.yml @@ -17,7 +17,7 @@ jobs: build-BlazorES2019: if: startsWith(github.event.pull_request.title, 'Prerelease') != true && startsWith(github.event.pull_request.title, 'Release') != true && startsWith(github.event.pull_request.title, 'Version') != true name: build Bit.BlazorES2019 - runs-on: ubuntu-24.04 + runs-on: ubuntu-26.04 steps: @@ -26,11 +26,16 @@ jobs: with: persist-credentials: false - - name: Setup .NET 10.0 + - name: Setup .NET 11.0 uses: actions/setup-dotnet@a98b56852c35b8e3190ac28c8c2271da59106c68 # v6.0.0 with: global-json-file: src/global.json + - name: Setup .NET 10.0 + uses: actions/setup-dotnet@a98b56852c35b8e3190ac28c8c2271da59106c68 # v6.0.0 + with: + dotnet-version: 10.0.x + - name: Setup .NET 9.0 uses: actions/setup-dotnet@a98b56852c35b8e3190ac28c8c2271da59106c68 # v6.0.0 with: @@ -79,6 +84,23 @@ jobs: cp aspnetcore/src/Components/Web.JS/dist/Release/blazor.*.js src/BlazorES2019/wwwroot.net10/ rm -rf aspnetcore + - name: Generate .NET 11.0 blazor.*.js files + run: | + git clone https://github.com/dotnet/aspnetcore.git + cd aspnetcore + git switch release/11.0 + git submodule update --init --recursive + sed -i 's/"target": "ES2024"/"target": "ES2019"/' src/Components/Shared.JS/tsconfig.json + npm install + npm run-script build + cd src/Components/Web.JS + npm install + npm run-script build:production + cd ../../../../ + mkdir -p src/BlazorES2019/wwwroot.net11/ + cp aspnetcore/src/Components/Web.JS/dist/Release/blazor.*.js aspnetcore/src/Components/Web.JS/dist/Release/_framework/blazor.*.js src/BlazorES2019/wwwroot.net11/ + rm -rf aspnetcore + - name: dotnet workload restore run: cd src/BlazorES2019/Bit.BlazorES2019 && dotnet workload restore diff --git a/.github/workflows/bit.ci.BlazorUI.e2e.yml b/.github/workflows/bit.ci.BlazorUI.e2e.yml index c5481169dcf..1ab51134781 100644 --- a/.github/workflows/bit.ci.BlazorUI.e2e.yml +++ b/.github/workflows/bit.ci.BlazorUI.e2e.yml @@ -42,7 +42,7 @@ jobs: # Turns the inputs into the job matrix, so a run can be narrowed to one engine or one render mode. plan: name: plan the E2E matrix - runs-on: ubuntu-24.04 + runs-on: ubuntu-26.04 outputs: browsers: ${{ steps.matrix.outputs.browsers }} modes: ${{ steps.matrix.outputs.modes }} @@ -58,7 +58,7 @@ jobs: e2e-BlazorUI: needs: plan name: E2E ${{ matrix.browser }} / ${{ matrix.mode }} - runs-on: ubuntu-24.04 + runs-on: ubuntu-26.04 timeout-minutes: 180 strategy: @@ -80,7 +80,7 @@ jobs: with: persist-credentials: false - - name: Setup .NET 10.0 + - name: Setup .NET 11.0 uses: actions/setup-dotnet@a98b56852c35b8e3190ac28c8c2271da59106c68 # v6.0.0 with: global-json-file: src/global.json @@ -92,19 +92,19 @@ jobs: # The host builds the libraries it references (and their scripts and styles through npm) and the WebAssembly # client that holds the pages; the test project only needs Playwright and MSTest. - name: Build the E2E test host - run: dotnet build $E2E_DIR/Bit.BlazorUI.Tests.E2E.TestHost -f net10.0 + run: dotnet build $E2E_DIR/Bit.BlazorUI.Tests.E2E.TestHost -f net11.0 - name: Build the E2E tests - run: dotnet build $E2E_DIR/Bit.BlazorUI.Tests.E2E -f net10.0 + run: dotnet build $E2E_DIR/Bit.BlazorUI.Tests.E2E -f net11.0 - name: Install the Playwright browser - run: pwsh $E2E_DIR/Bit.BlazorUI.Tests.E2E/bin/Debug/net10.0/playwright.ps1 install --with-deps ${{ matrix.browser }} + run: pwsh $E2E_DIR/Bit.BlazorUI.Tests.E2E/bin/Debug/net11.0/playwright.ps1 install --with-deps ${{ matrix.browser }} # Started once for the whole run (the tests attach to a host already answering at E2E_HOST_URL), with its output # kept for the artifacts below. - name: Start the E2E test host run: | - nohup dotnet run --project $E2E_DIR/Bit.BlazorUI.Tests.E2E.TestHost --no-build --framework net10.0 --urls $E2E_HOST_URL > host.log 2>&1 & + nohup dotnet run --project $E2E_DIR/Bit.BlazorUI.Tests.E2E.TestHost --no-build --framework net11.0 --urls $E2E_HOST_URL > host.log 2>&1 & for i in $(seq 1 120); do if curl -s -o /dev/null -w "%{http_code}" $E2E_HOST_URL/ | grep -q 200; then echo "host is up"; exit 0; fi sleep 1 @@ -119,7 +119,7 @@ jobs: cd $E2E_DIR/Bit.BlazorUI.Tests.E2E args=(--report-trx --results-directory "$GITHUB_WORKSPACE/e2e-results") if [ -n "$FILTER" ]; then args+=(--filter "$FILTER"); fi - dotnet exec bin/Debug/net10.0/Bit.BlazorUI.Tests.E2E.dll "${args[@]}" + dotnet exec bin/Debug/net11.0/Bit.BlazorUI.Tests.E2E.dll "${args[@]}" - name: Upload the test results if: always() diff --git a/.github/workflows/bit.ci.BlazorUI.yml b/.github/workflows/bit.ci.BlazorUI.yml index f2085e68cc3..d617a128672 100644 --- a/.github/workflows/bit.ci.BlazorUI.yml +++ b/.github/workflows/bit.ci.BlazorUI.yml @@ -18,7 +18,7 @@ jobs: build-BlazorUI: if: startsWith(github.event.pull_request.title, 'Prerelease') != true && startsWith(github.event.pull_request.title, 'Release') != true && startsWith(github.event.pull_request.title, 'Version') != true name: build Bit.BlazorUI - runs-on: ubuntu-24.04 + runs-on: ubuntu-26.04 steps: @@ -27,11 +27,16 @@ jobs: with: persist-credentials: false - - name: Setup .NET 10.0 + - name: Setup .NET 11.0 uses: actions/setup-dotnet@a98b56852c35b8e3190ac28c8c2271da59106c68 # v6.0.0 with: global-json-file: src/global.json + - name: Setup .NET 10.0 + uses: actions/setup-dotnet@a98b56852c35b8e3190ac28c8c2271da59106c68 # v6.0.0 + with: + dotnet-version: 10.0.x + - name: Setup .NET 9.0 uses: actions/setup-dotnet@a98b56852c35b8e3190ac28c8c2271da59106c68 # v6.0.0 with: diff --git a/.github/workflows/bit.ci.Blex.e2e.yml b/.github/workflows/bit.ci.Blex.e2e.yml index 6fe2e5ce9e4..a8e5ad4c5bf 100644 --- a/.github/workflows/bit.ci.Blex.e2e.yml +++ b/.github/workflows/bit.ci.Blex.e2e.yml @@ -1,6 +1,6 @@ name: bit platform CI - Blex E2E -# The cross-host suites: every web render mode in Chromium on net10.0/net9.0/net8.0, Blazor Hybrid in WebView2, +# The cross-host suites: every web render mode in Chromium on net11.0/net10.0/net9.0/net8.0, Blazor Hybrid in WebView2, # and trimmed/AOT publishes. They take far longer than the build-and-unit pipeline (bit.ci.Blex.yml), so they # run only when started by hand. See src/Utilities/Blex/Tests/Bit.Blex.Tests.E2E/README.md for what each job proves and # how to run it locally. @@ -20,11 +20,11 @@ jobs: # Chromium, on each runtime the library ships for. e2e-web: name: Blex E2E - web render modes (${{ matrix.framework }}) - runs-on: ubuntu-24.04 + runs-on: ubuntu-26.04 strategy: fail-fast: false matrix: - framework: [ net10.0, net9.0, net8.0 ] + framework: [ net11.0, net10.0, net9.0, net8.0 ] steps: - name: Checkout source code @@ -32,11 +32,16 @@ jobs: with: persist-credentials: false - - name: Setup .NET 10.0 + - name: Setup .NET 11.0 uses: actions/setup-dotnet@a98b56852c35b8e3190ac28c8c2271da59106c68 # v6.0.0 with: global-json-file: src/global.json + - name: Setup .NET 10.0 + uses: actions/setup-dotnet@a98b56852c35b8e3190ac28c8c2271da59106c68 # v6.0.0 + with: + dotnet-version: 10.0.x + - name: Setup .NET 9.0 uses: actions/setup-dotnet@a98b56852c35b8e3190ac28c8c2271da59106c68 # v6.0.0 with: @@ -58,7 +63,7 @@ jobs: run: dotnet build src/Utilities/Blex/Tests/Bit.Blex.Tests.E2E/Bit.Blex.Tests.E2E.csproj -c Release - name: Install Playwright Chromium - run: pwsh src/Utilities/Blex/Tests/Bit.Blex.Tests.E2E/bin/Release/net10.0/playwright.ps1 install --with-deps chromium + run: pwsh src/Utilities/Blex/Tests/Bit.Blex.Tests.E2E/bin/Release/net11.0/playwright.ps1 install --with-deps chromium - name: Run E2E tests env: @@ -92,7 +97,7 @@ jobs: with: persist-credentials: false - - name: Setup .NET 10.0 + - name: Setup .NET 11.0 uses: actions/setup-dotnet@a98b56852c35b8e3190ac28c8c2271da59106c68 # v6.0.0 with: global-json-file: src/global.json @@ -147,7 +152,7 @@ jobs: # the prerender state handoff break, and none of it is visible in a Debug build. publish-gate: name: Blex publish gate (${{ matrix.name }}) - runs-on: ubuntu-24.04 + runs-on: ubuntu-26.04 strategy: fail-fast: false matrix: @@ -163,7 +168,7 @@ jobs: with: persist-credentials: false - - name: Setup .NET 10.0 + - name: Setup .NET 11.0 uses: actions/setup-dotnet@a98b56852c35b8e3190ac28c8c2271da59106c68 # v6.0.0 with: global-json-file: src/global.json @@ -183,7 +188,7 @@ jobs: run: dotnet build src/Utilities/Blex/Tests/Bit.Blex.Tests.E2E/Bit.Blex.Tests.E2E.csproj -c Release - name: Install Playwright Chromium - run: pwsh src/Utilities/Blex/Tests/Bit.Blex.Tests.E2E/bin/Release/net10.0/playwright.ps1 install --with-deps chromium + run: pwsh src/Utilities/Blex/Tests/Bit.Blex.Tests.E2E/bin/Release/net11.0/playwright.ps1 install --with-deps chromium - name: Run E2E tests against the published host env: diff --git a/.github/workflows/bit.ci.Blex.yml b/.github/workflows/bit.ci.Blex.yml index b4707c063c0..0f53df3e365 100644 --- a/.github/workflows/bit.ci.Blex.yml +++ b/.github/workflows/bit.ci.Blex.yml @@ -22,7 +22,7 @@ jobs: build-Blex: if: startsWith(github.event.pull_request.title, 'Prerelease') != true && startsWith(github.event.pull_request.title, 'Release') != true && startsWith(github.event.pull_request.title, 'Version') != true name: build Bit.Blex - runs-on: ubuntu-24.04 + runs-on: ubuntu-26.04 steps: @@ -31,11 +31,16 @@ jobs: with: persist-credentials: false - - name: Setup .NET 10.0 + - name: Setup .NET 11.0 uses: actions/setup-dotnet@a98b56852c35b8e3190ac28c8c2271da59106c68 # v6.0.0 with: global-json-file: src/global.json + - name: Setup .NET 10.0 + uses: actions/setup-dotnet@a98b56852c35b8e3190ac28c8c2271da59106c68 # v6.0.0 + with: + dotnet-version: 10.0.x + - name: Setup .NET 9.0 uses: actions/setup-dotnet@a98b56852c35b8e3190ac28c8c2271da59106c68 # v6.0.0 with: @@ -53,7 +58,7 @@ jobs: - name: dotnet build run: dotnet build src/Utilities/Blex/Bit.Blex.slnx - - name: dotnet test (runtime, Blazor, MAUI and generated code - net8.0/net9.0/net10.0) + - name: dotnet test (runtime, Blazor, MAUI and generated code - net8.0/net9.0/net10.0/net11.0) # Run from inside src so src/global.json's "test" runner setting applies # (from the repo root the SDK falls back to the unsupported VSTest path). run: cd src/Utilities/Blex/Tests/Bit.Blex.Tests && dotnet test --no-build diff --git a/.github/workflows/bit.ci.Blow.e2e.yml b/.github/workflows/bit.ci.Blow.e2e.yml index b5a4ee5f06a..537bf3967e2 100644 --- a/.github/workflows/bit.ci.Blow.e2e.yml +++ b/.github/workflows/bit.ci.Blow.e2e.yml @@ -17,7 +17,7 @@ jobs: e2e: name: Blow E2E (Chromium) - runs-on: ubuntu-24.04 + runs-on: ubuntu-26.04 timeout-minutes: 60 steps: @@ -27,7 +27,7 @@ jobs: with: persist-credentials: false - - name: Setup .NET 10.0 + - name: Setup .NET 11.0 uses: actions/setup-dotnet@a98b56852c35b8e3190ac28c8c2271da59106c68 # v6.0.0 with: global-json-file: src/global.json @@ -49,7 +49,7 @@ jobs: run: dotnet build src/Utilities/Blow/Tests/Bit.Blow.Tests.E2E/Bit.Blow.Tests.E2E.csproj -c Release - name: Install Playwright Chromium - run: pwsh src/Utilities/Blow/Tests/Bit.Blow.Tests.E2E/bin/Release/net10.0/playwright.ps1 install --with-deps chromium + run: pwsh src/Utilities/Blow/Tests/Bit.Blow.Tests.E2E/bin/Release/net11.0/playwright.ps1 install --with-deps chromium - name: Start the published demo run: | diff --git a/.github/workflows/bit.ci.Blow.yml b/.github/workflows/bit.ci.Blow.yml index 1a3f5708089..e1f31b98aee 100644 --- a/.github/workflows/bit.ci.Blow.yml +++ b/.github/workflows/bit.ci.Blow.yml @@ -19,7 +19,7 @@ jobs: build-Blow: if: startsWith(github.event.pull_request.title, 'Prerelease') != true && startsWith(github.event.pull_request.title, 'Release') != true && startsWith(github.event.pull_request.title, 'Version') != true name: build Bit.Blow - runs-on: ubuntu-24.04 + runs-on: ubuntu-26.04 steps: @@ -28,11 +28,16 @@ jobs: with: persist-credentials: false - - name: Setup .NET 10.0 + - name: Setup .NET 11.0 uses: actions/setup-dotnet@a98b56852c35b8e3190ac28c8c2271da59106c68 # v6.0.0 with: global-json-file: src/global.json + - name: Setup .NET 10.0 + uses: actions/setup-dotnet@a98b56852c35b8e3190ac28c8c2271da59106c68 # v6.0.0 + with: + dotnet-version: 10.0.x + - name: Setup .NET 9.0 uses: actions/setup-dotnet@a98b56852c35b8e3190ac28c8c2271da59106c68 # v6.0.0 with: diff --git a/.github/workflows/bit.ci.Bmage.e2e.yml b/.github/workflows/bit.ci.Bmage.e2e.yml index 26448759aa0..5692ba60bea 100644 --- a/.github/workflows/bit.ci.Bmage.e2e.yml +++ b/.github/workflows/bit.ci.Bmage.e2e.yml @@ -18,7 +18,7 @@ jobs: # The bit-bmage.js bridge, the browser's own codecs, canvas rendering, editor input and every demo page. e2e: name: Bmage E2E (Chromium) - runs-on: ubuntu-24.04 + runs-on: ubuntu-26.04 timeout-minutes: 60 steps: @@ -28,7 +28,7 @@ jobs: with: persist-credentials: false - - name: Setup .NET 10.0 + - name: Setup .NET 11.0 uses: actions/setup-dotnet@a98b56852c35b8e3190ac28c8c2271da59106c68 # v6.0.0 with: global-json-file: src/global.json @@ -50,7 +50,7 @@ jobs: run: dotnet build src/Utilities/Bmage/Tests/Bit.Bmage.Tests.E2E/Bit.Bmage.Tests.E2E.csproj -c Release - name: Install Playwright Chromium - run: pwsh src/Utilities/Bmage/Tests/Bit.Bmage.Tests.E2E/bin/Release/net10.0/playwright.ps1 install --with-deps chromium + run: pwsh src/Utilities/Bmage/Tests/Bit.Bmage.Tests.E2E/bin/Release/net11.0/playwright.ps1 install --with-deps chromium - name: Start the published demo run: | diff --git a/.github/workflows/bit.ci.Bmage.yml b/.github/workflows/bit.ci.Bmage.yml index 4ed21b6f426..91d2aee6694 100644 --- a/.github/workflows/bit.ci.Bmage.yml +++ b/.github/workflows/bit.ci.Bmage.yml @@ -21,7 +21,7 @@ jobs: build-Bmage: if: startsWith(github.event.pull_request.title, 'Prerelease') != true && startsWith(github.event.pull_request.title, 'Release') != true && startsWith(github.event.pull_request.title, 'Version') != true name: build Bit.Bmage - runs-on: ubuntu-24.04 + runs-on: ubuntu-26.04 steps: @@ -30,11 +30,16 @@ jobs: with: persist-credentials: false - - name: Setup .NET 10.0 + - name: Setup .NET 11.0 uses: actions/setup-dotnet@a98b56852c35b8e3190ac28c8c2271da59106c68 # v6.0.0 with: global-json-file: src/global.json + - name: Setup .NET 10.0 + uses: actions/setup-dotnet@a98b56852c35b8e3190ac28c8c2271da59106c68 # v6.0.0 + with: + dotnet-version: 10.0.x + - name: Setup .NET 9.0 uses: actions/setup-dotnet@a98b56852c35b8e3190ac28c8c2271da59106c68 # v6.0.0 with: @@ -54,7 +59,7 @@ jobs: - name: InstallNodejsDependencies continue-on-error: true # Error MSB4057, not all csproj files have InstallNodejsDependencies target. - run: dotnet build src/Utilities/Bmage/Bit.Bmage.slnx -t:InstallNodejsDependencies -m:1 -f net10.0 + run: dotnet build src/Utilities/Bmage/Bit.Bmage.slnx -t:InstallNodejsDependencies -m:1 -f net11.0 - name: dotnet build run: dotnet build src/Utilities/Bmage/Bit.Bmage.slnx diff --git a/.github/workflows/bit.ci.Bmotion.e2e.yml b/.github/workflows/bit.ci.Bmotion.e2e.yml index a136b799475..8e24312cc4c 100644 --- a/.github/workflows/bit.ci.Bmotion.e2e.yml +++ b/.github/workflows/bit.ci.Bmotion.e2e.yml @@ -14,17 +14,19 @@ jobs: # library ships for where the runtime is what differs. See src/Utilities/Bmotion/Tests/Bit.Bmotion.Tests.E2E/README.md. e2e: name: Bmotion E2E - ${{ matrix.host }} (${{ matrix.framework }}) - runs-on: ubuntu-24.04 + runs-on: ubuntu-26.04 strategy: fail-fast: false matrix: include: + - { host: wasm, framework: net11.0 } + - { host: wasm-noprerender, framework: net11.0 } + - { host: server, framework: net11.0 } + - { host: server-noprerender, framework: net11.0 } + - { host: auto, framework: net11.0 } + - { host: auto-noprerender, framework: net11.0 } - { host: wasm, framework: net10.0 } - - { host: wasm-noprerender, framework: net10.0 } - { host: server, framework: net10.0 } - - { host: server-noprerender, framework: net10.0 } - - { host: auto, framework: net10.0 } - - { host: auto-noprerender, framework: net10.0 } - { host: wasm, framework: net9.0 } - { host: server, framework: net9.0 } - { host: wasm, framework: net8.0 } @@ -36,11 +38,16 @@ jobs: with: persist-credentials: false - - name: Setup .NET 10.0 + - name: Setup .NET 11.0 uses: actions/setup-dotnet@a98b56852c35b8e3190ac28c8c2271da59106c68 # v6.0.0 with: global-json-file: src/global.json + - name: Setup .NET 10.0 + uses: actions/setup-dotnet@a98b56852c35b8e3190ac28c8c2271da59106c68 # v6.0.0 + with: + dotnet-version: 10.0.x + - name: Setup .NET 9.0 uses: actions/setup-dotnet@a98b56852c35b8e3190ac28c8c2271da59106c68 # v6.0.0 with: @@ -65,7 +72,7 @@ jobs: run: dotnet build src/Utilities/Bmotion/Tests/Bit.Bmotion.Tests.E2E/Bit.Bmotion.Tests.E2E.csproj -c Release - name: Install Playwright Chromium - run: pwsh src/Utilities/Bmotion/Tests/Bit.Bmotion.Tests.E2E/bin/Release/net10.0/playwright.ps1 install --with-deps chromium + run: pwsh src/Utilities/Bmotion/Tests/Bit.Bmotion.Tests.E2E/bin/Release/net11.0/playwright.ps1 install --with-deps chromium - name: Run E2E tests env: diff --git a/.github/workflows/bit.ci.Bmotion.yml b/.github/workflows/bit.ci.Bmotion.yml index 0ff57df1136..d4c5648378b 100644 --- a/.github/workflows/bit.ci.Bmotion.yml +++ b/.github/workflows/bit.ci.Bmotion.yml @@ -17,7 +17,7 @@ jobs: build-Bmotion: if: startsWith(github.event.pull_request.title, 'Prerelease') != true && startsWith(github.event.pull_request.title, 'Release') != true && startsWith(github.event.pull_request.title, 'Version') != true name: build Bit.Bmotion - runs-on: ubuntu-24.04 + runs-on: ubuntu-26.04 steps: @@ -26,11 +26,16 @@ jobs: with: persist-credentials: false - - name: Setup .NET 10.0 + - name: Setup .NET 11.0 uses: actions/setup-dotnet@a98b56852c35b8e3190ac28c8c2271da59106c68 # v6.0.0 with: global-json-file: src/global.json + - name: Setup .NET 10.0 + uses: actions/setup-dotnet@a98b56852c35b8e3190ac28c8c2271da59106c68 # v6.0.0 + with: + dotnet-version: 10.0.x + - name: Setup .NET 9.0 uses: actions/setup-dotnet@a98b56852c35b8e3190ac28c8c2271da59106c68 # v6.0.0 with: @@ -50,7 +55,7 @@ jobs: - name: InstallNodejsDependencies continue-on-error: true # Error MSB4057, not all csproj files have InstallNodejsDependencies target. - run: dotnet build src/Utilities/Bmotion/Bit.Bmotion.slnx -t:InstallNodejsDependencies -m:1 -f net10.0 + run: dotnet build src/Utilities/Bmotion/Bit.Bmotion.slnx -t:InstallNodejsDependencies -m:1 -f net11.0 - name: dotnet build run: dotnet build src/Utilities/Bmotion/Bit.Bmotion.slnx @@ -58,11 +63,11 @@ jobs: - name: dotnet test (C# engine + component tests) # Run from inside src so src/global.json's "test" runner setting applies # (from the repo root the SDK falls back to the unsupported VSTest path). Every target framework the - # library ships for: .NET 8, 9 and 10 each get their own run of the suite. + # library ships for: .NET 8, 9, 10 and 11 each get their own run of the suite. run: cd src/Utilities/Bmotion/Tests/Bit.Bmotion.Tests && dotnet test --no-build - name: dotnet test (MCP server) - run: cd src/Utilities/Bmotion/Tests/Bit.Bmotion.Tests.Mcp && dotnet test -f net10.0 --no-build + run: cd src/Utilities/Bmotion/Tests/Bit.Bmotion.Tests.Mcp && dotnet test -f net11.0 --no-build - name: JS tests (bit-bmotion.js drag/scroll math) run: | diff --git a/.github/workflows/bit.ci.Bonboarding.yml b/.github/workflows/bit.ci.Bonboarding.yml index 447705b381e..a416d52869f 100644 --- a/.github/workflows/bit.ci.Bonboarding.yml +++ b/.github/workflows/bit.ci.Bonboarding.yml @@ -17,7 +17,7 @@ jobs: build-Bonboarding: if: startsWith(github.event.pull_request.title, 'Prerelease') != true && startsWith(github.event.pull_request.title, 'Release') != true && startsWith(github.event.pull_request.title, 'Version') != true name: build Bit.Bonboarding - runs-on: ubuntu-24.04 + runs-on: ubuntu-26.04 steps: @@ -26,11 +26,16 @@ jobs: with: persist-credentials: false - - name: Setup .NET 10.0 + - name: Setup .NET 11.0 uses: actions/setup-dotnet@a98b56852c35b8e3190ac28c8c2271da59106c68 # v6.0.0 with: global-json-file: src/global.json + - name: Setup .NET 10.0 + uses: actions/setup-dotnet@a98b56852c35b8e3190ac28c8c2271da59106c68 # v6.0.0 + with: + dotnet-version: 10.0.x + - name: Setup .NET 9.0 uses: actions/setup-dotnet@a98b56852c35b8e3190ac28c8c2271da59106c68 # v6.0.0 with: diff --git a/.github/workflows/bit.ci.Borm.e2e.yml b/.github/workflows/bit.ci.Borm.e2e.yml index 6afc49bc786..5a5c82d326b 100644 --- a/.github/workflows/bit.ci.Borm.e2e.yml +++ b/.github/workflows/bit.ci.Borm.e2e.yml @@ -17,7 +17,7 @@ jobs: e2e: name: Borm E2E (Chromium) - runs-on: ubuntu-24.04 + runs-on: ubuntu-26.04 timeout-minutes: 60 steps: @@ -27,7 +27,7 @@ jobs: with: persist-credentials: false - - name: Setup .NET 10.0 + - name: Setup .NET 11.0 uses: actions/setup-dotnet@a98b56852c35b8e3190ac28c8c2271da59106c68 # v6.0.0 with: global-json-file: src/global.json @@ -45,7 +45,7 @@ jobs: dotnet build src/Utilities/Borm/Tests/Bit.Borm.Tests.E2E/Bit.Borm.Tests.E2E.csproj -c Release - name: Install Playwright Chromium - run: pwsh src/Utilities/Borm/Tests/Bit.Borm.Tests.E2E/bin/Release/net10.0/playwright.ps1 install --with-deps chromium + run: pwsh src/Utilities/Borm/Tests/Bit.Borm.Tests.E2E/bin/Release/net11.0/playwright.ps1 install --with-deps chromium - name: Run E2E tests # Run from inside src so src/global.json's Microsoft.Testing.Platform runner setting applies. diff --git a/.github/workflows/bit.ci.Borm.yml b/.github/workflows/bit.ci.Borm.yml index 22a26d0032f..4f6bc054b27 100644 --- a/.github/workflows/bit.ci.Borm.yml +++ b/.github/workflows/bit.ci.Borm.yml @@ -19,7 +19,7 @@ jobs: build-Borm: if: startsWith(github.event.pull_request.title, 'Prerelease') != true && startsWith(github.event.pull_request.title, 'Release') != true && startsWith(github.event.pull_request.title, 'Version') != true name: build Bit.Borm - runs-on: ubuntu-24.04 + runs-on: ubuntu-26.04 steps: @@ -28,11 +28,16 @@ jobs: with: persist-credentials: false - - name: Setup .NET 10.0 + - name: Setup .NET 11.0 uses: actions/setup-dotnet@a98b56852c35b8e3190ac28c8c2271da59106c68 # v6.0.0 with: global-json-file: src/global.json + - name: Setup .NET 10.0 + uses: actions/setup-dotnet@a98b56852c35b8e3190ac28c8c2271da59106c68 # v6.0.0 + with: + dotnet-version: 10.0.x + - name: Setup .NET 9.0 uses: actions/setup-dotnet@a98b56852c35b8e3190ac28c8c2271da59106c68 # v6.0.0 with: diff --git a/.github/workflows/bit.ci.Bortable.e2e.yml b/.github/workflows/bit.ci.Bortable.e2e.yml index f0cdb99c4ef..5bca47bcc7d 100644 --- a/.github/workflows/bit.ci.Bortable.e2e.yml +++ b/.github/workflows/bit.ci.Bortable.e2e.yml @@ -17,7 +17,7 @@ jobs: e2e: name: Bortable E2E (Chromium) - runs-on: ubuntu-24.04 + runs-on: ubuntu-26.04 timeout-minutes: 60 steps: @@ -27,7 +27,7 @@ jobs: with: persist-credentials: false - - name: Setup .NET 10.0 + - name: Setup .NET 11.0 uses: actions/setup-dotnet@a98b56852c35b8e3190ac28c8c2271da59106c68 # v6.0.0 with: global-json-file: src/global.json @@ -45,7 +45,7 @@ jobs: dotnet build src/Utilities/Bortable/Tests/Bit.Bortable.Tests.E2E/Bit.Bortable.Tests.E2E.csproj -c Release - name: Install Playwright Chromium - run: pwsh src/Utilities/Bortable/Tests/Bit.Bortable.Tests.E2E/bin/Release/net10.0/playwright.ps1 install --with-deps chromium + run: pwsh src/Utilities/Bortable/Tests/Bit.Bortable.Tests.E2E/bin/Release/net11.0/playwright.ps1 install --with-deps chromium - name: Run E2E tests # Run from inside src so src/global.json's Microsoft.Testing.Platform runner setting applies. diff --git a/.github/workflows/bit.ci.Bortable.yml b/.github/workflows/bit.ci.Bortable.yml index baad2c6b142..e55e4ee239e 100644 --- a/.github/workflows/bit.ci.Bortable.yml +++ b/.github/workflows/bit.ci.Bortable.yml @@ -19,7 +19,7 @@ jobs: build-Bortable: if: startsWith(github.event.pull_request.title, 'Prerelease') != true && startsWith(github.event.pull_request.title, 'Release') != true && startsWith(github.event.pull_request.title, 'Version') != true name: build Bit.Bortable - runs-on: ubuntu-24.04 + runs-on: ubuntu-26.04 steps: @@ -28,11 +28,16 @@ jobs: with: persist-credentials: false - - name: Setup .NET 10.0 + - name: Setup .NET 11.0 uses: actions/setup-dotnet@a98b56852c35b8e3190ac28c8c2271da59106c68 # v6.0.0 with: global-json-file: src/global.json + - name: Setup .NET 10.0 + uses: actions/setup-dotnet@a98b56852c35b8e3190ac28c8c2271da59106c68 # v6.0.0 + with: + dotnet-version: 10.0.x + - name: Setup .NET 9.0 uses: actions/setup-dotnet@a98b56852c35b8e3190ac28c8c2271da59106c68 # v6.0.0 with: diff --git a/.github/workflows/bit.ci.Brouter.e2e.yml b/.github/workflows/bit.ci.Brouter.e2e.yml index c2a1d36a3e0..e9a0a2ddc19 100644 --- a/.github/workflows/bit.ci.Brouter.e2e.yml +++ b/.github/workflows/bit.ci.Brouter.e2e.yml @@ -19,11 +19,11 @@ jobs: # Chromium, on each runtime the library ships for. e2e-web: name: Brouter E2E - web render modes (${{ matrix.framework }}) - runs-on: ubuntu-24.04 + runs-on: ubuntu-26.04 strategy: fail-fast: false matrix: - framework: [ net10.0, net9.0, net8.0 ] + framework: [ net11.0, net10.0, net9.0, net8.0 ] steps: - name: Checkout source code @@ -31,11 +31,16 @@ jobs: with: persist-credentials: false - - name: Setup .NET 10.0 + - name: Setup .NET 11.0 uses: actions/setup-dotnet@a98b56852c35b8e3190ac28c8c2271da59106c68 # v6.0.0 with: global-json-file: src/global.json + - name: Setup .NET 10.0 + uses: actions/setup-dotnet@a98b56852c35b8e3190ac28c8c2271da59106c68 # v6.0.0 + with: + dotnet-version: 10.0.x + - name: Setup .NET 9.0 uses: actions/setup-dotnet@a98b56852c35b8e3190ac28c8c2271da59106c68 # v6.0.0 with: @@ -57,7 +62,7 @@ jobs: run: dotnet build src/Brouter/Tests/Bit.Brouter.Tests.E2E/Bit.Brouter.Tests.E2E.csproj -c Release - name: Install Playwright Chromium - run: pwsh src/Brouter/Tests/Bit.Brouter.Tests.E2E/bin/Release/net10.0/playwright.ps1 install --with-deps chromium + run: pwsh src/Brouter/Tests/Bit.Brouter.Tests.E2E/bin/Release/net11.0/playwright.ps1 install --with-deps chromium - name: Run E2E tests env: @@ -90,7 +95,7 @@ jobs: with: persist-credentials: false - - name: Setup .NET 10.0 + - name: Setup .NET 11.0 uses: actions/setup-dotnet@a98b56852c35b8e3190ac28c8c2271da59106c68 # v6.0.0 with: global-json-file: src/global.json @@ -145,7 +150,7 @@ jobs: # it is visible in a Debug build. publish-gate: name: Brouter publish gate (${{ matrix.name }}) - runs-on: ubuntu-24.04 + runs-on: ubuntu-26.04 strategy: fail-fast: false matrix: @@ -161,7 +166,7 @@ jobs: with: persist-credentials: false - - name: Setup .NET 10.0 + - name: Setup .NET 11.0 uses: actions/setup-dotnet@a98b56852c35b8e3190ac28c8c2271da59106c68 # v6.0.0 with: global-json-file: src/global.json @@ -181,7 +186,7 @@ jobs: run: dotnet build src/Brouter/Tests/Bit.Brouter.Tests.E2E/Bit.Brouter.Tests.E2E.csproj -c Release - name: Install Playwright Chromium - run: pwsh src/Brouter/Tests/Bit.Brouter.Tests.E2E/bin/Release/net10.0/playwright.ps1 install --with-deps chromium + run: pwsh src/Brouter/Tests/Bit.Brouter.Tests.E2E/bin/Release/net11.0/playwright.ps1 install --with-deps chromium - name: Run E2E tests against the published host env: diff --git a/.github/workflows/bit.ci.Brouter.yml b/.github/workflows/bit.ci.Brouter.yml index 1308abfb9e1..e5293b60bce 100644 --- a/.github/workflows/bit.ci.Brouter.yml +++ b/.github/workflows/bit.ci.Brouter.yml @@ -21,7 +21,7 @@ jobs: build-Brouter: if: startsWith(github.event.pull_request.title, 'Prerelease') != true && startsWith(github.event.pull_request.title, 'Release') != true && startsWith(github.event.pull_request.title, 'Version') != true name: build Bit.Brouter - runs-on: ubuntu-24.04 + runs-on: ubuntu-26.04 steps: @@ -30,11 +30,16 @@ jobs: with: persist-credentials: false - - name: Setup .NET 10.0 + - name: Setup .NET 11.0 uses: actions/setup-dotnet@a98b56852c35b8e3190ac28c8c2271da59106c68 # v6.0.0 with: global-json-file: src/global.json + - name: Setup .NET 10.0 + uses: actions/setup-dotnet@a98b56852c35b8e3190ac28c8c2271da59106c68 # v6.0.0 + with: + dotnet-version: 10.0.x + - name: Setup .NET 9.0 uses: actions/setup-dotnet@a98b56852c35b8e3190ac28c8c2271da59106c68 # v6.0.0 with: @@ -66,5 +71,5 @@ jobs: - name: dotnet test (source generator) run: cd src/Brouter/Tests/Bit.Brouter.Tests.Generators && dotnet test --no-build - - name: dotnet test (hosting - every render mode over HTTP, net8.0/net9.0/net10.0) + - name: dotnet test (hosting - every render mode over HTTP, net8.0/net9.0/net10.0/net11.0) run: cd src/Brouter/Tests/Bit.Brouter.Tests.Hosting && dotnet test --no-build diff --git a/.github/workflows/bit.ci.Bsqlite.e2e.yml b/.github/workflows/bit.ci.Bsqlite.e2e.yml index 50a04ac45a0..ce5fd562b54 100644 --- a/.github/workflows/bit.ci.Bsqlite.e2e.yml +++ b/.github/workflows/bit.ci.Bsqlite.e2e.yml @@ -19,7 +19,7 @@ jobs: # page of the demo website, against the demo published the way it ships. e2e: name: Bsqlite E2E (Chromium) - runs-on: ubuntu-24.04 + runs-on: ubuntu-26.04 timeout-minutes: 60 steps: @@ -29,11 +29,16 @@ jobs: with: persist-credentials: false - - name: Setup .NET 10.0 + - name: Setup .NET 11.0 uses: actions/setup-dotnet@a98b56852c35b8e3190ac28c8c2271da59106c68 # v6.0.0 with: global-json-file: src/global.json + - name: Setup .NET 10.0 + uses: actions/setup-dotnet@a98b56852c35b8e3190ac28c8c2271da59106c68 # v6.0.0 + with: + dotnet-version: 10.0.x + - name: Setup .NET 9.0 uses: actions/setup-dotnet@a98b56852c35b8e3190ac28c8c2271da59106c68 # v6.0.0 with: @@ -64,7 +69,7 @@ jobs: run: dotnet build src/Utilities/Bsqlite/Tests/Bit.Bsqlite.Tests.E2E/Bit.Bsqlite.Tests.E2E.csproj -c Release - name: Install Playwright Chromium - run: pwsh src/Utilities/Bsqlite/Tests/Bit.Bsqlite.Tests.E2E/bin/Release/net10.0/playwright.ps1 install --with-deps chromium + run: pwsh src/Utilities/Bsqlite/Tests/Bit.Bsqlite.Tests.E2E/bin/Release/net11.0/playwright.ps1 install --with-deps chromium - name: Start the published demo run: | diff --git a/.github/workflows/bit.ci.Bsqlite.yml b/.github/workflows/bit.ci.Bsqlite.yml index f3fbbca6d8f..61ed5a25d6e 100644 --- a/.github/workflows/bit.ci.Bsqlite.yml +++ b/.github/workflows/bit.ci.Bsqlite.yml @@ -22,7 +22,7 @@ jobs: build-Bsqlite: if: startsWith(github.event.pull_request.title, 'Prerelease') != true && startsWith(github.event.pull_request.title, 'Release') != true && startsWith(github.event.pull_request.title, 'Version') != true name: build Bit.Bsqlite - runs-on: ubuntu-24.04 + runs-on: ubuntu-26.04 steps: @@ -31,11 +31,16 @@ jobs: with: persist-credentials: false - - name: Setup .NET 10.0 + - name: Setup .NET 11.0 uses: actions/setup-dotnet@a98b56852c35b8e3190ac28c8c2271da59106c68 # v6.0.0 with: global-json-file: src/global.json + - name: Setup .NET 10.0 + uses: actions/setup-dotnet@a98b56852c35b8e3190ac28c8c2271da59106c68 # v6.0.0 + with: + dotnet-version: 10.0.x + - name: Setup .NET 9.0 uses: actions/setup-dotnet@a98b56852c35b8e3190ac28c8c2271da59106c68 # v6.0.0 with: @@ -59,7 +64,7 @@ jobs: - name: dotnet build run: dotnet build src/Utilities/Bsqlite/Bit.Bsqlite.slnx - - name: dotnet test (ADO.NET, EF Core and storage tests, net8.0/net9.0/net10.0) + - name: dotnet test (ADO.NET, EF Core and storage tests, net8.0/net9.0/net10.0/net11.0) # Run from inside src so src/global.json's "test" runner setting applies # (from the repo root the SDK falls back to the unsupported VSTest path). run: cd src/Utilities/Bsqlite/Tests/Bit.Bsqlite.Tests && dotnet test --no-build diff --git a/.github/workflows/bit.ci.Bswup.e2e.yml b/.github/workflows/bit.ci.Bswup.e2e.yml index 7e2bdf05479..25b1f06993c 100644 --- a/.github/workflows/bit.ci.Bswup.e2e.yml +++ b/.github/workflows/bit.ci.Bswup.e2e.yml @@ -20,11 +20,11 @@ jobs: # library ships for. e2e-web: name: Bswup E2E - browser (${{ matrix.framework }}) - runs-on: ubuntu-24.04 + runs-on: ubuntu-26.04 strategy: fail-fast: false matrix: - framework: [ net10.0, net9.0, net8.0 ] + framework: [ net11.0, net10.0, net9.0, net8.0 ] steps: - name: Checkout source code @@ -32,11 +32,16 @@ jobs: with: persist-credentials: false - - name: Setup .NET 10.0 + - name: Setup .NET 11.0 uses: actions/setup-dotnet@a98b56852c35b8e3190ac28c8c2271da59106c68 # v6.0.0 with: global-json-file: src/global.json + - name: Setup .NET 10.0 + uses: actions/setup-dotnet@a98b56852c35b8e3190ac28c8c2271da59106c68 # v6.0.0 + with: + dotnet-version: 10.0.x + - name: Setup .NET 9.0 uses: actions/setup-dotnet@a98b56852c35b8e3190ac28c8c2271da59106c68 # v6.0.0 with: @@ -58,7 +63,7 @@ jobs: run: dotnet build src/Bswup/Tests/Bit.Bswup.Tests.E2E/Bit.Bswup.Tests.E2E.csproj -c Release - name: Install Playwright Chromium - run: pwsh src/Bswup/Tests/Bit.Bswup.Tests.E2E/bin/Release/net10.0/playwright.ps1 install --with-deps chromium + run: pwsh src/Bswup/Tests/Bit.Bswup.Tests.E2E/bin/Release/net11.0/playwright.ps1 install --with-deps chromium - name: Run E2E tests env: @@ -85,7 +90,7 @@ jobs: # hashes the published manifest carries, which a Debug build never shows. publish-gate: name: Bswup publish gate - runs-on: ubuntu-24.04 + runs-on: ubuntu-26.04 steps: - name: Checkout source code @@ -93,7 +98,7 @@ jobs: with: persist-credentials: false - - name: Setup .NET 10.0 + - name: Setup .NET 11.0 uses: actions/setup-dotnet@a98b56852c35b8e3190ac28c8c2271da59106c68 # v6.0.0 with: global-json-file: src/global.json @@ -102,18 +107,18 @@ jobs: with: node-version: 24 - # TargetFrameworks=net10.0 on top of -f: -f alone does not reach project references, which then still + # TargetFrameworks=net11.0 on top of -f: -f alone does not reach project references, which then still # evaluate (and, without their SDKs installed, fail on) every framework they target. - name: Publish the harness host run: > dotnet publish src/Bswup/Tests/Bit.Bswup.Tests.Harness.Web/Bit.Bswup.Tests.Harness.Web.csproj - -c Release -f net10.0 -p:TargetFrameworks=net10.0 -o ${{ github.workspace }}/artifacts/bswup-harness + -c Release -f net11.0 -p:TargetFrameworks=net11.0 -o ${{ github.workspace }}/artifacts/bswup-harness - name: Build the E2E suite run: dotnet build src/Bswup/Tests/Bit.Bswup.Tests.E2E/Bit.Bswup.Tests.E2E.csproj -c Release - name: Install Playwright Chromium - run: pwsh src/Bswup/Tests/Bit.Bswup.Tests.E2E/bin/Release/net10.0/playwright.ps1 install --with-deps chromium + run: pwsh src/Bswup/Tests/Bit.Bswup.Tests.E2E/bin/Release/net11.0/playwright.ps1 install --with-deps chromium - name: Run E2E tests against the published host env: diff --git a/.github/workflows/bit.ci.Bswup.yml b/.github/workflows/bit.ci.Bswup.yml index 736daa40bb8..63fcde68fb4 100644 --- a/.github/workflows/bit.ci.Bswup.yml +++ b/.github/workflows/bit.ci.Bswup.yml @@ -21,7 +21,7 @@ jobs: build-Bswup: if: startsWith(github.event.pull_request.title, 'Prerelease') != true && startsWith(github.event.pull_request.title, 'Release') != true && startsWith(github.event.pull_request.title, 'Version') != true name: build Bit.Bswup - runs-on: ubuntu-24.04 + runs-on: ubuntu-26.04 steps: @@ -30,11 +30,16 @@ jobs: with: persist-credentials: false - - name: Setup .NET 10.0 + - name: Setup .NET 11.0 uses: actions/setup-dotnet@a98b56852c35b8e3190ac28c8c2271da59106c68 # v6.0.0 with: global-json-file: src/global.json + - name: Setup .NET 10.0 + uses: actions/setup-dotnet@a98b56852c35b8e3190ac28c8c2271da59106c68 # v6.0.0 + with: + dotnet-version: 10.0.x + - name: Setup .NET 9.0 uses: actions/setup-dotnet@a98b56852c35b8e3190ac28c8c2271da59106c68 # v6.0.0 with: @@ -60,15 +65,15 @@ jobs: - name: InstallNodejsDependencies continue-on-error: true # Error MSB4057, not all csproj files have InstallNodejsDependencies target. - run: dotnet build src/Bswup/Bit.Bswup.slnx -t:InstallNodejsDependencies -m:1 -f net10.0 + run: dotnet build src/Bswup/Bit.Bswup.slnx -t:InstallNodejsDependencies -m:1 -f net11.0 - name: dotnet build run: dotnet build src/Bswup/Bit.Bswup.slnx - name: dotnet test (MCP server) - run: cd src/Bswup/Tests/Bit.Bswup.Tests.Mcp && dotnet test -f net10.0 --no-build + run: cd src/Bswup/Tests/Bit.Bswup.Tests.Mcp && dotnet test -f net11.0 --no-build - - name: dotnet test (hosting - served assets, host documents and BswupProgress over HTTP, net8.0/net9.0/net10.0) + - name: dotnet test (hosting - served assets, host documents and BswupProgress over HTTP, net8.0/net9.0/net10.0/net11.0) run: cd src/Bswup/Tests/Bit.Bswup.Tests.Hosting && dotnet test --no-build # Runs against Bit.Bswup/wwwroot/*.js, which the build above produces, so this also covers diff --git a/.github/workflows/bit.ci.Butil.e2e.yml b/.github/workflows/bit.ci.Butil.e2e.yml index 0655e9e6b5a..411404b22a4 100644 --- a/.github/workflows/bit.ci.Butil.e2e.yml +++ b/.github/workflows/bit.ci.Butil.e2e.yml @@ -1,7 +1,7 @@ name: bit platform CI - Butil E2E # The cross-host suites: the standalone WebAssembly sample and every Blazor Web App render mode in Chromium (on -# net10.0/net9.0/net8.0 where the runtime is what differs), Blazor Hybrid in WebView2, and trimmed/AOT publishes. +# net11.0/net10.0/net9.0/net8.0 where the runtime is what differs), Blazor Hybrid in WebView2, and trimmed/AOT publishes. # They take far longer than the build, MCP and hosting pipeline (bit.ci.Butil.yml), so they run only when started # by hand. Every job runs the same suite against a different host (BUTIL_E2E_HOST); see # src/Butil/tests/Bit.Butil.Tests.E2E/README.md for what each host proves and how to run the same thing locally. @@ -21,18 +21,20 @@ jobs: # and without prerendering) in Chromium - on every runtime the library ships for where the runtime is what differs. e2e-web: name: Butil E2E - ${{ matrix.host }} (${{ matrix.framework }}) - runs-on: ubuntu-24.04 + runs-on: ubuntu-26.04 strategy: fail-fast: false matrix: include: - - { host: standalone, framework: net10.0 } + - { host: standalone, framework: net11.0 } + - { host: server, framework: net11.0 } + - { host: server-noprerender, framework: net11.0 } + - { host: wasm, framework: net11.0 } + - { host: wasm-noprerender, framework: net11.0 } + - { host: auto, framework: net11.0 } + - { host: auto-noprerender, framework: net11.0 } - { host: server, framework: net10.0 } - - { host: server-noprerender, framework: net10.0 } - { host: wasm, framework: net10.0 } - - { host: wasm-noprerender, framework: net10.0 } - - { host: auto, framework: net10.0 } - - { host: auto-noprerender, framework: net10.0 } - { host: server, framework: net9.0 } - { host: wasm, framework: net9.0 } - { host: server, framework: net8.0 } @@ -44,11 +46,16 @@ jobs: with: persist-credentials: false - - name: Setup .NET 10.0 + - name: Setup .NET 11.0 uses: actions/setup-dotnet@a98b56852c35b8e3190ac28c8c2271da59106c68 # v6.0.0 with: global-json-file: src/global.json + - name: Setup .NET 10.0 + uses: actions/setup-dotnet@a98b56852c35b8e3190ac28c8c2271da59106c68 # v6.0.0 + with: + dotnet-version: 10.0.x + - name: Setup .NET 9.0 uses: actions/setup-dotnet@a98b56852c35b8e3190ac28c8c2271da59106c68 # v6.0.0 with: @@ -72,7 +79,7 @@ jobs: run: dotnet build src/Butil/tests/Bit.Butil.Tests.E2E/Bit.Butil.Tests.E2E.csproj -c Release - name: Install Playwright Chromium - run: pwsh src/Butil/tests/Bit.Butil.Tests.E2E/bin/Release/net10.0/playwright.ps1 install --with-deps chromium + run: pwsh src/Butil/tests/Bit.Butil.Tests.E2E/bin/Release/net11.0/playwright.ps1 install --with-deps chromium - name: Run E2E tests env: @@ -105,7 +112,7 @@ jobs: with: persist-credentials: false - - name: Setup .NET 10.0 + - name: Setup .NET 11.0 uses: actions/setup-dotnet@a98b56852c35b8e3190ac28c8c2271da59106c68 # v6.0.0 with: global-json-file: src/global.json @@ -161,7 +168,7 @@ jobs: # it is visible in a Debug build. publish-gate: name: Butil publish gate (${{ matrix.name }}) - runs-on: ubuntu-24.04 + runs-on: ubuntu-26.04 strategy: fail-fast: false matrix: @@ -177,7 +184,7 @@ jobs: with: persist-credentials: false - - name: Setup .NET 10.0 + - name: Setup .NET 11.0 uses: actions/setup-dotnet@a98b56852c35b8e3190ac28c8c2271da59106c68 # v6.0.0 with: global-json-file: src/global.json @@ -197,7 +204,7 @@ jobs: run: dotnet build src/Butil/tests/Bit.Butil.Tests.E2E/Bit.Butil.Tests.E2E.csproj -c Release - name: Install Playwright Chromium - run: pwsh src/Butil/tests/Bit.Butil.Tests.E2E/bin/Release/net10.0/playwright.ps1 install --with-deps chromium + run: pwsh src/Butil/tests/Bit.Butil.Tests.E2E/bin/Release/net11.0/playwright.ps1 install --with-deps chromium - name: Run E2E tests against the published host env: diff --git a/.github/workflows/bit.ci.Butil.yml b/.github/workflows/bit.ci.Butil.yml index e051eec3598..453754a5c92 100644 --- a/.github/workflows/bit.ci.Butil.yml +++ b/.github/workflows/bit.ci.Butil.yml @@ -22,7 +22,7 @@ jobs: build-Butil: if: startsWith(github.event.pull_request.title, 'Prerelease') != true && startsWith(github.event.pull_request.title, 'Release') != true && startsWith(github.event.pull_request.title, 'Version') != true name: build Bit.Butil - runs-on: ubuntu-24.04 + runs-on: ubuntu-26.04 steps: @@ -31,11 +31,16 @@ jobs: with: persist-credentials: false - - name: Setup .NET 10.0 + - name: Setup .NET 11.0 uses: actions/setup-dotnet@a98b56852c35b8e3190ac28c8c2271da59106c68 # v6.0.0 with: global-json-file: src/global.json + - name: Setup .NET 10.0 + uses: actions/setup-dotnet@a98b56852c35b8e3190ac28c8c2271da59106c68 # v6.0.0 + with: + dotnet-version: 10.0.x + - name: Setup .NET 9.0 uses: actions/setup-dotnet@a98b56852c35b8e3190ac28c8c2271da59106c68 # v6.0.0 with: @@ -84,7 +89,7 @@ jobs: path: '**/butil-mcp.trx' if-no-files-found: ignore - # Every render mode of the Blazor Web App harness host over HTTP, on net8.0/net9.0/net10.0: the prerendered + # Every render mode of the Blazor Web App harness host over HTTP, on net8.0/net9.0/net10.0/net11.0: the prerendered # pages, the served scripts, and every member of every service called during a static render. Browser, hybrid # and trimmed/AOT publish coverage is in bit.ci.Butil.e2e.yml. - name: Hosting tests diff --git a/.github/workflows/bit.ci.Cli.yml b/.github/workflows/bit.ci.Cli.yml index 3571a94ebf7..0d2606ca781 100644 --- a/.github/workflows/bit.ci.Cli.yml +++ b/.github/workflows/bit.ci.Cli.yml @@ -27,7 +27,7 @@ jobs: strategy: fail-fast: false matrix: - os: [ ubuntu-24.04, windows-2025, macOS-26 ] + os: [ ubuntu-26.04, windows-2025, macOS-26 ] steps: @@ -36,7 +36,7 @@ jobs: with: persist-credentials: false - - name: Setup .NET 10.0 + - name: Setup .NET 11.0 uses: actions/setup-dotnet@a98b56852c35b8e3190ac28c8c2271da59106c68 # v6.0.0 with: global-json-file: src/global.json diff --git a/.github/workflows/bit.ci.CodeAnalyzers.yml b/.github/workflows/bit.ci.CodeAnalyzers.yml index 65ff6cccd9d..4c92b02c6fc 100644 --- a/.github/workflows/bit.ci.CodeAnalyzers.yml +++ b/.github/workflows/bit.ci.CodeAnalyzers.yml @@ -17,7 +17,7 @@ jobs: build-CodeAnalyzers: if: startsWith(github.event.pull_request.title, 'Prerelease') != true && startsWith(github.event.pull_request.title, 'Release') != true && startsWith(github.event.pull_request.title, 'Version') != true name: build Bit.CodeAnalyzers - runs-on: ubuntu-24.04 + runs-on: ubuntu-26.04 steps: @@ -26,7 +26,7 @@ jobs: with: persist-credentials: false - - name: Setup .NET 10.0 + - name: Setup .NET 11.0 uses: actions/setup-dotnet@a98b56852c35b8e3190ac28c8c2271da59106c68 # v6.0.0 with: global-json-file: src/global.json diff --git a/.github/workflows/bit.ci.Minifier.yml b/.github/workflows/bit.ci.Minifier.yml index 79d4b9a4455..5a3c23e3889 100644 --- a/.github/workflows/bit.ci.Minifier.yml +++ b/.github/workflows/bit.ci.Minifier.yml @@ -17,7 +17,7 @@ jobs: build-Minifier: if: startsWith(github.event.pull_request.title, 'Prerelease') != true && startsWith(github.event.pull_request.title, 'Release') != true && startsWith(github.event.pull_request.title, 'Version') != true name: build Bit.Minifier - runs-on: ubuntu-24.04 + runs-on: ubuntu-26.04 steps: @@ -26,7 +26,7 @@ jobs: with: persist-credentials: false - - name: Setup .NET 10.0 + - name: Setup .NET 11.0 uses: actions/setup-dotnet@a98b56852c35b8e3190ac28c8c2271da59106c68 # v6.0.0 with: global-json-file: src/global.json diff --git a/.github/workflows/bit.ci.SourceGenerators.yml b/.github/workflows/bit.ci.SourceGenerators.yml index e77ff29ac3a..e8993b5bb1e 100644 --- a/.github/workflows/bit.ci.SourceGenerators.yml +++ b/.github/workflows/bit.ci.SourceGenerators.yml @@ -17,7 +17,7 @@ jobs: build-SourceGenerators: if: startsWith(github.event.pull_request.title, 'Prerelease') != true && startsWith(github.event.pull_request.title, 'Release') != true && startsWith(github.event.pull_request.title, 'Version') != true name: build Bit.SourceGenerators - runs-on: ubuntu-24.04 + runs-on: ubuntu-26.04 steps: @@ -26,7 +26,7 @@ jobs: with: persist-credentials: false - - name: Setup .NET 10.0 + - name: Setup .NET 11.0 uses: actions/setup-dotnet@a98b56852c35b8e3190ac28c8c2271da59106c68 # v6.0.0 with: global-json-file: src/global.json diff --git a/.github/workflows/bit.ci.Templates.yml b/.github/workflows/bit.ci.Templates.yml index a48e7dc5bbd..86ab28c5e10 100644 --- a/.github/workflows/bit.ci.Templates.yml +++ b/.github/workflows/bit.ci.Templates.yml @@ -25,7 +25,7 @@ jobs: build-Templates: if: startsWith(github.event.pull_request.title, 'Prerelease') != true && startsWith(github.event.pull_request.title, 'Release') != true && startsWith(github.event.pull_request.title, 'Version') != true name: build Bit.Templates - runs-on: ubuntu-24.04 + runs-on: ubuntu-26.04 steps: @@ -34,7 +34,7 @@ jobs: with: persist-credentials: false - - name: Setup .NET 10.0 + - name: Setup .NET 11.0 uses: actions/setup-dotnet@a98b56852c35b8e3190ac28c8c2271da59106c68 # v6.0.0 with: global-json-file: src/global.json diff --git a/.github/workflows/bit.ci.Websites.yml b/.github/workflows/bit.ci.Websites.yml index ead31290e8f..1f8e39fc311 100644 --- a/.github/workflows/bit.ci.Websites.yml +++ b/.github/workflows/bit.ci.Websites.yml @@ -23,7 +23,7 @@ jobs: build-Websites: if: startsWith(github.event.pull_request.title, 'Prerelease') != true && startsWith(github.event.pull_request.title, 'Release') != true && startsWith(github.event.pull_request.title, 'Version') != true name: build Bit.Websites - runs-on: ubuntu-24.04 + runs-on: ubuntu-26.04 steps: @@ -32,7 +32,7 @@ jobs: with: persist-credentials: false - - name: Setup .NET 10.0 + - name: Setup .NET 11.0 uses: actions/setup-dotnet@a98b56852c35b8e3190ac28c8c2271da59106c68 # v6.0.0 with: global-json-file: src/global.json diff --git a/.github/workflows/bit.ci.release.yml b/.github/workflows/bit.ci.release.yml index 34017a37be7..0a5e843825d 100644 --- a/.github/workflows/bit.ci.release.yml +++ b/.github/workflows/bit.ci.release.yml @@ -15,7 +15,7 @@ jobs: build-release: if: startsWith(github.event.pull_request.title, 'Prerelease') || startsWith(github.event.pull_request.title, 'Release') || startsWith(github.event.pull_request.title, 'Version') name: build and test for release - runs-on: ubuntu-24.04 + runs-on: ubuntu-26.04 steps: @@ -24,11 +24,16 @@ jobs: with: persist-credentials: false - - name: Setup .NET 10.0 + - name: Setup .NET 11.0 uses: actions/setup-dotnet@a98b56852c35b8e3190ac28c8c2271da59106c68 # v6.0.0 with: global-json-file: src/global.json + - name: Setup .NET 10.0 + uses: actions/setup-dotnet@a98b56852c35b8e3190ac28c8c2271da59106c68 # v6.0.0 + with: + dotnet-version: 10.0.x + - name: Setup .NET 9.0 uses: actions/setup-dotnet@a98b56852c35b8e3190ac28c8c2271da59106c68 # v6.0.0 with: @@ -48,7 +53,7 @@ jobs: - name: InstallNodejsDependencies continue-on-error: true # Error MSB4057, not all csproj files have InstallNodejsDependencies target. - run: dotnet build src/Bit.CI.Release.slnx -t:InstallNodejsDependencies -m:1 -f net10.0 + run: dotnet build src/Bit.CI.Release.slnx -t:InstallNodejsDependencies -m:1 -f net11.0 - name: dotnet build run: dotnet build src/Bit.CI.Release.slnx -c Release diff --git a/.github/workflows/blazedb.demo.cd.yml b/.github/workflows/blazedb.demo.cd.yml index 7c89dd463d5..52a4fc4190f 100644 --- a/.github/workflows/blazedb.demo.cd.yml +++ b/.github/workflows/blazedb.demo.cd.yml @@ -11,7 +11,7 @@ jobs: build_blazor_wasm: name: build blazor wasm - runs-on: ubuntu-24.04 + runs-on: ubuntu-26.04 steps: diff --git a/.github/workflows/blazorui.demo.cd.yml b/.github/workflows/blazorui.demo.cd.yml index 8411532379f..e5607780e07 100644 --- a/.github/workflows/blazorui.demo.cd.yml +++ b/.github/workflows/blazorui.demo.cd.yml @@ -25,6 +25,10 @@ on: description: iOS app type: boolean default: true + windows_stores: + description: For WinGet and the Microsoft Store, sign every file of the Windows app, keep its installer at a URL of its own version and submit that version to both + type: boolean + default: false workflow_call: inputs: server: @@ -39,6 +43,9 @@ on: ios: type: boolean default: true + windows_stores: + type: boolean + default: false permissions: contents: read @@ -201,13 +208,13 @@ jobs: run: | @{ Endpoint = '${{ vars.CODE_SIGNING_ENDPOINT }}'; CodeSigningAccountName = '${{ vars.CODE_SIGNING_ACCOUNT }}'; CertificateProfileName = '${{ vars.CODE_SIGNING_CERTIFICATE_PROFILE }}'; ExcludeCredentials = @('ManagedIdentityCredential', 'WorkloadIdentityCredential', 'SharedTokenCacheCredential', 'VisualStudioCredential', 'VisualStudioCodeCredential') } | ConvertTo-Json | Set-Content "$env:RUNNER_TEMP\code-signing.json" "VPK_AZURE_TRUSTED_SIGN_FILE=$env:RUNNER_TEMP\code-signing.json" >> $env:GITHUB_ENV - 'VPK_SIGN_EXCLUDE=\.dll$' >> $env:GITHUB_ENV + if ('${{ inputs.windows_stores }}' -ne 'true') { 'VPK_SIGN_EXCLUDE=\.dll$' >> $env:GITHUB_ENV } - name: Publish run: | cd src\BlazorUI\Demo\Client\Bit.BlazorUI.Demo.Client.Windows\ dotnet publish Bit.BlazorUI.Demo.Client.Windows.csproj -c Release -o .\publish-result -r win-x86 -p:Version="${{ vars.APP_VERSION}}" -p:CompressionEnabled=false -p:PublishReadyToRun=true -p:PublishReadyToRunComposite=true --self-contained - vpk pack -u Bit.BlazorUI.Demo.Client.Windows -v "${{ vars.APP_VERSION }}" -p .\publish-result -e Bit.BlazorUI.Demo.Client.Windows.exe -r win-x86 --framework webview2 --icon .\wwwroot\favicon.ico --packTitle 'Bit Blazor UI' + vpk pack -u Bit.BlazorUI.Demo.Client.Windows -v "${{ vars.APP_VERSION }}" -p .\publish-result -e Bit.BlazorUI.Demo.Client.Windows.exe -r win-x86 --framework webview2 --icon .\wwwroot\favicon.ico --packTitle 'Bit Blazor UI' --packAuthors BitPlatform - name: Attest the installer and packages uses: actions/attest-build-provenance@4d101475d8b20a2381f78447822ac1eab6504dd8 # v4.2.2 @@ -223,10 +230,55 @@ jobs: cd src\BlazorUI\Demo\Client\Bit.BlazorUI.Demo.Client.Windows\ vpk upload s3 --endpoint ${{ vars.R2_ENDPOINT }} --bucket ${{ env.R2_BUCKET }} --keyId ${{ secrets.R2_ACCESS_KEY_ID }} --secret ${{ secrets.R2_SECRET_ACCESS_KEY }} -o .\Releases --keepMaxReleases 10 + - name: Upload this version's installer to R2 + if: inputs.windows_stores + env: + AWS_ACCESS_KEY_ID: ${{ secrets.R2_ACCESS_KEY_ID }} + AWS_SECRET_ACCESS_KEY: ${{ secrets.R2_SECRET_ACCESS_KEY }} + AWS_DEFAULT_REGION: auto + AWS_REQUEST_CHECKSUM_CALCULATION: WHEN_REQUIRED + AWS_RESPONSE_CHECKSUM_VALIDATION: WHEN_REQUIRED + run: | + $key = "${{ vars.APP_VERSION }}/Bit.BlazorUI.Demo.Client.Windows-win-Setup.exe" + aws s3api head-object --bucket ${{ env.R2_BUCKET }} --key $key --endpoint-url ${{ vars.R2_ENDPOINT }} *> $null + if ($LASTEXITCODE -eq 0) { throw "$key is already on R2, and WinGet and the Microsoft Store need it unchanged. Raise APP_VERSION." } + aws s3 cp src\BlazorUI\Demo\Client\Bit.BlazorUI.Demo.Client.Windows\Releases\Bit.BlazorUI.Demo.Client.Windows-win-Setup.exe "s3://${{ env.R2_BUCKET }}/$key" --endpoint-url ${{ vars.R2_ENDPOINT }} + "::notice title=Installer::https://windows-components.bitplatform.dev/$key" + + - name: Submit this version to WinGet + if: inputs.windows_stores + uses: ./.github/actions/submit-to-winget + with: + id: BitPlatform.BlazorUI + version: ${{ vars.APP_VERSION }} + installer: src\BlazorUI\Demo\Client\Bit.BlazorUI.Demo.Client.Windows\Releases\Bit.BlazorUI.Demo.Client.Windows-win-Setup.exe + installer-url: https://windows-components.bitplatform.dev/${{ vars.APP_VERSION }}/Bit.BlazorUI.Demo.Client.Windows-win-Setup.exe + architecture: x86 + product-code: Bit.BlazorUI.Demo.Client.Windows + name: BlazorUI + short-description: The demo app of bit BlazorUI, a library of native Blazor UI components. + package-url: https://blazorui.bitplatform.dev + token: ${{ secrets.WINGET_TOKEN }} + + - name: Set up the Microsoft Store CLI + if: inputs.windows_stores + uses: microsoft/microsoft-store-apppublisher@cc9910a8d59f2eb55cbb83df0a3800cf3b5300e0 # v1.4 + with: + version: v0.4.3 + + - name: Submit this version to the Microsoft Store + if: inputs.windows_stores + run: | + $PSNativeCommandUseErrorActionPreference = $true + msstore reconfigure --tenantId ${{ secrets.MSSTORE_TENANT_ID }} --sellerId ${{ secrets.MSSTORE_SELLER_ID }} --clientId ${{ secrets.MSSTORE_CLIENT_ID }} --clientSecret ${{ secrets.MSSTORE_CLIENT_SECRET }} + $package = @{ packages = @(@{ packageUrl = "https://windows-components.bitplatform.dev/${{ vars.APP_VERSION }}/Bit.BlazorUI.Demo.Client.Windows-win-Setup.exe"; languages = @('en'); architectures = @('X86'); installerParameters = '--silent'; isSilentInstall = $true }) } | ConvertTo-Json -Depth 4 -Compress + msstore submission update ${{ vars.BLAZORUI_MSSTORE_PRODUCT_ID }} $package + msstore submission publish ${{ vars.BLAZORUI_MSSTORE_PRODUCT_ID }} + build_blazor_hybrid_android: name: build blazor hybrid (android) if: inputs.android - runs-on: ubuntu-24.04 + runs-on: ubuntu-26.04 permissions: contents: read actions: read @@ -270,14 +322,14 @@ jobs: run: ${ANDROID_SDK_ROOT}/cmdline-tools/latest/bin/sdkmanager --sdk_root=$ANDROID_SDK_ROOT "platform-tools" - name: Publish aab - run: dotnet publish src/BlazorUI/Demo/Client/Bit.BlazorUI.Demo.Client.Maui/Bit.BlazorUI.Demo.Client.Maui.csproj -c Release -p:AndroidPackageFormats=aab%3Bapk -p:AndroidKeyStore=true -p:AndroidSigningKeyStore="BitBlazorUIDemo.keystore" -p:AndroidSigningKeyAlias=bitplatform -p:AndroidSigningKeyPass="${{ secrets.ANDROID_RELEASE_KEYSTORE_PASSWORD }}" -p:AndroidSigningStorePass="${{ secrets.ANDROID_RELEASE_SIGNING_PASSWORD }}" -p:Version="${{ vars.APP_VERSION }}" -p:CompressionEnabled=false -f net10.0-android + run: dotnet publish src/BlazorUI/Demo/Client/Bit.BlazorUI.Demo.Client.Maui/Bit.BlazorUI.Demo.Client.Maui.csproj -c Release -p:AndroidPackageFormats=aab%3Bapk -p:AndroidKeyStore=true -p:AndroidSigningKeyStore="BitBlazorUIDemo.keystore" -p:AndroidSigningKeyAlias=bitplatform -p:AndroidSigningKeyPass="${{ secrets.ANDROID_RELEASE_KEYSTORE_PASSWORD }}" -p:AndroidSigningStorePass="${{ secrets.ANDROID_RELEASE_SIGNING_PASSWORD }}" -p:Version="${{ vars.APP_VERSION }}" -p:CompressionEnabled=false -f net11.0-android - name: Upload artifact id: artifact uses: actions/upload-artifact@cf430e030ddbb5b0abf93d22962f4752f3646cd9 # v7.0.2 with: name: android-bundle - path: src/BlazorUI/Demo/Client/Bit.BlazorUI.Demo.Client.Maui/bin/Release/net10.0-android/*-Signed.apk + path: src/BlazorUI/Demo/Client/Bit.BlazorUI.Demo.Client.Maui/bin/Release/net11.0-android/*-Signed.apk - name: Attest artifact uses: actions/attest-build-provenance@4d101475d8b20a2381f78447822ac1eab6504dd8 # v4.2.2 @@ -291,7 +343,7 @@ jobs: with: serviceAccountJsonPlainText: ${{ secrets.GOOGLE_PLAY_SERVICE_ACCOUNT_JSON }} packageName: ${{ env.APP_BUNDLE_ID }} - releaseFiles: src/BlazorUI/Demo/Client/Bit.BlazorUI.Demo.Client.Maui/bin/Release/net10.0-android/*-Signed.aab + releaseFiles: src/BlazorUI/Demo/Client/Bit.BlazorUI.Demo.Client.Maui/bin/Release/net11.0-android/*-Signed.aab releaseName: ${{ vars.APP_VERSION }} track: internal status: completed @@ -320,7 +372,7 @@ jobs: - uses: maxim-lobanov/setup-xcode@ed7a3b1fda3918c0306d1b724322adc0b8cc0a90 # v1.7.0 with: - xcode-version: '27.1' + xcode-version: '27.0' - uses: actions/setup-node@949feb2413d6458794dcd2491c4babbbce0c15c1 # v7.1.0 with: @@ -351,11 +403,11 @@ jobs: api-private-key: ${{ secrets.APPSTORE_API_KEY_PRIVATE_KEY }} - name: Build ipa - run: dotnet publish src/BlazorUI/Demo/Client/Bit.BlazorUI.Demo.Client.Maui/Bit.BlazorUI.Demo.Client.Maui.csproj -p:RuntimeIdentifier=ios-arm64 -c Release -p:ArchiveOnBuild=true -p:CodesignKey="iPhone Distribution" -p:CodesignProvision="Bit Blazor UI Demo" -p:Version="${{ vars.APP_VERSION }}" -p:CompressionEnabled=false -f net10.0-ios + run: dotnet publish src/BlazorUI/Demo/Client/Bit.BlazorUI.Demo.Client.Maui/Bit.BlazorUI.Demo.Client.Maui.csproj -p:RuntimeIdentifier=ios-arm64 -c Release -p:ArchiveOnBuild=true -p:CodesignKey="iPhone Distribution" -p:CodesignProvision="Bit Blazor UI Demo" -p:Version="${{ vars.APP_VERSION }}" -p:CompressionEnabled=false -f net11.0-ios - name: Locate ipa id: ipa - run: echo "path=$(ls src/BlazorUI/Demo/Client/Bit.BlazorUI.Demo.Client.Maui/bin/release/net10.0-ios/ios-arm64/publish/*.ipa | head -n 1)" >> $GITHUB_OUTPUT + run: echo "path=$(ls src/BlazorUI/Demo/Client/Bit.BlazorUI.Demo.Client.Maui/bin/release/net11.0-ios/ios-arm64/publish/*.ipa | head -n 1)" >> $GITHUB_OUTPUT - name: Attest ipa uses: actions/attest-build-provenance@4d101475d8b20a2381f78447822ac1eab6504dd8 # v4.2.2 diff --git a/.github/workflows/blex.demo.cd.yml b/.github/workflows/blex.demo.cd.yml index a1dca1c5564..53250a235a0 100644 --- a/.github/workflows/blex.demo.cd.yml +++ b/.github/workflows/blex.demo.cd.yml @@ -11,7 +11,7 @@ jobs: build_blazor_wasm: name: build blazor wasm - runs-on: ubuntu-24.04 + runs-on: ubuntu-26.04 steps: diff --git a/.github/workflows/blow.demo.cd.yml b/.github/workflows/blow.demo.cd.yml index e4cf91c967e..5bb135e74e2 100644 --- a/.github/workflows/blow.demo.cd.yml +++ b/.github/workflows/blow.demo.cd.yml @@ -11,7 +11,7 @@ jobs: build_blazor_wasm: name: build blazor wasm - runs-on: ubuntu-24.04 + runs-on: ubuntu-26.04 steps: diff --git a/.github/workflows/bmage.demo.cd.yml b/.github/workflows/bmage.demo.cd.yml index 9099eba4d9a..0c919e2ece5 100644 --- a/.github/workflows/bmage.demo.cd.yml +++ b/.github/workflows/bmage.demo.cd.yml @@ -11,7 +11,7 @@ jobs: build_blazor_wasm: name: build blazor wasm - runs-on: ubuntu-24.04 + runs-on: ubuntu-26.04 steps: diff --git a/.github/workflows/bmotion.demo.cd.yml b/.github/workflows/bmotion.demo.cd.yml index 792202edfe6..bcc65cab1a9 100644 --- a/.github/workflows/bmotion.demo.cd.yml +++ b/.github/workflows/bmotion.demo.cd.yml @@ -11,7 +11,7 @@ jobs: build_blazor_wasm: name: build blazor wasm - runs-on: ubuntu-24.04 + runs-on: ubuntu-26.04 steps: diff --git a/.github/workflows/bonboarding.demo.cd.yml b/.github/workflows/bonboarding.demo.cd.yml index 7f6420dc5e1..d3acadbb939 100644 --- a/.github/workflows/bonboarding.demo.cd.yml +++ b/.github/workflows/bonboarding.demo.cd.yml @@ -11,7 +11,7 @@ jobs: build_blazor_wasm: name: build blazor wasm - runs-on: ubuntu-24.04 + runs-on: ubuntu-26.04 steps: diff --git a/.github/workflows/borm.demo.cd.yml b/.github/workflows/borm.demo.cd.yml index 87427b930cf..ab7e1d5d641 100644 --- a/.github/workflows/borm.demo.cd.yml +++ b/.github/workflows/borm.demo.cd.yml @@ -11,7 +11,7 @@ jobs: build_blazor_wasm: name: build blazor wasm - runs-on: ubuntu-24.04 + runs-on: ubuntu-26.04 steps: diff --git a/.github/workflows/bortable.demo.cd.yml b/.github/workflows/bortable.demo.cd.yml index a1a759b328e..7be4070c245 100644 --- a/.github/workflows/bortable.demo.cd.yml +++ b/.github/workflows/bortable.demo.cd.yml @@ -11,7 +11,7 @@ jobs: build_blazor_wasm: name: build blazor wasm - runs-on: ubuntu-24.04 + runs-on: ubuntu-26.04 steps: diff --git a/.github/workflows/brouter.demo.cd.yml b/.github/workflows/brouter.demo.cd.yml index bd032e65991..914331fcc84 100644 --- a/.github/workflows/brouter.demo.cd.yml +++ b/.github/workflows/brouter.demo.cd.yml @@ -11,7 +11,7 @@ jobs: build_blazor_wasm: name: build blazor wasm - runs-on: ubuntu-24.04 + runs-on: ubuntu-26.04 steps: diff --git a/.github/workflows/bsqlite.demo.cd.yml b/.github/workflows/bsqlite.demo.cd.yml index 8efd61ebc6c..fc13a1c3507 100644 --- a/.github/workflows/bsqlite.demo.cd.yml +++ b/.github/workflows/bsqlite.demo.cd.yml @@ -11,7 +11,7 @@ jobs: build_blazor_wasm: name: build blazor wasm - runs-on: ubuntu-24.04 + runs-on: ubuntu-26.04 steps: diff --git a/.github/workflows/bswup.demo.cd.yml b/.github/workflows/bswup.demo.cd.yml index a53af49d929..d5e775f51a0 100644 --- a/.github/workflows/bswup.demo.cd.yml +++ b/.github/workflows/bswup.demo.cd.yml @@ -11,7 +11,7 @@ jobs: build_blazor_wasm: name: build blazor wasm - runs-on: ubuntu-24.04 + runs-on: ubuntu-26.04 steps: diff --git a/.github/workflows/butil.demo.cd.yml b/.github/workflows/butil.demo.cd.yml index d34f5e8e5dc..94fc438d7f3 100644 --- a/.github/workflows/butil.demo.cd.yml +++ b/.github/workflows/butil.demo.cd.yml @@ -11,7 +11,7 @@ jobs: build_blazor_wasm: name: build blazor wasm - runs-on: ubuntu-24.04 + runs-on: ubuntu-26.04 steps: diff --git a/.github/workflows/nuget.org.yml b/.github/workflows/nuget.org.yml index 96287910add..48f2919c3f1 100644 --- a/.github/workflows/nuget.org.yml +++ b/.github/workflows/nuget.org.yml @@ -38,7 +38,7 @@ permissions: jobs: build-publish: name: build & publish - runs-on: ubuntu-24.04 + runs-on: ubuntu-26.04 environment: code-signing permissions: contents: read @@ -106,6 +106,23 @@ jobs: cp aspnetcore/src/Components/Web.JS/dist/Release/blazor.*.js src/BlazorES2019/wwwroot.net10/ rm -rf aspnetcore + - name: Generate ES2019 based blazor.*.js files for .NET 11 + run: | + git clone https://github.com/dotnet/aspnetcore.git + cd aspnetcore + git switch release/11.0 + git submodule update --init --recursive + sed -i 's/"target": "ES2024"/"target": "ES2019"/' src/Components/Shared.JS/tsconfig.json + npm install + npm run-script build + cd src/Components/Web.JS + npm install + npm run-script build:production + cd ../../../../ + mkdir -p src/BlazorES2019/wwwroot.net11/ + cp aspnetcore/src/Components/Web.JS/dist/Release/blazor.*.js aspnetcore/src/Components/Web.JS/dist/Release/_framework/blazor.*.js src/BlazorES2019/wwwroot.net11/ + rm -rf aspnetcore + - name: dotnet pack BlazorES2019 run: | dotnet build src/BlazorES2019/Bit.BlazorES2019/Bit.BlazorES2019.csproj -c Release -p:GeneratePackageOnBuild=false -p:WarningLevel=0 -p:RunCodeAnalysis=false diff --git a/.github/workflows/prerelease.nuget.org.yml b/.github/workflows/prerelease.nuget.org.yml index bc6e3619f0c..b93b251037b 100644 --- a/.github/workflows/prerelease.nuget.org.yml +++ b/.github/workflows/prerelease.nuget.org.yml @@ -12,7 +12,7 @@ permissions: jobs: build-publish: name: build & publish - runs-on: ubuntu-24.04 + runs-on: ubuntu-26.04 environment: code-signing permissions: contents: read @@ -78,6 +78,23 @@ jobs: cp aspnetcore/src/Components/Web.JS/dist/Release/blazor.*.js src/BlazorES2019/wwwroot.net10/ rm -rf aspnetcore + - name: Generate ES2019 based blazor.*.js files for .NET 11 + run: | + git clone https://github.com/dotnet/aspnetcore.git + cd aspnetcore + git switch release/11.0 + git submodule update --init --recursive + sed -i 's/"target": "ES2024"/"target": "ES2019"/' src/Components/Shared.JS/tsconfig.json + npm install + npm run-script build + cd src/Components/Web.JS + npm install + npm run-script build:production + cd ../../../../ + mkdir -p src/BlazorES2019/wwwroot.net11/ + cp aspnetcore/src/Components/Web.JS/dist/Release/blazor.*.js aspnetcore/src/Components/Web.JS/dist/Release/_framework/blazor.*.js src/BlazorES2019/wwwroot.net11/ + rm -rf aspnetcore + - name: dotnet pack BlazorES2019 run: | dotnet build src/BlazorES2019/Bit.BlazorES2019/Bit.BlazorES2019.csproj -c Release -p:GeneratePackageOnBuild=false -p:WarningLevel=0 -p:RunCodeAnalysis=false diff --git a/.github/workflows/sales-module-demo.cd.yml b/.github/workflows/sales-module-demo.cd.yml index d0f67e07858..4177442fb43 100644 --- a/.github/workflows/sales-module-demo.cd.yml +++ b/.github/workflows/sales-module-demo.cd.yml @@ -26,6 +26,10 @@ on: description: Bit packages of the latest Prerelease nuget packages run instead of nuget.org type: boolean default: false + windows_stores: + description: For WinGet and the Microsoft Store, sign every file of the Windows app, keep its installer at a URL of its own version and submit that version to both + type: boolean + default: false workflow_call: inputs: server: @@ -37,6 +41,9 @@ on: prerelease_packages: type: boolean default: false + windows_stores: + type: boolean + default: false permissions: contents: read @@ -65,6 +72,7 @@ jobs: uses: actions/setup-dotnet@a98b56852c35b8e3190ac28c8c2271da59106c68 # v6.0.0 with: global-json-file: src/global.json + dotnet-version: 10.0.x - name: Use prerelease packages if: inputs.prerelease_packages @@ -76,7 +84,7 @@ jobs: uses: ./.github/actions/setup-bit-cli - name: Create project with bit new - run: bit new SalesModule --database PostgreSQL --module Sales --appInsights --apiServerUrl ${{ env.SERVER_ADDRESS }} --webAppUrl ${{ env.SERVER_ADDRESS }} --filesStorage S3 --notification --captcha reCaptcha --signalR --ads --template-package "${{ env.BIT_TEMPLATE_PACKAGE }}" --yes --no-build --no-format --no-migration --no-trust + run: bit new SalesModule --framework net10.0 --database PostgreSQL --module Sales --appInsights --apiServerUrl ${{ env.SERVER_ADDRESS }} --webAppUrl ${{ env.SERVER_ADDRESS }} --filesStorage S3 --notification --captcha reCaptcha --signalR --ads --template-package "${{ env.BIT_TEMPLATE_PACKAGE }}" --yes --no-build --no-format --no-migration --no-trust - name: Update core appsettings.json uses: devops-actions/variable-substitution@ae7b1f3676ae374dc70282e6b9650bc50b611222 # v1.2 @@ -99,7 +107,8 @@ jobs: sed -i 's/IsEmbeddingEnabled = false/IsEmbeddingEnabled = true/' SalesModule/src/Server/SalesModule.Server.Api/Infrastructure/Data/AppDbContext.cs - name: Publish - run: dotnet publish SalesModule/src/Server/SalesModule.Server.Web/SalesModule.Server.Web.csproj -c Release -o server -p:Version="${{ vars.APP_VERSION}}" -p:AspNetCoreHostingModel=OutOfProcess -p:BitMinifyAggressive=true -p:BitMinifyMapOutputPath="${{ github.workspace }}/bit-minifier.map" + working-directory: SalesModule + run: dotnet publish src/Server/SalesModule.Server.Web/SalesModule.Server.Web.csproj -c Release -o ../server -p:Version="${{ vars.APP_VERSION}}" -p:AspNetCoreHostingModel=OutOfProcess -p:BitMinifyAggressive=true -p:BitMinifyMapOutputPath="${{ github.workspace }}/bit-minifier.map" # Every publish renames afresh, so this map reads the stack traces of this release and of no other. It lives in # obj, which this checkout throws away - kept here, and never next to the client, which would serve it. @@ -180,6 +189,7 @@ jobs: uses: actions/setup-dotnet@a98b56852c35b8e3190ac28c8c2271da59106c68 # v6.0.0 with: global-json-file: src\global.json + dotnet-version: 10.0.x - name: Use prerelease packages if: inputs.prerelease_packages @@ -191,7 +201,7 @@ jobs: uses: ./.github/actions/setup-bit-cli - name: Create project with bit new - run: bit new SalesModule --database PostgreSQL --module Sales --sentry --apiServerUrl ${{ env.SERVER_ADDRESS }} --webAppUrl ${{ env.SERVER_ADDRESS }} --filesStorage S3 --captcha reCaptcha --signalR --ads --template-package "${{ env.BIT_TEMPLATE_PACKAGE }}" --yes --platforms windows --no-build --no-format --no-migration --no-trust + run: bit new SalesModule --framework net10.0 --database PostgreSQL --module Sales --sentry --apiServerUrl ${{ env.SERVER_ADDRESS }} --webAppUrl ${{ env.SERVER_ADDRESS }} --filesStorage S3 --captcha reCaptcha --signalR --ads --template-package "${{ env.BIT_TEMPLATE_PACKAGE }}" --yes --platforms windows --no-build --no-format --no-migration --no-trust - name: Update core appsettings.json uses: devops-actions/variable-substitution@ae7b1f3676ae374dc70282e6b9650bc50b611222 # v1.2 @@ -239,13 +249,13 @@ jobs: run: | @{ Endpoint = '${{ vars.CODE_SIGNING_ENDPOINT }}'; CodeSigningAccountName = '${{ vars.CODE_SIGNING_ACCOUNT }}'; CertificateProfileName = '${{ vars.CODE_SIGNING_CERTIFICATE_PROFILE }}'; ExcludeCredentials = @('ManagedIdentityCredential', 'WorkloadIdentityCredential', 'SharedTokenCacheCredential', 'VisualStudioCredential', 'VisualStudioCodeCredential') } | ConvertTo-Json | Set-Content "$env:RUNNER_TEMP\code-signing.json" "VPK_AZURE_TRUSTED_SIGN_FILE=$env:RUNNER_TEMP\code-signing.json" >> $env:GITHUB_ENV - 'VPK_SIGN_EXCLUDE=\.dll$' >> $env:GITHUB_ENV + if ('${{ inputs.windows_stores }}' -ne 'true') { 'VPK_SIGN_EXCLUDE=\.dll$' >> $env:GITHUB_ENV } - name: Publish run: | cd SalesModule\src\Client\SalesModule.Client.Windows\ dotnet publish SalesModule.Client.Windows.csproj -c Release -o .\publish-result -r win-x64 -p:Version="${{ vars.APP_VERSION}}" -p:PublishReadyToRun=true -p:PublishReadyToRunComposite=true --self-contained - vpk pack -u SalesModule.Client.Windows -v "${{ vars.APP_VERSION }}" -p .\publish-result -e SalesModule.Client.Windows.exe -r win-x64 --framework webview2 --icon .\wwwroot\favicon.ico --packTitle 'SalesModule' + vpk pack -u SalesModule.Client.Windows -v "${{ vars.APP_VERSION }}" -p .\publish-result -e SalesModule.Client.Windows.exe -r win-x64 --framework webview2 --icon .\wwwroot\favicon.ico --packTitle 'SalesModule' --packAuthors BitPlatform - name: Attest the installer and packages uses: actions/attest-build-provenance@4d101475d8b20a2381f78447822ac1eab6504dd8 # v4.2.2 @@ -260,3 +270,49 @@ jobs: run: | cd SalesModule\src\Client\SalesModule.Client.Windows\ vpk upload s3 --endpoint ${{ vars.R2_ENDPOINT }} --bucket ${{ env.R2_BUCKET }} --keyId ${{ secrets.R2_ACCESS_KEY_ID }} --secret ${{ secrets.R2_SECRET_ACCESS_KEY }} -o .\Releases --keepMaxReleases 10 + + - name: Upload this version's installer to R2 + if: inputs.windows_stores + env: + AWS_ACCESS_KEY_ID: ${{ secrets.R2_ACCESS_KEY_ID }} + AWS_SECRET_ACCESS_KEY: ${{ secrets.R2_SECRET_ACCESS_KEY }} + AWS_DEFAULT_REGION: auto + AWS_REQUEST_CHECKSUM_CALCULATION: WHEN_REQUIRED + AWS_RESPONSE_CHECKSUM_VALIDATION: WHEN_REQUIRED + run: | + $key = "${{ vars.APP_VERSION }}/SalesModule.Client.Windows-win-Setup.exe" + aws s3api head-object --bucket ${{ env.R2_BUCKET }} --key $key --endpoint-url ${{ vars.R2_ENDPOINT }} *> $null + if ($LASTEXITCODE -eq 0) { throw "$key is already on R2, and WinGet and the Microsoft Store need it unchanged. Raise APP_VERSION." } + aws s3 cp SalesModule\src\Client\SalesModule.Client.Windows\Releases\SalesModule.Client.Windows-win-Setup.exe "s3://${{ env.R2_BUCKET }}/$key" --endpoint-url ${{ vars.R2_ENDPOINT }} + "::notice title=Installer::https://windows-sales.bitplatform.dev/$key" + + - name: Submit this version to WinGet + if: inputs.windows_stores + uses: ./.github/actions/submit-to-winget + with: + id: BitPlatform.Sales + version: ${{ vars.APP_VERSION }} + installer: SalesModule\src\Client\SalesModule.Client.Windows\Releases\SalesModule.Client.Windows-win-Setup.exe + installer-url: https://windows-sales.bitplatform.dev/${{ vars.APP_VERSION }}/SalesModule.Client.Windows-win-Setup.exe + architecture: x64 + product-code: SalesModule.Client.Windows + name: Sales + short-description: A product catalog and sales app built with bit Boilerplate. + package-url: https://sales.bitplatform.dev + privacy-url: https://sales.bitplatform.dev/en-US/privacy-policy + token: ${{ secrets.WINGET_TOKEN }} + + - name: Set up the Microsoft Store CLI + if: inputs.windows_stores + uses: microsoft/microsoft-store-apppublisher@cc9910a8d59f2eb55cbb83df0a3800cf3b5300e0 # v1.4 + with: + version: v0.4.3 + + - name: Submit this version to the Microsoft Store + if: inputs.windows_stores + run: | + $PSNativeCommandUseErrorActionPreference = $true + msstore reconfigure --tenantId ${{ secrets.MSSTORE_TENANT_ID }} --sellerId ${{ secrets.MSSTORE_SELLER_ID }} --clientId ${{ secrets.MSSTORE_CLIENT_ID }} --clientSecret ${{ secrets.MSSTORE_CLIENT_SECRET }} + $package = @{ packages = @(@{ packageUrl = "https://windows-sales.bitplatform.dev/${{ vars.APP_VERSION }}/SalesModule.Client.Windows-win-Setup.exe"; languages = @('en'); architectures = @('X64'); installerParameters = '--silent'; isSilentInstall = $true }) } | ConvertTo-Json -Depth 4 -Compress + msstore submission update ${{ vars.SALES_MSSTORE_PRODUCT_ID }} $package + msstore submission publish ${{ vars.SALES_MSSTORE_PRODUCT_ID }} diff --git a/.github/workflows/support-tracking.yml b/.github/workflows/support-tracking.yml index e139e6bd3ff..8e65a993c90 100644 --- a/.github/workflows/support-tracking.yml +++ b/.github/workflows/support-tracking.yml @@ -18,7 +18,7 @@ jobs: if: >- github.event.issue.user.type != 'Bot' && !contains(fromJSON('["OWNER", "MEMBER", "COLLABORATOR"]'), github.event.issue.author_association) - runs-on: ubuntu-24.04 + runs-on: ubuntu-26.04 steps: diff --git a/.github/workflows/todo-sample.cd.yml b/.github/workflows/todo-sample.cd.yml index a52006fbe13..17bc5947492 100644 --- a/.github/workflows/todo-sample.cd.yml +++ b/.github/workflows/todo-sample.cd.yml @@ -40,6 +40,10 @@ on: description: Bit packages of the latest Prerelease nuget packages run instead of nuget.org type: boolean default: false + windows_stores: + description: For WinGet and the Microsoft Store, sign every file of the Windows app, keep its installer at a URL of its own version and submit that version to both + type: boolean + default: false workflow_call: inputs: server: @@ -60,6 +64,9 @@ on: prerelease_packages: type: boolean default: false + windows_stores: + type: boolean + default: false permissions: contents: read @@ -88,6 +95,7 @@ jobs: uses: actions/setup-dotnet@a98b56852c35b8e3190ac28c8c2271da59106c68 # v6.0.0 with: global-json-file: src/global.json + dotnet-version: 10.0.x - name: Use prerelease packages if: inputs.prerelease_packages @@ -99,7 +107,7 @@ jobs: uses: ./.github/actions/setup-bit-cli - name: Create project with bit new - run: bit new TodoSample --database PostgreSQL --sample --appInsights --apiServerUrl ${{ env.SERVER_API_ADDRESS }} --webAppUrl ${{ env.SERVER_WEB_ADDRESS }} --filesStorage S3 --notification --captcha reCaptcha --offlineDb --signalR --ads --api Standalone --redis --multitenant false --template-package "${{ env.BIT_TEMPLATE_PACKAGE }}" --yes --no-restore --no-build --no-format --no-migration --no-trust + run: bit new TodoSample --framework net10.0 --database PostgreSQL --sample --appInsights --apiServerUrl ${{ env.SERVER_API_ADDRESS }} --webAppUrl ${{ env.SERVER_WEB_ADDRESS }} --filesStorage S3 --notification --captcha reCaptcha --offlineDb --signalR --ads --api Standalone --redis --multitenant false --template-package "${{ env.BIT_TEMPLATE_PACKAGE }}" --yes --no-restore --no-build --no-format --no-migration --no-trust - name: Translate .resx files run: | @@ -117,7 +125,8 @@ jobs: ApplicationInsights.ConnectionString: ${{ secrets.APPLICATION_INSIGHTS_CONNECTION_STRING }} - name: Publish Server API - run: dotnet publish TodoSample/src/Server/TodoSample.Server.Api/TodoSample.Server.Api.csproj -c Release -o server-api -p:Version="${{ vars.APP_VERSION}}" -p:AspNetCoreHostingModel=OutOfProcess + working-directory: TodoSample + run: dotnet publish src/Server/TodoSample.Server.Api/TodoSample.Server.Api.csproj -c Release -o ../server-api -p:Version="${{ vars.APP_VERSION}}" -p:AspNetCoreHostingModel=OutOfProcess # Server-owned; C:\inetpub keeps its own copies. Also keeps them out of the artifact. - name: Strip server-owned files from bundle @@ -161,6 +170,7 @@ jobs: uses: actions/setup-dotnet@a98b56852c35b8e3190ac28c8c2271da59106c68 # v6.0.0 with: global-json-file: src/global.json + dotnet-version: 10.0.x - name: Use prerelease packages if: inputs.prerelease_packages @@ -172,7 +182,7 @@ jobs: uses: ./.github/actions/setup-bit-cli - name: Create project with bit new - run: bit new TodoSample --database PostgreSQL --sample --appInsights --apiServerUrl ${{ env.SERVER_API_ADDRESS }} --webAppUrl ${{ env.SERVER_WEB_ADDRESS }} --filesStorage S3 --notification --captcha reCaptcha --signalR --ads --api Standalone --multitenant false --template-package "${{ env.BIT_TEMPLATE_PACKAGE }}" --yes --no-build --no-format --no-migration --no-trust + run: bit new TodoSample --framework net10.0 --database PostgreSQL --sample --appInsights --apiServerUrl ${{ env.SERVER_API_ADDRESS }} --webAppUrl ${{ env.SERVER_WEB_ADDRESS }} --filesStorage S3 --notification --captcha reCaptcha --signalR --ads --api Standalone --multitenant false --template-package "${{ env.BIT_TEMPLATE_PACKAGE }}" --yes --no-build --no-format --no-migration --no-trust - name: Translate .resx files run: | @@ -197,7 +207,8 @@ jobs: - name: Publish Server Web - run: dotnet publish TodoSample/src/Server/TodoSample.Server.Web/TodoSample.Server.Web.csproj -c Release -o server-web -p:Version="${{ vars.APP_VERSION}}" -p:AspNetCoreHostingModel=OutOfProcess -p:BitMinifyAggressive=true -p:BitMinifyMapOutputPath="${{ github.workspace }}/bit-minifier.map" + working-directory: TodoSample + run: dotnet publish src/Server/TodoSample.Server.Web/TodoSample.Server.Web.csproj -c Release -o ../server-web -p:Version="${{ vars.APP_VERSION}}" -p:AspNetCoreHostingModel=OutOfProcess -p:BitMinifyAggressive=true -p:BitMinifyMapOutputPath="${{ github.workspace }}/bit-minifier.map" # Every publish renames afresh, so this map reads the stack traces of this release and of no other. It lives in # obj, which this checkout throws away - kept here, and never next to the client, which would serve it. @@ -300,6 +311,7 @@ jobs: uses: actions/setup-dotnet@a98b56852c35b8e3190ac28c8c2271da59106c68 # v6.0.0 with: global-json-file: src/global.json + dotnet-version: 10.0.x - name: Use prerelease packages if: inputs.prerelease_packages @@ -311,7 +323,7 @@ jobs: uses: ./.github/actions/setup-bit-cli - name: Create project with bit new - run: bit new TodoSample --database PostgreSQL --sample --apiServerUrl ${{ env.SERVER_API_ADDRESS }} --webAppUrl ${{ env.SERVER_WEB_ADDRESS }} --filesStorage S3 --notification --captcha reCaptcha --ads --multitenant false --theme Cupertino --template-package "${{ env.BIT_TEMPLATE_PACKAGE }}" --yes --no-build --no-format --no-migration --no-trust + run: bit new TodoSample --framework net10.0 --database PostgreSQL --sample --apiServerUrl ${{ env.SERVER_API_ADDRESS }} --webAppUrl ${{ env.SERVER_WEB_ADDRESS }} --filesStorage S3 --notification --captcha reCaptcha --ads --multitenant false --theme Cupertino --template-package "${{ env.BIT_TEMPLATE_PACKAGE }}" --yes --no-build --no-format --no-migration --no-trust - name: Update core appsettings.json uses: devops-actions/variable-substitution@ae7b1f3676ae374dc70282e6b9650bc50b611222 # v1.2 @@ -324,7 +336,8 @@ jobs: - name: Publish - run: dotnet publish TodoSample/src/Client/TodoSample.Client.Web/TodoSample.Client.Web.csproj -c Release -o client -p:Version="${{ vars.APP_VERSION}}" -p:RunAOTCompilation=true -p:InvariantGlobalization=true -p:WasmEnableSIMD=true -p:BitMinifyAggressive=true -p:BitMinifyMapOutputPath="${{ github.workspace }}/bit-minifier.map" + working-directory: TodoSample + run: dotnet publish src/Client/TodoSample.Client.Web/TodoSample.Client.Web.csproj -c Release -o ../client -p:Version="${{ vars.APP_VERSION}}" -p:RunAOTCompilation=true -p:InvariantGlobalization=true -p:WasmEnableSIMD=true -p:BitMinifyAggressive=true -p:BitMinifyMapOutputPath="${{ github.workspace }}/bit-minifier.map" # what the stack traces this client logs are read back through: see the note in the server web job - name: Upload minifier map artifact @@ -354,6 +367,7 @@ jobs: uses: actions/setup-dotnet@a98b56852c35b8e3190ac28c8c2271da59106c68 # v6.0.0 with: global-json-file: src/global.json + dotnet-version: 10.0.x - name: Use prerelease packages if: inputs.prerelease_packages @@ -365,7 +379,7 @@ jobs: uses: ./.github/actions/setup-bit-cli - name: Create project with bit new - run: bit new TodoSample --database PostgreSQL --sample --appInsights --apiServerUrl ${{ env.SERVER_API_ADDRESS }} --webAppUrl ${{ env.SERVER_WEB_ADDRESS }} --filesStorage S3 --notification --captcha reCaptcha --offlineDb --signalR --ads --multitenant false --theme Fluent --template-package "${{ env.BIT_TEMPLATE_PACKAGE }}" --yes --no-restore --no-build --no-format --no-migration --no-trust + run: bit new TodoSample --framework net10.0 --database PostgreSQL --sample --appInsights --apiServerUrl ${{ env.SERVER_API_ADDRESS }} --webAppUrl ${{ env.SERVER_WEB_ADDRESS }} --filesStorage S3 --notification --captcha reCaptcha --offlineDb --signalR --ads --multitenant false --theme Fluent --template-package "${{ env.BIT_TEMPLATE_PACKAGE }}" --yes --no-restore --no-build --no-format --no-migration --no-trust - name: Update core appsettings.json uses: devops-actions/variable-substitution@ae7b1f3676ae374dc70282e6b9650bc50b611222 # v1.2 @@ -386,7 +400,8 @@ jobs: cd TodoSample/src/Server/TodoSample.Server.Web && dotnet build -c Release && dnx dotnet-ef@10.0.13 -- dbcontext optimize --context AppOfflineDbContext --output-dir Infrastructure/Data/CompiledModel --namespace TodoSample.Client.Core.Infrastructure.Data --project ../../Client/TodoSample.Client.Core/TodoSample.Client.Core.csproj --verbose - name: Publish - run: dotnet publish TodoSample/src/Client/TodoSample.Client.Web/TodoSample.Client.Web.csproj -c Release -o client -p:Version="${{ vars.APP_VERSION}}" -p:WasmEnableSIMD=true -p:InvariantGlobalization=true + working-directory: TodoSample + run: dotnet publish src/Client/TodoSample.Client.Web/TodoSample.Client.Web.csproj -c Release -o ../client -p:Version="${{ vars.APP_VERSION}}" -p:WasmEnableSIMD=true -p:InvariantGlobalization=true - name: Upload to asw run: | @@ -409,6 +424,7 @@ jobs: uses: actions/setup-dotnet@a98b56852c35b8e3190ac28c8c2271da59106c68 # v6.0.0 with: global-json-file: src/global.json + dotnet-version: 10.0.x - name: Use prerelease packages if: inputs.prerelease_packages @@ -420,7 +436,7 @@ jobs: uses: ./.github/actions/setup-bit-cli - name: Create project with bit new - run: bit new TodoSample --database PostgreSQL --sample --apiServerUrl ${{ env.SERVER_API_ADDRESS }} --webAppUrl ${{ env.SERVER_WEB_ADDRESS }} --filesStorage S3 --notification --captcha reCaptcha --ads --multitenant false --brouter false --template-package "${{ env.BIT_TEMPLATE_PACKAGE }}" --yes --no-build --no-format --no-migration --no-trust + run: bit new TodoSample --framework net10.0 --database PostgreSQL --sample --apiServerUrl ${{ env.SERVER_API_ADDRESS }} --webAppUrl ${{ env.SERVER_WEB_ADDRESS }} --filesStorage S3 --notification --captcha reCaptcha --ads --multitenant false --brouter false --template-package "${{ env.BIT_TEMPLATE_PACKAGE }}" --yes --no-build --no-format --no-migration --no-trust - name: Update core appsettings.json uses: devops-actions/variable-substitution@ae7b1f3676ae374dc70282e6b9650bc50b611222 # v1.2 @@ -432,7 +448,8 @@ jobs: GoogleRecaptchaSiteKey: ${{ secrets.GOOGLE_RECAPTCHA_SITE_KEY }} - name: Publish - run: dotnet publish TodoSample/src/Client/TodoSample.Client.Web/TodoSample.Client.Web.csproj -c Release -o client -p:Version="${{ vars.APP_VERSION}}" -p:WasmEnableSIMD=true -p:InvariantGlobalization=true -p:BitMinifyAggressive=true -p:BitMinifyMapOutputPath="${{ github.workspace }}/bit-minifier.map" + working-directory: TodoSample + run: dotnet publish src/Client/TodoSample.Client.Web/TodoSample.Client.Web.csproj -c Release -o ../client -p:Version="${{ vars.APP_VERSION}}" -p:WasmEnableSIMD=true -p:InvariantGlobalization=true -p:BitMinifyAggressive=true -p:BitMinifyMapOutputPath="${{ github.workspace }}/bit-minifier.map" # what the stack traces this client logs are read back through: see the note in the server web job - name: Upload minifier map artifact @@ -468,6 +485,7 @@ jobs: uses: actions/setup-dotnet@a98b56852c35b8e3190ac28c8c2271da59106c68 # v6.0.0 with: global-json-file: src/global.json + dotnet-version: 10.0.x - name: Use prerelease packages if: inputs.prerelease_packages @@ -479,7 +497,7 @@ jobs: uses: ./.github/actions/setup-bit-cli - name: Create project with bit new - run: bit new TodoSample --database PostgreSQL --sample --sentry --apiServerUrl ${{ env.SERVER_API_ADDRESS }} --webAppUrl ${{ env.SERVER_WEB_ADDRESS }} --filesStorage S3 --captcha reCaptcha --signalR --ads --multitenant false --template-package "${{ env.BIT_TEMPLATE_PACKAGE }}" --yes --platforms windows --no-build --no-format --no-migration --no-trust + run: bit new TodoSample --framework net10.0 --database PostgreSQL --sample --sentry --apiServerUrl ${{ env.SERVER_API_ADDRESS }} --webAppUrl ${{ env.SERVER_WEB_ADDRESS }} --filesStorage S3 --captcha reCaptcha --signalR --ads --multitenant false --template-package "${{ env.BIT_TEMPLATE_PACKAGE }}" --yes --platforms windows --no-build --no-format --no-migration --no-trust - name: Translate .resx files run: | @@ -527,13 +545,13 @@ jobs: run: | @{ Endpoint = '${{ vars.CODE_SIGNING_ENDPOINT }}'; CodeSigningAccountName = '${{ vars.CODE_SIGNING_ACCOUNT }}'; CertificateProfileName = '${{ vars.CODE_SIGNING_CERTIFICATE_PROFILE }}'; ExcludeCredentials = @('ManagedIdentityCredential', 'WorkloadIdentityCredential', 'SharedTokenCacheCredential', 'VisualStudioCredential', 'VisualStudioCodeCredential') } | ConvertTo-Json | Set-Content "$env:RUNNER_TEMP\code-signing.json" "VPK_AZURE_TRUSTED_SIGN_FILE=$env:RUNNER_TEMP\code-signing.json" >> $env:GITHUB_ENV - 'VPK_SIGN_EXCLUDE=\.dll$' >> $env:GITHUB_ENV + if ('${{ inputs.windows_stores }}' -ne 'true') { 'VPK_SIGN_EXCLUDE=\.dll$' >> $env:GITHUB_ENV } - name: Publish run: | cd TodoSample\src\Client\TodoSample.Client.Windows\ dotnet publish TodoSample.Client.Windows.csproj -c Release -o .\publish-result -r win-x86 -p:Version="${{ vars.APP_VERSION}}" - vpk pack -u TodoSample.Client.Windows -v "${{ vars.APP_VERSION }}" -p .\publish-result -e TodoSample.Client.Windows.exe -r win-x86 --framework webview2 --icon .\wwwroot\favicon.ico --packTitle TodoSample + vpk pack -u TodoSample.Client.Windows -v "${{ vars.APP_VERSION }}" -p .\publish-result -e TodoSample.Client.Windows.exe -r win-x86 --framework webview2 --icon .\wwwroot\favicon.ico --packTitle TodoSample --packAuthors BitPlatform - name: Attest the installer and packages uses: actions/attest-build-provenance@4d101475d8b20a2381f78447822ac1eab6504dd8 # v4.2.2 @@ -549,6 +567,52 @@ jobs: cd TodoSample\src\Client\TodoSample.Client.Windows\ vpk upload s3 --endpoint ${{ vars.R2_ENDPOINT }} --bucket ${{ env.R2_BUCKET }} --keyId ${{ secrets.R2_ACCESS_KEY_ID }} --secret ${{ secrets.R2_SECRET_ACCESS_KEY }} -o .\Releases --keepMaxReleases 10 + - name: Upload this version's installer to R2 + if: inputs.windows_stores + env: + AWS_ACCESS_KEY_ID: ${{ secrets.R2_ACCESS_KEY_ID }} + AWS_SECRET_ACCESS_KEY: ${{ secrets.R2_SECRET_ACCESS_KEY }} + AWS_DEFAULT_REGION: auto + AWS_REQUEST_CHECKSUM_CALCULATION: WHEN_REQUIRED + AWS_RESPONSE_CHECKSUM_VALIDATION: WHEN_REQUIRED + run: | + $key = "${{ vars.APP_VERSION }}/TodoSample.Client.Windows-win-Setup.exe" + aws s3api head-object --bucket ${{ env.R2_BUCKET }} --key $key --endpoint-url ${{ vars.R2_ENDPOINT }} *> $null + if ($LASTEXITCODE -eq 0) { throw "$key is already on R2, and WinGet and the Microsoft Store need it unchanged. Raise APP_VERSION." } + aws s3 cp TodoSample\src\Client\TodoSample.Client.Windows\Releases\TodoSample.Client.Windows-win-Setup.exe "s3://${{ env.R2_BUCKET }}/$key" --endpoint-url ${{ vars.R2_ENDPOINT }} + "::notice title=Installer::https://windows-todo.bitplatform.dev/$key" + + - name: Submit this version to WinGet + if: inputs.windows_stores + uses: ./.github/actions/submit-to-winget + with: + id: BitPlatform.Todo + version: ${{ vars.APP_VERSION }} + installer: TodoSample\src\Client\TodoSample.Client.Windows\Releases\TodoSample.Client.Windows-win-Setup.exe + installer-url: https://windows-todo.bitplatform.dev/${{ vars.APP_VERSION }}/TodoSample.Client.Windows-win-Setup.exe + architecture: x86 + product-code: TodoSample.Client.Windows + name: Todo + short-description: A to-do list app built with bit Boilerplate. + package-url: https://todo.bitplatform.dev + privacy-url: https://todo.bitplatform.dev/en-US/privacy-policy + token: ${{ secrets.WINGET_TOKEN }} + + - name: Set up the Microsoft Store CLI + if: inputs.windows_stores + uses: microsoft/microsoft-store-apppublisher@cc9910a8d59f2eb55cbb83df0a3800cf3b5300e0 # v1.4 + with: + version: v0.4.3 + + - name: Submit this version to the Microsoft Store + if: inputs.windows_stores + run: | + $PSNativeCommandUseErrorActionPreference = $true + msstore reconfigure --tenantId ${{ secrets.MSSTORE_TENANT_ID }} --sellerId ${{ secrets.MSSTORE_SELLER_ID }} --clientId ${{ secrets.MSSTORE_CLIENT_ID }} --clientSecret ${{ secrets.MSSTORE_CLIENT_SECRET }} + $package = @{ packages = @(@{ packageUrl = "https://windows-todo.bitplatform.dev/${{ vars.APP_VERSION }}/TodoSample.Client.Windows-win-Setup.exe"; languages = @('en'); architectures = @('X86'); installerParameters = '--silent'; isSilentInstall = $true }) } | ConvertTo-Json -Depth 4 -Compress + msstore submission update ${{ vars.TODO_MSSTORE_PRODUCT_ID }} $package + msstore submission publish ${{ vars.TODO_MSSTORE_PRODUCT_ID }} + build_blazor_hybrid_android: name: build blazor hybrid (android) if: inputs.android @@ -570,6 +634,7 @@ jobs: uses: actions/setup-dotnet@a98b56852c35b8e3190ac28c8c2271da59106c68 # v6.0.0 with: global-json-file: src/global.json + dotnet-version: 10.0.x - name: Use prerelease packages if: inputs.prerelease_packages @@ -581,7 +646,7 @@ jobs: uses: ./.github/actions/setup-bit-cli - name: Create project with bit new - run: bit new TodoSample --database PostgreSQL --sample --sentry --apiServerUrl ${{ env.SERVER_API_ADDRESS }} --webAppUrl ${{ env.SERVER_WEB_ADDRESS }} --filesStorage S3 --notification --captcha reCaptcha --signalR --ads --multitenant false --template-package "${{ env.BIT_TEMPLATE_PACKAGE }}" --yes --platforms android --no-build --no-format --no-migration --no-trust + run: bit new TodoSample --framework net10.0 --database PostgreSQL --sample --sentry --apiServerUrl ${{ env.SERVER_API_ADDRESS }} --webAppUrl ${{ env.SERVER_WEB_ADDRESS }} --filesStorage S3 --notification --captcha reCaptcha --signalR --ads --multitenant false --template-package "${{ env.BIT_TEMPLATE_PACKAGE }}" --yes --platforms android --no-build --no-format --no-migration --no-trust - name: Extract Android signing key from env uses: timheuer/base64-to-file@dfa5a5dd38803cb4f5c3a081eeb28e8362d43e9c # v2.0.0 @@ -634,7 +699,8 @@ jobs: - name: Publish aab - run: dotnet publish TodoSample/src/Client/TodoSample.Client.Maui/TodoSample.Client.Maui.csproj -c Release -p:AndroidPackageFormats=aab%3Bapk -p:AndroidKeyStore=true -p:AndroidSigningKeyStore="TodoSample.keystore" -p:AndroidSigningKeyAlias=bitplatform -p:AndroidSigningKeyPass="${{ secrets.ANDROID_RELEASE_KEYSTORE_PASSWORD }}" -p:AndroidSigningStorePass="${{ secrets.ANDROID_RELEASE_SIGNING_PASSWORD }}" -p:Version="${{ vars.APP_VERSION }}" -p:ApplicationTitle="TodoSample" -p:ApplicationId="${{ env.APP_BUNDLE_ID }}" -f net10.0-android + working-directory: TodoSample + run: dotnet publish src/Client/TodoSample.Client.Maui/TodoSample.Client.Maui.csproj -c Release -p:AndroidPackageFormats=aab%3Bapk -p:AndroidKeyStore=true -p:AndroidSigningKeyStore="TodoSample.keystore" -p:AndroidSigningKeyAlias=bitplatform -p:AndroidSigningKeyPass="${{ secrets.ANDROID_RELEASE_KEYSTORE_PASSWORD }}" -p:AndroidSigningStorePass="${{ secrets.ANDROID_RELEASE_SIGNING_PASSWORD }}" -p:Version="${{ vars.APP_VERSION }}" -p:ApplicationTitle="TodoSample" -p:ApplicationId="${{ env.APP_BUNDLE_ID }}" -f net10.0-android - name: Upload artifact id: artifact @@ -681,6 +747,7 @@ jobs: uses: actions/setup-dotnet@a98b56852c35b8e3190ac28c8c2271da59106c68 # v6.0.0 with: global-json-file: src/global.json + dotnet-version: 10.0.x - uses: maxim-lobanov/setup-xcode@ed7a3b1fda3918c0306d1b724322adc0b8cc0a90 # v1.7.0 with: @@ -696,7 +763,7 @@ jobs: uses: ./.github/actions/setup-bit-cli - name: Create project with bit new - run: bit new TodoSample --database PostgreSQL --sample --sentry --apiServerUrl ${{ env.SERVER_API_ADDRESS }} --webAppUrl ${{ env.SERVER_WEB_ADDRESS }} --filesStorage S3 --notification --captcha reCaptcha --signalR --ads --multitenant false --template-package "${{ env.BIT_TEMPLATE_PACKAGE }}" --yes --platforms ios --no-build --no-format --no-migration --no-trust + run: bit new TodoSample --framework net10.0 --database PostgreSQL --sample --sentry --apiServerUrl ${{ env.SERVER_API_ADDRESS }} --webAppUrl ${{ env.SERVER_WEB_ADDRESS }} --filesStorage S3 --notification --captcha reCaptcha --signalR --ads --multitenant false --template-package "${{ env.BIT_TEMPLATE_PACKAGE }}" --yes --platforms ios --no-build --no-format --no-migration --no-trust - name: Translate .resx files run: | @@ -749,7 +816,8 @@ jobs: - name: Build ipa - run: dotnet publish TodoSample/src/Client/TodoSample.Client.Maui/TodoSample.Client.Maui.csproj -p:RuntimeIdentifier=ios-arm64 -c Release -p:ArchiveOnBuild=true -p:CodesignKey="iPhone Distribution" -p:CodesignProvision="TodoTemplate" -p:Version="${{ vars.APP_VERSION }}" -p:ApplicationTitle="Todo" -p:ApplicationId="${{ env.APP_BUNDLE_ID }}" -f net10.0-ios + working-directory: TodoSample + run: dotnet publish src/Client/TodoSample.Client.Maui/TodoSample.Client.Maui.csproj -p:RuntimeIdentifier=ios-arm64 -c Release -p:ArchiveOnBuild=true -p:CodesignKey="iPhone Distribution" -p:CodesignProvision="TodoTemplate" -p:Version="${{ vars.APP_VERSION }}" -p:ApplicationTitle="Todo" -p:ApplicationId="${{ env.APP_BUNDLE_ID }}" -f net10.0-ios - name: Locate ipa id: ipa diff --git a/.vscode/mcp.json b/.vscode/mcp.json index ddd3364b296..adf42671d6a 100644 --- a/.vscode/mcp.json +++ b/.vscode/mcp.json @@ -2,7 +2,7 @@ "servers": { "bitplatform": { "type": "http", - "url": "https://bitplatform.dev/mcp?v=10.7.0" + "url": "https://bitplatform.dev/mcp?v=11.0.0" }, "github": { "type": "http", diff --git a/docs/how-to-build.md b/docs/how-to-build.md index 50d678d53e9..2142297a71c 100644 --- a/docs/how-to-build.md +++ b/docs/how-to-build.md @@ -22,7 +22,7 @@ building each one of them requires some specific steps that are explained below. Building each of the bit platform projects needs the following basic requirements other than the specific requirements that are explained later: -- [.NET 10 SDK (10.0.402)](https://dotnet.microsoft.com/en-us/download/dotnet/10.0) +- [.NET 11 SDK (11.0.100-rc.2.26504.105)](https://dotnet.microsoft.com/en-us/download/dotnet/11.0) - [Node.js](https://nodejs.org)
diff --git a/src/Besql/Bit.Besql/Bit.Besql.csproj b/src/Besql/Bit.Besql/Bit.Besql.csproj index 943a1b09e2b..e086a016278 100644 --- a/src/Besql/Bit.Besql/Bit.Besql.csproj +++ b/src/Besql/Bit.Besql/Bit.Besql.csproj @@ -3,7 +3,7 @@ - net10.0;net9.0;net8.0 + net11.0;net10.0;net9.0;net8.0 enable $(NoWarn);IL2091;EF1001 enable @@ -29,8 +29,11 @@ + + + diff --git a/src/Besql/Bit.Besql/wwwroot/bit-besql.js b/src/Besql/Bit.Besql/wwwroot/bit-besql.js index ef871cf7dbf..62b523b37a5 100644 --- a/src/Besql/Bit.Besql/wwwroot/bit-besql.js +++ b/src/Besql/Bit.Besql/wwwroot/bit-besql.js @@ -1,5 +1,5 @@ var BitBesql = window.BitBesql || {}; -BitBesql.version = window['bit-besql version'] = '10.7.0-pre-02'; +BitBesql.version = window['bit-besql version'] = '11.0.0-pre-10'; BitBesql.persist = async function besqlPersist(fileName) { diff --git a/src/Besql/Demo/Bit.Besql.Demo.Client/Bit.Besql.Demo.Client.csproj b/src/Besql/Demo/Bit.Besql.Demo.Client/Bit.Besql.Demo.Client.csproj index 546ec59c4db..0a871ee6ada 100644 --- a/src/Besql/Demo/Bit.Besql.Demo.Client/Bit.Besql.Demo.Client.csproj +++ b/src/Besql/Demo/Bit.Besql.Demo.Client/Bit.Besql.Demo.Client.csproj @@ -1,7 +1,7 @@  - net10.0 + net11.0 enable enable true @@ -10,7 +10,7 @@ - + diff --git a/src/Besql/Demo/Bit.Besql.Demo/Bit.Besql.Demo.csproj b/src/Besql/Demo/Bit.Besql.Demo/Bit.Besql.Demo.csproj index 539c1b1bd85..ece8f05c38d 100644 --- a/src/Besql/Demo/Bit.Besql.Demo/Bit.Besql.Demo.csproj +++ b/src/Besql/Demo/Bit.Besql.Demo/Bit.Besql.Demo.csproj @@ -1,14 +1,14 @@  - net10.0 + net11.0 enable enable - + @@ -17,11 +17,11 @@ and open Nuget Package Manager Console, and select `Bit.Besql.Demo.Client` project as default project Then run either Add-Migration MigrationName -OutputDir Data\Migrations or Optimize-DbContext -OutputDir Data\CompiledModel commands. --> - - all - runtime; build; native; contentfiles; analyzers; buildtransitive - - + + all runtime; build; native; contentfiles; analyzers; buildtransitive diff --git a/src/Besql/Demo/Bit.Besql.Demo/Program.cs b/src/Besql/Demo/Bit.Besql.Demo/Program.cs index e1bfb2039f5..fcf1980bd0f 100644 --- a/src/Besql/Demo/Bit.Besql.Demo/Program.cs +++ b/src/Besql/Demo/Bit.Besql.Demo/Program.cs @@ -13,11 +13,7 @@ var app = builder.Build(); // Configure the HTTP request pipeline. -if (app.Environment.IsDevelopment()) -{ - app.UseWebAssemblyDebugging(); -} -else +if (app.Environment.IsDevelopment() is false) { app.UseExceptionHandler("/Error", createScopeForErrors: true); // The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts. diff --git a/src/Besql/Demo/Bit.Besql.Demo/Properties/launchSettings.json b/src/Besql/Demo/Bit.Besql.Demo/Properties/launchSettings.json index 7f09e1b5807..c64befa48f3 100644 --- a/src/Besql/Demo/Bit.Besql.Demo/Properties/launchSettings.json +++ b/src/Besql/Demo/Bit.Besql.Demo/Properties/launchSettings.json @@ -5,7 +5,6 @@ "commandName": "Project", "dotnetRunMessages": true, "launchBrowser": true, - "inspectUri": "{wsProtocol}://{url.hostname}:{url.port}/_framework/debug/ws-proxy?browser={browserInspectUri}", "applicationUrl": "https://localhost:5050;http://localhost:5051", "environmentVariables": { "ASPNETCORE_ENVIRONMENT": "Development" diff --git a/src/Bit.Build.props b/src/Bit.Build.props index ac78597018e..95d46f66ca1 100644 --- a/src/Bit.Build.props +++ b/src/Bit.Build.props @@ -27,7 +27,7 @@ https://github.com/bitfoundation/bitplatform - 10.7.0-pre-02 + 11.0.0-pre-10 $(ReleaseVersion) https://github.com/bitfoundation/bitplatform/releases/tag/v-$(ReleaseVersion) $([System.String]::Copy($(ReleaseVersion)).Replace('-pre-', '.')) @@ -38,7 +38,7 @@ en preview enable - $(NoWarn);NU1605;CS1591;NU1701;CA1303;CA1308;CA2007;CA1014;CA2227;BL0007;CA1056;BL0005;CS1998 + $(NoWarn);NU1605;CS1591;NU1701;CA1303;CA1308;CA2007;CA1014;CA2227;BL0007;CA1056;BL0005;CS1998;BL0016 $(WarningsAsErrors);CS0114;RZ10012 bin\$(Configuration)\$(TargetFramework)\$(AssemblyName).xml @@ -79,6 +79,17 @@ Text="%(_StaleReleaseVersionLiteral.Identity) does not declare the release version '$(ReleaseVersion)' (see ReleaseVersion in Bit.Build.props). Update its version literal." /> + + + <_UseJsonManifestPackaging>false + + True diff --git a/src/BlazorES2019/Bit.BlazorES2019/Bit.BlazorES2019.csproj b/src/BlazorES2019/Bit.BlazorES2019/Bit.BlazorES2019.csproj index 56fc5c41e3d..e14da51063f 100644 --- a/src/BlazorES2019/Bit.BlazorES2019/Bit.BlazorES2019.csproj +++ b/src/BlazorES2019/Bit.BlazorES2019/Bit.BlazorES2019.csproj @@ -3,7 +3,7 @@ - net10.0;net9.0 + net11.0;net10.0;net9.0 enable enable @@ -19,6 +19,11 @@ PreserveNewest contentFiles\any\net10.0\wwwroot\_framework\bit.%(Filename).es2019%(Extension) + + true + PreserveNewest + contentFiles\any\net11.0\wwwroot\_framework\bit.%(Filename).es2019%(Extension) + diff --git a/src/BlazorES2019/Bit.BlazorES2019/buildTransitive/Bit.BlazorES2019.targets b/src/BlazorES2019/Bit.BlazorES2019/buildTransitive/Bit.BlazorES2019.targets index d11ef9d563f..8cd6872c4dc 100644 --- a/src/BlazorES2019/Bit.BlazorES2019/buildTransitive/Bit.BlazorES2019.targets +++ b/src/BlazorES2019/Bit.BlazorES2019/buildTransitive/Bit.BlazorES2019.targets @@ -16,5 +16,11 @@ PreserveNewest wwwroot\_framework\%(Filename)%(Extension) + + + PreserveNewest + PreserveNewest + wwwroot\_framework\%(Filename)%(Extension) + diff --git a/src/BlazorUI/Bit.BlazorUI.Assets/Bit.BlazorUI.Assets.csproj b/src/BlazorUI/Bit.BlazorUI.Assets/Bit.BlazorUI.Assets.csproj index e9e84e7a4fe..07dd13e2c03 100644 --- a/src/BlazorUI/Bit.BlazorUI.Assets/Bit.BlazorUI.Assets.csproj +++ b/src/BlazorUI/Bit.BlazorUI.Assets/Bit.BlazorUI.Assets.csproj @@ -5,9 +5,9 @@ - net10.0;net9.0;net8.0 + net11.0;net10.0;net9.0;net8.0 - net10.0 + net11.0 true enable @@ -20,6 +20,7 @@ + diff --git a/src/BlazorUI/Bit.BlazorUI.Extras/Bit.BlazorUI.Extras.csproj b/src/BlazorUI/Bit.BlazorUI.Extras/Bit.BlazorUI.Extras.csproj index 880335aa142..6a3988e3b17 100644 --- a/src/BlazorUI/Bit.BlazorUI.Extras/Bit.BlazorUI.Extras.csproj +++ b/src/BlazorUI/Bit.BlazorUI.Extras/Bit.BlazorUI.Extras.csproj @@ -5,9 +5,9 @@ - net10.0;net9.0;net8.0 + net11.0;net10.0;net9.0;net8.0 - net10.0 + net11.0 true enable @@ -20,6 +20,7 @@ + diff --git a/src/BlazorUI/Bit.BlazorUI.Icons/Bit.BlazorUI.Icons.csproj b/src/BlazorUI/Bit.BlazorUI.Icons/Bit.BlazorUI.Icons.csproj index 2687157212b..bf85213aadd 100644 --- a/src/BlazorUI/Bit.BlazorUI.Icons/Bit.BlazorUI.Icons.csproj +++ b/src/BlazorUI/Bit.BlazorUI.Icons/Bit.BlazorUI.Icons.csproj @@ -5,9 +5,9 @@ - net10.0;net9.0;net8.0 + net11.0;net10.0;net9.0;net8.0 - net10.0 + net11.0 Bit.BlazorUI 0 diff --git a/src/BlazorUI/Bit.BlazorUI.Legacy/Bit.BlazorUI.Legacy.csproj b/src/BlazorUI/Bit.BlazorUI.Legacy/Bit.BlazorUI.Legacy.csproj index 9c05adb0d4a..5099c590497 100644 --- a/src/BlazorUI/Bit.BlazorUI.Legacy/Bit.BlazorUI.Legacy.csproj +++ b/src/BlazorUI/Bit.BlazorUI.Legacy/Bit.BlazorUI.Legacy.csproj @@ -3,9 +3,9 @@ - net10.0;net9.0;net8.0 + net11.0;net10.0;net9.0;net8.0 - net10.0 + net11.0 true enable @@ -18,6 +18,7 @@ + diff --git a/src/BlazorUI/Bit.BlazorUI/Bit.BlazorUI.csproj b/src/BlazorUI/Bit.BlazorUI/Bit.BlazorUI.csproj index 0ec2337d797..92ea9c69523 100644 --- a/src/BlazorUI/Bit.BlazorUI/Bit.BlazorUI.csproj +++ b/src/BlazorUI/Bit.BlazorUI/Bit.BlazorUI.csproj @@ -5,11 +5,11 @@ - net10.0;net9.0;net8.0 - - net10.0 + net11.0;net10.0;net9.0;net8.0 + + net11.0 true enable @@ -34,6 +34,7 @@ + diff --git a/src/BlazorUI/Bit.BlazorUI/Info.cs b/src/BlazorUI/Bit.BlazorUI/Info.cs index 3ad617382f3..8de0dfdf9ef 100644 --- a/src/BlazorUI/Bit.BlazorUI/Info.cs +++ b/src/BlazorUI/Bit.BlazorUI/Info.cs @@ -8,5 +8,5 @@ public static class Info /// /// The current version string of bit BlazorUI. /// - public static string Version { get; } = "10.7.0-pre-02"; + public static string Version { get; } = "11.0.0-pre-10"; } diff --git a/src/BlazorUI/Bit.BlazorUI/Scripts/general.ts b/src/BlazorUI/Bit.BlazorUI/Scripts/general.ts index d9df44b678f..44690404658 100644 --- a/src/BlazorUI/Bit.BlazorUI/Scripts/general.ts +++ b/src/BlazorUI/Bit.BlazorUI/Scripts/general.ts @@ -1,4 +1,4 @@ -(BitBlazorUI as any).version = (window as any)['bit-blazorui version'] = '10.7.0-pre-02'; +(BitBlazorUI as any).version = (window as any)['bit-blazorui version'] = '11.0.0-pre-10'; // bit-trim: always // The one script every bundle keeps: the version stamp above, and what nearly every other script builds on. What used diff --git a/src/BlazorUI/Demo/Bit.BlazorUI.Demo.Server/Bit.BlazorUI.Demo.Server.csproj b/src/BlazorUI/Demo/Bit.BlazorUI.Demo.Server/Bit.BlazorUI.Demo.Server.csproj index 9cf2db498f1..eab99846d61 100644 --- a/src/BlazorUI/Demo/Bit.BlazorUI.Demo.Server/Bit.BlazorUI.Demo.Server.csproj +++ b/src/BlazorUI/Demo/Bit.BlazorUI.Demo.Server/Bit.BlazorUI.Demo.Server.csproj @@ -1,7 +1,7 @@  - net10.0 + net11.0 fcf350f4-eef5-430b-a5cb-144713a68932 @@ -16,19 +16,19 @@ - + all runtime; build; native; contentfiles; analyzers; buildtransitive - + all runtime; build; native; contentfiles; analyzers; buildtransitive - - - - + + + + diff --git a/src/BlazorUI/Demo/Client/Bit.BlazorUI.Demo.Client.Core/Pages/Components/Extras/MarkdownEditor/BitMarkdownEditorDemo.razor.cs b/src/BlazorUI/Demo/Client/Bit.BlazorUI.Demo.Client.Core/Pages/Components/Extras/MarkdownEditor/BitMarkdownEditorDemo.razor.cs index c3376510398..123339fd327 100644 --- a/src/BlazorUI/Demo/Client/Bit.BlazorUI.Demo.Client.Core/Pages/Components/Extras/MarkdownEditor/BitMarkdownEditorDemo.razor.cs +++ b/src/BlazorUI/Demo/Client/Bit.BlazorUI.Demo.Client.Core/Pages/Components/Extras/MarkdownEditor/BitMarkdownEditorDemo.razor.cs @@ -1307,11 +1307,11 @@ private void DraftRestored(string? value) private void EditorBlurred() => focusStatus = "The editor lost the keyboard focus."; - private void SubmitFromEditor(string? value) + private async Task SubmitFromEditor(string? value) { formModel.ReleaseNotes = value; - if (formEditContext.Validate()) HandleValidSubmit(); + if (await formEditContext.ValidateAsync()) HandleValidSubmit(); } private void HandleValidSubmit() => submittedStatus = $"Published {formModel.ReleaseNotes?.Length ?? 0} characters."; diff --git a/src/BlazorUI/Demo/Client/Bit.BlazorUI.Demo.Client.Core/Pages/Components/Extras/MarkdownEditor/BitMarkdownEditorDemo.razor.samples.cs b/src/BlazorUI/Demo/Client/Bit.BlazorUI.Demo.Client.Core/Pages/Components/Extras/MarkdownEditor/BitMarkdownEditorDemo.razor.samples.cs index 9e2da8788f6..f1974d203f6 100644 --- a/src/BlazorUI/Demo/Client/Bit.BlazorUI.Demo.Client.Core/Pages/Components/Extras/MarkdownEditor/BitMarkdownEditorDemo.razor.samples.cs +++ b/src/BlazorUI/Demo/Client/Bit.BlazorUI.Demo.Client.Core/Pages/Components/Extras/MarkdownEditor/BitMarkdownEditorDemo.razor.samples.cs @@ -422,11 +422,11 @@ protected override void OnInitialized() private void EditorBlurred() => focusStatus = ""The editor lost the keyboard focus.""; -private void SubmitFromEditor(string? value) +private async Task SubmitFromEditor(string? value) { formModel.ReleaseNotes = value; - if (formEditContext.Validate()) HandleValidSubmit(); + if (await formEditContext.ValidateAsync()) HandleValidSubmit(); } private void HandleValidSubmit() => submittedStatus = $""Published {formModel.ReleaseNotes?.Length ?? 0} characters."";"; diff --git a/src/BlazorUI/Demo/Client/Bit.BlazorUI.Demo.Client.Maui/Bit.BlazorUI.Demo.Client.Maui.csproj b/src/BlazorUI/Demo/Client/Bit.BlazorUI.Demo.Client.Maui/Bit.BlazorUI.Demo.Client.Maui.csproj index 3af962508ea..cb5ec08a4e5 100644 --- a/src/BlazorUI/Demo/Client/Bit.BlazorUI.Demo.Client.Maui/Bit.BlazorUI.Demo.Client.Maui.csproj +++ b/src/BlazorUI/Demo/Client/Bit.BlazorUI.Demo.Client.Maui/Bit.BlazorUI.Demo.Client.Maui.csproj @@ -1,11 +1,11 @@  - net10.0-android;net10.0-ios;net10.0-maccatalyst - $(TargetFrameworks);net10.0-windows10.0.19041.0 - net10.0-android + net11.0-android;net11.0-ios;net11.0-maccatalyst + $(TargetFrameworks);net11.0-windows10.0.19041.0 + net11.0-android - + Exe true true @@ -19,8 +19,6 @@ com.bitplatform.BlazorUI.Demo AC87AA5B-4B37-4E52-8468-2D5DF24AF258 - - True $(NoWarn);ClassWithoutModifierAnalyzer @@ -49,16 +47,9 @@ r8 True - True - true - true android-arm64 - - True - -all - @@ -98,12 +89,12 @@ - - + + all runtime; build; native; contentfiles; analyzers; buildtransitive - + all runtime; build; native; contentfiles; analyzers; buildtransitive @@ -116,8 +107,9 @@ - - + + + - net10.0 + net11.0 @@ -14,12 +14,12 @@ - - + + all runtime; build; native; contentfiles; analyzers; buildtransitive - + all runtime; build; native; contentfiles; analyzers; buildtransitive diff --git a/src/BlazorUI/Demo/Client/Bit.BlazorUI.Demo.Client.Web/Bit.BlazorUI.Demo.Client.Web.csproj b/src/BlazorUI/Demo/Client/Bit.BlazorUI.Demo.Client.Web/Bit.BlazorUI.Demo.Client.Web.csproj index d79f5b41fc1..d1d4b2d5aa6 100644 --- a/src/BlazorUI/Demo/Client/Bit.BlazorUI.Demo.Client.Web/Bit.BlazorUI.Demo.Client.Web.csproj +++ b/src/BlazorUI/Demo/Client/Bit.BlazorUI.Demo.Client.Web/Bit.BlazorUI.Demo.Client.Web.csproj @@ -1,7 +1,7 @@  - net10.0 + net11.0 true false @@ -23,15 +23,15 @@ - + all runtime; build; native; contentfiles; analyzers; buildtransitive - + all runtime; build; native; contentfiles; analyzers; buildtransitive - + diff --git a/src/BlazorUI/Demo/Client/Bit.BlazorUI.Demo.Client.Web/wwwroot/service-worker.published.js b/src/BlazorUI/Demo/Client/Bit.BlazorUI.Demo.Client.Web/wwwroot/service-worker.published.js index e4e4851c4cd..39ec3ce8e40 100644 --- a/src/BlazorUI/Demo/Client/Bit.BlazorUI.Demo.Client.Web/wwwroot/service-worker.published.js +++ b/src/BlazorUI/Demo/Client/Bit.BlazorUI.Demo.Client.Web/wwwroot/service-worker.published.js @@ -1,4 +1,4 @@ -// bit version: 10.7.0-pre-02 +// bit version: 11.0.0-pre-10 // https://github.com/bitfoundation/bitplatform/tree/develop/src/Bswup self.assetsInclude = []; diff --git a/src/BlazorUI/Demo/Client/Bit.BlazorUI.Demo.Client.Windows/Bit.BlazorUI.Demo.Client.Windows.csproj b/src/BlazorUI/Demo/Client/Bit.BlazorUI.Demo.Client.Windows/Bit.BlazorUI.Demo.Client.Windows.csproj index c86fa274bd1..dbe0123a439 100644 --- a/src/BlazorUI/Demo/Client/Bit.BlazorUI.Demo.Client.Windows/Bit.BlazorUI.Demo.Client.Windows.csproj +++ b/src/BlazorUI/Demo/Client/Bit.BlazorUI.Demo.Client.Windows/Bit.BlazorUI.Demo.Client.Windows.csproj @@ -2,7 +2,7 @@ WinExe - net10.0-windows + net11.0-windows enable enable true @@ -29,18 +29,19 @@ - - + + all runtime; build; native; contentfiles; analyzers; buildtransitive - + all runtime; build; native; contentfiles; analyzers; buildtransitive - - + + + diff --git a/src/BlazorUI/Demo/Client/Bit.BlazorUI.Demo.Client.Windows/Program.cs b/src/BlazorUI/Demo/Client/Bit.BlazorUI.Demo.Client.Windows/Program.cs index 01cf3696b09..dafd24400be 100644 --- a/src/BlazorUI/Demo/Client/Bit.BlazorUI.Demo.Client.Windows/Program.cs +++ b/src/BlazorUI/Demo/Client/Bit.BlazorUI.Demo.Client.Windows/Program.cs @@ -74,7 +74,8 @@ public static void Main(string[] args) Text = "bit BlazorUI", WindowState = FormWindowState.Maximized, BackColor = ColorTranslator.FromHtml("#0D2960"), - Icon = Icon.ExtractAssociatedIcon(Application.ExecutablePath) + Icon = Icon.ExtractAssociatedIcon(Application.ExecutablePath), + FormRevealMode = FormRevealMode.Deferred }; var blazorWebView = new BlazorWebView diff --git a/src/BlazorUI/Demo/Directory.Build.props b/src/BlazorUI/Demo/Directory.Build.props index bee09090485..ca1e9a5c3d5 100644 --- a/src/BlazorUI/Demo/Directory.Build.props +++ b/src/BlazorUI/Demo/Directory.Build.props @@ -13,7 +13,7 @@ en-US 15.0 - 15.0 + 17.0 26.0 10.0.17763.0 10.0.17763.0 diff --git a/src/BlazorUI/Tests/Bit.BlazorUI.Tests.Consumer/Bit.BlazorUI.Tests.Consumer.csproj b/src/BlazorUI/Tests/Bit.BlazorUI.Tests.Consumer/Bit.BlazorUI.Tests.Consumer.csproj index 17160549366..42be9f2dfe7 100644 --- a/src/BlazorUI/Tests/Bit.BlazorUI.Tests.Consumer/Bit.BlazorUI.Tests.Consumer.csproj +++ b/src/BlazorUI/Tests/Bit.BlazorUI.Tests.Consumer/Bit.BlazorUI.Tests.Consumer.csproj @@ -13,7 +13,7 @@ It references the projects rather than the packages, so it checks the code of the branch it is built from. --> - net10.0 + net11.0 12 enable enable @@ -47,7 +47,7 @@ - + diff --git a/src/BlazorUI/Tests/Bit.BlazorUI.Tests.Mcp/Bit.BlazorUI.Tests.Mcp.csproj b/src/BlazorUI/Tests/Bit.BlazorUI.Tests.Mcp/Bit.BlazorUI.Tests.Mcp.csproj index 5accb3944f7..f580f416094 100644 --- a/src/BlazorUI/Tests/Bit.BlazorUI.Tests.Mcp/Bit.BlazorUI.Tests.Mcp.csproj +++ b/src/BlazorUI/Tests/Bit.BlazorUI.Tests.Mcp/Bit.BlazorUI.Tests.Mcp.csproj @@ -1,7 +1,7 @@  - net10.0 + net11.0 14.0 enable enable diff --git a/src/BlazorUI/Tests/Bit.BlazorUI.Tests.Trimming.Fixture/Bit.BlazorUI.Tests.Trimming.Fixture.csproj b/src/BlazorUI/Tests/Bit.BlazorUI.Tests.Trimming.Fixture/Bit.BlazorUI.Tests.Trimming.Fixture.csproj index b53c0d7e3e3..7dfd87dd179 100644 --- a/src/BlazorUI/Tests/Bit.BlazorUI.Tests.Trimming.Fixture/Bit.BlazorUI.Tests.Trimming.Fixture.csproj +++ b/src/BlazorUI/Tests/Bit.BlazorUI.Tests.Trimming.Fixture/Bit.BlazorUI.Tests.Trimming.Fixture.csproj @@ -16,7 +16,7 @@ --> - net10.0 + net11.0 enable enable false diff --git a/src/BlazorUI/Tests/Bit.BlazorUI.Tests.Trimming.Hosted.Client/Bit.BlazorUI.Tests.Trimming.Hosted.Client.csproj b/src/BlazorUI/Tests/Bit.BlazorUI.Tests.Trimming.Hosted.Client/Bit.BlazorUI.Tests.Trimming.Hosted.Client.csproj index ee1ee6fa4f0..bcb054a87e7 100644 --- a/src/BlazorUI/Tests/Bit.BlazorUI.Tests.Trimming.Hosted.Client/Bit.BlazorUI.Tests.Trimming.Hosted.Client.csproj +++ b/src/BlazorUI/Tests/Bit.BlazorUI.Tests.Trimming.Hosted.Client/Bit.BlazorUI.Tests.Trimming.Hosted.Client.csproj @@ -14,7 +14,7 @@ --> - net10.0 + net11.0 enable enable false @@ -33,7 +33,7 @@ - + diff --git a/src/BlazorUI/Tests/Bit.BlazorUI.Tests.Trimming.Hosted/Bit.BlazorUI.Tests.Trimming.Hosted.csproj b/src/BlazorUI/Tests/Bit.BlazorUI.Tests.Trimming.Hosted/Bit.BlazorUI.Tests.Trimming.Hosted.csproj index df6aec00896..6ab7550a719 100644 --- a/src/BlazorUI/Tests/Bit.BlazorUI.Tests.Trimming.Hosted/Bit.BlazorUI.Tests.Trimming.Hosted.csproj +++ b/src/BlazorUI/Tests/Bit.BlazorUI.Tests.Trimming.Hosted/Bit.BlazorUI.Tests.Trimming.Hosted.csproj @@ -14,7 +14,7 @@ --> - net10.0 + net11.0 enable enable false diff --git a/src/BlazorUI/Tests/Bit.BlazorUI.Tests.Trimming/Bit.BlazorUI.Tests.Trimming.csproj b/src/BlazorUI/Tests/Bit.BlazorUI.Tests.Trimming/Bit.BlazorUI.Tests.Trimming.csproj index 28af9de4850..2e800c0ded6 100644 --- a/src/BlazorUI/Tests/Bit.BlazorUI.Tests.Trimming/Bit.BlazorUI.Tests.Trimming.csproj +++ b/src/BlazorUI/Tests/Bit.BlazorUI.Tests.Trimming/Bit.BlazorUI.Tests.Trimming.csproj @@ -14,7 +14,7 @@ --> - net10.0 + net11.0 14.0 enable enable diff --git a/src/BlazorUI/Tests/Bit.BlazorUI.Tests.Trimming/Infrastructure/PublishResult.cs b/src/BlazorUI/Tests/Bit.BlazorUI.Tests.Trimming/Infrastructure/PublishResult.cs index 65a63dd7b7c..85447130cb5 100644 --- a/src/BlazorUI/Tests/Bit.BlazorUI.Tests.Trimming/Infrastructure/PublishResult.cs +++ b/src/BlazorUI/Tests/Bit.BlazorUI.Tests.Trimming/Infrastructure/PublishResult.cs @@ -126,7 +126,7 @@ public List PublishedModules(string package) public AssemblyMetadata ReadTrimmedAssembly(string package) => AssemblyMetadata.Read(Path.Combine(Directory, "trimmed", package + ".dll")); /// A package's assembly as its Release build wrote it - the one a publish of the source tree trims. - public static AssemblyMetadata ReadUntrimmedAssembly(string package) => AssemblyMetadata.Read(Path.Combine(Publisher.Root, package, "bin", "Release", "net10.0", package + ".dll")); + public static AssemblyMetadata ReadUntrimmedAssembly(string package) => AssemblyMetadata.Read(Path.Combine(Publisher.Root, package, "bin", "Release", "net11.0", package + ".dll")); /// /// The JavaScript initializers a Blazor Web App's publish lists for Blazor to import as it starts (its modules manifest), diff --git a/src/BlazorUI/Tests/Bit.BlazorUI.Tests/Bit.BlazorUI.Tests.csproj b/src/BlazorUI/Tests/Bit.BlazorUI.Tests/Bit.BlazorUI.Tests.csproj index df4f4fa7786..6fc84ef4aed 100644 --- a/src/BlazorUI/Tests/Bit.BlazorUI.Tests/Bit.BlazorUI.Tests.csproj +++ b/src/BlazorUI/Tests/Bit.BlazorUI.Tests/Bit.BlazorUI.Tests.csproj @@ -3,10 +3,10 @@ - net10.0;net9.0;net8.0 + net11.0;net10.0;net9.0;net8.0 - net10.0 + only, CI passes -p:BuildAllTfms=true to cover net10.0, net9.0 and net8.0 as well. --> + net11.0 false 14.0 enable @@ -71,6 +71,7 @@ + diff --git a/src/BlazorUI/Tests/E2E/Bit.BlazorUI.Tests.E2E.TestHost.Client/Bit.BlazorUI.Tests.E2E.TestHost.Client.csproj b/src/BlazorUI/Tests/E2E/Bit.BlazorUI.Tests.E2E.TestHost.Client/Bit.BlazorUI.Tests.E2E.TestHost.Client.csproj index 5deb9158d4b..039905a9548 100644 --- a/src/BlazorUI/Tests/E2E/Bit.BlazorUI.Tests.E2E.TestHost.Client/Bit.BlazorUI.Tests.E2E.TestHost.Client.csproj +++ b/src/BlazorUI/Tests/E2E/Bit.BlazorUI.Tests.E2E.TestHost.Client/Bit.BlazorUI.Tests.E2E.TestHost.Client.csproj @@ -5,10 +5,10 @@ per browser context from the e2e-render-mode cookie the tests set (see App.razor). The root namespace is the host's, so the pages keep the namespaces they had when they lived in the host itself. --> - net10.0;net9.0;net8.0 + net11.0;net10.0;net9.0;net8.0 - net10.0 + -p:BuildAllTfms=true to cover net10.0, net9.0 and net8.0 as well. --> + net11.0 enable enable preview @@ -26,6 +26,7 @@ + diff --git a/src/BlazorUI/Tests/E2E/Bit.BlazorUI.Tests.E2E.TestHost/Bit.BlazorUI.Tests.E2E.TestHost.csproj b/src/BlazorUI/Tests/E2E/Bit.BlazorUI.Tests.E2E.TestHost/Bit.BlazorUI.Tests.E2E.TestHost.csproj index b8aab27cfd2..423c79dc59f 100644 --- a/src/BlazorUI/Tests/E2E/Bit.BlazorUI.Tests.E2E.TestHost/Bit.BlazorUI.Tests.E2E.TestHost.csproj +++ b/src/BlazorUI/Tests/E2E/Bit.BlazorUI.Tests.E2E.TestHost/Bit.BlazorUI.Tests.E2E.TestHost.csproj @@ -1,10 +1,10 @@  - net10.0;net9.0;net8.0 + net11.0;net10.0;net9.0;net8.0 - net10.0 + -p:BuildAllTfms=true to cover net10.0, net9.0 and net8.0 as well. --> + net11.0 enable enable preview @@ -15,6 +15,7 @@ + diff --git a/src/BlazorUI/Tests/E2E/Bit.BlazorUI.Tests.E2E/Bit.BlazorUI.Tests.E2E.csproj b/src/BlazorUI/Tests/E2E/Bit.BlazorUI.Tests.E2E/Bit.BlazorUI.Tests.E2E.csproj index cdf70108378..c54249c5054 100644 --- a/src/BlazorUI/Tests/E2E/Bit.BlazorUI.Tests.E2E/Bit.BlazorUI.Tests.E2E.csproj +++ b/src/BlazorUI/Tests/E2E/Bit.BlazorUI.Tests.E2E/Bit.BlazorUI.Tests.E2E.csproj @@ -1,10 +1,10 @@  - net10.0;net9.0;net8.0 + net11.0;net10.0;net9.0;net8.0 - net10.0 + -p:BuildAllTfms=true to cover net10.0, net9.0 and net8.0 as well. --> + net11.0 false 14.0 enable diff --git a/src/BlazorUI/Tests/E2E/README.md b/src/BlazorUI/Tests/E2E/README.md index 011a2ecfff9..aa1e9d68227 100644 --- a/src/BlazorUI/Tests/E2E/README.md +++ b/src/BlazorUI/Tests/E2E/README.md @@ -32,10 +32,10 @@ E2E/ ## Running Build the solution once (`dotnet build src/BlazorUI/Bit.BlazorUI.slnx`), install the Playwright browsers once -(`pwsh Bit.BlazorUI.Tests.E2E/bin/Debug/net10.0/playwright.ps1 install`), then in `Bit.BlazorUI.Tests.E2E`: +(`pwsh Bit.BlazorUI.Tests.E2E/bin/Debug/net11.0/playwright.ps1 install`), then in `Bit.BlazorUI.Tests.E2E`: ```bash -dotnet test -f net10.0 +dotnet test -f net11.0 ``` The first test starts the host (`dotnet run` of the TestHost on `http://localhost:5290`) and the run stops it at the @@ -43,7 +43,7 @@ end. To pay the host's build once across runs, or to debug a page by hand, start it: ```bash -dotnet run --project Bit.BlazorUI.Tests.E2E.TestHost --framework net10.0 --urls http://localhost:5290 +dotnet run --project Bit.BlazorUI.Tests.E2E.TestHost --framework net11.0 --urls http://localhost:5290 ``` | Variable | Meaning | @@ -53,7 +53,7 @@ dotnet run --project Bit.BlazorUI.Tests.E2E.TestHost --framework net10.0 --urls | `HEADED=1` | watch the browser | | `E2E_HOST_URL` | the host to drive instead of `http://localhost:5290` | -Filter as usual: `dotnet test -f net10.0 --filter "FullyQualifiedName~BitButtonE2ETests"`. Test classes run four at +Filter as usual: `dotnet test -f net11.0 --filter "FullyQualifiedName~BitButtonE2ETests"`. Test classes run four at a time (`E2ETestRun.cs`); the tests of a class run in order. The whole suite is about 6,800 tests and takes roughly a quarter of an hour on Chromium. On a loaded machine a Blazor Server circuit can time out or a fast keystroke can be lost; a test that fails only in the full run and passes alone is load, not a regression. @@ -61,7 +61,7 @@ lost; a test that fails only in the full run and passes alone is load, not a reg If `dotnet test` reports that zero tests ran, run the built assembly directly: ```bash -E2E_HOST_URL=http://localhost:5290 dotnet exec bin/Debug/net10.0/Bit.BlazorUI.Tests.E2E.dll --filter "FullyQualifiedName~BitButtonE2ETests" +E2E_HOST_URL=http://localhost:5290 dotnet exec bin/Debug/net11.0/Bit.BlazorUI.Tests.E2E.dll --filter "FullyQualifiedName~BitButtonE2ETests" ``` ## Writing a page and its tests diff --git a/src/BlazorUI/Tests/Performance/Bit.BlazorUI.Tests.PdfPerformance/Bit.BlazorUI.Tests.PdfPerformance.csproj b/src/BlazorUI/Tests/Performance/Bit.BlazorUI.Tests.PdfPerformance/Bit.BlazorUI.Tests.PdfPerformance.csproj index 616cd213381..b4ccbc2aabe 100644 --- a/src/BlazorUI/Tests/Performance/Bit.BlazorUI.Tests.PdfPerformance/Bit.BlazorUI.Tests.PdfPerformance.csproj +++ b/src/BlazorUI/Tests/Performance/Bit.BlazorUI.Tests.PdfPerformance/Bit.BlazorUI.Tests.PdfPerformance.csproj @@ -2,7 +2,7 @@ Exe - net10.0 + net11.0 false enable enable diff --git a/src/BlazorUI/Tests/Performance/Bit.BlazorUI.Tests.Performance.TestHost/Bit.BlazorUI.Tests.Performance.TestHost.csproj b/src/BlazorUI/Tests/Performance/Bit.BlazorUI.Tests.Performance.TestHost/Bit.BlazorUI.Tests.Performance.TestHost.csproj index 23595be4068..c190dd263d0 100644 --- a/src/BlazorUI/Tests/Performance/Bit.BlazorUI.Tests.Performance.TestHost/Bit.BlazorUI.Tests.Performance.TestHost.csproj +++ b/src/BlazorUI/Tests/Performance/Bit.BlazorUI.Tests.Performance.TestHost/Bit.BlazorUI.Tests.Performance.TestHost.csproj @@ -1,18 +1,18 @@  - net10.0;net9.0;net8.0 + net11.0;net10.0;net9.0;net8.0 - net10.0 + -p:BuildAllTfms=true to cover net10.0, net9.0 and net8.0 as well. Without this the net10.0/net9.0/net8.0 + TFMs of this host would reference a Debug Bit.BlazorUI that only builds net11.0. --> + net11.0 enable enable preview - + diff --git a/src/BlazorUI/Tests/Performance/Bit.BlazorUI.Tests.Performance/Bit.BlazorUI.Tests.Performance.csproj b/src/BlazorUI/Tests/Performance/Bit.BlazorUI.Tests.Performance/Bit.BlazorUI.Tests.Performance.csproj index 1776478ff6a..9c0dd48822b 100644 --- a/src/BlazorUI/Tests/Performance/Bit.BlazorUI.Tests.Performance/Bit.BlazorUI.Tests.Performance.csproj +++ b/src/BlazorUI/Tests/Performance/Bit.BlazorUI.Tests.Performance/Bit.BlazorUI.Tests.Performance.csproj @@ -3,10 +3,10 @@ - net10.0;net9.0;net8.0 + net11.0;net10.0;net9.0;net8.0 - net10.0 + -p:BuildAllTfms=true to cover net10.0, net9.0 and net8.0 as well. --> + net11.0 false 14.0 enable diff --git a/src/Brouter/Bit.Brouter.Demo/Client/Bit.Brouter.Demo.Client.csproj b/src/Brouter/Bit.Brouter.Demo/Client/Bit.Brouter.Demo.Client.csproj index 3acacee05ab..2392ead95b4 100644 --- a/src/Brouter/Bit.Brouter.Demo/Client/Bit.Brouter.Demo.Client.csproj +++ b/src/Brouter/Bit.Brouter.Demo/Client/Bit.Brouter.Demo.Client.csproj @@ -1,7 +1,8 @@  - net10.0 + net11.0 + false enable enable true @@ -16,7 +17,7 @@ - + diff --git a/src/Brouter/Bit.Brouter.Demo/Client/Pages/GeneratorPage.razor b/src/Brouter/Bit.Brouter.Demo/Client/Pages/GeneratorPage.razor index b321eef9834..f1c6cf7f301 100644 --- a/src/Brouter/Bit.Brouter.Demo/Client/Pages/GeneratorPage.razor +++ b/src/Brouter/Bit.Brouter.Demo/Client/Pages/GeneratorPage.razor @@ -36,8 +36,8 @@ dotnet add package Bit.Brouter.Generators <!-- ...or declare them in your .csproj. Bit.Brouter.Generators is an analyzer-only package (it ships no runtime assembly), so PrivateAssets="all" keeps it out of your own package's dependencies: --> -<PackageReference Include="Bit.Brouter" Version="10.7.0-pre-02" /> -<PackageReference Include="Bit.Brouter.Generators" Version="10.7.0-pre-02" PrivateAssets="all" /> +<PackageReference Include="Bit.Brouter" Version="11.0.0-pre-10" /> +<PackageReference Include="Bit.Brouter.Generators" Version="11.0.0-pre-10" PrivateAssets="all" />

Nothing else is wired up by hand: the package drops the generator into the compiler, and the very next build emits BrouterRoutes from the routes already declared in diff --git a/src/Brouter/Bit.Brouter.Demo/Client/Pages/GettingStartedPage.razor b/src/Brouter/Bit.Brouter.Demo/Client/Pages/GettingStartedPage.razor index 61dad00796f..5b6104a3c91 100644 --- a/src/Brouter/Bit.Brouter.Demo/Client/Pages/GettingStartedPage.razor +++ b/src/Brouter/Bit.Brouter.Demo/Client/Pages/GettingStartedPage.razor @@ -24,8 +24,8 @@ dotnet add package Bit.Brouter.Generators <!-- ...or declare them in your .csproj. PrivateAssets="all" on the generator keeps the analyzer out of your own package's dependencies: --> -<PackageReference Include="Bit.Brouter" Version="10.7.0-pre-02" /> -<PackageReference Include="Bit.Brouter.Generators" Version="10.7.0-pre-02" PrivateAssets="all" /> +<PackageReference Include="Bit.Brouter" Version="11.0.0-pre-10" /> +<PackageReference Include="Bit.Brouter.Generators" Version="11.0.0-pre-10" PrivateAssets="all" />

diff --git a/src/Brouter/Bit.Brouter.Demo/Server/Bit.Brouter.Demo.Server.csproj b/src/Brouter/Bit.Brouter.Demo/Server/Bit.Brouter.Demo.Server.csproj index 1b29f2a8b50..0c97237acb3 100644 --- a/src/Brouter/Bit.Brouter.Demo/Server/Bit.Brouter.Demo.Server.csproj +++ b/src/Brouter/Bit.Brouter.Demo/Server/Bit.Brouter.Demo.Server.csproj @@ -1,7 +1,7 @@  - net10.0 + net11.0 enable enable true @@ -10,7 +10,7 @@ - + diff --git a/src/Brouter/Bit.Brouter.Demo/Server/Program.cs b/src/Brouter/Bit.Brouter.Demo/Server/Program.cs index 4626fa3d830..98e1e3f0708 100644 --- a/src/Brouter/Bit.Brouter.Demo/Server/Program.cs +++ b/src/Brouter/Bit.Brouter.Demo/Server/Program.cs @@ -72,11 +72,7 @@ var app = builder.Build(); -if (app.Environment.IsDevelopment()) -{ - app.UseWebAssemblyDebugging(); -} -else +if (app.Environment.IsDevelopment() is false) { app.UseExceptionHandler("/Error", createScopeForErrors: true); app.UseHsts(); diff --git a/src/Brouter/Bit.Brouter.Demo/Server/Properties/launchSettings.json b/src/Brouter/Bit.Brouter.Demo/Server/Properties/launchSettings.json index d63e94094d3..aed0dd13e20 100644 --- a/src/Brouter/Bit.Brouter.Demo/Server/Properties/launchSettings.json +++ b/src/Brouter/Bit.Brouter.Demo/Server/Properties/launchSettings.json @@ -5,7 +5,6 @@ "commandName": "Project", "dotnetRunMessages": true, "launchBrowser": true, - "inspectUri": "{wsProtocol}://{url.hostname}:{url.port}/_framework/debug/ws-proxy?browser={browserInspectUri}", "applicationUrl": "https://localhost:7185;http://localhost:5185", "environmentVariables": { "ASPNETCORE_ENVIRONMENT": "Development" diff --git a/src/Brouter/Bit.Brouter/Bit.Brouter.csproj b/src/Brouter/Bit.Brouter/Bit.Brouter.csproj index 7481d776e8b..4aa175cbde1 100644 --- a/src/Brouter/Bit.Brouter/Bit.Brouter.csproj +++ b/src/Brouter/Bit.Brouter/Bit.Brouter.csproj @@ -3,7 +3,7 @@ - net10.0;net9.0;net8.0 + net11.0;net10.0;net9.0;net8.0 true @@ -19,9 +19,11 @@ + + diff --git a/src/Brouter/Samples/Auto/Bit.Brouter.Samples.Auto.Client/Bit.Brouter.Samples.Auto.Client.csproj b/src/Brouter/Samples/Auto/Bit.Brouter.Samples.Auto.Client/Bit.Brouter.Samples.Auto.Client.csproj index 5506546cfea..5f194ad07c8 100644 --- a/src/Brouter/Samples/Auto/Bit.Brouter.Samples.Auto.Client/Bit.Brouter.Samples.Auto.Client.csproj +++ b/src/Brouter/Samples/Auto/Bit.Brouter.Samples.Auto.Client/Bit.Brouter.Samples.Auto.Client.csproj @@ -1,7 +1,8 @@ - net10.0 + net11.0 + false enable enable true @@ -10,7 +11,7 @@ - + diff --git a/src/Brouter/Samples/Auto/Bit.Brouter.Samples.Auto/Bit.Brouter.Samples.Auto.csproj b/src/Brouter/Samples/Auto/Bit.Brouter.Samples.Auto/Bit.Brouter.Samples.Auto.csproj index b391debe9c0..ccace1e7bab 100644 --- a/src/Brouter/Samples/Auto/Bit.Brouter.Samples.Auto/Bit.Brouter.Samples.Auto.csproj +++ b/src/Brouter/Samples/Auto/Bit.Brouter.Samples.Auto/Bit.Brouter.Samples.Auto.csproj @@ -1,14 +1,14 @@ - net10.0 + net11.0 enable enable true - + diff --git a/src/Brouter/Samples/Auto/Bit.Brouter.Samples.Auto/Program.cs b/src/Brouter/Samples/Auto/Bit.Brouter.Samples.Auto/Program.cs index 860cfd9940e..c4d497686d7 100644 --- a/src/Brouter/Samples/Auto/Bit.Brouter.Samples.Auto/Program.cs +++ b/src/Brouter/Samples/Auto/Bit.Brouter.Samples.Auto/Program.cs @@ -10,11 +10,7 @@ var app = builder.Build(); -if (app.Environment.IsDevelopment()) -{ - app.UseWebAssemblyDebugging(); -} -else +if (app.Environment.IsDevelopment() is false) { app.UseExceptionHandler("/Error", createScopeForErrors: true); app.UseHsts(); diff --git a/src/Brouter/Samples/Auto/Bit.Brouter.Samples.Auto/Properties/launchSettings.json b/src/Brouter/Samples/Auto/Bit.Brouter.Samples.Auto/Properties/launchSettings.json index 2c2b4cf268a..36cec70ffe0 100644 --- a/src/Brouter/Samples/Auto/Bit.Brouter.Samples.Auto/Properties/launchSettings.json +++ b/src/Brouter/Samples/Auto/Bit.Brouter.Samples.Auto/Properties/launchSettings.json @@ -4,7 +4,6 @@ "commandName": "Project", "dotnetRunMessages": true, "launchBrowser": true, - "inspectUri": "{wsProtocol}://{url.hostname}:{url.port}/_framework/debug/ws-proxy?browser={browserInspectUri}", "applicationUrl": "https://localhost:7183;http://localhost:5183", "environmentVariables": { "ASPNETCORE_ENVIRONMENT": "Development" diff --git a/src/Brouter/Samples/Core/Bit.Brouter.Samples.Core.csproj b/src/Brouter/Samples/Core/Bit.Brouter.Samples.Core.csproj index 016007bc608..e32bd929df8 100644 --- a/src/Brouter/Samples/Core/Bit.Brouter.Samples.Core.csproj +++ b/src/Brouter/Samples/Core/Bit.Brouter.Samples.Core.csproj @@ -1,7 +1,7 @@  - net10.0 + net11.0 enable enable diff --git a/src/Brouter/Samples/Server/Bit.Brouter.Samples.Server.csproj b/src/Brouter/Samples/Server/Bit.Brouter.Samples.Server.csproj index 9087b840f04..15caf164210 100644 --- a/src/Brouter/Samples/Server/Bit.Brouter.Samples.Server.csproj +++ b/src/Brouter/Samples/Server/Bit.Brouter.Samples.Server.csproj @@ -1,7 +1,7 @@  - net10.0 + net11.0 enable enable true diff --git a/src/Brouter/Samples/Wasm/Bit.Brouter.Samples.Wasm.Client/Bit.Brouter.Samples.Wasm.Client.csproj b/src/Brouter/Samples/Wasm/Bit.Brouter.Samples.Wasm.Client/Bit.Brouter.Samples.Wasm.Client.csproj index 5506546cfea..5f194ad07c8 100644 --- a/src/Brouter/Samples/Wasm/Bit.Brouter.Samples.Wasm.Client/Bit.Brouter.Samples.Wasm.Client.csproj +++ b/src/Brouter/Samples/Wasm/Bit.Brouter.Samples.Wasm.Client/Bit.Brouter.Samples.Wasm.Client.csproj @@ -1,7 +1,8 @@ - net10.0 + net11.0 + false enable enable true @@ -10,7 +11,7 @@ - + diff --git a/src/Brouter/Samples/Wasm/Bit.Brouter.Samples.Wasm/Bit.Brouter.Samples.Wasm.csproj b/src/Brouter/Samples/Wasm/Bit.Brouter.Samples.Wasm/Bit.Brouter.Samples.Wasm.csproj index 5363068d95d..a3144ea3166 100644 --- a/src/Brouter/Samples/Wasm/Bit.Brouter.Samples.Wasm/Bit.Brouter.Samples.Wasm.csproj +++ b/src/Brouter/Samples/Wasm/Bit.Brouter.Samples.Wasm/Bit.Brouter.Samples.Wasm.csproj @@ -1,14 +1,14 @@ - net10.0 + net11.0 enable enable true - + diff --git a/src/Brouter/Samples/Wasm/Bit.Brouter.Samples.Wasm/Program.cs b/src/Brouter/Samples/Wasm/Bit.Brouter.Samples.Wasm/Program.cs index 91fb3d96f3d..952338d2d0a 100644 --- a/src/Brouter/Samples/Wasm/Bit.Brouter.Samples.Wasm/Program.cs +++ b/src/Brouter/Samples/Wasm/Bit.Brouter.Samples.Wasm/Program.cs @@ -10,11 +10,7 @@ var app = builder.Build(); -if (app.Environment.IsDevelopment()) -{ - app.UseWebAssemblyDebugging(); -} -else +if (app.Environment.IsDevelopment() is false) { app.UseExceptionHandler("/Error", createScopeForErrors: true); app.UseHsts(); diff --git a/src/Brouter/Samples/Wasm/Bit.Brouter.Samples.Wasm/Properties/launchSettings.json b/src/Brouter/Samples/Wasm/Bit.Brouter.Samples.Wasm/Properties/launchSettings.json index d75510e51d7..f34753cfdd3 100644 --- a/src/Brouter/Samples/Wasm/Bit.Brouter.Samples.Wasm/Properties/launchSettings.json +++ b/src/Brouter/Samples/Wasm/Bit.Brouter.Samples.Wasm/Properties/launchSettings.json @@ -4,7 +4,6 @@ "commandName": "Project", "dotnetRunMessages": true, "launchBrowser": true, - "inspectUri": "{wsProtocol}://{url.hostname}:{url.port}/_framework/debug/ws-proxy?browser={browserInspectUri}", "applicationUrl": "https://localhost:7182;http://localhost:5182", "environmentVariables": { "ASPNETCORE_ENVIRONMENT": "Development" diff --git a/src/Brouter/Tests/Bit.Brouter.Benchmarks/Bit.Brouter.Benchmarks.csproj b/src/Brouter/Tests/Bit.Brouter.Benchmarks/Bit.Brouter.Benchmarks.csproj index b1d132f44cc..5c4b3ff3f3e 100644 --- a/src/Brouter/Tests/Bit.Brouter.Benchmarks/Bit.Brouter.Benchmarks.csproj +++ b/src/Brouter/Tests/Bit.Brouter.Benchmarks/Bit.Brouter.Benchmarks.csproj @@ -2,10 +2,10 @@ Exe - - net10.0 + net11.0 enable enable false diff --git a/src/Brouter/Tests/Bit.Brouter.Tests.E2E/Bit.Brouter.Tests.E2E.csproj b/src/Brouter/Tests/Bit.Brouter.Tests.E2E/Bit.Brouter.Tests.E2E.csproj index 744c7c0b7a5..a5f73f6d541 100644 --- a/src/Brouter/Tests/Bit.Brouter.Tests.E2E/Bit.Brouter.Tests.E2E.csproj +++ b/src/Brouter/Tests/Bit.Brouter.Tests.E2E/Bit.Brouter.Tests.E2E.csproj @@ -1,7 +1,7 @@  - net10.0 + net11.0 enable enable false diff --git a/src/Brouter/Tests/Bit.Brouter.Tests.E2E/HybridModeTests.cs b/src/Brouter/Tests/Bit.Brouter.Tests.E2E/HybridModeTests.cs index 6f433bbfe6c..b2a2200d9dc 100644 --- a/src/Brouter/Tests/Bit.Brouter.Tests.E2E/HybridModeTests.cs +++ b/src/Brouter/Tests/Bit.Brouter.Tests.E2E/HybridModeTests.cs @@ -18,7 +18,7 @@ public class HybridModeTests : InteractiveHarnessTests { protected override string BaseUrl => HybridHarnessHost.AppOrigin; - protected override string Framework => "net10.0"; + protected override string Framework => "net11.0"; protected override bool Prerenders => false; diff --git a/src/Brouter/Tests/Bit.Brouter.Tests.E2E/Infrastructure/E2EEnvironment.cs b/src/Brouter/Tests/Bit.Brouter.Tests.E2E/Infrastructure/E2EEnvironment.cs index db5699ec868..62f9bdb8978 100644 --- a/src/Brouter/Tests/Bit.Brouter.Tests.E2E/Infrastructure/E2EEnvironment.cs +++ b/src/Brouter/Tests/Bit.Brouter.Tests.E2E/Infrastructure/E2EEnvironment.cs @@ -8,9 +8,9 @@ public static class E2EEnvironment { /// /// BROUTER_E2E_FRAMEWORK: the target framework the web harness host runs on - /// (net10.0, net9.0 or net8.0). Defaults to net10.0. The hybrid host is always net10.0-windows. + /// (net11.0, net10.0, net9.0 or net8.0). Defaults to net11.0. The hybrid host is always net11.0-windows. /// - public static string Framework { get; } = Read("BROUTER_E2E_FRAMEWORK") ?? "net10.0"; + public static string Framework { get; } = Read("BROUTER_E2E_FRAMEWORK") ?? "net11.0"; /// /// BROUTER_E2E_CONFIGURATION: the build configuration of the harness hosts. Defaults to the diff --git a/src/Brouter/Tests/Bit.Brouter.Tests.E2E/Infrastructure/RepoLayout.cs b/src/Brouter/Tests/Bit.Brouter.Tests.E2E/Infrastructure/RepoLayout.cs index 44da9a9508e..6c20de62726 100644 --- a/src/Brouter/Tests/Bit.Brouter.Tests.E2E/Infrastructure/RepoLayout.cs +++ b/src/Brouter/Tests/Bit.Brouter.Tests.E2E/Infrastructure/RepoLayout.cs @@ -17,7 +17,7 @@ public static string WebHostAssembly(string framework, string configuration) => Path.Combine(Path.GetDirectoryName(WebHostProject())!, "bin", configuration, framework, $"{WebHostName}.dll"); public static string HybridHostExecutable(string configuration) => - Path.Combine(Path.GetDirectoryName(HybridHostProject())!, "bin", configuration, "net10.0-windows", $"{HybridHostName}.exe"); + Path.Combine(Path.GetDirectoryName(HybridHostProject())!, "bin", configuration, "net11.0-windows", $"{HybridHostName}.exe"); private static string FindUpward(string relativePath) { diff --git a/src/Brouter/Tests/Bit.Brouter.Tests.E2E/publish-gate.sh b/src/Brouter/Tests/Bit.Brouter.Tests.E2E/publish-gate.sh index ba7dd09eadd..b49791d7135 100644 --- a/src/Brouter/Tests/Bit.Brouter.Tests.E2E/publish-gate.sh +++ b/src/Brouter/Tests/Bit.Brouter.Tests.E2E/publish-gate.sh @@ -17,8 +17,8 @@ set -euo pipefail here="$(cd "$(dirname "$0")" && pwd)" -# TargetFrameworks=net10.0 on top of -f: -f alone does not reach project references, which then still +# TargetFrameworks=net11.0 on top of -f: -f alone does not reach project references, which then still # evaluate every framework they target - and with RunAOTCompilation each of those demands its own # wasm-tools workload. exec bash "$here/../../../publish-gate.sh" Bit.Brouter Tests "$here/../Bit.Brouter.Tests.Harness.Web/Bit.Brouter.Tests.Harness.Web.csproj" \ - "$1" -f net10.0 -p:TargetFrameworks=net10.0 "${@:2}" + "$1" -f net11.0 -p:TargetFrameworks=net11.0 "${@:2}" diff --git a/src/Brouter/Tests/Bit.Brouter.Tests.Generators/Bit.Brouter.Tests.Generators.csproj b/src/Brouter/Tests/Bit.Brouter.Tests.Generators/Bit.Brouter.Tests.Generators.csproj index 93144130e3f..36eb0288ea4 100644 --- a/src/Brouter/Tests/Bit.Brouter.Tests.Generators/Bit.Brouter.Tests.Generators.csproj +++ b/src/Brouter/Tests/Bit.Brouter.Tests.Generators/Bit.Brouter.Tests.Generators.csproj @@ -1,7 +1,7 @@  - net10.0 + net11.0 enable enable false diff --git a/src/Brouter/Tests/Bit.Brouter.Tests.Harness.Hybrid/Bit.Brouter.Tests.Harness.Hybrid.csproj b/src/Brouter/Tests/Bit.Brouter.Tests.Harness.Hybrid/Bit.Brouter.Tests.Harness.Hybrid.csproj index 8f63fa8d120..40fc04a87b3 100644 --- a/src/Brouter/Tests/Bit.Brouter.Tests.Harness.Hybrid/Bit.Brouter.Tests.Harness.Hybrid.csproj +++ b/src/Brouter/Tests/Bit.Brouter.Tests.Harness.Hybrid/Bit.Brouter.Tests.Harness.Hybrid.csproj @@ -8,7 +8,7 @@ WinExe - net10.0-windows + net11.0-windows true true @@ -18,7 +18,8 @@ - + + diff --git a/src/Brouter/Tests/Bit.Brouter.Tests.Harness.Web.Client/Bit.Brouter.Tests.Harness.Web.Client.csproj b/src/Brouter/Tests/Bit.Brouter.Tests.Harness.Web.Client/Bit.Brouter.Tests.Harness.Web.Client.csproj index 1d7a2ceebfc..c9fb26b194f 100644 --- a/src/Brouter/Tests/Bit.Brouter.Tests.Harness.Web.Client/Bit.Brouter.Tests.Harness.Web.Client.csproj +++ b/src/Brouter/Tests/Bit.Brouter.Tests.Harness.Web.Client/Bit.Brouter.Tests.Harness.Web.Client.csproj @@ -1,7 +1,7 @@  - net10.0;net9.0;net8.0 + net11.0;net10.0;net9.0;net8.0 enable enable false @@ -14,6 +14,7 @@ + diff --git a/src/Brouter/Tests/Bit.Brouter.Tests.Harness.Web/Bit.Brouter.Tests.Harness.Web.csproj b/src/Brouter/Tests/Bit.Brouter.Tests.Harness.Web/Bit.Brouter.Tests.Harness.Web.csproj index 3a5f3ef0352..0319299db74 100644 --- a/src/Brouter/Tests/Bit.Brouter.Tests.Harness.Web/Bit.Brouter.Tests.Harness.Web.csproj +++ b/src/Brouter/Tests/Bit.Brouter.Tests.Harness.Web/Bit.Brouter.Tests.Harness.Web.csproj @@ -8,7 +8,7 @@ Bit.Brouter ships for. --> - net10.0;net9.0;net8.0 + net11.0;net10.0;net9.0;net8.0 enable enable false @@ -19,6 +19,7 @@ + diff --git a/src/Brouter/Tests/Bit.Brouter.Tests.Harness.Web/Properties/launchSettings.json b/src/Brouter/Tests/Bit.Brouter.Tests.Harness.Web/Properties/launchSettings.json index 684ed5905e3..b4e3b844dea 100644 --- a/src/Brouter/Tests/Bit.Brouter.Tests.Harness.Web/Properties/launchSettings.json +++ b/src/Brouter/Tests/Bit.Brouter.Tests.Harness.Web/Properties/launchSettings.json @@ -18,7 +18,6 @@ "commandName": "Project", "commandLineArgs": "--BrouterHarness:Mode=wasm", "launchBrowser": true, - "inspectUri": "{wsProtocol}://{url.hostname}:{url.port}/_framework/debug/ws-proxy?browser={browserInspectUri}", "applicationUrl": "http://localhost:5290", "environmentVariables": { "ASPNETCORE_ENVIRONMENT": "Development" } }, diff --git a/src/Brouter/Tests/Bit.Brouter.Tests.Harness/Bit.Brouter.Tests.Harness.csproj b/src/Brouter/Tests/Bit.Brouter.Tests.Harness/Bit.Brouter.Tests.Harness.csproj index 86fa52004fe..7c9ec6d7efc 100644 --- a/src/Brouter/Tests/Bit.Brouter.Tests.Harness/Bit.Brouter.Tests.Harness.csproj +++ b/src/Brouter/Tests/Bit.Brouter.Tests.Harness/Bit.Brouter.Tests.Harness.csproj @@ -6,7 +6,7 @@ suites run the same assertions against every host and attribute a difference to the host. --> - net10.0;net9.0;net8.0 + net11.0;net10.0;net9.0;net8.0 enable enable false diff --git a/src/Brouter/Tests/Bit.Brouter.Tests.Hosting/AssemblySetup.cs b/src/Brouter/Tests/Bit.Brouter.Tests.Hosting/AssemblySetup.cs index 335413f586f..145f2d54d20 100644 --- a/src/Brouter/Tests/Bit.Brouter.Tests.Hosting/AssemblySetup.cs +++ b/src/Brouter/Tests/Bit.Brouter.Tests.Hosting/AssemblySetup.cs @@ -13,7 +13,7 @@ public static class AssemblySetup public static async Task CleanupAsync() { await HarnessHostFactory.DisposeSharedAsync(); -#if NET10_0_OR_GREATER +#if NET11_0_OR_GREATER await SampleHostFactories.DisposeAsync(); #endif } diff --git a/src/Brouter/Tests/Bit.Brouter.Tests.Hosting/Bit.Brouter.Tests.Hosting.csproj b/src/Brouter/Tests/Bit.Brouter.Tests.Hosting/Bit.Brouter.Tests.Hosting.csproj index 86a0e4ef45d..cf5ee7f93aa 100644 --- a/src/Brouter/Tests/Bit.Brouter.Tests.Hosting/Bit.Brouter.Tests.Hosting.csproj +++ b/src/Brouter/Tests/Bit.Brouter.Tests.Hosting/Bit.Brouter.Tests.Hosting.csproj @@ -7,7 +7,7 @@ runs on every target framework in the regular CI job. --> - net10.0;net9.0;net8.0 + net11.0;net10.0;net9.0;net8.0 enable enable false @@ -23,14 +23,15 @@ + - - + + diff --git a/src/Brouter/Tests/Bit.Brouter.Tests.Hosting/SamplesHostingTests.cs b/src/Brouter/Tests/Bit.Brouter.Tests.Hosting/SamplesHostingTests.cs index d93a645d8b5..3d5794a53f1 100644 --- a/src/Brouter/Tests/Bit.Brouter.Tests.Hosting/SamplesHostingTests.cs +++ b/src/Brouter/Tests/Bit.Brouter.Tests.Hosting/SamplesHostingTests.cs @@ -1,4 +1,4 @@ -#if NET10_0_OR_GREATER +#if NET11_0_OR_GREATER using System.Net; using Microsoft.AspNetCore.Mvc.Testing; diff --git a/src/Brouter/Tests/Bit.Brouter.Tests.Mcp/Bit.Brouter.Tests.Mcp.csproj b/src/Brouter/Tests/Bit.Brouter.Tests.Mcp/Bit.Brouter.Tests.Mcp.csproj index 70f8365ea03..2bc3577090c 100644 --- a/src/Brouter/Tests/Bit.Brouter.Tests.Mcp/Bit.Brouter.Tests.Mcp.csproj +++ b/src/Brouter/Tests/Bit.Brouter.Tests.Mcp/Bit.Brouter.Tests.Mcp.csproj @@ -3,7 +3,7 @@ - net10.0 + net11.0 enable enable false @@ -18,7 +18,7 @@ - + diff --git a/src/Brouter/Tests/Bit.Brouter.Tests/Bit.Brouter.Tests.csproj b/src/Brouter/Tests/Bit.Brouter.Tests/Bit.Brouter.Tests.csproj index 39457135df2..ef606a1d30a 100644 --- a/src/Brouter/Tests/Bit.Brouter.Tests/Bit.Brouter.Tests.csproj +++ b/src/Brouter/Tests/Bit.Brouter.Tests/Bit.Brouter.Tests.csproj @@ -3,7 +3,7 @@ - net10.0;net9.0;net8.0 + net11.0;net10.0;net9.0;net8.0 enable enable false diff --git a/src/Bswup/Bit.Bswup.Demo/Client/Bit.Bswup.Demo.Client.csproj b/src/Bswup/Bit.Bswup.Demo/Client/Bit.Bswup.Demo.Client.csproj index 6c344da72e6..856512d007c 100644 --- a/src/Bswup/Bit.Bswup.Demo/Client/Bit.Bswup.Demo.Client.csproj +++ b/src/Bswup/Bit.Bswup.Demo/Client/Bit.Bswup.Demo.Client.csproj @@ -1,10 +1,11 @@ - net10.0 + net11.0 enable enable true + false true @@ -20,7 +21,7 @@ - + diff --git a/src/Bswup/Bit.Bswup.Demo/Client/wwwroot/service-worker.js b/src/Bswup/Bit.Bswup.Demo/Client/wwwroot/service-worker.js index 80adb16e7e9..b962b52f7a4 100644 --- a/src/Bswup/Bit.Bswup.Demo/Client/wwwroot/service-worker.js +++ b/src/Bswup/Bit.Bswup.Demo/Client/wwwroot/service-worker.js @@ -1,4 +1,4 @@ -// bit version: 10.7.0-pre-02 +// bit version: 11.0.0-pre-10 // Development service worker of the Bswup docs site. Unlike the standard Blazor template - // whose dev worker is a no-op so caching never hides source changes - this site runs the full diff --git a/src/Bswup/Bit.Bswup.Demo/Client/wwwroot/service-worker.published.js b/src/Bswup/Bit.Bswup.Demo/Client/wwwroot/service-worker.published.js index 23c9c1fa012..735fa7fefa3 100644 --- a/src/Bswup/Bit.Bswup.Demo/Client/wwwroot/service-worker.published.js +++ b/src/Bswup/Bit.Bswup.Demo/Client/wwwroot/service-worker.published.js @@ -1,4 +1,4 @@ -// bit version: 10.7.0-pre-02 +// bit version: 11.0.0-pre-10 // Published service worker of the Bswup docs site. Keep in sync with service-worker.js (the // development copy) - the two differ only in the commented-out resiliency knobs below. diff --git a/src/Bswup/Bit.Bswup.Demo/Server/Bit.Bswup.Demo.Server.csproj b/src/Bswup/Bit.Bswup.Demo/Server/Bit.Bswup.Demo.Server.csproj index 9dc7c93567f..445b64537dd 100644 --- a/src/Bswup/Bit.Bswup.Demo/Server/Bit.Bswup.Demo.Server.csproj +++ b/src/Bswup/Bit.Bswup.Demo/Server/Bit.Bswup.Demo.Server.csproj @@ -1,7 +1,7 @@  - net10.0 + net11.0 enable enable true @@ -10,7 +10,7 @@ - + diff --git a/src/Bswup/Bit.Bswup.Demo/Server/Program.cs b/src/Bswup/Bit.Bswup.Demo/Server/Program.cs index ccd0d9095f3..4d6c8d46bf4 100644 --- a/src/Bswup/Bit.Bswup.Demo/Server/Program.cs +++ b/src/Bswup/Bit.Bswup.Demo/Server/Program.cs @@ -160,11 +160,7 @@ called bare answers with the whole catalog. var app = builder.Build(); // Configure the HTTP request pipeline. -if (app.Environment.IsDevelopment()) -{ - app.UseWebAssemblyDebugging(); -} -else +if (app.Environment.IsDevelopment() is false) { app.UseExceptionHandler("/error", createScopeForErrors: true); // The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts. diff --git a/src/Bswup/Bit.Bswup.Demo/Server/Properties/launchSettings.json b/src/Bswup/Bit.Bswup.Demo/Server/Properties/launchSettings.json index edb877f3e85..daf13ea51ae 100644 --- a/src/Bswup/Bit.Bswup.Demo/Server/Properties/launchSettings.json +++ b/src/Bswup/Bit.Bswup.Demo/Server/Properties/launchSettings.json @@ -5,7 +5,6 @@ "commandName": "Project", "dotnetRunMessages": true, "launchBrowser": true, - "inspectUri": "{wsProtocol}://{url.hostname}:{url.port}/_framework/debug/ws-proxy?browser={browserInspectUri}", "applicationUrl": "http://localhost:5024;https://localhost:5025", "environmentVariables": { "ASPNETCORE_ENVIRONMENT": "Development" diff --git a/src/Bswup/Bit.Bswup/Bit.Bswup.csproj b/src/Bswup/Bit.Bswup/Bit.Bswup.csproj index 29a90e18b61..344dacbde2a 100644 --- a/src/Bswup/Bit.Bswup/Bit.Bswup.csproj +++ b/src/Bswup/Bit.Bswup/Bit.Bswup.csproj @@ -3,7 +3,7 @@ - net10.0;net9.0;net8.0 + net11.0;net10.0;net9.0;net8.0 true - net10.0;net9.0;net8.0 + net11.0;net10.0;net9.0;net8.0 enable enable false @@ -24,6 +24,7 @@ + diff --git a/src/Bswup/Tests/Bit.Bswup.Tests.Harness.Web.Client/Bit.Bswup.Tests.Harness.Web.Client.csproj b/src/Bswup/Tests/Bit.Bswup.Tests.Harness.Web.Client/Bit.Bswup.Tests.Harness.Web.Client.csproj index 394f790031d..f9cae89850a 100644 --- a/src/Bswup/Tests/Bit.Bswup.Tests.Harness.Web.Client/Bit.Bswup.Tests.Harness.Web.Client.csproj +++ b/src/Bswup/Tests/Bit.Bswup.Tests.Harness.Web.Client/Bit.Bswup.Tests.Harness.Web.Client.csproj @@ -5,7 +5,7 @@ project of an app built from the Blazor Web App template. --> - net10.0;net9.0;net8.0 + net11.0;net10.0;net9.0;net8.0 enable enable false @@ -23,6 +23,7 @@ + diff --git a/src/Bswup/Tests/Bit.Bswup.Tests.Harness.Web/Bit.Bswup.Tests.Harness.Web.csproj b/src/Bswup/Tests/Bit.Bswup.Tests.Harness.Web/Bit.Bswup.Tests.Harness.Web.csproj index 69b4f91dbe7..9710453fc0a 100644 --- a/src/Bswup/Tests/Bit.Bswup.Tests.Harness.Web/Bit.Bswup.Tests.Harness.Web.csproj +++ b/src/Bswup/Tests/Bit.Bswup.Tests.Harness.Web/Bit.Bswup.Tests.Harness.Web.csproj @@ -8,7 +8,7 @@ the suites can run the harness on every runtime Bit.Bswup ships for. --> - net10.0;net9.0;net8.0 + net11.0;net10.0;net9.0;net8.0 enable enable false @@ -18,6 +18,16 @@ + + + + + + diff --git a/src/Bswup/Tests/Bit.Bswup.Tests.Harness.Web/Properties/launchSettings.json b/src/Bswup/Tests/Bit.Bswup.Tests.Harness.Web/Properties/launchSettings.json index ca37faaa95b..41301a6a225 100644 --- a/src/Bswup/Tests/Bit.Bswup.Tests.Harness.Web/Properties/launchSettings.json +++ b/src/Bswup/Tests/Bit.Bswup.Tests.Harness.Web/Properties/launchSettings.json @@ -4,7 +4,6 @@ "commandName": "Project", "commandLineArgs": "--BswupHarness:Mode=wasm", "launchBrowser": true, - "inspectUri": "{wsProtocol}://{url.hostname}:{url.port}/_framework/debug/ws-proxy?browser={browserInspectUri}", "applicationUrl": "http://localhost:5390", "environmentVariables": { "ASPNETCORE_ENVIRONMENT": "Development" } }, @@ -12,7 +11,6 @@ "commandName": "Project", "commandLineArgs": "--BswupHarness:Mode=wasm-noprerender", "launchBrowser": true, - "inspectUri": "{wsProtocol}://{url.hostname}:{url.port}/_framework/debug/ws-proxy?browser={browserInspectUri}", "applicationUrl": "http://localhost:5390", "environmentVariables": { "ASPNETCORE_ENVIRONMENT": "Development" } }, diff --git a/src/Bswup/Tests/Bit.Bswup.Tests.Harness.Web/Sessions/HarnessMiddleware.cs b/src/Bswup/Tests/Bit.Bswup.Tests.Harness.Web/Sessions/HarnessMiddleware.cs index 7b5bf389b99..719a3487eae 100644 --- a/src/Bswup/Tests/Bit.Bswup.Tests.Harness.Web/Sessions/HarnessMiddleware.cs +++ b/src/Bswup/Tests/Bit.Bswup.Tests.Harness.Web/Sessions/HarnessMiddleware.cs @@ -52,7 +52,12 @@ public async Task InvokeAsync(HttpContext context) // A hosted client's referenced libraries are served from the host's root _content/, while the // standalone app - mounted under /standalone/ - resolves them (and lists them in its manifest) // relative to its base. Map them the way a reverse proxy mounting the app on a sub-path would. - if (path.StartsWith("/standalone/_content/", StringComparison.OrdinalIgnoreCase)) + // blazor.webassembly.js joins them on .NET 11: a WebAssembly client keeps it for its own publish + // and no longer hands it to a project referencing it, so the host serves the copy its own + // StaticWebAssetGroup keeps (see the csproj). Without this the boot script request reaches the + // fallback document and the app dies on "SyntaxError: Unexpected token '<'". + if (path.StartsWith("/standalone/_content/", StringComparison.OrdinalIgnoreCase) + || path.StartsWith("/standalone/_framework/blazor.webassembly.js", StringComparison.OrdinalIgnoreCase)) { context.Request.Path = path["/standalone".Length..]; } diff --git a/src/Bswup/Tests/Bit.Bswup.Tests.Harness/Bit.Bswup.Tests.Harness.csproj b/src/Bswup/Tests/Bit.Bswup.Tests.Harness/Bit.Bswup.Tests.Harness.csproj index 4b78806aa1c..686d81d4a92 100644 --- a/src/Bswup/Tests/Bit.Bswup.Tests.Harness/Bit.Bswup.Tests.Harness.csproj +++ b/src/Bswup/Tests/Bit.Bswup.Tests.Harness/Bit.Bswup.Tests.Harness.csproj @@ -8,7 +8,7 @@ manifests, which is what makes them usable as precached assets the suites can fault. --> - net10.0;net9.0;net8.0 + net11.0;net10.0;net9.0;net8.0 enable enable false @@ -24,6 +24,7 @@ + diff --git a/src/Bswup/Tests/Bit.Bswup.Tests.Hosting/AssemblySetup.cs b/src/Bswup/Tests/Bit.Bswup.Tests.Hosting/AssemblySetup.cs index ef7bd1395bc..8f03aada29d 100644 --- a/src/Bswup/Tests/Bit.Bswup.Tests.Hosting/AssemblySetup.cs +++ b/src/Bswup/Tests/Bit.Bswup.Tests.Hosting/AssemblySetup.cs @@ -13,7 +13,7 @@ public static class AssemblySetup public static async Task CleanupAsync() { await HarnessHostFactory.DisposeSharedAsync(); -#if NET10_0_OR_GREATER +#if NET11_0_OR_GREATER await SampleHostFactories.DisposeAsync(); #endif } diff --git a/src/Bswup/Tests/Bit.Bswup.Tests.Hosting/Bit.Bswup.Tests.Hosting.csproj b/src/Bswup/Tests/Bit.Bswup.Tests.Hosting/Bit.Bswup.Tests.Hosting.csproj index ee421ca1cff..8ede28fd737 100644 --- a/src/Bswup/Tests/Bit.Bswup.Tests.Hosting/Bit.Bswup.Tests.Hosting.csproj +++ b/src/Bswup/Tests/Bit.Bswup.Tests.Hosting/Bit.Bswup.Tests.Hosting.csproj @@ -7,7 +7,7 @@ on every target framework in the regular CI job. --> - net10.0;net9.0;net8.0 + net11.0;net10.0;net9.0;net8.0 enable enable false @@ -23,14 +23,15 @@ + - - + + diff --git a/src/Bswup/Tests/Bit.Bswup.Tests.Hosting/FullSampleHostingTests.cs b/src/Bswup/Tests/Bit.Bswup.Tests.Hosting/FullSampleHostingTests.cs index 2326d4139a2..769f00eb097 100644 --- a/src/Bswup/Tests/Bit.Bswup.Tests.Hosting/FullSampleHostingTests.cs +++ b/src/Bswup/Tests/Bit.Bswup.Tests.Hosting/FullSampleHostingTests.cs @@ -1,4 +1,4 @@ -#if NET10_0_OR_GREATER +#if NET11_0_OR_GREATER using System.Net; using Bit.Bswup.Tests.Hosting.Infrastructure; using Microsoft.AspNetCore.Mvc.Testing; diff --git a/src/Bswup/Tests/Bit.Bswup.Tests.Mcp/Bit.Bswup.Tests.Mcp.csproj b/src/Bswup/Tests/Bit.Bswup.Tests.Mcp/Bit.Bswup.Tests.Mcp.csproj index c4a78c55f89..7f883f6e6b1 100644 --- a/src/Bswup/Tests/Bit.Bswup.Tests.Mcp/Bit.Bswup.Tests.Mcp.csproj +++ b/src/Bswup/Tests/Bit.Bswup.Tests.Mcp/Bit.Bswup.Tests.Mcp.csproj @@ -1,7 +1,7 @@  - net10.0 + net11.0 Exe @@ -18,7 +18,7 @@ - + diff --git a/src/Butil/Bit.Butil/Bit.Butil.csproj b/src/Butil/Bit.Butil/Bit.Butil.csproj index 6d07f15b035..5a1bc71068c 100644 --- a/src/Butil/Bit.Butil/Bit.Butil.csproj +++ b/src/Butil/Bit.Butil/Bit.Butil.csproj @@ -3,7 +3,7 @@ - net10.0;net9.0;net8.0 + net11.0;net10.0;net9.0;net8.0 true $(NoWarn);NU5100 @@ -27,6 +27,7 @@ + diff --git a/src/Butil/Bit.Butil/Scripts/butil.ts b/src/Butil/Bit.Butil/Scripts/butil.ts index 00649f28b0d..e6cdb2c4018 100644 --- a/src/Butil/Bit.Butil/Scripts/butil.ts +++ b/src/Butil/Bit.Butil/Scripts/butil.ts @@ -1,2 +1,2 @@ var BitButil = (window as any).BitButil = (window as any).BitButil || {}; -BitButil.version = window['bit-butil version'] = '10.7.0-pre-02'; \ No newline at end of file +BitButil.version = window['bit-butil version'] = '11.0.0-pre-10'; diff --git a/src/Butil/Demo/Client/Bit.Butil.Demo.Client.csproj b/src/Butil/Demo/Client/Bit.Butil.Demo.Client.csproj index 136205295d2..f0c02005dc7 100644 --- a/src/Butil/Demo/Client/Bit.Butil.Demo.Client.csproj +++ b/src/Butil/Demo/Client/Bit.Butil.Demo.Client.csproj @@ -1,7 +1,8 @@  - net10.0 + net11.0 + false enable enable true @@ -13,7 +14,7 @@ - + diff --git a/src/Butil/Demo/Server/Bit.Butil.Demo.Server.csproj b/src/Butil/Demo/Server/Bit.Butil.Demo.Server.csproj index ff94d25b078..c69cd26dc49 100644 --- a/src/Butil/Demo/Server/Bit.Butil.Demo.Server.csproj +++ b/src/Butil/Demo/Server/Bit.Butil.Demo.Server.csproj @@ -1,7 +1,7 @@  - net10.0 + net11.0 enable enable true @@ -9,7 +9,7 @@ - + diff --git a/src/Butil/Demo/Server/Program.cs b/src/Butil/Demo/Server/Program.cs index 3ee45da414e..78fd382f7d9 100644 --- a/src/Butil/Demo/Server/Program.cs +++ b/src/Butil/Demo/Server/Program.cs @@ -112,11 +112,7 @@ var app = builder.Build(); -if (app.Environment.IsDevelopment()) -{ - app.UseWebAssemblyDebugging(); -} -else +if (app.Environment.IsDevelopment() is false) { app.UseExceptionHandler("/Error", createScopeForErrors: true); app.UseHsts(); diff --git a/src/Butil/Demo/Server/Properties/launchSettings.json b/src/Butil/Demo/Server/Properties/launchSettings.json index f73192c3cd8..7742f084f40 100644 --- a/src/Butil/Demo/Server/Properties/launchSettings.json +++ b/src/Butil/Demo/Server/Properties/launchSettings.json @@ -5,7 +5,6 @@ "commandName": "Project", "dotnetRunMessages": true, "launchBrowser": true, - "inspectUri": "{wsProtocol}://{url.hostname}:{url.port}/_framework/debug/ws-proxy?browser={browserInspectUri}", "applicationUrl": "https://localhost:5253;http://localhost:5252", "environmentVariables": { "ASPNETCORE_ENVIRONMENT": "Development" diff --git a/src/Butil/Samples/Bit.Butil.Samples.Core/Bit.Butil.Samples.Core.csproj b/src/Butil/Samples/Bit.Butil.Samples.Core/Bit.Butil.Samples.Core.csproj index 3a4d3372209..05ebe4684d1 100644 --- a/src/Butil/Samples/Bit.Butil.Samples.Core/Bit.Butil.Samples.Core.csproj +++ b/src/Butil/Samples/Bit.Butil.Samples.Core/Bit.Butil.Samples.Core.csproj @@ -2,8 +2,8 @@ - net10.0;net9.0;net8.0 + these pages on every runtime Bit.Butil ships for. The sample apps themselves pick net11.0. --> + net11.0;net10.0;net9.0;net8.0 diff --git a/src/Butil/Samples/Bit.Butil.Samples.Maui/Bit.Butil.Samples.Maui.csproj b/src/Butil/Samples/Bit.Butil.Samples.Maui/Bit.Butil.Samples.Maui.csproj index 4d60efb0cec..8114c970402 100644 --- a/src/Butil/Samples/Bit.Butil.Samples.Maui/Bit.Butil.Samples.Maui.csproj +++ b/src/Butil/Samples/Bit.Butil.Samples.Maui/Bit.Butil.Samples.Maui.csproj @@ -1,11 +1,11 @@  - net10.0-android;net10.0-ios;net10.0-maccatalyst - $(TargetFrameworks);net10.0-windows10.0.19041.0 - net10.0-android + net11.0-android;net11.0-ios;net11.0-maccatalyst + $(TargetFrameworks);net11.0-windows10.0.19041.0 + net11.0-android - + Exe true true @@ -22,9 +22,6 @@ 1.0.0 1 - - True - $(NoWarn);ClassWithoutModifierAnalyzer @@ -50,9 +47,10 @@ - - - + + + + diff --git a/src/Butil/Samples/Bit.Butil.Samples.Web/Bit.Butil.Samples.Web.csproj b/src/Butil/Samples/Bit.Butil.Samples.Web/Bit.Butil.Samples.Web.csproj index f0605f39b99..b8e92d1c71c 100644 --- a/src/Butil/Samples/Bit.Butil.Samples.Web/Bit.Butil.Samples.Web.csproj +++ b/src/Butil/Samples/Bit.Butil.Samples.Web/Bit.Butil.Samples.Web.csproj @@ -1,14 +1,15 @@  - net10.0 + net11.0 + false enable enable - - + + diff --git a/src/Butil/Samples/Bit.Butil.Samples.Web/Properties/launchSettings.json b/src/Butil/Samples/Bit.Butil.Samples.Web/Properties/launchSettings.json index 5dae728713a..804970b4729 100644 --- a/src/Butil/Samples/Bit.Butil.Samples.Web/Properties/launchSettings.json +++ b/src/Butil/Samples/Bit.Butil.Samples.Web/Properties/launchSettings.json @@ -5,7 +5,6 @@ "commandName": "Project", "dotnetRunMessages": true, "launchBrowser": true, - "inspectUri": "{wsProtocol}://{url.hostname}:{url.port}/_framework/debug/ws-proxy?browser={browserInspectUri}", "applicationUrl": "http://localhost:5040;https://localhost:5041", "environmentVariables": { "ASPNETCORE_ENVIRONMENT": "Development" diff --git a/src/Butil/tests/Bit.Butil.Tests.Benchmarks/Bit.Butil.Tests.Benchmarks.csproj b/src/Butil/tests/Bit.Butil.Tests.Benchmarks/Bit.Butil.Tests.Benchmarks.csproj index addbe0c5c46..6cb8260e9b8 100644 --- a/src/Butil/tests/Bit.Butil.Tests.Benchmarks/Bit.Butil.Tests.Benchmarks.csproj +++ b/src/Butil/tests/Bit.Butil.Tests.Benchmarks/Bit.Butil.Tests.Benchmarks.csproj @@ -2,7 +2,7 @@ Exe - net10.0 + net11.0 enable enable preview diff --git a/src/Butil/tests/Bit.Butil.Tests.E2E/Bit.Butil.Tests.E2E.csproj b/src/Butil/tests/Bit.Butil.Tests.E2E/Bit.Butil.Tests.E2E.csproj index 1c3868d53ff..4119686149f 100644 --- a/src/Butil/tests/Bit.Butil.Tests.E2E/Bit.Butil.Tests.E2E.csproj +++ b/src/Butil/tests/Bit.Butil.Tests.E2E/Bit.Butil.Tests.E2E.csproj @@ -1,7 +1,7 @@  - net10.0 + net11.0 enable enable false diff --git a/src/Butil/tests/Bit.Butil.Tests.E2E/Infrastructure/E2EEnvironment.cs b/src/Butil/tests/Bit.Butil.Tests.E2E/Infrastructure/E2EEnvironment.cs index 3314d9f2777..224b83320cc 100644 --- a/src/Butil/tests/Bit.Butil.Tests.E2E/Infrastructure/E2EEnvironment.cs +++ b/src/Butil/tests/Bit.Butil.Tests.E2E/Infrastructure/E2EEnvironment.cs @@ -14,10 +14,10 @@ public static class E2EEnvironment public static string Host { get; } = HarnessHostKinds.Validate(Read("BUTIL_E2E_HOST") ?? HarnessHostKinds.Standalone); /// - /// BUTIL_E2E_FRAMEWORK: the target framework the web harness host runs on (net10.0, net9.0 or - /// net8.0). Defaults to net10.0. The standalone sample and the hybrid host are net10.0 only. + /// BUTIL_E2E_FRAMEWORK: the target framework the web harness host runs on (net11.0, net10.0, net9.0 or + /// net8.0). Defaults to net11.0. The standalone sample and the hybrid host are net11.0 only. /// - public static string Framework { get; } = Read("BUTIL_E2E_FRAMEWORK") ?? "net10.0"; + public static string Framework { get; } = Read("BUTIL_E2E_FRAMEWORK") ?? "net11.0"; /// /// BUTIL_E2E_CONFIGURATION: the build configuration of the harness hosts. Defaults to the diff --git a/src/Butil/tests/Bit.Butil.Tests.E2E/Infrastructure/RepoLayout.cs b/src/Butil/tests/Bit.Butil.Tests.E2E/Infrastructure/RepoLayout.cs index 4092f040605..9792c50a875 100644 --- a/src/Butil/tests/Bit.Butil.Tests.E2E/Infrastructure/RepoLayout.cs +++ b/src/Butil/tests/Bit.Butil.Tests.E2E/Infrastructure/RepoLayout.cs @@ -53,5 +53,5 @@ public static string HybridHarnessProject() => FindUpward(Path.Combine("tests", HybridHarnessName, $"{HybridHarnessName}.csproj")); public static string HybridHarnessExecutable(string configuration) - => Path.Combine(Path.GetDirectoryName(HybridHarnessProject())!, "bin", configuration, "net10.0-windows", $"{HybridHarnessName}.exe"); + => Path.Combine(Path.GetDirectoryName(HybridHarnessProject())!, "bin", configuration, "net11.0-windows", $"{HybridHarnessName}.exe"); } diff --git a/src/Butil/tests/Bit.Butil.Tests.E2E/publish-gate.sh b/src/Butil/tests/Bit.Butil.Tests.E2E/publish-gate.sh index 1058ea1578f..1dce3f4d67b 100644 --- a/src/Butil/tests/Bit.Butil.Tests.E2E/publish-gate.sh +++ b/src/Butil/tests/Bit.Butil.Tests.E2E/publish-gate.sh @@ -15,8 +15,8 @@ set -euo pipefail here="$(cd "$(dirname "$0")" && pwd)" -# ButilHarnessFramework=net10.0 on top of -f: -f alone does not reach project references, so the WebAssembly +# ButilHarnessFramework=net11.0 on top of -f: -f alone does not reach project references, so the WebAssembly # client would still evaluate every framework it targets - and with RunAOTCompilation each of those demands its # own wasm-tools workload. Not -p:TargetFrameworks, which would also reach the netstandard2.0 Bit.Butil.Build. exec bash "$here/../../../publish-gate.sh" Bit.Butil 'Samples|Tests' "$here/../Bit.Butil.Tests.Harness.Web/Bit.Butil.Tests.Harness.Web.csproj" \ - "$1" -f net10.0 -p:ButilHarnessFramework=net10.0 "${@:2}" + "$1" -f net11.0 -p:ButilHarnessFramework=net11.0 "${@:2}" diff --git a/src/Butil/tests/Bit.Butil.Tests.Harness.Hybrid/Bit.Butil.Tests.Harness.Hybrid.csproj b/src/Butil/tests/Bit.Butil.Tests.Harness.Hybrid/Bit.Butil.Tests.Harness.Hybrid.csproj index f915e40e98f..cbc2283e8ef 100644 --- a/src/Butil/tests/Bit.Butil.Tests.Harness.Hybrid/Bit.Butil.Tests.Harness.Hybrid.csproj +++ b/src/Butil/tests/Bit.Butil.Tests.Harness.Hybrid/Bit.Butil.Tests.Harness.Hybrid.csproj @@ -8,7 +8,7 @@ WinExe - net10.0-windows + net11.0-windows true true @@ -21,7 +21,8 @@ - + + diff --git a/src/Butil/tests/Bit.Butil.Tests.Harness.Web.Client/Bit.Butil.Tests.Harness.Web.Client.csproj b/src/Butil/tests/Bit.Butil.Tests.Harness.Web.Client/Bit.Butil.Tests.Harness.Web.Client.csproj index a10cfa03aa7..e11d952c000 100644 --- a/src/Butil/tests/Bit.Butil.Tests.Harness.Web.Client/Bit.Butil.Tests.Harness.Web.Client.csproj +++ b/src/Butil/tests/Bit.Butil.Tests.Harness.Web.Client/Bit.Butil.Tests.Harness.Web.Client.csproj @@ -4,7 +4,7 @@ browser. It carries no pages of its own - they come from Samples.Core - only the client's startup. --> - net10.0;net9.0;net8.0 + net11.0;net10.0;net9.0;net8.0 $(ButilHarnessFramework) enable @@ -19,6 +19,7 @@ + diff --git a/src/Butil/tests/Bit.Butil.Tests.Harness.Web/Bit.Butil.Tests.Harness.Web.csproj b/src/Butil/tests/Bit.Butil.Tests.Harness.Web/Bit.Butil.Tests.Harness.Web.csproj index 845275c3489..b9a77fc15fc 100644 --- a/src/Butil/tests/Bit.Butil.Tests.Harness.Web/Bit.Butil.Tests.Harness.Web.csproj +++ b/src/Butil/tests/Bit.Butil.Tests.Harness.Web/Bit.Butil.Tests.Harness.Web.csproj @@ -8,7 +8,7 @@ is: the suites can run the harness on every runtime Bit.Butil ships for. --> - net10.0;net9.0;net8.0 + net11.0;net10.0;net9.0;net8.0 @@ -25,6 +25,7 @@ + diff --git a/src/Butil/tests/Bit.Butil.Tests.Harness.Web/Properties/launchSettings.json b/src/Butil/tests/Bit.Butil.Tests.Harness.Web/Properties/launchSettings.json index fe3b67e9348..276cc2a9f55 100644 --- a/src/Butil/tests/Bit.Butil.Tests.Harness.Web/Properties/launchSettings.json +++ b/src/Butil/tests/Bit.Butil.Tests.Harness.Web/Properties/launchSettings.json @@ -21,7 +21,6 @@ "commandLineArgs": "--ButilHarness:Mode=wasm", "launchBrowser": true, "launchUrl": "e2e", - "inspectUri": "{wsProtocol}://{url.hostname}:{url.port}/_framework/debug/ws-proxy?browser={browserInspectUri}", "applicationUrl": "http://localhost:5390", "environmentVariables": { "ASPNETCORE_ENVIRONMENT": "Development" } }, diff --git a/src/Butil/tests/Bit.Butil.Tests.Hosting/Bit.Butil.Tests.Hosting.csproj b/src/Butil/tests/Bit.Butil.Tests.Hosting/Bit.Butil.Tests.Hosting.csproj index b3d4b527d28..113b8df1701 100644 --- a/src/Butil/tests/Bit.Butil.Tests.Hosting/Bit.Butil.Tests.Hosting.csproj +++ b/src/Butil/tests/Bit.Butil.Tests.Hosting/Bit.Butil.Tests.Hosting.csproj @@ -7,7 +7,7 @@ browser, so this runs on every target framework in the regular CI job. --> - net10.0;net9.0;net8.0 + net11.0;net10.0;net9.0;net8.0 enable enable false @@ -27,6 +27,7 @@ + diff --git a/src/Butil/tests/Bit.Butil.Tests.Manual/Bit.Butil.Tests.Manual.csproj b/src/Butil/tests/Bit.Butil.Tests.Manual/Bit.Butil.Tests.Manual.csproj index 25a18802f68..caac1141b9e 100644 --- a/src/Butil/tests/Bit.Butil.Tests.Manual/Bit.Butil.Tests.Manual.csproj +++ b/src/Butil/tests/Bit.Butil.Tests.Manual/Bit.Butil.Tests.Manual.csproj @@ -2,7 +2,7 @@ Exe - net10.0 + net11.0 enable enable preview diff --git a/src/Butil/tests/Bit.Butil.Tests.Mcp/Bit.Butil.Tests.Mcp.csproj b/src/Butil/tests/Bit.Butil.Tests.Mcp/Bit.Butil.Tests.Mcp.csproj index ad4381decd6..422b67f0fa2 100644 --- a/src/Butil/tests/Bit.Butil.Tests.Mcp/Bit.Butil.Tests.Mcp.csproj +++ b/src/Butil/tests/Bit.Butil.Tests.Mcp/Bit.Butil.Tests.Mcp.csproj @@ -1,7 +1,7 @@  - net10.0 + net11.0 enable enable false diff --git a/src/Butil/tests/Bit.Butil.Tests.PublishFixture.Hosted.Client/Bit.Butil.Tests.PublishFixture.Hosted.Client.csproj b/src/Butil/tests/Bit.Butil.Tests.PublishFixture.Hosted.Client/Bit.Butil.Tests.PublishFixture.Hosted.Client.csproj index d2f363d7625..9386ff7d11a 100644 --- a/src/Butil/tests/Bit.Butil.Tests.PublishFixture.Hosted.Client/Bit.Butil.Tests.PublishFixture.Hosted.Client.csproj +++ b/src/Butil/tests/Bit.Butil.Tests.PublishFixture.Hosted.Client/Bit.Butil.Tests.PublishFixture.Hosted.Client.csproj @@ -13,7 +13,7 @@ --> - net10.0 + net11.0 $(FixtureFramework) @@ -32,6 +32,7 @@ + diff --git a/src/Butil/tests/Bit.Butil.Tests.PublishFixture.Hosted/Bit.Butil.Tests.PublishFixture.Hosted.csproj b/src/Butil/tests/Bit.Butil.Tests.PublishFixture.Hosted/Bit.Butil.Tests.PublishFixture.Hosted.csproj index a6f7792fd6f..6b1138aa949 100644 --- a/src/Butil/tests/Bit.Butil.Tests.PublishFixture.Hosted/Bit.Butil.Tests.PublishFixture.Hosted.csproj +++ b/src/Butil/tests/Bit.Butil.Tests.PublishFixture.Hosted/Bit.Butil.Tests.PublishFixture.Hosted.csproj @@ -14,7 +14,7 @@ --> - net10.0 + net11.0 $(FixtureFramework) enable diff --git a/src/Butil/tests/Bit.Butil.Tests.PublishFixture/Bit.Butil.Tests.PublishFixture.csproj b/src/Butil/tests/Bit.Butil.Tests.PublishFixture/Bit.Butil.Tests.PublishFixture.csproj index cd0fbd67a75..b150dcbdf1c 100644 --- a/src/Butil/tests/Bit.Butil.Tests.PublishFixture/Bit.Butil.Tests.PublishFixture.csproj +++ b/src/Butil/tests/Bit.Butil.Tests.PublishFixture/Bit.Butil.Tests.PublishFixture.csproj @@ -18,7 +18,7 @@ --> - net10.0 + net11.0 enable enable false diff --git a/src/Cli/Bit.Cli/Commands/DoctorCommand.cs b/src/Cli/Bit.Cli/Commands/DoctorCommand.cs index 604f8747929..cc415ea1852 100644 --- a/src/Cli/Bit.Cli/Commands/DoctorCommand.cs +++ b/src/Cli/Bit.Cli/Commands/DoctorCommand.cs @@ -41,7 +41,7 @@ public static Command Create(Func services) var projectName = ProjectContext.FindProjectName(cli.Environment.CurrentDirectory); var aspire = projectName is null || Directory.Exists(Path.Combine(cli.Environment.CurrentDirectory, "src", "Server", $"{projectName}.Server.AppHost")); - var requirements = projectName is null ? TemplateRequirements.Embedded : TemplateRequirements.FromProject(cli.Environment.CurrentDirectory, projectName); + var requirements = projectName is null ? TemplateRequirements.Embedded.For(new TemplateSelection(TemplateManifest.Embedded)) : TemplateRequirements.FromProject(cli.Environment.CurrentDirectory, projectName); var needs = new ToolNeeds { Aspire = aspire, diff --git a/src/Cli/Bit.Cli/Projects/NewWorkflow.cs b/src/Cli/Bit.Cli/Projects/NewWorkflow.cs index a210734815e..4a25cb5104a 100644 --- a/src/Cli/Bit.Cli/Projects/NewWorkflow.cs +++ b/src/Cli/Bit.Cli/Projects/NewWorkflow.cs @@ -64,7 +64,7 @@ public async Task RunAsync(NewRequest request, CancellationToken cancellati return UsageError(request.PropertyError); var ide = request.NoOpen ? IdeLocator.None : request.Ide; - var requirements = request.TemplatePackage is null ? TemplateRequirements.Embedded : TemplateRequirements.FromPackage(Path.GetFullPath(request.TemplatePackage, cli.Environment.CurrentDirectory)); + var requirements = (request.TemplatePackage is null ? TemplateRequirements.Embedded : TemplateRequirements.FromPackage(Path.GetFullPath(request.TemplatePackage, cli.Environment.CurrentDirectory))).For(selection); var needs = new ToolNeeds { Aspire = selection.Aspire, Containers = selection.AspireContainers(), ContainersRequired = selection.NeedsContainers, NativeWebAssembly = selection.IsTrue("offlineDb"), GitHubRepo = request.GitHubRepo, Platforms = platforms, Ide = ide, Sdk = requirements.Sdk, NodeMajor = requirements.NodeMajor, AspireVersion = requirements.Aspire }; var hardware = request.NoSetup ? null : ProbeHardwareAsync(cli, directory, cancellationToken); var selectedTools = request.NoTools ? [] : await ChooseToolsAsync(cli, needs, request.Tools, request.ToolsGiven, interactive, hardware, cancellationToken); diff --git a/src/Cli/Bit.Cli/Projects/ProjectContext.cs b/src/Cli/Bit.Cli/Projects/ProjectContext.cs index 00094c94ea9..686cf47143b 100644 --- a/src/Cli/Bit.Cli/Projects/ProjectContext.cs +++ b/src/Cli/Bit.Cli/Projects/ProjectContext.cs @@ -42,23 +42,22 @@ public sealed partial class ProjectContext public string? SeedPassword { get; set; } - public string TargetFrameworkVersion + public string TargetFrameworkVersion => ReadTargetFramework(Directory, Name) ?? $"net{Environment.Version.Major}.0"; + + public static string? ReadTargetFramework(string directory, string name) { - get + var core = Path.Combine(directory, "src", "Client", $"{name}.Client.Core", $"{name}.Client.Core.csproj"); + + try { - var core = Path.Combine(Directory, "src", "Client", $"{Name}.Client.Core", $"{Name}.Client.Core.csproj"); - - try - { - if (File.Exists(core) && TargetFrameworkRegex().Match(File.ReadAllText(core)) is { Success: true } match) - return match.Groups["tfm"].Value; - } - catch (IOException) - { - } - - return $"net{Environment.Version.Major}.0"; + if (File.Exists(core) && TargetFrameworkRegex().Match(File.ReadAllText(core)) is { Success: true } match) + return match.Groups["tfm"].Value; } + catch (IOException) + { + } + + return null; } public string? PackageVersion(string packageId) diff --git a/src/Cli/Bit.Cli/Projects/TemplateDiff.cs b/src/Cli/Bit.Cli/Projects/TemplateDiff.cs index b499d508ad2..6dc58732f4c 100644 --- a/src/Cli/Bit.Cli/Projects/TemplateDiff.cs +++ b/src/Cli/Bit.Cli/Projects/TemplateDiff.cs @@ -42,12 +42,6 @@ public async Task RunAsync(DiffRequest request, CancellationToken cancellat if (from is null) return UsageError($"{directory} has no bit.json that says which bit Boilerplate version made the project. Pass it: bit diff [to]."); - if (string.Equals(from, to, StringComparison.OrdinalIgnoreCase) && request.TemplatePackage is null) - { - cli.Console.Out.MarkupLine($" [green]{Markup.Escape(name)} is already on bit Boilerplate {Markup.Escape(to)}.[/]"); - return CliApp.ExitOk; - } - var options = new Dictionary(record.Options, StringComparer.OrdinalIgnoreCase); foreach (var (option, value) in request.TemplateValues) @@ -55,6 +49,27 @@ public async Task RunAsync(DiffRequest request, CancellationToken cancellat options[option] = value; } + var fromOptions = new Dictionary(options, StringComparer.OrdinalIgnoreCase); + + if (Directory.Exists(directory) && ProjectContext.ReadTargetFramework(directory, name) is { } framework) + { + fromOptions["framework"] = framework; + + if (request.TemplateValues.ContainsKey("framework") is false) + { + options["framework"] = framework; + } + } + + var frameworkChanges = fromOptions.TryGetValue("framework", out var fromFramework) && options.TryGetValue("framework", out var toFramework) + && string.Equals(fromFramework, toFramework, StringComparison.OrdinalIgnoreCase) is false; + + if (string.Equals(from, to, StringComparison.OrdinalIgnoreCase) && request.TemplatePackage is null && frameworkChanges is false) + { + cli.Console.Out.MarkupLine($" [green]{Markup.Escape(name)} is already on bit Boilerplate {Markup.Escape(to)}.[/]"); + return CliApp.ExitOk; + } + var output = Path.GetFullPath(request.Output ?? Path.Combine(Path.GetTempPath(), "bit-diff", $"{name}-{from}-{to}"), cli.Environment.CurrentDirectory); if (Directory.Exists(output) && Directory.EnumerateFileSystemEntries(output).Any()) @@ -69,6 +84,11 @@ public async Task RunAsync(DiffRequest request, CancellationToken cancellat cli.Console.Out.MarkupLine($" Comparing bit Boilerplate [bold]{Markup.Escape(from)}[/] with [bold]{Markup.Escape(to)}[/] for [bold]{Markup.Escape(name)}[/]"); cli.Console.Out.MarkupLine($" [grey]{(options.Count == 0 ? "the template's default options" : string.Join(" ", options.Select(o => o.Value is "true" ? $"--{o.Key}" : $"--{o.Key} {o.Value}")))}[/]"); + + if (frameworkChanges) + { + cli.Console.Out.MarkupLine($" [grey]from {Markup.Escape(fromOptions["framework"])} to {Markup.Escape(options["framework"])}[/]"); + } cli.Console.Out.WriteLine(); var steps = new StepRunner(cli); @@ -88,7 +108,7 @@ await steps.RunAsync("git", "Creating a git repository", async (_, ct) => if (steps.AnyFailed is false) { - await SnapshotAsync(steps, "from", source, from, null, name, output, options, cancellationToken); + await SnapshotAsync(steps, "from", source, from, null, name, output, fromOptions, cancellationToken); } if (steps.AnyFailed is false) @@ -123,7 +143,7 @@ await steps.RunAsync("clear", $"Clearing bit Boilerplate {from}", (_, _) => cli.Console.Out.MarkupLine($" [bold]Patch[/] {Markup.Escape(patch)}"); cli.Console.Out.MarkupLine($" [bold]Files[/] git -C {Markup.Escape(ProcessSpec.Quote(output))} diff --stat HEAD~1"); cli.Console.Out.WriteLine(); - cli.Console.Out.MarkupLine(" [grey]Both have the same name and options. What the template picks at random on every run, such as ports, GUIDs, dates and the seeded accounts' password, differs between them, and so does what bit new adds.[/]"); + cli.Console.Out.MarkupLine($" [grey]Both have the same name and options{(frameworkChanges ? ", apart from the .NET version" : "")}. What the template picks at random on every run, such as ports, GUIDs, dates and the seeded accounts' password, differs between them, and so does what bit new adds.[/]"); cli.Console.Out.MarkupLine($" [grey]Delete it when you're done: bit remove {Markup.Escape(ProcessSpec.Quote(output))} --yes[/]"); cli.Console.Out.WriteLine(); @@ -184,10 +204,16 @@ public static (List Arguments, List Unknown) TemplateArguments(T public static ProjectRecord ReadProject(string directory) { var bitJson = Path.Combine(directory, "bit.json"); - - return File.Exists(bitJson) && ReadBitJson(File.ReadAllText(bitJson)) is { } record - ? record + var record = File.Exists(bitJson) && ReadBitJson(File.ReadAllText(bitJson)) is { } read + ? read : new ProjectRecord(null, null, new Dictionary()); + + if (record.Options.ContainsKey("framework") || Directory.Exists(directory) is false + || (record.Name ?? ProjectContext.FindProjectName(directory)) is not { } name + || ProjectContext.ReadTargetFramework(directory, name) is not { } framework) + return record; + + return record with { Options = new Dictionary(record.Options, StringComparer.OrdinalIgnoreCase) { ["framework"] = framework } }; } public static ProjectRecord? ReadBitJson(string json) diff --git a/src/Cli/Bit.Cli/Templates/TemplateManifest.cs b/src/Cli/Bit.Cli/Templates/TemplateManifest.cs index 060fe17c009..5d630891c2b 100644 --- a/src/Cli/Bit.Cli/Templates/TemplateManifest.cs +++ b/src/Cli/Bit.Cli/Templates/TemplateManifest.cs @@ -1,4 +1,5 @@ using System.Text.Json; +using System.Text.RegularExpressions; namespace Bit.Cli.Templates; @@ -11,6 +12,10 @@ public enum TemplateParameterType public sealed record TemplateChoice(string Value, string? Description); +public sealed record TemplateSwitchCase(string? Parameter, string? Value, string Result); + +public sealed record TemplateSwitch(string Replaces, IReadOnlyList Cases); + public sealed record TemplateParameter { public required string Name { get; init; } @@ -41,7 +46,7 @@ public sealed record TemplateParameter } } -public sealed class TemplateManifest +public sealed partial class TemplateManifest { private static readonly string[] hiddenParameters = ["helpUrl"]; @@ -55,11 +60,28 @@ public sealed class TemplateManifest public required IReadOnlyList Parameters { get; init; } + public IReadOnlyList Switches { get; init; } = []; + public TemplateParameter? Find(string name) { return Parameters.FirstOrDefault(p => string.Equals(p.Name, name, StringComparison.OrdinalIgnoreCase)); } + public string ApplySwitches(string text, TemplateSelection selection) + { + foreach (var templateSwitch in Switches) + { + var match = templateSwitch.Cases.FirstOrDefault(c => c.Parameter is null || string.Equals(selection[c.Parameter], c.Value, StringComparison.OrdinalIgnoreCase)); + + if (match is not null) + { + text = text.Replace(templateSwitch.Replaces, match.Result, StringComparison.Ordinal); + } + } + + return text; + } + public static TemplateManifest Embedded { get; } = LoadEmbedded(); public static TemplateManifest Parse(string json) @@ -68,11 +90,22 @@ public static TemplateManifest Parse(string json) var root = document.RootElement; var parameters = new List(); + var switches = new List(); foreach (var symbol in root.GetProperty("symbols").EnumerateObject()) { var value = symbol.Value; + if (GetString(value, "type") is "generated" && GetString(value, "generator") is "switch") + { + if (ParseSwitch(value) is { } templateSwitch) + { + switches.Add(templateSwitch); + } + + continue; + } + if (GetString(value, "type") is not "parameter" || hiddenParameters.Contains(symbol.Name)) continue; @@ -103,10 +136,44 @@ public static TemplateManifest Parse(string json) Identity = GetString(root, "identity") ?? "Bit.Boilerplate", ShortName = GetString(root, "shortName") ?? "bit-bp", SourceName = GetString(root, "sourceName") ?? "Boilerplate", - Parameters = parameters + Parameters = parameters, + Switches = switches }; } + private static TemplateSwitch? ParseSwitch(JsonElement symbol) + { + if (GetString(symbol, "replaces") is not { Length: > 0 } replaces + || symbol.TryGetProperty("parameters", out var parameters) is false + || parameters.TryGetProperty("cases", out var cases) is false + || cases.ValueKind is not JsonValueKind.Array) + return null; + + var parsed = new List(); + + foreach (var templateCase in cases.EnumerateArray()) + { + if (GetString(templateCase, "value") is not { } result) + continue; + + var condition = GetString(templateCase, "condition") ?? ""; + + if (condition.Trim().Length is 0) + { + parsed.Add(new(null, null, result)); + } + else if (SwitchConditionRegex().Match(condition) is { Success: true } match) + { + parsed.Add(new(match.Groups["parameter"].Value, match.Groups["value"].Value, result)); + } + } + + return new TemplateSwitch(replaces, parsed); + } + + [GeneratedRegex("""^\s*\(\s*(?\w+)\s*==\s*['"](?[^'"]*)['"]\s*\)\s*$""")] + private static partial Regex SwitchConditionRegex(); + private static TemplateManifest LoadEmbedded() { using var stream = typeof(TemplateManifest).Assembly.GetManifestResourceStream("Bit.Cli.template.json") diff --git a/src/Cli/Bit.Cli/Templates/TemplateRequirements.cs b/src/Cli/Bit.Cli/Templates/TemplateRequirements.cs index d9fca48924c..18362139f9e 100644 --- a/src/Cli/Bit.Cli/Templates/TemplateRequirements.cs +++ b/src/Cli/Bit.Cli/Templates/TemplateRequirements.cs @@ -4,7 +4,7 @@ namespace Bit.Cli.Templates; -public sealed partial record TemplateRequirements(int? NodeMajor, Version? Aspire, SdkRequirement? Sdk) +public sealed partial record TemplateRequirements(int? NodeMajor, Version? Aspire, SdkRequirement? Sdk, string? GlobalJson = null) { private const string PackageJsonEntry = "Bit.Boilerplate/src/Client/Boilerplate.Client.Core/package.json"; @@ -12,14 +12,24 @@ public sealed partial record TemplateRequirements(int? NodeMajor, Version? Aspir private const string GlobalJsonEntry = "Bit.Boilerplate/global.json"; - public static TemplateRequirements Embedded { get; } = new(ParseNodeMajor(ReadResource("Bit.Cli.package.json")), ParseAspire(ReadResource("Bit.Cli.AppHost.csproj")), SdkRequirement.FromGlobalJson(ReadResource("Bit.Cli.global.json"))); + public static TemplateRequirements Embedded { get; } = FromTemplate(ReadResource("Bit.Cli.package.json"), ReadResource("Bit.Cli.AppHost.csproj"), ReadResource("Bit.Cli.global.json")); public static TemplateRequirements FromPackage(string packagePath) { - return new( - ParseNodeMajor(TemplateSource.ReadEntry(packagePath, PackageJsonEntry)), - ParseAspire(TemplateSource.ReadEntry(packagePath, AppHostEntry)), - SdkRequirement.FromGlobalJson(TemplateSource.ReadEntry(packagePath, GlobalJsonEntry))); + return FromTemplate( + TemplateSource.ReadEntry(packagePath, PackageJsonEntry), + TemplateSource.ReadEntry(packagePath, AppHostEntry), + TemplateSource.ReadEntry(packagePath, GlobalJsonEntry)); + } + + public TemplateRequirements For(TemplateSelection selection) + { + return GlobalJson is null ? this : this with { Sdk = SdkRequirement.FromGlobalJson(selection.Manifest.ApplySwitches(GlobalJson, selection)) ?? Sdk }; + } + + private static TemplateRequirements FromTemplate(string? packageJson, string? appHostProject, string? globalJson) + { + return new(ParseNodeMajor(packageJson), ParseAspire(appHostProject), SdkRequirement.FromGlobalJson(globalJson), globalJson); } public static TemplateRequirements FromProject(string directory, string name) diff --git a/src/Cli/README.md b/src/Cli/README.md index e8d85113c67..e572e1396ba 100644 --- a/src/Cli/README.md +++ b/src/Cli/README.md @@ -49,6 +49,7 @@ Every option of the bit Boilerplate template works the same way: | Option | Values | Default | |---|---|---| +| `--framework` | `net10.0`, `net11.0` | `net10.0` | | `--database` | `Sqlite`, `SqlServer`, `PostgreSQL`, `MySql`, `Other` | `Sqlite` | | `--filesStorage` | `Local`, `S3`, `AzureBlobStorage`, `Other` | `Local` | | `--api` | `Integrated`, `Standalone` | `Integrated` | @@ -115,6 +116,7 @@ bit diff --template-package ../bitplatform/src/Templates/Boilerplate/Bit.Boilerp - It creates the project with each version, the old one first, into one git repository in the temp folder, so the second commit is exactly the upgrade, and writes it as `bit-diff.patch` in that repository too. Your project isn't touched. - In a project, it takes the name, the version and the options from the project's `bit.json`, where the template records them. Pass `from`, `to`, `--name` or any option of `bit new` to change them. `to` defaults to this bit's own version. - An option a version doesn't have is left out for that version, and said so. +- Both sides get the project's own .NET version. `--framework` gives only the newer side another one, so `bit diff --framework net11.0` shows what moving a .NET 10 project to .NET 11 changes. - What the template picks at random on every run, like ports, GUIDs, dates and the seeded accounts' password, differs between the two, and so does what `bit new` adds after creating a project. - The repository goes to `/bit-diff/--`, or `-o `. Delete it with `bit remove --yes` when you're done. diff --git a/src/Cli/Tests/Bit.Cli.Tests/Bit.Cli.Tests.csproj b/src/Cli/Tests/Bit.Cli.Tests/Bit.Cli.Tests.csproj index e3f8c15fa13..7e6874d8f9e 100644 --- a/src/Cli/Tests/Bit.Cli.Tests/Bit.Cli.Tests.csproj +++ b/src/Cli/Tests/Bit.Cli.Tests/Bit.Cli.Tests.csproj @@ -1,7 +1,7 @@  - net10.0 + net11.0 enable enable false diff --git a/src/Cli/Tests/Bit.Cli.Tests/DiffTests.cs b/src/Cli/Tests/Bit.Cli.Tests/DiffTests.cs index ea7e10594c1..6ed6ad6eebb 100644 --- a/src/Cli/Tests/Bit.Cli.Tests/DiffTests.cs +++ b/src/Cli/Tests/Bit.Cli.Tests/DiffTests.cs @@ -32,6 +32,23 @@ public void BitJson_Should_GiveTheVersionNameAndOptions() Assert.IsNull(TemplateDiff.ReadProject(host.WorkingDirectory).Version); } + [TestMethod] + public void AProjectFromBeforeTheFrameworkOption_Should_KeepItsOwnFramework() + { + using var host = new Infrastructure.TestHost(); + File.WriteAllText(Path.Combine(host.WorkingDirectory, "bit.json"), """{ "version": "11.0.0-pre-09", "name": "Contoso", "options": { "database": "PostgreSQL" } }"""); + var core = Path.Combine(host.WorkingDirectory, "src", "Client", "Contoso.Client.Core"); + Directory.CreateDirectory(core); + File.WriteAllText(Path.Combine(core, "Contoso.Client.Core.csproj"), "net11.0"); + + Assert.AreEqual("net11.0", TemplateDiff.ReadProject(host.WorkingDirectory).Options["framework"]); + + File.Delete(Path.Combine(host.WorkingDirectory, "bit.json")); + File.WriteAllText(Path.Combine(host.WorkingDirectory, "Contoso.slnx"), ""); + + Assert.AreEqual("net11.0", TemplateDiff.ReadProject(host.WorkingDirectory).Options["framework"]); + } + [TestMethod] public void TheSummary_Should_ShowThePasswordTheReadmeNames() { diff --git a/src/Cli/Tests/Bit.Cli.Tests/ToolTests.cs b/src/Cli/Tests/Bit.Cli.Tests/ToolTests.cs index 77d79b5a6bd..12e863314a5 100644 --- a/src/Cli/Tests/Bit.Cli.Tests/ToolTests.cs +++ b/src/Cli/Tests/Bit.Cli.Tests/ToolTests.cs @@ -298,6 +298,20 @@ public void TheEmbeddedTemplate_Should_CarryTheSdkOfTheTemplatesGlobalJson() Assert.AreEqual(expected, TemplateRequirements.Embedded.Sdk); } + [TestMethod] + public void TheSdk_Should_FollowTheChosenFramework() + { + var net10 = new TemplateSelection(TemplateManifest.Embedded); + var net11 = new TemplateSelection(TemplateManifest.Embedded); + Assert.IsNull(net10.Set("framework", "net10.0")); + Assert.IsNull(net11.Set("framework", "net11.0")); + + Assert.AreEqual(TemplateRequirements.Embedded.Sdk, TemplateRequirements.Embedded.For(net11).Sdk); + Assert.AreEqual("10.0", TemplateRequirements.Embedded.For(net10).Sdk?.Channel); + Assert.IsFalse(TemplateRequirements.Embedded.For(net10).Sdk?.Pinned); + Assert.AreEqual(TemplateRequirements.Embedded.For(net10).Sdk, TemplateRequirements.Embedded.For(new TemplateSelection(TemplateManifest.Embedded)).Sdk); + } + [TestMethod] public async Task TheSdk_Should_InstallItsExactVersionOnMacOSAndLinux() { diff --git a/src/Minifier/Bit.Minifier/Bit.Minifier.csproj b/src/Minifier/Bit.Minifier/Bit.Minifier.csproj index 950a713eacc..b8bcd875a5c 100644 --- a/src/Minifier/Bit.Minifier/Bit.Minifier.csproj +++ b/src/Minifier/Bit.Minifier/Bit.Minifier.csproj @@ -9,7 +9,7 @@ An executable rather than an MSBuild task: Mono.Cecil then never shares a process with the copy ILLink.Tasks may have loaded, and one binary serves both MSBuild flavours. net8.0 + RollForward=Major runs on whatever runtime the SDK doing the publish carries, whichever version of it an app is on - the - tools a person runs themselves (the bit CLI's decode command) target net10.0 instead. --> + tools a person runs themselves (the bit CLI's decode command) target net11.0 instead. --> Exe net8.0 diff --git a/src/Minifier/Tests/Bit.Minifier.Tests.Friend/Bit.Minifier.Tests.Friend.csproj b/src/Minifier/Tests/Bit.Minifier.Tests.Friend/Bit.Minifier.Tests.Friend.csproj index 95cbdace82a..219a4c8eff1 100644 --- a/src/Minifier/Tests/Bit.Minifier.Tests.Friend/Bit.Minifier.Tests.Friend.csproj +++ b/src/Minifier/Tests/Bit.Minifier.Tests.Friend/Bit.Minifier.Tests.Friend.csproj @@ -2,7 +2,7 @@ - net10.0 + net11.0 enable enable false diff --git a/src/Minifier/Tests/Bit.Minifier.Tests.Library/Bit.Minifier.Tests.Library.csproj b/src/Minifier/Tests/Bit.Minifier.Tests.Library/Bit.Minifier.Tests.Library.csproj index 73b9a6449c6..c1af99f9aa0 100644 --- a/src/Minifier/Tests/Bit.Minifier.Tests.Library/Bit.Minifier.Tests.Library.csproj +++ b/src/Minifier/Tests/Bit.Minifier.Tests.Library/Bit.Minifier.Tests.Library.csproj @@ -2,7 +2,7 @@ - net10.0 + net11.0 enable enable false diff --git a/src/Minifier/Tests/Bit.Minifier.Tests/Bit.Minifier.Tests.csproj b/src/Minifier/Tests/Bit.Minifier.Tests/Bit.Minifier.Tests.csproj index b96ec003aa1..c1744b80a46 100644 --- a/src/Minifier/Tests/Bit.Minifier.Tests/Bit.Minifier.Tests.csproj +++ b/src/Minifier/Tests/Bit.Minifier.Tests/Bit.Minifier.Tests.csproj @@ -1,7 +1,7 @@  - net10.0 + net11.0 enable enable false diff --git a/src/Templates/BlazorEmpty/Bit.BlazorEmpty/BlazorEmpty.Client/BlazorEmpty.Client.csproj b/src/Templates/BlazorEmpty/Bit.BlazorEmpty/BlazorEmpty.Client/BlazorEmpty.Client.csproj index 51d93fa72b9..cd568722514 100644 --- a/src/Templates/BlazorEmpty/Bit.BlazorEmpty/BlazorEmpty.Client/BlazorEmpty.Client.csproj +++ b/src/Templates/BlazorEmpty/Bit.BlazorEmpty/BlazorEmpty.Client/BlazorEmpty.Client.csproj @@ -1,9 +1,9 @@ - + - net10.0 + net11.0 enable enable true @@ -11,18 +11,18 @@ - + - + - + all runtime; build; native; contentfiles; analyzers; buildtransitive - + all runtime; build; native; contentfiles; analyzers; buildtransitive diff --git a/src/Templates/BlazorEmpty/Bit.BlazorEmpty/BlazorEmpty/BlazorEmpty.csproj b/src/Templates/BlazorEmpty/Bit.BlazorEmpty/BlazorEmpty/BlazorEmpty.csproj index c3180da12a5..c5721a19ea2 100644 --- a/src/Templates/BlazorEmpty/Bit.BlazorEmpty/BlazorEmpty/BlazorEmpty.csproj +++ b/src/Templates/BlazorEmpty/Bit.BlazorEmpty/BlazorEmpty/BlazorEmpty.csproj @@ -1,9 +1,9 @@ - + - net10.0 + net11.0 enable enable True @@ -13,20 +13,20 @@ - + - + - + all runtime; build; native; contentfiles; analyzers; buildtransitive - + all runtime; build; native; contentfiles; analyzers; buildtransitive diff --git a/src/Templates/BlazorEmpty/Bit.BlazorEmpty/BlazorEmpty/Program.Main.cs b/src/Templates/BlazorEmpty/Bit.BlazorEmpty/BlazorEmpty/Program.Main.cs index f120ea4aa4f..2cae9147e95 100644 --- a/src/Templates/BlazorEmpty/Bit.BlazorEmpty/BlazorEmpty/Program.Main.cs +++ b/src/Templates/BlazorEmpty/Bit.BlazorEmpty/BlazorEmpty/Program.Main.cs @@ -38,15 +38,7 @@ public static void Main(string[] args) var app = builder.Build(); // Configure the HTTP request pipeline. -#if (UseWebAssembly) - if (builder.Environment.IsDevelopment()) - { - app.UseWebAssemblyDebugging(); - } - else -#else if (builder.Environment.IsDevelopment() is false) -#endif { app.UseExceptionHandler("/Error", createScopeForErrors: true); // The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts. diff --git a/src/Templates/BlazorEmpty/Bit.BlazorEmpty/BlazorEmpty/Program.cs b/src/Templates/BlazorEmpty/Bit.BlazorEmpty/BlazorEmpty/Program.cs index f85bc66f67b..90767ebee65 100644 --- a/src/Templates/BlazorEmpty/Bit.BlazorEmpty/BlazorEmpty/Program.cs +++ b/src/Templates/BlazorEmpty/Bit.BlazorEmpty/BlazorEmpty/Program.cs @@ -32,15 +32,7 @@ var app = builder.Build(); // Configure the HTTP request pipeline. -#if (UseWebAssembly) -if (builder.Environment.IsDevelopment()) -{ - app.UseWebAssemblyDebugging(); -} -else -#else if (builder.Environment.IsDevelopment() is false) -#endif { app.UseExceptionHandler("/Error", createScopeForErrors: true); // The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts. diff --git a/src/Templates/BlazorEmpty/Bit.BlazorEmpty/BlazorEmpty/Properties/launchSettings.json b/src/Templates/BlazorEmpty/Bit.BlazorEmpty/BlazorEmpty/Properties/launchSettings.json index 0df007392e7..22ca8deead5 100644 --- a/src/Templates/BlazorEmpty/Bit.BlazorEmpty/BlazorEmpty/Properties/launchSettings.json +++ b/src/Templates/BlazorEmpty/Bit.BlazorEmpty/BlazorEmpty/Properties/launchSettings.json @@ -18,7 +18,6 @@ "dotnetRunMessages": true, "launchBrowser": true, //#if (UseWebAssembly) - "inspectUri": "{wsProtocol}://{url.hostname}:{url.port}/_framework/debug/ws-proxy?browser={browserInspectUri}", //#endif "applicationUrl": "http://localhost:5500", "environmentVariables": { @@ -31,7 +30,6 @@ "dotnetRunMessages": true, "launchBrowser": true, //#if (UseWebAssembly) - "inspectUri": "{wsProtocol}://{url.hostname}:{url.port}/_framework/debug/ws-proxy?browser={browserInspectUri}", //#endif "applicationUrl": "https://localhost:5501;http://localhost:5500", "environmentVariables": { @@ -43,7 +41,6 @@ "commandName": "IISExpress", "launchBrowser": true, //#if (UseWebAssembly) - "inspectUri": "{wsProtocol}://{url.hostname}:{url.port}/_framework/debug/ws-proxy?browser={browserInspectUri}", //#endif "environmentVariables": { "ASPNETCORE_ENVIRONMENT": "Development" diff --git a/src/Templates/BlazorEmpty/Bit.BlazorEmpty/global.json b/src/Templates/BlazorEmpty/Bit.BlazorEmpty/global.json index 6ce09c7c748..b31355670e7 100644 --- a/src/Templates/BlazorEmpty/Bit.BlazorEmpty/global.json +++ b/src/Templates/BlazorEmpty/Bit.BlazorEmpty/global.json @@ -1,6 +1,6 @@ { "sdk": { - "version": "10.0.100", - "rollForward": "latestFeature" + "version": "11.0.100-rc.2.26504.105", + "rollForward": "disable" } } \ No newline at end of file diff --git a/src/Templates/Boilerplate/Bit.Boilerplate.ProjectTemplate.csproj b/src/Templates/Boilerplate/Bit.Boilerplate.ProjectTemplate.csproj index 66b8b8df608..f88a3966953 100644 --- a/src/Templates/Boilerplate/Bit.Boilerplate.ProjectTemplate.csproj +++ b/src/Templates/Boilerplate/Bit.Boilerplate.ProjectTemplate.csproj @@ -3,7 +3,7 @@ - net10.0 + net11.0 false content false diff --git a/src/Templates/Boilerplate/Bit.Boilerplate/.azure-devops/workflows/cd.yml b/src/Templates/Boilerplate/Bit.Boilerplate/.azure-devops/workflows/cd.yml index dc1862cd727..59422a2b42d 100644 --- a/src/Templates/Boilerplate/Bit.Boilerplate/.azure-devops/workflows/cd.yml +++ b/src/Templates/Boilerplate/Bit.Boilerplate/.azure-devops/workflows/cd.yml @@ -26,7 +26,7 @@ jobs: displayName: 'build api + blazor web' pool: - vmImage: 'ubuntu-24.04' + vmImage: 'ubuntu-26.04' steps: - task: UseDotNet@2 @@ -76,7 +76,7 @@ jobs: displayName: 'deploy api + blazor' pool: - vmImage: 'ubuntu-24.04' + vmImage: 'ubuntu-26.04' steps: @@ -199,7 +199,7 @@ jobs: displayName: 'build blazor hybrid (android)' pool: - vmImage: 'ubuntu-24.04' + vmImage: 'ubuntu-26.04' steps: - task: UseDotNet@2 @@ -247,11 +247,11 @@ jobs: displayName: 'Publish aab' inputs: targetType: 'inline' - script: 'dotnet publish src/Client/Boilerplate.Client.Maui/Boilerplate.Client.Maui.csproj -c Release -p:AndroidPackageFormat=aab -p:AndroidKeyStore=true -p:AndroidSigningKeyStore="Boilerplate.keystore" -p:AndroidSigningKeyAlias=Boilerplate -p:AndroidSigningKeyPass="$(ANDROID_RELEASE_KEYSTORE_PASSWORD)" -p:AndroidSigningStorePass="$(ANDROID_RELEASE_SIGNING_PASSWORD)" -p:Version="$(APP_VERSION)" -f net10.0-android' + script: 'dotnet publish src/Client/Boilerplate.Client.Maui/Boilerplate.Client.Maui.csproj -c Release -p:AndroidPackageFormat=aab -p:AndroidKeyStore=true -p:AndroidSigningKeyStore="Boilerplate.keystore" -p:AndroidSigningKeyAlias=Boilerplate -p:AndroidSigningKeyPass="$(ANDROID_RELEASE_KEYSTORE_PASSWORD)" -p:AndroidSigningStorePass="$(ANDROID_RELEASE_SIGNING_PASSWORD)" -p:Version="$(APP_VERSION)" -f net11.0-android' - script: | mkdir drop - cp ./src/Client/Boilerplate.Client.Maui/bin/Release/net10.0-android/*-Signed.* drop/ + cp ./src/Client/Boilerplate.Client.Maui/bin/Release/net11.0-android/*-Signed.* drop/ failOnStderr: true displayName: Copy apk/aab files to drop folder diff --git a/src/Templates/Boilerplate/Bit.Boilerplate/.azure-devops/workflows/ci.yml b/src/Templates/Boilerplate/Bit.Boilerplate/.azure-devops/workflows/ci.yml index df72f5eb2c6..b659da3de3f 100644 --- a/src/Templates/Boilerplate/Bit.Boilerplate/.azure-devops/workflows/ci.yml +++ b/src/Templates/Boilerplate/Bit.Boilerplate/.azure-devops/workflows/ci.yml @@ -13,7 +13,7 @@ jobs: displayName: 'CI build' pool: - vmImage: 'ubuntu-24.04' + vmImage: 'ubuntu-26.04' steps: - task: UseDotNet@2 @@ -40,7 +40,7 @@ jobs: displayName: 'CI test' pool: - vmImage: 'ubuntu-24.04' + vmImage: 'ubuntu-26.04' steps: - task: UseDotNet@2 diff --git a/src/Templates/Boilerplate/Bit.Boilerplate/.codex/config.toml b/src/Templates/Boilerplate/Bit.Boilerplate/.codex/config.toml index 33081135f7c..09780629218 100644 --- a/src/Templates/Boilerplate/Bit.Boilerplate/.codex/config.toml +++ b/src/Templates/Boilerplate/Bit.Boilerplate/.codex/config.toml @@ -1,5 +1,5 @@ [mcp_servers.bitplatform] -url = "https://bitplatform.dev/mcp?v=10.7.0" +url = "https://bitplatform.dev/mcp?v=11.0.0" [mcp_servers.dev-mcp] url = "https://use-your-api-server-url-here.com/dev-mcp" diff --git a/src/Templates/Boilerplate/Bit.Boilerplate/.cursor/mcp.json b/src/Templates/Boilerplate/Bit.Boilerplate/.cursor/mcp.json index 563aeaf744a..f1a7987820b 100644 --- a/src/Templates/Boilerplate/Bit.Boilerplate/.cursor/mcp.json +++ b/src/Templates/Boilerplate/Bit.Boilerplate/.cursor/mcp.json @@ -1,7 +1,7 @@ { "mcpServers": { "bitplatform": { - "url": "https://bitplatform.dev/mcp?v=10.7.0" + "url": "https://bitplatform.dev/mcp?v=11.0.0" }, "dev-mcp": { "url": "https://use-your-api-server-url-here.com/dev-mcp" diff --git a/src/Templates/Boilerplate/Bit.Boilerplate/.devcontainer/devcontainer.json b/src/Templates/Boilerplate/Bit.Boilerplate/.devcontainer/devcontainer.json index 50b9b03a424..264e3763f4b 100644 --- a/src/Templates/Boilerplate/Bit.Boilerplate/.devcontainer/devcontainer.json +++ b/src/Templates/Boilerplate/Bit.Boilerplate/.devcontainer/devcontainer.json @@ -1,6 +1,6 @@ { "name": "Boilerplate", - "image": "mcr.microsoft.com/dotnet/sdk:10.0.402", + "image": "mcr.microsoft.com/dotnet/sdk:11.0.100-rc.2", "hostRequirements": { "cpus": 4 }, diff --git a/src/Templates/Boilerplate/Bit.Boilerplate/.docs/01- Entity Framework Core.md b/src/Templates/Boilerplate/Bit.Boilerplate/.docs/01- Entity Framework Core.md index f113297498e..c2af53db25a 100644 --- a/src/Templates/Boilerplate/Bit.Boilerplate/.docs/01- Entity Framework Core.md +++ b/src/Templates/Boilerplate/Bit.Boilerplate/.docs/01- Entity Framework Core.md @@ -310,7 +310,7 @@ You do **NOT** need to run `dotnet ef database update` or `Update-Database` manu `bit new` adds the `Initial` migration to `/src/Server/Boilerplate.Server.Api/Infrastructure/Data/Migrations/` when it creates the project. A project created any other way starts without one, and `MigrateAsync()` refuses to run until it exists. Open a terminal in the `Boilerplate.Server.Api` project directory and run: ```bash -dnx dotnet-ef@10.0.13 -- migrations add Initial --output-dir Infrastructure/Data/Migrations --verbose +dnx dotnet-ef@11.0.0-rc.2.26504.105 -- migrations add Initial --output-dir Infrastructure/Data/Migrations --verbose ``` ### Adding Future Migrations @@ -318,7 +318,7 @@ dnx dotnet-ef@10.0.13 -- migrations add Initial --output-dir Infrastructure/Data When you modify entities or configurations, create a new migration; the app applies it on its next start: ```bash -dnx dotnet-ef@10.0.13 -- migrations add --output-dir Infrastructure/Data/Migrations --verbose +dnx dotnet-ef@11.0.0-rc.2.26504.105 -- migrations add --output-dir Infrastructure/Data/Migrations --verbose ``` If the model changes without a migration, `MigrateAsync()` stops the app with a "pending model changes" error until the migration is added. @@ -394,7 +394,7 @@ Add-Migration YourMigrationName -OutputDir Infrastructure\Data\Migrations -Conte Open a terminal in the `Boilerplate.Server.Web` project directory and run: ```bash -dnx dotnet-ef@10.0.13 -- migrations add YourMigrationName --context AppOfflineDbContext --output-dir Infrastructure/Data/Migrations --project ../../Client/Boilerplate.Client.Core/Boilerplate.Client.Core.csproj --verbose +dnx dotnet-ef@11.0.0-rc.2.26504.105 -- migrations add YourMigrationName --context AppOfflineDbContext --output-dir Infrastructure/Data/Migrations --project ../../Client/Boilerplate.Client.Core/Boilerplate.Client.Core.csproj --verbose ``` **Important Notes:** diff --git a/src/Templates/Boilerplate/Bit.Boilerplate/.docs/16- CI-CD Pipeline and Environments.md b/src/Templates/Boilerplate/Bit.Boilerplate/.docs/16- CI-CD Pipeline and Environments.md index ec9da94f01a..00704f8976e 100644 --- a/src/Templates/Boilerplate/Bit.Boilerplate/.docs/16- CI-CD Pipeline and Environments.md +++ b/src/Templates/Boilerplate/Bit.Boilerplate/.docs/16- CI-CD Pipeline and Environments.md @@ -430,7 +430,7 @@ dotnet publish -c Release \ -p:AndroidSigningStorePass="${{ secrets.ANDROID_RELEASE_SIGNING_PASSWORD }}" \ -p:Version="1.0.0" \ -p:Environment=Production \ - -f net10.0-android + -f net11.0-android ``` 3. **Upload Artifact** @@ -488,7 +488,7 @@ dotnet publish -c Release \ -p:CodesignProvision="MyApp Provisioning" \ # Profile name -p:Version="1.0.0" \ -p:Environment=Production \ - -f net10.0-ios + -f net11.0-ios ``` 4. **Upload Artifact** @@ -566,7 +566,7 @@ The workflow follows a **security-focused two-phase deployment** pattern that se ```yaml # Phase 1: Build (no production access) build_api_blazor: - runs-on: ubuntu-24.04 + runs-on: ubuntu-26.04 steps: - uses: actions/checkout@v7 - uses: actions/setup-dotnet@v6 @@ -578,7 +578,7 @@ build_api_blazor: # Phase 2: Deploy (has production access) deploy_api_blazor: needs: build_api_blazor # Depends on Phase 1 - runs-on: ubuntu-24.04 + runs-on: ubuntu-26.04 steps: - uses: actions/download-artifact@v8 # Get pre-built artifact - uses: azure/webapps-deploy@v3 # Deploy to production diff --git a/src/Templates/Boilerplate/Bit.Boilerplate/.docs/17- Automated Testing (Unitigration Tests).md b/src/Templates/Boilerplate/Bit.Boilerplate/.docs/17- Automated Testing (Unitigration Tests).md index 2dd4e3ada87..ca207fe4863 100644 --- a/src/Templates/Boilerplate/Bit.Boilerplate/.docs/17- Automated Testing (Unitigration Tests).md +++ b/src/Templates/Boilerplate/Bit.Boilerplate/.docs/17- Automated Testing (Unitigration Tests).md @@ -359,10 +359,10 @@ dotnet test --logger "console;verbosity=detailed" ### Playwright-Specific Commands: ```powershell # Install Playwright browsers (first time only) -pwsh src/Tests/bin/Debug/net10.0/playwright.ps1 install +pwsh src/Tests/bin/Debug/net11.0/playwright.ps1 install # Update Playwright browsers -pwsh src/Tests/bin/Debug/net10.0/playwright.ps1 install --force +pwsh src/Tests/bin/Debug/net11.0/playwright.ps1 install --force ``` --- diff --git a/src/Templates/Boilerplate/Bit.Boilerplate/.docs/19- Project Miscellaneous Files.md b/src/Templates/Boilerplate/Bit.Boilerplate/.docs/19- Project Miscellaneous Files.md index 8f809f09639..66066e2399f 100644 --- a/src/Templates/Boilerplate/Bit.Boilerplate/.docs/19- Project Miscellaneous Files.md +++ b/src/Templates/Boilerplate/Bit.Boilerplate/.docs/19- Project Miscellaneous Files.md @@ -223,7 +223,7 @@ These namespaces are **automatically imported** in every C# file, eliminating th Instead of this in each `.csproj`: ```xml - + ``` You write this in `.csproj`: @@ -233,7 +233,7 @@ You write this in `.csproj`: And the version is defined centrally in `Directory.Packages.props`: ```xml - + ``` **Benefits**: @@ -244,8 +244,8 @@ And the version is defined centrally in `Directory.Packages.props`: **Example packages included**: ```xml - - + + @@ -436,7 +436,7 @@ dnx Bit.Cli --prerelease -- translate "servers": { "bitplatform": { "type": "http", - "url": "https://bitplatform.dev/mcp?v=10.7.0" + "url": "https://bitplatform.dev/mcp?v=11.0.0" } } } diff --git a/src/Templates/Boilerplate/Bit.Boilerplate/.gemini/settings.json b/src/Templates/Boilerplate/Bit.Boilerplate/.gemini/settings.json index dc2a6d1356d..5750d18f84f 100644 --- a/src/Templates/Boilerplate/Bit.Boilerplate/.gemini/settings.json +++ b/src/Templates/Boilerplate/Bit.Boilerplate/.gemini/settings.json @@ -1,7 +1,7 @@ { "mcpServers": { "bitplatform": { - "httpUrl": "https://bitplatform.dev/mcp?v=10.7.0" + "httpUrl": "https://bitplatform.dev/mcp?v=11.0.0" }, "aspire": { "command": "aspire", diff --git a/src/Templates/Boilerplate/Bit.Boilerplate/.github/agents/ai-dlc.agent.md b/src/Templates/Boilerplate/Bit.Boilerplate/.github/agents/ai-dlc.agent.md index 6214a317eac..c87cd3d2618 100644 --- a/src/Templates/Boilerplate/Bit.Boilerplate/.github/agents/ai-dlc.agent.md +++ b/src/Templates/Boilerplate/Bit.Boilerplate/.github/agents/ai-dlc.agent.md @@ -36,7 +36,7 @@ description: Drives a feature end-to-end using the AI-Driven Development Lifecyc - After each task: verify correctness, run relevant checks ### 5. Validation -- Run build and tests after completing all tasks: `dotnet test` in `src/Tests`, after `pwsh src/Tests/bin/Debug/net10.0/playwright.ps1 install` once for the UI tests. Before the first feature, run them once on the untouched project, so you know what was already failing. **Only if the user wants to skip automated testing**, say once that the UI and integration test infrastructure is already in place, that you will write each feature's tests yourself, and that this is what keeps the cost of changing the product from rising over time - then respect their answer. See `.docs/17- Automated Testing (Unitigration Tests).md` +- Run build and tests after completing all tasks: `dotnet test` in `src/Tests`, after `pwsh src/Tests/bin/Debug/net11.0/playwright.ps1 install` once for the UI tests. Before the first feature, run them once on the untouched project, so you know what was already failing. **Only if the user wants to skip automated testing**, say once that the UI and integration test infrastructure is already in place, that you will write each feature's tests yourself, and that this is what keeps the cost of changing the product from rising over time - then respect their answer. See `.docs/17- Automated Testing (Unitigration Tests).md` - Invoke the **review** skill (`.github/agents/review.agent.md`) on the resulting changes - Confirm acceptance criteria are met - Against a deployment, read its real state through **dev-mcp** (below) rather than guessing diff --git a/src/Templates/Boilerplate/Bit.Boilerplate/.github/agents/scaffold-entity.agent.md b/src/Templates/Boilerplate/Bit.Boilerplate/.github/agents/scaffold-entity.agent.md index f56b45401d0..66bc327097f 100644 --- a/src/Templates/Boilerplate/Bit.Boilerplate/.github/agents/scaffold-entity.agent.md +++ b/src/Templates/Boilerplate/Bit.Boilerplate/.github/agents/scaffold-entity.agent.md @@ -74,7 +74,7 @@ Generate a complete CRUD implementation for an entity including: - Configure unique indexes and relationships - Automatically registered in `AppDbContext` via `modelBuilder.ApplyConfigurationsFromAssembly()` - **Migration**: - - Run: `dnx dotnet-ef@10.0.13 -- migrations add {MigrationName} --output-dir Infrastructure/Data/Migrations --verbose` in `Boilerplate.Server.Api` project + - Run: `dnx dotnet-ef@11.0.0-rc.2.26504.105 -- migrations add {MigrationName} --output-dir Infrastructure/Data/Migrations --verbose` in `Boilerplate.Server.Api` project ### DTO - **Location**: `src/Shared/Features/{FeatureName}/` diff --git a/src/Templates/Boilerplate/Bit.Boilerplate/.github/agents/upgrade.agent.md b/src/Templates/Boilerplate/Bit.Boilerplate/.github/agents/upgrade.agent.md index dc10fcff9c5..a2c2fe93710 100644 --- a/src/Templates/Boilerplate/Bit.Boilerplate/.github/agents/upgrade.agent.md +++ b/src/Templates/Boilerplate/Bit.Boilerplate/.github/agents/upgrade.agent.md @@ -20,6 +20,9 @@ The work is yours to judge. Ask the user only what the code can't answer and wha ## 2. Get the upstream changes - Run `bit diff` from the project folder, with the from and to versions when they aren't the defaults and with any option whose recorded value no longer matches the project. It only reads the project's `bit.json`; it creates the project with each version in a temporary folder of its own, into one git repository, so the second commit is exactly what the template changed for a project with this name and these options, and it writes that commit as a patch file there too. Its output says where. + +- Moving this .NET 10 project to .NET 11 is the same work: give `bit diff` the .NET 11 value of `--framework`, which `bit diff --help` lists, and it creates the project for .NET 10 and for .NET 11, so the second commit is what the move changes. With a to version too, it shows both at once. + - Some differences come from generating a project, not from the upgrade, and stay as they are in this project: everything the template picks at random on every run, such as ports, GUIDs like the user secrets id, dates and the seeded accounts' password, plus the app certificate, the formatting `bit new` applies, and EF Core migrations, which neither version has. - Read the whole change set before touching anything: which areas it touches, which files are new, deleted or renamed, and which changes belong together, such as a package bump and the code that needs it. diff --git a/src/Templates/Boilerplate/Bit.Boilerplate/.github/workflows/cd-template.yml b/src/Templates/Boilerplate/Bit.Boilerplate/.github/workflows/cd-template.yml index 1ec926a9f5b..f8fd5d74a38 100644 --- a/src/Templates/Boilerplate/Bit.Boilerplate/.github/workflows/cd-template.yml +++ b/src/Templates/Boilerplate/Bit.Boilerplate/.github/workflows/cd-template.yml @@ -19,7 +19,7 @@ jobs: build_api_blazor: name: build api + blazor web - runs-on: ubuntu-24.04 + runs-on: ubuntu-26.04 permissions: contents: read id-token: write @@ -84,7 +84,7 @@ jobs: deploy_api_blazor: name: deploy api + blazor needs: build_api_blazor - runs-on: ubuntu-24.04 + runs-on: ubuntu-26.04 environment: name: ${{ inputs.ENV_NAME }} url: ${{ steps.deploy-to-webapp.outputs.webapp-url }} @@ -117,7 +117,7 @@ jobs: #if (api == "Standalone") build_api: name: build api - runs-on: ubuntu-24.04 + runs-on: ubuntu-26.04 permissions: contents: read id-token: write @@ -163,7 +163,7 @@ jobs: deploy_api: name: deploy api needs: build_api - runs-on: ubuntu-24.04 + runs-on: ubuntu-26.04 environment: name: ${{ inputs.ENV_NAME }} url: ${{ steps.deploy-api-to-webapp.outputs.webapp-url }} @@ -269,7 +269,7 @@ jobs: build_blazor_hybrid_android: name: build blazor hybrid (android) - runs-on: ubuntu-24.04 + runs-on: ubuntu-26.04 permissions: contents: read id-token: write @@ -318,14 +318,14 @@ jobs: ServerAddress: ${{ vars.SERVER_ADDRESS }} - name: Publish aab - run: dotnet publish src/Client/Boilerplate.Client.Maui/Boilerplate.Client.Maui.csproj -c Release -p:ApplicationId=${{ vars.APP_ID }} -p:AndroidPackageFormat=aab -p:AndroidKeyStore=true -p:AndroidSigningKeyStore="Boilerplate.keystore" -p:AndroidSigningKeyAlias=Boilerplate -p:AndroidSigningKeyPass="${{ secrets.ANDROID_RELEASE_KEYSTORE_PASSWORD }}" -p:AndroidSigningStorePass="${{ secrets.ANDROID_RELEASE_SIGNING_PASSWORD }}" -p:Version="${{ vars.APP_VERSION }}" -p:Environment=${{ inputs.ENV_NAME }} -f net10.0-android + run: dotnet publish src/Client/Boilerplate.Client.Maui/Boilerplate.Client.Maui.csproj -c Release -p:ApplicationId=${{ vars.APP_ID }} -p:AndroidPackageFormat=aab -p:AndroidKeyStore=true -p:AndroidSigningKeyStore="Boilerplate.keystore" -p:AndroidSigningKeyAlias=Boilerplate -p:AndroidSigningKeyPass="${{ secrets.ANDROID_RELEASE_KEYSTORE_PASSWORD }}" -p:AndroidSigningStorePass="${{ secrets.ANDROID_RELEASE_SIGNING_PASSWORD }}" -p:Version="${{ vars.APP_VERSION }}" -p:Environment=${{ inputs.ENV_NAME }} -f net11.0-android - name: Upload artifact id: artifact uses: actions/upload-artifact@cf430e030ddbb5b0abf93d22962f4752f3646cd9 # v7.0.2 with: name: android-bundle - path: src/Client/Boilerplate.Client.Maui/bin/Release/net10.0-android/*-Signed.* + path: src/Client/Boilerplate.Client.Maui/bin/Release/net11.0-android/*-Signed.* - name: Attest artifact if: github.event.repository.visibility == 'public' @@ -357,7 +357,7 @@ jobs: - uses: maxim-lobanov/setup-xcode@ed7a3b1fda3918c0306d1b724322adc0b8cc0a90 # v1.7.0 with: - xcode-version: '27.1' + xcode-version: '27.0' - name: Install the bit CLI shell: pwsh @@ -397,14 +397,14 @@ jobs: api-private-key: ${{ secrets.APPSTORE_API_KEY_PRIVATE_KEY }} - name: Build ipa - run: dotnet publish src/Client/Boilerplate.Client.Maui/Boilerplate.Client.Maui.csproj -p:ApplicationId=${{ vars.APP_ID }} -p:RuntimeIdentifier=ios-arm64 -c Release -p:ArchiveOnBuild=true -p:CodesignKey="iPhone Distribution" -p:CodesignProvision="${{ vars.IOS_CODE_SIGN_PROVISION }}" -p:Version="${{ vars.APP_VERSION }}" -p:Environment=${{ inputs.ENV_NAME }} -f net10.0-ios + run: dotnet publish src/Client/Boilerplate.Client.Maui/Boilerplate.Client.Maui.csproj -p:ApplicationId=${{ vars.APP_ID }} -p:RuntimeIdentifier=ios-arm64 -c Release -p:ArchiveOnBuild=true -p:CodesignKey="iPhone Distribution" -p:CodesignProvision="${{ vars.IOS_CODE_SIGN_PROVISION }}" -p:Version="${{ vars.APP_VERSION }}" -p:Environment=${{ inputs.ENV_NAME }} -f net11.0-ios - name: Upload artifact id: artifact uses: actions/upload-artifact@cf430e030ddbb5b0abf93d22962f4752f3646cd9 # v7.0.2 with: name: iOS-bundle - path: src/Client/Boilerplate.Client.Maui/bin/release/net10.0-ios/ios-arm64/publish/*.ipa + path: src/Client/Boilerplate.Client.Maui/bin/release/net11.0-ios/ios-arm64/publish/*.ipa - name: Attest artifact if: github.event.repository.visibility == 'public' diff --git a/src/Templates/Boilerplate/Bit.Boilerplate/.github/workflows/ci.yml b/src/Templates/Boilerplate/Bit.Boilerplate/.github/workflows/ci.yml index 36ac96092e8..68583a67af6 100644 --- a/src/Templates/Boilerplate/Bit.Boilerplate/.github/workflows/ci.yml +++ b/src/Templates/Boilerplate/Bit.Boilerplate/.github/workflows/ci.yml @@ -21,7 +21,7 @@ jobs: build: name: build - runs-on: ubuntu-24.04 + runs-on: ubuntu-26.04 steps: @@ -49,7 +49,7 @@ jobs: test: name: test - runs-on: ubuntu-24.04 + runs-on: ubuntu-26.04 steps: diff --git a/src/Templates/Boilerplate/Bit.Boilerplate/.junie/mcp/mcp.json b/src/Templates/Boilerplate/Bit.Boilerplate/.junie/mcp/mcp.json index ee5fc6aae23..416781b21b8 100644 --- a/src/Templates/Boilerplate/Bit.Boilerplate/.junie/mcp/mcp.json +++ b/src/Templates/Boilerplate/Bit.Boilerplate/.junie/mcp/mcp.json @@ -2,7 +2,7 @@ "mcpServers": { "bitplatform": { "type": "http", - "url": "https://bitplatform.dev/mcp?v=10.7.0" + "url": "https://bitplatform.dev/mcp?v=11.0.0" }, "dev-mcp": { "type": "http", diff --git a/src/Templates/Boilerplate/Bit.Boilerplate/.mcp.json b/src/Templates/Boilerplate/Bit.Boilerplate/.mcp.json index 25811256262..de674b29738 100644 --- a/src/Templates/Boilerplate/Bit.Boilerplate/.mcp.json +++ b/src/Templates/Boilerplate/Bit.Boilerplate/.mcp.json @@ -2,7 +2,7 @@ "mcpServers": { "bitplatform": { "type": "http", - "url": "https://bitplatform.dev/mcp?v=10.7.0" + "url": "https://bitplatform.dev/mcp?v=11.0.0" }, "dev-mcp": { "type": "http", diff --git a/src/Templates/Boilerplate/Bit.Boilerplate/.template.config/ide.host.json b/src/Templates/Boilerplate/Bit.Boilerplate/.template.config/ide.host.json index a9cadfdd819..066640e0908 100644 --- a/src/Templates/Boilerplate/Bit.Boilerplate/.template.config/ide.host.json +++ b/src/Templates/Boilerplate/Bit.Boilerplate/.template.config/ide.host.json @@ -11,6 +11,9 @@ { "id": "helpUrl" }, + { + "id": "framework" + }, { "id": "aspire" }, diff --git a/src/Templates/Boilerplate/Bit.Boilerplate/.template.config/template.json b/src/Templates/Boilerplate/Bit.Boilerplate/.template.config/template.json index 78c7de3fd3e..2a2c0ab80a5 100644 --- a/src/Templates/Boilerplate/Bit.Boilerplate/.template.config/template.json +++ b/src/Templates/Boilerplate/Bit.Boilerplate/.template.config/template.json @@ -16,6 +16,157 @@ "sourceName": "Boilerplate", "preferNameDirectory": true, "symbols": { + "framework": { + "displayName": ".NET version", + "type": "parameter", + "datatype": "choice", + "replaces": "net11.0", + "defaultValue": "net10.0", + "choices": [ + { + "choice": "net10.0", + "description": ".NET 10 (LTS)" + }, + { + "choice": "net11.0", + "description": ".NET 11" + } + ], + "description": "The .NET version the project targets." + }, + "sdkVersion": { + "type": "generated", + "generator": "switch", + "replaces": "\"version\": \"11.0.100-rc.2.26504.105\"", + "parameters": { + "evaluator": "C++", + "datatype": "string", + "cases": [ + { + "condition": "(framework == 'net10.0')", + "value": "\"version\": \"10.0.100\"" + }, + { + "condition": "", + "value": "\"version\": \"11.0.100-rc.2.26504.105\"" + } + ] + } + }, + "sdkRollForward": { + "type": "generated", + "generator": "switch", + "replaces": "\"rollForward\": \"disable\"", + "parameters": { + "evaluator": "C++", + "datatype": "string", + "cases": [ + { + "condition": "(framework == 'net10.0')", + "value": "\"rollForward\": \"latestFeature\"" + }, + { + "condition": "", + "value": "\"rollForward\": \"disable\"" + } + ] + } + }, + "devContainerImage": { + "type": "generated", + "generator": "switch", + "replaces": "mcr.microsoft.com/dotnet/sdk:11.0.100-rc.2", + "parameters": { + "evaluator": "C++", + "datatype": "string", + "cases": [ + { + "condition": "(framework == 'net10.0')", + "value": "mcr.microsoft.com/dotnet/sdk:10.0.402" + }, + { + "condition": "", + "value": "mcr.microsoft.com/dotnet/sdk:11.0.100-rc.2" + } + ] + } + }, + "efToolVersion": { + "type": "generated", + "generator": "switch", + "replaces": "dotnet-ef@11.0.0-rc.2.26504.105", + "parameters": { + "evaluator": "C++", + "datatype": "string", + "cases": [ + { + "condition": "(framework == 'net10.0')", + "value": "dotnet-ef@10.0.13" + }, + { + "condition": "", + "value": "dotnet-ef@11.0.0-rc.2.26504.105" + } + ] + } + }, + "xcodeVersion": { + "type": "generated", + "generator": "switch", + "replaces": "xcode-version: '27.0'", + "parameters": { + "evaluator": "C++", + "datatype": "string", + "cases": [ + { + "condition": "(framework == 'net10.0')", + "value": "xcode-version: '27.1'" + }, + { + "condition": "", + "value": "xcode-version: '27.0'" + } + ] + } + }, + "runnerImage": { + "type": "generated", + "generator": "switch", + "replaces": "ubuntu-26.04", + "parameters": { + "evaluator": "C++", + "datatype": "string", + "cases": [ + { + "condition": "(framework == 'net10.0')", + "value": "ubuntu-24.04" + }, + { + "condition": "", + "value": "ubuntu-26.04" + } + ] + } + }, + "aspNetCoreVersionName": { + "type": "generated", + "generator": "switch", + "replaces": "ASP.NET Core 11.0", + "parameters": { + "evaluator": "C++", + "datatype": "string", + "cases": [ + { + "condition": "(framework == 'net10.0')", + "value": "ASP.NET Core 10.0" + }, + { + "condition": "", + "value": "ASP.NET Core 11.0" + } + ] + } + }, "helpUrl": { "displayName": "More info at", "type": "parameter", @@ -1237,6 +1388,12 @@ "src/Client/Boilerplate.Client.Core/Components/Pages/AppPageBase.BrouterLifecycles.cs", "src/Client/Boilerplate.Client.Core/Components/Common/AppPageData.BrouterLifecycles.cs" ] + }, + { + "condition": "(framework != 'net11.0')", + "exclude": [ + "src/Client/Boilerplate.Client.Windows/Infrastructure/Services/WindowsKioskGuard.cs" + ] } ] } diff --git a/src/Templates/Boilerplate/Bit.Boilerplate/.vscode/mcp.json b/src/Templates/Boilerplate/Bit.Boilerplate/.vscode/mcp.json index e2e2175fede..5e01d86bd7c 100644 --- a/src/Templates/Boilerplate/Bit.Boilerplate/.vscode/mcp.json +++ b/src/Templates/Boilerplate/Bit.Boilerplate/.vscode/mcp.json @@ -2,7 +2,7 @@ "servers": { "bitplatform": { "type": "http", - "url": "https://bitplatform.dev/mcp?v=10.7.0" + "url": "https://bitplatform.dev/mcp?v=11.0.0" }, "dev-mcp": { "type": "http", diff --git a/src/Templates/Boilerplate/Bit.Boilerplate/AGENTS.md b/src/Templates/Boilerplate/Bit.Boilerplate/AGENTS.md index e8a8d2fb549..65a33466203 100644 --- a/src/Templates/Boilerplate/Bit.Boilerplate/AGENTS.md +++ b/src/Templates/Boilerplate/Bit.Boilerplate/AGENTS.md @@ -5,7 +5,7 @@ You will be working with the following key technologies: * **C# 14.0** -* **ASP.NET Core 10.0** +* **ASP.NET Core 11.0** * **Blazor**: Component-based web UI framework * **.NET MAUI Blazor Hybrid**: Cross-platform app development * **ASP.NET Core Identity**: Authentication and authorization @@ -91,7 +91,7 @@ Before implementing any changes, you **MUST** complete the following: - **Android**: the WebView is debuggable, and its CDP endpoint is a local abstract socket on the device. Expose it with `adb shell pidof ` then `adb forward tcp:9222 localabstract:webview_devtools_remote_` (pick another local port if the Windows app already holds 9222), and attach with Playwright exactly like Windows. - **Assume hot reload is working**: `.cs`, `.razor`, `.scss` and `.ts` changes are picked up automatically by the running app, so after an edit do NOT rebuild the project and do NOT reload/refresh the web app. Only rebuild or refresh if you can't see what you were expecting after your change. - **Run tests**: Run `dotnet test` in the src/Tests directory. -- **Add new migrations**: Run `dnx dotnet-ef@10.0.13 -- migrations add --output-dir Infrastructure/Data/Migrations --verbose` in src/Server/Boilerplate.Server.Api project directory. +- **Add new migrations**: Run `dnx dotnet-ef@11.0.0-rc.2.26504.105 -- migrations add --output-dir Infrastructure/Data/Migrations --verbose` in src/Server/Boilerplate.Server.Api project directory. - **Generate Resx C# code**: Run `dotnet build -t:PrepareResources` in the src/Shared directory. ## 5. Coding Conventions & Best Practices diff --git a/src/Templates/Boilerplate/Bit.Boilerplate/bit.json b/src/Templates/Boilerplate/Bit.Boilerplate/bit.json index 616ef7c5037..5be9f461cb8 100644 --- a/src/Templates/Boilerplate/Bit.Boilerplate/bit.json +++ b/src/Templates/Boilerplate/Bit.Boilerplate/bit.json @@ -1,8 +1,9 @@ { "template": "bit-bp", - "version": "10.7.0-pre-02", + "version": "11.0.0-pre-10", "name": "Boilerplate", "options": { + "framework": "net11.0", "database": "bit-option-database", "filesStorage": "bit-option-filesStorage", "api": "bit-option-api", diff --git a/src/Templates/Boilerplate/Bit.Boilerplate/global.json b/src/Templates/Boilerplate/Bit.Boilerplate/global.json index 48af5972b20..dbbf5231722 100644 --- a/src/Templates/Boilerplate/Bit.Boilerplate/global.json +++ b/src/Templates/Boilerplate/Bit.Boilerplate/global.json @@ -1,7 +1,7 @@ { "sdk": { - "version": "10.0.100", - "rollForward": "latestFeature" + "version": "11.0.100-rc.2.26504.105", + "rollForward": "disable" }, "test": { "runner": "Microsoft.Testing.Platform" diff --git a/src/Templates/Boilerplate/Bit.Boilerplate/src/Client/Boilerplate.Client.Core/Boilerplate.Client.Core.csproj b/src/Templates/Boilerplate/Bit.Boilerplate/src/Client/Boilerplate.Client.Core/Boilerplate.Client.Core.csproj index 8b1cc71c8b1..b125fd6f671 100644 --- a/src/Templates/Boilerplate/Bit.Boilerplate/src/Client/Boilerplate.Client.Core/Boilerplate.Client.Core.csproj +++ b/src/Templates/Boilerplate/Bit.Boilerplate/src/Client/Boilerplate.Client.Core/Boilerplate.Client.Core.csproj @@ -1,7 +1,7 @@ - net10.0 + net11.0 diff --git a/src/Templates/Boilerplate/Bit.Boilerplate/src/Client/Boilerplate.Client.Core/Components/Pages/Home/HomePage.razor b/src/Templates/Boilerplate/Bit.Boilerplate/src/Client/Boilerplate.Client.Core/Components/Pages/Home/HomePage.razor index 39a25392d9d..1d43774bd04 100644 --- a/src/Templates/Boilerplate/Bit.Boilerplate/src/Client/Boilerplate.Client.Core/Components/Pages/Home/HomePage.razor +++ b/src/Templates/Boilerplate/Bit.Boilerplate/src/Client/Boilerplate.Client.Core/Components/Pages/Home/HomePage.razor @@ -13,6 +13,22 @@
+ @*#if (framework == 'net11.0')*@ + @if (IsKiosk) + { + + + @Localizer[nameof(AppStrings.KioskMessage)] + + + + @Localizer[nameof(AppStrings.KioskExitApp)] + + + + } + @*#endif*@ + @Localizer[nameof(AppStrings.HomePanelTitle)]
diff --git a/src/Templates/Boilerplate/Bit.Boilerplate/src/Client/Boilerplate.Client.Core/Components/Pages/Home/HomePage.razor.cs b/src/Templates/Boilerplate/Bit.Boilerplate/src/Client/Boilerplate.Client.Core/Components/Pages/Home/HomePage.razor.cs index 09a3e573628..3cf224e51b5 100644 --- a/src/Templates/Boilerplate/Bit.Boilerplate/src/Client/Boilerplate.Client.Core/Components/Pages/Home/HomePage.razor.cs +++ b/src/Templates/Boilerplate/Bit.Boilerplate/src/Client/Boilerplate.Client.Core/Components/Pages/Home/HomePage.razor.cs @@ -46,6 +46,16 @@ private string BuildSiteJsonLd() ["@graph"] = new JsonArray(organization, webSite) }.ToJsonString(); } + //#if (framework == 'net11.0') + + /// + /// The demo Windows app ships with kiosk mode on, so the page offers the way out that the lockdown takes away. + /// + private bool IsKiosk => AppPlatform.IsWindows && bool.TryParse(Configuration["Kiosk:Enabled"], out var enabled) && enabled; + + /// Nothing else closes a kiosk window: the close button is gone and WM_CLOSE is refused. + private void ExitApp() => Environment.Exit(0); + //#endif //#if(module != "Sales") diff --git a/src/Templates/Boilerplate/Bit.Boilerplate/src/Client/Boilerplate.Client.Core/Components/Pages/Identity/SignIn/SignInPanel.razor.cs b/src/Templates/Boilerplate/Bit.Boilerplate/src/Client/Boilerplate.Client.Core/Components/Pages/Identity/SignIn/SignInPanel.razor.cs index c77a54c1e0d..f1442f99def 100644 --- a/src/Templates/Boilerplate/Bit.Boilerplate/src/Client/Boilerplate.Client.Core/Components/Pages/Identity/SignIn/SignInPanel.razor.cs +++ b/src/Templates/Boilerplate/Bit.Boilerplate/src/Client/Boilerplate.Client.Core/Components/Pages/Identity/SignIn/SignInPanel.razor.cs @@ -144,7 +144,17 @@ private async Task DoSignIn() { CleanModel(); + //#if (framework == 'net11.0') + if (validatorRef is not null && await validatorRef.EditContext.ValidateAsync(CurrentCancellationToken) is false) return; + //#else + //#if (IsInsideProjectTemplate == true) + /* + //#endif if (validatorRef?.EditContext.Validate() is false) return; + //#if (IsInsideProjectTemplate == true) + */ + //#endif + //#endif if (isNewUser is false) { diff --git a/src/Templates/Boilerplate/Bit.Boilerplate/src/Client/Boilerplate.Client.Core/Infrastructure/Data/README.md b/src/Templates/Boilerplate/Bit.Boilerplate/src/Client/Boilerplate.Client.Core/Infrastructure/Data/README.md index 4a5d069d132..6f89f848edd 100644 --- a/src/Templates/Boilerplate/Bit.Boilerplate/src/Client/Boilerplate.Client.Core/Infrastructure/Data/README.md +++ b/src/Templates/Boilerplate/Bit.Boilerplate/src/Client/Boilerplate.Client.Core/Infrastructure/Data/README.md @@ -28,7 +28,7 @@ Add-Migration YourMigrationName -OutputDir Infrastructure\Data\Migrations -Conte ``` Or open a terminal in your Boilerplate.Server.Web project directory and run followings: ```bash -dnx dotnet-ef@10.0.13 -- migrations add YourMigrationName --context AppOfflineDbContext --output-dir Infrastructure/Data/Migrations --project ../../Client/Boilerplate.Client.Core/Boilerplate.Client.Core.csproj --verbose +dnx dotnet-ef@11.0.0-rc.2.26504.105 -- migrations add YourMigrationName --context AppOfflineDbContext --output-dir Infrastructure/Data/Migrations --project ../../Client/Boilerplate.Client.Core/Boilerplate.Client.Core.csproj --verbose ``` *Note*: If you encounter any problem in running these commands, first make sure that the solution builds successfully. @@ -53,7 +53,7 @@ Optimize-DbContext -Context AppOfflineDbContext -OutputDir Infrastructure/Data/C **OR** Run the following command in Boilerplate.Server.Web directory: ```bash -dnx dotnet-ef@10.0.13 -- dbcontext optimize --context AppOfflineDbContext --output-dir Infrastructure/Data/CompiledModel --namespace Boilerplate.Client.Core.Infrastructure.Data --project ../../Client/Boilerplate.Client.Core/Boilerplate.Client.Core.csproj --verbose +dnx dotnet-ef@11.0.0-rc.2.26504.105 -- dbcontext optimize --context AppOfflineDbContext --output-dir Infrastructure/Data/CompiledModel --namespace Boilerplate.Client.Core.Infrastructure.Data --project ../../Client/Boilerplate.Client.Core/Boilerplate.Client.Core.csproj --verbose ``` By adhering to these steps, you leverage EF Core compiled models to boost the performance of your application, ensuring an optimized and efficient data access method. \ No newline at end of file diff --git a/src/Templates/Boilerplate/Bit.Boilerplate/src/Client/Boilerplate.Client.Core/Infrastructure/Extensions/IClientCoreServiceCollectionExtensions.cs b/src/Templates/Boilerplate/Bit.Boilerplate/src/Client/Boilerplate.Client.Core/Infrastructure/Extensions/IClientCoreServiceCollectionExtensions.cs index dd9d10e88b1..2d044a8c37a 100644 --- a/src/Templates/Boilerplate/Bit.Boilerplate/src/Client/Boilerplate.Client.Core/Infrastructure/Extensions/IClientCoreServiceCollectionExtensions.cs +++ b/src/Templates/Boilerplate/Bit.Boilerplate/src/Client/Boilerplate.Client.Core/Infrastructure/Extensions/IClientCoreServiceCollectionExtensions.cs @@ -139,7 +139,7 @@ public IServiceCollection AddClientCoreProjectServices(IConfiguration configurat , dbContextInitializer: async (_, dbContext) => { if (AppEnvironment.IsDevelopment() is false && dbContext.Model.GetType() == typeof(EntityFrameworkCore.Metadata.RuntimeModel)) - throw new InvalidOperationException("AppOfflineDbContext has not been optimized. Run 'dnx dotnet-ef@10.0.13 -- dbcontext optimize --context AppOfflineDbContext' before publishing, and re-run it after every model or migration change. See Boilerplate.Client.Core/Infrastructure/Data/README.md."); + throw new InvalidOperationException("AppOfflineDbContext has not been optimized. Run 'dnx dotnet-ef@11.0.0-rc.2.26504.105 -- dbcontext optimize --context AppOfflineDbContext' before publishing, and re-run it after every model or migration change. See Boilerplate.Client.Core/Infrastructure/Data/README.md."); await Task.Run(async () => await dbContext.Database.MigrateAsync()); } @@ -178,6 +178,13 @@ public IServiceCollection AddClientCoreProjectServices(IConfiguration configurat } }) .WithAutomaticReconnect(sp.GetRequiredService()) + //#if (framework == 'net11.0') + .WithAuthenticationRefresh(options => + { + options.EnableAutoRefresh = true; + options.RefreshBeforeExpiration = TimeSpan.FromMinutes(1); + }) + //#endif .WithUrl(new Uri(absoluteServerAddressProvider.GetAddress(), "app-hub?origin=" + Uri.EscapeDataString(xOrigin)), options => { //#if (redis == true) diff --git a/src/Templates/Boilerplate/Bit.Boilerplate/src/Client/Boilerplate.Client.Maui/Boilerplate.Client.Maui.csproj b/src/Templates/Boilerplate/Bit.Boilerplate/src/Client/Boilerplate.Client.Maui/Boilerplate.Client.Maui.csproj index 7c36d549178..4ccd43906e2 100644 --- a/src/Templates/Boilerplate/Bit.Boilerplate/src/Client/Boilerplate.Client.Maui/Boilerplate.Client.Maui.csproj +++ b/src/Templates/Boilerplate/Bit.Boilerplate/src/Client/Boilerplate.Client.Maui/Boilerplate.Client.Maui.csproj @@ -1,11 +1,11 @@ - net10.0-android;net10.0-ios;net10.0-maccatalyst - $(TargetFrameworks);net10.0-windows10.0.19041.0 - net10.0-android + net11.0-android;net11.0-ios;net11.0-maccatalyst + $(TargetFrameworks);net11.0-windows10.0.19041.0 + net11.0-android - + Exe true true @@ -18,13 +18,19 @@ com.bitplatform.template - - True true $(NoWarn);ClassWithoutModifierAnalyzer + + + + True + + + + false + false + - True + + True + Platforms/iOS/Entitlements.Development.plist - True - - -all + + True + -all + Platforms/iOS/Entitlements.Production.plist @@ -84,23 +94,18 @@ Platforms/MacCatalyst/Entitlements.Production.plist true - - -all + + -all + - - - - - - @@ -160,6 +165,7 @@ + diff --git a/src/Templates/Boilerplate/Bit.Boilerplate/src/Client/Boilerplate.Client.Maui/MauiProgram.cs b/src/Templates/Boilerplate/Bit.Boilerplate/src/Client/Boilerplate.Client.Maui/MauiProgram.cs index a122d0460b6..d89a81c6817 100644 --- a/src/Templates/Boilerplate/Bit.Boilerplate/src/Client/Boilerplate.Client.Maui/MauiProgram.cs +++ b/src/Templates/Boilerplate/Bit.Boilerplate/src/Client/Boilerplate.Client.Maui/MauiProgram.cs @@ -107,7 +107,22 @@ bool HandleAppLink(NSUserActivity? userActivity) var mauiApp = builder.Build(); + //+:cnd:noEmit + //#if (framework == 'net11.0') + foreach (var startupValidator in mauiApp.Services.GetServices()) + { + startupValidator.ValidateAsync().GetAwaiter().GetResult(); + } + //#else + //#if (IsInsideProjectTemplate == true) + /* + //#endif mauiApp.Services.GetService()?.Validate(); + //#if (IsInsideProjectTemplate == true) + */ + //#endif + //#endif + //-:cnd:noEmit mauiApp.Services.GetRequiredService() .Subscribe(ClientAppMessages.PAGE_DATA_CHANGED, async (args) => diff --git a/src/Templates/Boilerplate/Bit.Boilerplate/src/Client/Boilerplate.Client.Maui/Resources/AppIcon/appicon.svg b/src/Templates/Boilerplate/Bit.Boilerplate/src/Client/Boilerplate.Client.Maui/Resources/AppIcon/appicon.svg index cef77f749f3..44c9ec9467c 100644 --- a/src/Templates/Boilerplate/Bit.Boilerplate/src/Client/Boilerplate.Client.Maui/Resources/AppIcon/appicon.svg +++ b/src/Templates/Boilerplate/Bit.Boilerplate/src/Client/Boilerplate.Client.Maui/Resources/AppIcon/appicon.svg @@ -9,7 +9,7 @@ - + @@ -18,16 +18,6 @@ - - - - - - - - - - diff --git a/src/Templates/Boilerplate/Bit.Boilerplate/src/Client/Boilerplate.Client.Web/Boilerplate.Client.Web.csproj b/src/Templates/Boilerplate/Bit.Boilerplate/src/Client/Boilerplate.Client.Web/Boilerplate.Client.Web.csproj index 3d4a7865f86..6a3a566dc9f 100644 --- a/src/Templates/Boilerplate/Bit.Boilerplate/src/Client/Boilerplate.Client.Web/Boilerplate.Client.Web.csproj +++ b/src/Templates/Boilerplate/Bit.Boilerplate/src/Client/Boilerplate.Client.Web/Boilerplate.Client.Web.csproj @@ -1,7 +1,7 @@ - net10.0 + net11.0 false false diff --git a/src/Templates/Boilerplate/Bit.Boilerplate/src/Client/Boilerplate.Client.Web/Program.cs b/src/Templates/Boilerplate/Bit.Boilerplate/src/Client/Boilerplate.Client.Web/Program.cs index d9b1c985ab0..1183340446d 100644 --- a/src/Templates/Boilerplate/Bit.Boilerplate/src/Client/Boilerplate.Client.Web/Program.cs +++ b/src/Templates/Boilerplate/Bit.Boilerplate/src/Client/Boilerplate.Client.Web/Program.cs @@ -43,7 +43,20 @@ public static async Task Main(string[] args) var host = builder.Build(); + //#if (framework == 'net11.0') + foreach (var startupValidator in host.Services.GetServices()) + { + await startupValidator.ValidateAsync(); + } + //#else + //#if (IsInsideProjectTemplate == true) + /* + //#endif host.Services.GetService()?.Validate(); + //#if (IsInsideProjectTemplate == true) + */ + //#endif + //#endif AppDomain.CurrentDomain.UnhandledException += (_, e) => LogException(e.ExceptionObject, reportedBy: nameof(AppDomain.UnhandledException), host); TaskScheduler.UnobservedTaskException += (_, e) => diff --git a/src/Templates/Boilerplate/Bit.Boilerplate/src/Client/Boilerplate.Client.Web/Properties/launchSettings.json b/src/Templates/Boilerplate/Bit.Boilerplate/src/Client/Boilerplate.Client.Web/Properties/launchSettings.json index 27ed8183566..3fdd0348de8 100644 --- a/src/Templates/Boilerplate/Bit.Boilerplate/src/Client/Boilerplate.Client.Web/Properties/launchSettings.json +++ b/src/Templates/Boilerplate/Bit.Boilerplate/src/Client/Boilerplate.Client.Web/Properties/launchSettings.json @@ -4,7 +4,15 @@ "commandName": "Project", "dotnetRunMessages": true, "launchBrowser": true, + //#if (framework == 'net10.0') + //#if (IsInsideProjectTemplate) + /* + //#endif "inspectUri": "{wsProtocol}://{url.hostname}:{url.port}/_framework/debug/ws-proxy?browser={browserInspectUri}", + //#if (IsInsideProjectTemplate) + */ + //#endif + //#endif "applicationUrl": "http://localhost:4030", "environmentVariables": { "ASPNETCORE_ENVIRONMENT": "Development" diff --git a/src/Templates/Boilerplate/Bit.Boilerplate/src/Client/Boilerplate.Client.Web/wwwroot/service-worker.published.js b/src/Templates/Boilerplate/Bit.Boilerplate/src/Client/Boilerplate.Client.Web/wwwroot/service-worker.published.js index 8c814af5477..b343274239f 100644 --- a/src/Templates/Boilerplate/Bit.Boilerplate/src/Client/Boilerplate.Client.Web/wwwroot/service-worker.published.js +++ b/src/Templates/Boilerplate/Bit.Boilerplate/src/Client/Boilerplate.Client.Web/wwwroot/service-worker.published.js @@ -2,7 +2,7 @@ // [mirror] push notification and notificationclick handlers - keep in sync with: // - src/Client/Boilerplate.Client.Web/wwwroot/service-worker.js -// bit version: 10.7.0-pre-02 +// bit version: 11.0.0-pre-10 // https://github.com/bitfoundation/bitplatform/tree/develop/src/Bswup //#if (notification == true) diff --git a/src/Templates/Boilerplate/Bit.Boilerplate/src/Client/Boilerplate.Client.Windows/Boilerplate.Client.Windows.csproj b/src/Templates/Boilerplate/Bit.Boilerplate/src/Client/Boilerplate.Client.Windows/Boilerplate.Client.Windows.csproj index 5b78ba022c0..fa5fa835fb7 100644 --- a/src/Templates/Boilerplate/Bit.Boilerplate/src/Client/Boilerplate.Client.Windows/Boilerplate.Client.Windows.csproj +++ b/src/Templates/Boilerplate/Bit.Boilerplate/src/Client/Boilerplate.Client.Windows/Boilerplate.Client.Windows.csproj @@ -2,7 +2,7 @@ WinExe - net10.0-windows + net11.0-windows enable enable true @@ -39,6 +39,7 @@ + diff --git a/src/Templates/Boilerplate/Bit.Boilerplate/src/Client/Boilerplate.Client.Windows/ClientWindowsSettings.cs b/src/Templates/Boilerplate/Bit.Boilerplate/src/Client/Boilerplate.Client.Windows/ClientWindowsSettings.cs index 36f40d8b4e3..a8f66b7ad58 100644 --- a/src/Templates/Boilerplate/Bit.Boilerplate/src/Client/Boilerplate.Client.Windows/ClientWindowsSettings.cs +++ b/src/Templates/Boilerplate/Bit.Boilerplate/src/Client/Boilerplate.Client.Windows/ClientWindowsSettings.cs @@ -1,11 +1,18 @@ //+:cnd:noEmit using Boilerplate.Client.Core; +//#if (framework == 'net11.0') +using Boilerplate.Client.Windows.Infrastructure.Services; +//#endif namespace Boilerplate.Client.Windows; public class ClientWindowsSettings : ClientCoreSettings { public WindowsUpdateOptions? WindowsUpdate { get; set; } + //#if (framework == 'net11.0') + + public KioskOptions? Kiosk { get; set; } + //#endif public override IEnumerable Validate(ValidationContext validationContext) { @@ -15,6 +22,13 @@ public override IEnumerable Validate(ValidationContext validat { Validator.TryValidateObject(WindowsUpdate, new ValidationContext(WindowsUpdate), validationResults, true); } + //#if (framework == 'net11.0') + + if (Kiosk is not null) + { + Validator.TryValidateObject(Kiosk, new ValidationContext(Kiosk), validationResults, true); + } + //#endif return validationResults; } @@ -26,3 +40,23 @@ public partial class WindowsUpdateOptions public string? FilesUrl { get; set; } } +//#if (framework == 'net11.0') + +/// +/// Options of the .NET 11 and of . +/// +public partial class KioskOptions +{ + /// + /// Starts the app full screen, above the taskbar, and locks it there: neither F11 nor Escape leaves it, the + /// window cannot be closed, the key combinations that reach the desktop are swallowed and the browser's own + /// menus, dev tools, zoom and shortcuts are off. When off, F11 still toggles full screen and Escape leaves it. + /// + public bool Enabled { get; set; } + + /// + /// Keeps the display and the machine awake for as long as the app runs. + /// + public bool PreventSleep { get; set; } +} +//#endif diff --git a/src/Templates/Boilerplate/Bit.Boilerplate/src/Client/Boilerplate.Client.Windows/Infrastructure/Services/WindowsKioskGuard.cs b/src/Templates/Boilerplate/Bit.Boilerplate/src/Client/Boilerplate.Client.Windows/Infrastructure/Services/WindowsKioskGuard.cs new file mode 100644 index 00000000000..e979d62322b --- /dev/null +++ b/src/Templates/Boilerplate/Bit.Boilerplate/src/Client/Boilerplate.Client.Windows/Infrastructure/Services/WindowsKioskGuard.cs @@ -0,0 +1,72 @@ +//+:cnd:noEmit +using System.Runtime.InteropServices; + +namespace Boilerplate.Client.Windows.Infrastructure.Services; + +/// +/// The lockdown a kiosk needs on top of , which only takes the window full screen: +/// the key combinations that reach the desktop are swallowed, and the window refuses to close - the app's own exit +/// is the only way out. Ctrl+Alt+Del is out of reach of every user mode process - block it with the Windows policy +/// of the kiosk machine. +/// +public static partial class WindowsKioskGuard +{ + private const int WH_KEYBOARD_LL = 13; + private const int WM_KEYDOWN = 0x0100; + private const int WM_SYSKEYDOWN = 0x0104; + + private delegate nint HookProc(int code, nint wParam, nint lParam); + + private static Form kioskForm = default!; + + // The field roots the delegate; a local would let the GC collect what the hook calls back into. + private static HookProc hookProc = default!; + + /// + /// Locks down for as long as the process runs; Windows drops the hook when it exits. + /// + public static void Apply(Form form) + { + kioskForm = form; + hookProc = OnKey; + SetWindowsHookExW(WH_KEYBOARD_LL, hookProc, 0, 0); + + // Windows itself still gets to shut down; only the person in front of the machine is refused. + form.FormClosing += (_, e) => e.Cancel = e.CloseReason is CloseReason.UserClosing; + } + + private static nint OnKey(int code, nint wParam, nint lParam) + { + // Only while the kiosk window is in front: a global block would take the desktop away from whatever else runs. + if (code >= 0 && wParam is WM_KEYDOWN or WM_SYSKEYDOWN + && GetForegroundWindow() == kioskForm.Handle && IsBlocked((Keys)Marshal.ReadInt32(lParam))) + return 1; + + return CallNextHookEx(0, code, wParam, lParam); + } + + private static bool IsBlocked(Keys key) => key switch + { + Keys.LWin or Keys.RWin => true, // the start menu and every Win+? combination + Keys.Apps => true, // the context menu key + Keys.Tab or Keys.Escape or Keys.F4 or Keys.Space when IsDown(Keys.Menu) => true, // Alt+Tab, Alt+Esc, Alt+F4, Alt+Space + Keys.Escape when IsDown(Keys.ControlKey) => true, // Ctrl+Esc, Ctrl+Shift+Esc + _ => false + }; + + // GetAsyncKeyState, not Control.ModifierKeys: in a low level hook the key has not reached the queue the latter reads. + private static bool IsDown(Keys key) => (GetAsyncKeyState((int)key) & 0x8000) is not 0; + + [DllImport("user32.dll", SetLastError = true)] + private static extern nint SetWindowsHookExW(int idHook, HookProc lpfn, nint hMod, uint dwThreadId); + + // hhk is documented as ignored. + [DllImport("user32.dll")] + private static extern nint CallNextHookEx(nint hhk, int nCode, nint wParam, nint lParam); + + [DllImport("user32.dll")] + private static extern nint GetForegroundWindow(); + + [DllImport("user32.dll")] + private static extern short GetAsyncKeyState(int vKey); +} diff --git a/src/Templates/Boilerplate/Bit.Boilerplate/src/Client/Boilerplate.Client.Windows/Program.cs b/src/Templates/Boilerplate/Bit.Boilerplate/src/Client/Boilerplate.Client.Windows/Program.cs index 487aac6b21b..2dcfdd57983 100644 --- a/src/Templates/Boilerplate/Bit.Boilerplate/src/Client/Boilerplate.Client.Windows/Program.cs +++ b/src/Templates/Boilerplate/Bit.Boilerplate/src/Client/Boilerplate.Client.Windows/Program.cs @@ -43,7 +43,20 @@ public static void Main(string[] args) services.AddClientWindowsProjectServices(configuration); Services = services.BuildServiceProvider(); + //#if (framework == 'net11.0') + foreach (var startupValidator in Services.GetServices()) + { + startupValidator.ValidateAsync().GetAwaiter().GetResult(); + } + //#else + //#if (IsInsideProjectTemplate == true) + /* + //#endif Services.GetService()?.Validate(); + //#if (IsInsideProjectTemplate == true) + */ + //#endif + //#endif if (CultureInfoManager.InvariantGlobalization is false) { @@ -73,8 +86,25 @@ public static void Main(string[] args) WindowState = FormWindowState.Maximized, BackColor = backgroundColor, FormCaptionBackColor = backgroundColor, - Icon = Icon.ExtractAssociatedIcon(Application.ExecutablePath) + Icon = Icon.ExtractAssociatedIcon(Application.ExecutablePath), + //#if (framework == 'net11.0') + FormRevealMode = FormRevealMode.Deferred + //#endif + }; + + //#if (framework == 'net11.0') + var kioskOptions = Services.GetRequiredService().Kiosk; + var isKiosk = kioskOptions?.Enabled is true; + kioskModeManagerReferenceToKeepAlive = new KioskModeManager + { + ContainerControl = form, + TopMostInFullScreen = true, + AlwaysOn = kioskOptions?.PreventSleep is true, + ToggleFullScreenKeys = isKiosk ? Keys.None : Keys.F11, + EscapeExitsFullScreen = isKiosk is false, + FullScreen = isKiosk }; + //#endif var pubSubService = Services.GetRequiredService(); pubSubHandlerReferenceToKeepAlive = pubSubService.Subscribe(ClientAppMessages.PAGE_DATA_CHANGED, async args => { @@ -123,10 +153,34 @@ or CoreWebView2PermissionKind.ClipboardRead args.Handled = true; args.State = CoreWebView2PermissionState.Allow; }; + //#if (framework == 'net11.0') + + if (isKiosk) + { + var webViewSettings = blazorWebView.WebView.CoreWebView2.Settings; + webViewSettings.AreDevToolsEnabled = false; + webViewSettings.AreDefaultContextMenusEnabled = false; + webViewSettings.AreBrowserAcceleratorKeysEnabled = false; + webViewSettings.IsZoomControlEnabled = false; + webViewSettings.IsSwipeNavigationEnabled = false; + webViewSettings.IsStatusBarEnabled = false; + blazorWebView.WebView.AllowExternalDrop = false; + // A second window would be one the lockdown does not own, and its chrome is the way back to the desktop. + blazorWebView.WebView.CoreWebView2.NewWindowRequested += (_, args) => args.Handled = true; + } + //#endif + _ = StartBlazor(blazorWebView); }; form.Controls.Add(blazorWebView); + //#if (framework == 'net11.0') + + if (isKiosk) + { + WindowsKioskGuard.Apply(form); + } + //#endif Application.Run(form); } @@ -182,4 +236,11 @@ private static void LogException(object? error, string reportedBy) /// Strong root for the PAGE_DATA_CHANGED subscription, which PubSubService itself only holds weakly. ///
private static Action? pubSubHandlerReferenceToKeepAlive; + //#if (framework == 'net11.0') + + /// + /// Strong root for the kiosk manager, which only the form it hooks would otherwise keep alive. + /// + private static KioskModeManager? kioskModeManagerReferenceToKeepAlive; + //#endif } diff --git a/src/Templates/Boilerplate/Bit.Boilerplate/src/Client/Boilerplate.Client.Windows/appsettings.json b/src/Templates/Boilerplate/Bit.Boilerplate/src/Client/Boilerplate.Client.Windows/appsettings.json index 77d546e5b45..c1376852f29 100644 --- a/src/Templates/Boilerplate/Bit.Boilerplate/src/Client/Boilerplate.Client.Windows/appsettings.json +++ b/src/Templates/Boilerplate/Bit.Boilerplate/src/Client/Boilerplate.Client.Windows/appsettings.json @@ -16,5 +16,11 @@ "FilesUrl": null, "AutoReload": false }, + //#if (framework == 'net11.0') + "Kiosk": { + "Enabled": false, + "PreventSleep": false + }, + //#endif "$schema": "https://json.schemastore.org/appsettings.json" } diff --git a/src/Templates/Boilerplate/Bit.Boilerplate/src/Directory.Build.props b/src/Templates/Boilerplate/Bit.Boilerplate/src/Directory.Build.props index 71542fed745..5173362dc4d 100644 --- a/src/Templates/Boilerplate/Bit.Boilerplate/src/Directory.Build.props +++ b/src/Templates/Boilerplate/Bit.Boilerplate/src/Directory.Build.props @@ -53,13 +53,24 @@ 14.0 15.0 - 15.0 26.0 10.0.17763.0 10.0.17763.0 6.5 + + + 17.0 + + + + + + 15.0 + + + diff --git a/src/Templates/Boilerplate/Bit.Boilerplate/src/Directory.Packages.props b/src/Templates/Boilerplate/Bit.Boilerplate/src/Directory.Packages.props index 7ac38671619..46b649b6e4e 100644 --- a/src/Templates/Boilerplate/Bit.Boilerplate/src/Directory.Packages.props +++ b/src/Templates/Boilerplate/Bit.Boilerplate/src/Directory.Packages.props @@ -1,43 +1,29 @@ - + - - - - - - - - - - - - + + + + + + + + + + + + - - - - - - - - - - - - - - @@ -54,11 +40,6 @@ - - - - - @@ -93,9 +74,8 @@ - + - @@ -106,8 +86,10 @@ - - + @@ -118,8 +100,6 @@ - - @@ -128,26 +108,13 @@ - - - - - - - - - - - - - @@ -156,4 +123,86 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/Templates/Boilerplate/Bit.Boilerplate/src/Internal/Boilerplate.Tests.E2E/Boilerplate.Tests.E2E.csproj b/src/Templates/Boilerplate/Bit.Boilerplate/src/Internal/Boilerplate.Tests.E2E/Boilerplate.Tests.E2E.csproj index b30500c213b..317e57787dd 100644 --- a/src/Templates/Boilerplate/Bit.Boilerplate/src/Internal/Boilerplate.Tests.E2E/Boilerplate.Tests.E2E.csproj +++ b/src/Templates/Boilerplate/Bit.Boilerplate/src/Internal/Boilerplate.Tests.E2E/Boilerplate.Tests.E2E.csproj @@ -4,7 +4,7 @@ Repository-only: template.json excludes src/Internal/** from the packed template. --> - net10.0 + net11.0 enable 154C08DF-B089-4D8F-91F3-A95D2A4A27D2 $(MSBuildProjectDirectory)\.runsettings diff --git a/src/Templates/Boilerplate/Bit.Boilerplate/src/Internal/Boilerplate.Tests.E2E/Features/DownloadSize/WebAppDownloadSizeTests.cs b/src/Templates/Boilerplate/Bit.Boilerplate/src/Internal/Boilerplate.Tests.E2E/Features/DownloadSize/WebAppDownloadSizeTests.cs index 4700b023eaf..ae4ede37660 100644 --- a/src/Templates/Boilerplate/Bit.Boilerplate/src/Internal/Boilerplate.Tests.E2E/Features/DownloadSize/WebAppDownloadSizeTests.cs +++ b/src/Templates/Boilerplate/Bit.Boilerplate/src/Internal/Boilerplate.Tests.E2E/Features/DownloadSize/WebAppDownloadSizeTests.cs @@ -39,15 +39,15 @@ public partial class WebAppDownloadSizeTests : AppPageTest /// them from the failure message whenever a deliberate change moves an app's size. ///
[TestMethod] - [DataRow(DeployedApps.AdminPanel, 5.5, DisplayName = nameof(DeployedApps.AdminPanel))] - [DataRow(DeployedApps.AdminPanelWasmStandalone, 5.4, DisplayName = nameof(DeployedApps.AdminPanelWasmStandalone))] + [DataRow(DeployedApps.AdminPanel, 5.8, DisplayName = nameof(DeployedApps.AdminPanel))] + [DataRow(DeployedApps.AdminPanelWasmStandalone, 5.3, DisplayName = nameof(DeployedApps.AdminPanelWasmStandalone))] - [DataRow(DeployedApps.Todo, 5.1, DisplayName = nameof(DeployedApps.Todo))] - [DataRow(DeployedApps.TodoAot, 8.6, DisplayName = nameof(DeployedApps.TodoAot))] + [DataRow(DeployedApps.Todo, 5.3, DisplayName = nameof(DeployedApps.Todo))] + [DataRow(DeployedApps.TodoAot, 10.1, DisplayName = nameof(DeployedApps.TodoAot))] [DataRow(DeployedApps.TodoSmall, 3.7, DisplayName = nameof(DeployedApps.TodoSmall))] - [DataRow(DeployedApps.TodoOffline, 7.7, DisplayName = nameof(DeployedApps.TodoOffline))] + [DataRow(DeployedApps.TodoOffline, 8.3, DisplayName = nameof(DeployedApps.TodoOffline))] - [DataRow(DeployedApps.Sales, 5.5, DisplayName = nameof(DeployedApps.Sales))] + [DataRow(DeployedApps.Sales, 5.6, DisplayName = nameof(DeployedApps.Sales))] public async Task FirstVisitDownloadSize_Should_NotRegress(string url, double expectedMegabytes) { // Qualified because the inherited BrowserType property shadows the type of the same name. diff --git a/src/Templates/Boilerplate/Bit.Boilerplate/src/Internal/Boilerplate.Tests.E2E/Features/Kiosk/WindowsKioskTests.cs b/src/Templates/Boilerplate/Bit.Boilerplate/src/Internal/Boilerplate.Tests.E2E/Features/Kiosk/WindowsKioskTests.cs new file mode 100644 index 00000000000..6695ea2c266 --- /dev/null +++ b/src/Templates/Boilerplate/Bit.Boilerplate/src/Internal/Boilerplate.Tests.E2E/Features/Kiosk/WindowsKioskTests.cs @@ -0,0 +1,153 @@ +using Boilerplate.Tests.E2E.Infrastructure.Services; + +namespace Boilerplate.Tests.E2E.Features.Kiosk; + +/// +/// Kiosk mode, which only the AdminPanel Windows app is built with (Kiosk.Enabled in +/// .github/workflows/admin-sample.cd.yml) - so Todo and Sales are here as the contrast that proves each assertion is +/// about the kiosk rather than about every Client.Windows app. +/// +/// Not parallelized: every Client.Windows app answers on the same hard-coded CDP port 9222 (see +/// ). +/// +/// +[TestClass, TestCategory(TestCategories.Windows), DoNotParallelize, Retry(2)] +public partial class WindowsKioskTests : AppTestBase +{ + protected override IAppOpener AppOpener => new WindowsAppOpener(); + + /// + /// The lockdown takes away every way out of the app, so the home page offers one back - but only where it is + /// needed, since an exit button on a window a user can simply close is noise. + /// + [TestMethod] + [DataRow(App.AdminPanel, true, DisplayName = "AdminPanel (kiosk)")] + [DataRow(App.Todo, false, DisplayName = "Todo")] + [DataRow(App.Sales, false, DisplayName = "Sales")] + public async Task HomePage_Should_OfferTheWayOutOnlyInTheKioskApp(App app, bool isKiosk) + { + var page = await LaunchApp(app); + + await GoHome(page); + + var exit = ExitButton(page); + + if (isKiosk) + { + await Expect(exit).ToBeVisibleAsync(); + } + else + { + await Expect(exit).ToHaveCountAsync(0); + } + } + + /// + /// What KioskModeManager does to the window: no title bar and no resize border to reach a Close through, above the + /// taskbar, and over the whole monitor rather than the 1024x768 the form is built with. + /// + [TestMethod] + [DataRow(App.AdminPanel, true, DisplayName = "AdminPanel (kiosk)")] + [DataRow(App.Todo, false, DisplayName = "Todo")] + public async Task Window_Should_BeBorderlessAndTopMostOnlyInTheKioskApp(App app, bool isKiosk) + { + await LaunchApp(app); + + var window = WindowsWindow.Of(DeployedApps.WindowsAppIdOf(app)!); + + Assert.AreEqual(isKiosk is false, WindowsWindow.HasCaption(window), $"{app}'s window {(isKiosk ? "still has" : "lost")} its title bar."); + Assert.AreEqual(isKiosk, WindowsWindow.IsTopMost(window), $"{app}'s window is {(isKiosk ? "not " : "")}topmost."); + + if (isKiosk) + { + Assert.AreEqual(WindowsWindow.ScreenBounds(window), WindowsWindow.RestoredBounds(window), $"{app}'s window does not cover its monitor."); + } + } + + /// + /// The close a person performs - Alt+F4, or the X that is no longer there. Refused in the kiosk app and nowhere + /// else; a Windows shutdown and a Task Manager close arrive as other reasons and are let through, which is why + /// this sends SC_CLOSE rather than WM_CLOSE (see ). + /// + [TestMethod] + [DataRow(App.AdminPanel, true, DisplayName = "AdminPanel (kiosk)")] + [DataRow(App.Todo, false, DisplayName = "Todo")] + public async Task Window_Should_RefuseTheUsersCloseOnlyInTheKioskApp(App app, bool isKiosk) + { + await LaunchApp(app); + + var window = WindowsWindow.Of(DeployedApps.WindowsAppIdOf(app)!); + + WindowsWindow.RequestUserClose(window); + + var exited = window.WaitForExit(TimeSpan.FromSeconds(30)); + + Assert.AreEqual(isKiosk, exited is false, isKiosk + ? $"{app} closed although kiosk mode refuses the user's own close." + : $"{app} did not close within 30 seconds of the close every window accepts."); + } + + /// + /// The home page's button is the only way out of a kiosk, so it has to actually end the process - not navigate, + /// not sign out. + /// + [TestMethod] + public async Task ExitButton_Should_EndTheKioskApp() + { + var page = await LaunchApp(App.AdminPanel); + + await GoHome(page); + + var window = WindowsWindow.Of(DeployedApps.AdminPanelWindowsAppId); + + try + { + await ExitButton(page).ClickAsync(); + } + catch (PlaywrightException) + { + // Environment.Exit takes the WebView down with the process, which can land before the click is answered. + } + + Assert.IsTrue(window.WaitForExit(TimeSpan.FromSeconds(30)), "The exit button did not end the app."); + Assert.AreEqual(0, window.ExitCode, "The kiosk app did not exit cleanly."); + } + + /// + /// 's launch with a stop that tolerates an app these tests have already ended. + /// + private async Task LaunchApp(App app) + { + var windowsAppId = DeployedApps.WindowsAppIdOf(app); + + if (windowsAppId is null) + Assert.Inconclusive($"{app} has no Windows build."); + + var (page, stop) = await Playwright.LaunchWindowsApp(windowsAppId!); + + RegisterForCleanup(async () => + { + try + { + await stop(); + } + catch (PlaywrightException) + { + IPlaywrightExtensions.StopWindowsApps(); + } + }); + + return page; + } + + /// The home page, rendered by the running app - the banner is not in the prerendered html of any app. + private async Task GoHome(IPage page) + { + await WaitUntilInteractive(page); + await GoToWhenInteractive(page, PageUrls.Home); + + await Expect(page.Locator("section .root-stack").First).ToBeVisibleAsync(); + } + + private static ILocator ExitButton(IPage page) => page.GetByRole(AriaRole.Button, new() { Name = AppStrings.KioskExitApp }); +} diff --git a/src/Templates/Boilerplate/Bit.Boilerplate/src/Internal/Boilerplate.Tests.E2E/Infrastructure/Services/WindowsWindow.cs b/src/Templates/Boilerplate/Bit.Boilerplate/src/Internal/Boilerplate.Tests.E2E/Infrastructure/Services/WindowsWindow.cs new file mode 100644 index 00000000000..02da17a0a1f --- /dev/null +++ b/src/Templates/Boilerplate/Bit.Boilerplate/src/Internal/Boilerplate.Tests.E2E/Infrastructure/Services/WindowsWindow.cs @@ -0,0 +1,141 @@ +using System.Drawing; +using System.Runtime.InteropServices; + +namespace Boilerplate.Tests.E2E.Infrastructure.Services; + +/// +/// The window an installed Client.Windows app draws its WebView in. Most of what the kiosk lockdown does is out there +/// rather than in the page - a borderless, topmost window over the whole screen that refuses the user's own close - so +/// Windows is the only one that can be asked about it. +/// +public static class WindowsWindow +{ + private const int GWL_STYLE = -16; + private const int GWL_EXSTYLE = -20; + private const int WS_CAPTION = 0x00C00000; + private const int WS_THICKFRAME = 0x00040000; + private const int WS_EX_TOPMOST = 0x00000008; + private const uint WM_SYSCOMMAND = 0x0112; + private const nint SC_CLOSE = 0xF060; + private const uint MONITOR_DEFAULTTONEAREST = 2; + + /// + /// The running process of , once it has a window. + /// kills every Client.Windows app before starting one, so + /// there is never a second candidate. + /// + public static Process Of(string windowsAppId) + { + var deadline = DateTimeOffset.UtcNow + TimeSpan.FromMinutes(1); + + while (true) + { + var app = Process.GetProcessesByName(windowsAppId).FirstOrDefault(); + + if (app is not null) + { + app.Refresh(); + + if (app.MainWindowHandle is not 0) + { + _ = app.SafeHandle; // Opened while it is alive, or ExitCode is refused on a process we did not start. + return app; + } + } + + if (DateTimeOffset.UtcNow >= deadline) + throw new TimeoutException($"'{windowsAppId}' had no window within a minute of the test attaching to its WebView."); + + Thread.Sleep(TimeSpan.FromMilliseconds(250)); + } + } + + /// The title bar and the resize border - the one place a kiosk user could reach a Close button. + public static bool HasCaption(Process app) => (GetWindowLongW(app.MainWindowHandle, GWL_STYLE) & (WS_CAPTION | WS_THICKFRAME)) is not 0; + + /// Above the taskbar and everything else, which is what TopMostInFullScreen asks for. + public static bool IsTopMost(Process app) => (GetWindowLongW(app.MainWindowHandle, GWL_EXSTYLE) & WS_EX_TOPMOST) is not 0; + + /// + /// The bounds the window has when it is not minimized. Read through the placement rather than + /// GetWindowRect because a run that is not headed starts the apps minimized (see + /// ). + /// + public static Rectangle RestoredBounds(Process app) + { + var placement = new WINDOWPLACEMENT { length = Marshal.SizeOf() }; + + if (GetWindowPlacement(app.MainWindowHandle, ref placement) is false) + throw new InvalidOperationException($"Windows did not report the placement of '{app.ProcessName}' ({Marshal.GetLastWin32Error()})."); + + return ToRectangle(placement.rcNormalPosition); + } + + /// The monitor the window is on, which is what KioskModeManager sizes a full screen window to. + public static Rectangle ScreenBounds(Process app) + { + var info = new MONITORINFO { cbSize = Marshal.SizeOf() }; + + if (GetMonitorInfoW(MonitorFromWindow(app.MainWindowHandle, MONITOR_DEFAULTTONEAREST), ref info) is false) + throw new InvalidOperationException($"Windows did not report the monitor of '{app.ProcessName}' ({Marshal.GetLastWin32Error()})."); + + return ToRectangle(info.rcMonitor); + } + + /// + /// The close a person performs - Alt+F4, or the title bar's X. WinForms turns SC_CLOSE into + /// CloseReason.UserClosing, the one reason WindowsKioskGuard refuses; a plain WM_CLOSE arrives as + /// TaskManagerClosing and is let through deliberately, as is a Windows shutdown. + /// + public static void RequestUserClose(Process app) + { + if (PostMessageW(app.MainWindowHandle, WM_SYSCOMMAND, SC_CLOSE, 0) is false) + throw new InvalidOperationException($"Windows did not deliver the close request to '{app.ProcessName}' ({Marshal.GetLastWin32Error()})."); + } + + private static Rectangle ToRectangle(RECT rect) => Rectangle.FromLTRB(rect.left, rect.top, rect.right, rect.bottom); + + [StructLayout(LayoutKind.Sequential)] + private struct RECT + { + public int left, top, right, bottom; + } + + [StructLayout(LayoutKind.Sequential)] + private struct WINDOWPLACEMENT + { + public int length; + public int flags; + public int showCmd; + public Point ptMinPosition; + public Point ptMaxPosition; + public RECT rcNormalPosition; + } + + [StructLayout(LayoutKind.Sequential)] + private struct MONITORINFO + { + public int cbSize; + public RECT rcMonitor; + public RECT rcWork; + public int dwFlags; + } + + [DllImport("user32.dll")] + private static extern int GetWindowLongW(nint hWnd, int nIndex); + + [DllImport("user32.dll", SetLastError = true)] + [return: MarshalAs(UnmanagedType.Bool)] + private static extern bool GetWindowPlacement(nint hWnd, ref WINDOWPLACEMENT lpwndpl); + + [DllImport("user32.dll")] + private static extern nint MonitorFromWindow(nint hWnd, uint dwFlags); + + [DllImport("user32.dll", SetLastError = true)] + [return: MarshalAs(UnmanagedType.Bool)] + private static extern bool GetMonitorInfoW(nint hMonitor, ref MONITORINFO lpmi); + + [DllImport("user32.dll", SetLastError = true)] + [return: MarshalAs(UnmanagedType.Bool)] + private static extern bool PostMessageW(nint hWnd, uint msg, nint wParam, nint lParam); +} diff --git a/src/Templates/Boilerplate/Bit.Boilerplate/src/Server/Boilerplate.Server.Api/Boilerplate.Server.Api.csproj b/src/Templates/Boilerplate/Bit.Boilerplate/src/Server/Boilerplate.Server.Api/Boilerplate.Server.Api.csproj index 14e2fdb2714..38dc3a6838d 100644 --- a/src/Templates/Boilerplate/Bit.Boilerplate/src/Server/Boilerplate.Server.Api/Boilerplate.Server.Api.csproj +++ b/src/Templates/Boilerplate/Bit.Boilerplate/src/Server/Boilerplate.Server.Api/Boilerplate.Server.Api.csproj @@ -1,7 +1,7 @@ - net10.0 + net11.0 AC87AA5B-4B37-4E52-8468-2D5DF24AF256 PrepareResources;$(CompileDependsOn) Default diff --git a/src/Templates/Boilerplate/Bit.Boilerplate/src/Server/Boilerplate.Server.Api/Infrastructure/SignalR/AppHubOptions.cs b/src/Templates/Boilerplate/Bit.Boilerplate/src/Server/Boilerplate.Server.Api/Infrastructure/SignalR/AppHubOptions.cs new file mode 100644 index 00000000000..6af7bed4628 --- /dev/null +++ b/src/Templates/Boilerplate/Bit.Boilerplate/src/Server/Boilerplate.Server.Api/Infrastructure/SignalR/AppHubOptions.cs @@ -0,0 +1,29 @@ +//+:cnd:noEmit +using Microsoft.AspNetCore.Http.Connections; + +namespace Boilerplate.Server.Api.Infrastructure.SignalR; + +public static class AppHubOptions +{ + public static void Configure(HttpConnectionDispatcherOptions options) + { + options.AllowStatefulReconnects = true; + //#if (framework == 'net11.0') + + options.EnableAuthenticationRefresh = true; + options.CloseOnAuthenticationExpiration = true; + + options.OnAuthenticationRefresh = context => + { + var previous = context.PreviousUser; + var refreshed = context.NewUser; + + if (previous.IsAuthenticated() is false || refreshed.IsAuthenticated() is false) + return Task.FromResult(false); + + return Task.FromResult(previous.GetUserId() == refreshed.GetUserId() && + previous.GetSessionId() == refreshed.GetSessionId()); + }; + //#endif + } +} diff --git a/src/Templates/Boilerplate/Bit.Boilerplate/src/Server/Boilerplate.Server.Api/Program.Middlewares.cs b/src/Templates/Boilerplate/Bit.Boilerplate/src/Server/Boilerplate.Server.Api/Program.Middlewares.cs index ce4251c9e9b..465127c85e1 100644 --- a/src/Templates/Boilerplate/Bit.Boilerplate/src/Server/Boilerplate.Server.Api/Program.Middlewares.cs +++ b/src/Templates/Boilerplate/Bit.Boilerplate/src/Server/Boilerplate.Server.Api/Program.Middlewares.cs @@ -85,7 +85,7 @@ public static void ConfigureMiddlewares(this WebApplication app) }).WithTags("Test").CacheOutput("AppResponseCachePolicy").ExcludeFromDescription(); //#if (signalR == true) - app.MapHub("/app-hub", options => options.AllowStatefulReconnects = true); + app.MapHub("/app-hub", Infrastructure.SignalR.AppHubOptions.Configure); // Chatbot tools. Isolated from /dev-mcp. Served under the api version the controllers carry as well. foreach (var path in new[] { OAuthResources.McpPath, $"{OAuthResources.McpPath}/v1" }) diff --git a/src/Templates/Boilerplate/Bit.Boilerplate/src/Server/Boilerplate.Server.AppHost/Boilerplate.Server.AppHost.csproj b/src/Templates/Boilerplate/Bit.Boilerplate/src/Server/Boilerplate.Server.AppHost/Boilerplate.Server.AppHost.csproj index 134fe46ba24..3d2c5a184f7 100644 --- a/src/Templates/Boilerplate/Bit.Boilerplate/src/Server/Boilerplate.Server.AppHost/Boilerplate.Server.AppHost.csproj +++ b/src/Templates/Boilerplate/Bit.Boilerplate/src/Server/Boilerplate.Server.AppHost/Boilerplate.Server.AppHost.csproj @@ -2,7 +2,7 @@ Exe - net10.0 + net11.0 true public AC87AA5B-4B37-4E52-8468-2D5DF24AF256 diff --git a/src/Templates/Boilerplate/Bit.Boilerplate/src/Server/Boilerplate.Server.Shared/Boilerplate.Server.Shared.csproj b/src/Templates/Boilerplate/Bit.Boilerplate/src/Server/Boilerplate.Server.Shared/Boilerplate.Server.Shared.csproj index 6435bfce28e..f2522b474d1 100644 --- a/src/Templates/Boilerplate/Bit.Boilerplate/src/Server/Boilerplate.Server.Shared/Boilerplate.Server.Shared.csproj +++ b/src/Templates/Boilerplate/Bit.Boilerplate/src/Server/Boilerplate.Server.Shared/Boilerplate.Server.Shared.csproj @@ -1,7 +1,7 @@ - net10.0 + net11.0 true diff --git a/src/Templates/Boilerplate/Bit.Boilerplate/src/Server/Boilerplate.Server.Shared/Infrastructure/Extensions/WebApplicationBuilderExtensions.cs b/src/Templates/Boilerplate/Bit.Boilerplate/src/Server/Boilerplate.Server.Shared/Infrastructure/Extensions/WebApplicationBuilderExtensions.cs index 70048656b51..6873c845951 100644 --- a/src/Templates/Boilerplate/Bit.Boilerplate/src/Server/Boilerplate.Server.Shared/Infrastructure/Extensions/WebApplicationBuilderExtensions.cs +++ b/src/Templates/Boilerplate/Bit.Boilerplate/src/Server/Boilerplate.Server.Shared/Infrastructure/Extensions/WebApplicationBuilderExtensions.cs @@ -129,6 +129,9 @@ public TBuilder AddServerSharedServices() { opts.EnableForHttps = true; opts.MimeTypes = ResponseCompressionDefaults.MimeTypes.Concat(["application/octet-stream"]).ToArray(); + //#if (framework == 'net11.0') + opts.Providers.Add(); + //#endif opts.Providers.Add(); opts.Providers.Add(); }) diff --git a/src/Templates/Boilerplate/Bit.Boilerplate/src/Server/Boilerplate.Server.Web/Boilerplate.Server.Web.csproj b/src/Templates/Boilerplate/Bit.Boilerplate/src/Server/Boilerplate.Server.Web/Boilerplate.Server.Web.csproj index b47793ff1eb..938779fdee0 100644 --- a/src/Templates/Boilerplate/Bit.Boilerplate/src/Server/Boilerplate.Server.Web/Boilerplate.Server.Web.csproj +++ b/src/Templates/Boilerplate/Bit.Boilerplate/src/Server/Boilerplate.Server.Web/Boilerplate.Server.Web.csproj @@ -1,7 +1,7 @@ - net10.0 + net11.0 AC87AA5B-4B37-4E52-8468-2D5DF24AF256 false diff --git a/src/Templates/Boilerplate/Bit.Boilerplate/src/Server/Boilerplate.Server.Web/Program.Middlewares.cs b/src/Templates/Boilerplate/Bit.Boilerplate/src/Server/Boilerplate.Server.Web/Program.Middlewares.cs index 50e969ad644..b2af41bbc03 100644 --- a/src/Templates/Boilerplate/Bit.Boilerplate/src/Server/Boilerplate.Server.Web/Program.Middlewares.cs +++ b/src/Templates/Boilerplate/Bit.Boilerplate/src/Server/Boilerplate.Server.Web/Program.Middlewares.cs @@ -47,11 +47,20 @@ public void ConfigureMiddlewares() app.UseExceptionHandler(); //#endif + //#if (framework == 'net10.0') + //#if (IsInsideProjectTemplate == true) + /* + //#endif if (env.IsDevelopment()) { app.UseWebAssemblyDebugging(); } - else + + //#if (IsInsideProjectTemplate == true) + */ + //#endif + //#endif + if (env.IsDevelopment() is false) { app.UseHttpsRedirection(); app.UseResponseCompression(); @@ -194,7 +203,7 @@ public void ConfigureMiddlewares() // and use the Server.Web project solely as a Blazor Server or pre-rendering service provider. throw new InvalidOperationException("Azure SignalR is not supported with Blazor Server and Auto"); } - app.MapHub("/app-hub", options => options.AllowStatefulReconnects = true); + app.MapHub("/app-hub", Api.Infrastructure.SignalR.AppHubOptions.Configure); // Chatbot tools. Isolated from /dev-mcp. Served under the api version the controllers carry as well. foreach (var path in new[] { OAuthResources.McpPath, $"{OAuthResources.McpPath}/v1" }) @@ -323,7 +332,9 @@ private void Handle40XStatusCodes() httpContext.Response.Redirect($"{PageUrls.NotAuthorized}{redirectQuery}"); } else if (httpContext.Response.StatusCode is 404 && - httpContext.GetEndpoint() is null /* Please be aware that certain endpoints, particularly those associated with web API actions, may intentionally return a 404 error. */) + httpContext.GetEndpoint() is null /* Please be aware that certain endpoints, particularly those associated with web API actions, may intentionally return a 404 error. */ && + httpContext.Request.Path.StartsWithSegments("/_framework") is false && + httpContext.Request.Path.StartsWithSegments("/_content") is false) { httpContext.Response.Redirect($"{PageUrls.NotFound}{QueryString.Create("url", httpContext.Request.GetEncodedPathAndQuery())}"); } diff --git a/src/Templates/Boilerplate/Bit.Boilerplate/src/Server/Boilerplate.Server.Web/Properties/launchSettings.json b/src/Templates/Boilerplate/Bit.Boilerplate/src/Server/Boilerplate.Server.Web/Properties/launchSettings.json index 5b5d92cf8f9..0f0a96e2ad1 100644 --- a/src/Templates/Boilerplate/Bit.Boilerplate/src/Server/Boilerplate.Server.Web/Properties/launchSettings.json +++ b/src/Templates/Boilerplate/Bit.Boilerplate/src/Server/Boilerplate.Server.Web/Properties/launchSettings.json @@ -31,7 +31,15 @@ "WebAppRender:BlazorMode": "BlazorWebAssembly" }, "dotnetRunMessages": true, + //#if (framework == 'net10.0') + //#if (IsInsideProjectTemplate) + /* + //#endif "inspectUri": "{wsProtocol}://{url.hostname}:{url.port}/_framework/debug/ws-proxy?browser={browserInspectUri}", + //#if (IsInsideProjectTemplate) + */ + //#endif + //#endif "applicationUrl": "http://localhost:5030;http://*:5030" }, "WSL": { diff --git a/src/Templates/Boilerplate/Bit.Boilerplate/src/Shared/Boilerplate.Shared.csproj b/src/Templates/Boilerplate/Bit.Boilerplate/src/Shared/Boilerplate.Shared.csproj index a3b5e3ae68e..239dcb16f4a 100644 --- a/src/Templates/Boilerplate/Bit.Boilerplate/src/Shared/Boilerplate.Shared.csproj +++ b/src/Templates/Boilerplate/Bit.Boilerplate/src/Shared/Boilerplate.Shared.csproj @@ -1,7 +1,7 @@ - net10.0 + net11.0 PrepareResources;$(CompileDependsOn) diff --git a/src/Templates/Boilerplate/Bit.Boilerplate/src/Shared/Resources/AppStrings.ar.resx b/src/Templates/Boilerplate/Bit.Boilerplate/src/Shared/Resources/AppStrings.ar.resx index 71d2f9600e7..9effd6f5330 100644 --- a/src/Templates/Boilerplate/Bit.Boilerplate/src/Shared/Resources/AppStrings.ar.resx +++ b/src/Templates/Boilerplate/Bit.Boilerplate/src/Shared/Resources/AppStrings.ar.resx @@ -2084,4 +2084,13 @@ رفع كما هي + + وضع الكشك + + + هذا التطبيق مثبَّت على الشاشة: مفتاح Windows و Alt+Tab و إدارة المهام وإغلاق النافذة كلها محظورة. استخدم الزر للخروج. + + + الخروج من التطبيق + diff --git a/src/Templates/Boilerplate/Bit.Boilerplate/src/Shared/Resources/AppStrings.de.resx b/src/Templates/Boilerplate/Bit.Boilerplate/src/Shared/Resources/AppStrings.de.resx index e1085c2ee6f..2997954731c 100644 --- a/src/Templates/Boilerplate/Bit.Boilerplate/src/Shared/Resources/AppStrings.de.resx +++ b/src/Templates/Boilerplate/Bit.Boilerplate/src/Shared/Resources/AppStrings.de.resx @@ -2084,4 +2084,13 @@ Nach Erreichen von {0} haben zusätzliche Anmeldungen reduzierte Funktionen. Unverändert hochladen + + Kioskmodus + + + Diese App ist auf dem Bildschirm gesperrt: Windows-Taste, Alt+Tab, Task-Manager und das Schließen des Fensters sind alle blockiert. Verwenden Sie die Schaltfläche, um sie zu verlassen. + + + App beenden + diff --git a/src/Templates/Boilerplate/Bit.Boilerplate/src/Shared/Resources/AppStrings.es.resx b/src/Templates/Boilerplate/Bit.Boilerplate/src/Shared/Resources/AppStrings.es.resx index ca33f720c99..6e65d7c98fa 100644 --- a/src/Templates/Boilerplate/Bit.Boilerplate/src/Shared/Resources/AppStrings.es.resx +++ b/src/Templates/Boilerplate/Bit.Boilerplate/src/Shared/Resources/AppStrings.es.resx @@ -2084,4 +2084,13 @@ Después de alcanzar {0}, los inicios de sesión adicionales tendrán funciones Cargar tal cual + + Modo quiosco + + + Esta aplicación está bloqueada en la pantalla: la tecla Windows, Alt+Tab, el Administrador de tareas y el cierre de la ventana están bloqueados. Usa el botón para salir. + + + Salir de la aplicación + diff --git a/src/Templates/Boilerplate/Bit.Boilerplate/src/Shared/Resources/AppStrings.fa.resx b/src/Templates/Boilerplate/Bit.Boilerplate/src/Shared/Resources/AppStrings.fa.resx index 4cecc0708cf..95d4a1843ed 100644 --- a/src/Templates/Boilerplate/Bit.Boilerplate/src/Shared/Resources/AppStrings.fa.resx +++ b/src/Templates/Boilerplate/Bit.Boilerplate/src/Shared/Resources/AppStrings.fa.resx @@ -2084,4 +2084,13 @@ بارگذاری بدون تغییر + + حالت کیوسک + + + این برنامه روی صفحه قفل شده است: کلید ویندوز، Alt+Tab، Task Manager و بستن پنجره همگی مسدود شده‌اند. برای خروج از دکمه استفاده کنید. + + + خروج از برنامه + diff --git a/src/Templates/Boilerplate/Bit.Boilerplate/src/Shared/Resources/AppStrings.fr.resx b/src/Templates/Boilerplate/Bit.Boilerplate/src/Shared/Resources/AppStrings.fr.resx index f4e4f0e4218..4a0d3a46789 100644 --- a/src/Templates/Boilerplate/Bit.Boilerplate/src/Shared/Resources/AppStrings.fr.resx +++ b/src/Templates/Boilerplate/Bit.Boilerplate/src/Shared/Resources/AppStrings.fr.resx @@ -2084,4 +2084,13 @@ Après avoir atteint {0}, les connexions supplémentaires auront des fonctions r Envoyer telle quelle + + Mode kiosque + + + Cette application est verrouillée à l'écran : la touche Windows, Alt+Tab, le Gestionnaire des tâches et la fermeture de la fenêtre sont tous bloqués. Utilisez le bouton pour quitter. + + + Quitter l'application + diff --git a/src/Templates/Boilerplate/Bit.Boilerplate/src/Shared/Resources/AppStrings.hi.resx b/src/Templates/Boilerplate/Bit.Boilerplate/src/Shared/Resources/AppStrings.hi.resx index 19ac5b3f560..d8abd7ab43f 100644 --- a/src/Templates/Boilerplate/Bit.Boilerplate/src/Shared/Resources/AppStrings.hi.resx +++ b/src/Templates/Boilerplate/Bit.Boilerplate/src/Shared/Resources/AppStrings.hi.resx @@ -2084,4 +2084,13 @@ जैसा है वैसा अपलोड करें + + कियोस्क मोड + + + यह ऐप स्क्रीन पर लॉक है: Windows की, Alt+Tab, Task Manager और विंडो बंद करना सभी अवरुद्ध हैं। बाहर निकलने के लिए बटन का उपयोग करें। + + + ऐप से बाहर निकलें + diff --git a/src/Templates/Boilerplate/Bit.Boilerplate/src/Shared/Resources/AppStrings.nl.resx b/src/Templates/Boilerplate/Bit.Boilerplate/src/Shared/Resources/AppStrings.nl.resx index b217410ef53..670d767f574 100644 --- a/src/Templates/Boilerplate/Bit.Boilerplate/src/Shared/Resources/AppStrings.nl.resx +++ b/src/Templates/Boilerplate/Bit.Boilerplate/src/Shared/Resources/AppStrings.nl.resx @@ -2084,4 +2084,13 @@ Na het bereiken van {0} zullen extra aanmeldingen verminderde functies hebben. Ongewijzigd uploaden + + Kioskmodus + + + Deze app is vergrendeld op het scherm: de Windows-toets, Alt+Tab, Taakbeheer en het sluiten van het venster zijn allemaal geblokkeerd. Gebruik de knop om af te sluiten. + + + App afsluiten + diff --git a/src/Templates/Boilerplate/Bit.Boilerplate/src/Shared/Resources/AppStrings.resx b/src/Templates/Boilerplate/Bit.Boilerplate/src/Shared/Resources/AppStrings.resx index e081d6c248c..517153d505a 100644 --- a/src/Templates/Boilerplate/Bit.Boilerplate/src/Shared/Resources/AppStrings.resx +++ b/src/Templates/Boilerplate/Bit.Boilerplate/src/Shared/Resources/AppStrings.resx @@ -2084,4 +2084,13 @@ After reaching {0}, extra sign-ins will have reduced functions. Upload as is + + Kiosk mode + + + This app is locked to the screen: the Windows key, Alt+Tab, Task Manager and closing the window are all blocked. Use the button to leave. + + + Exit the app + diff --git a/src/Templates/Boilerplate/Bit.Boilerplate/src/Shared/Resources/AppStrings.sv.resx b/src/Templates/Boilerplate/Bit.Boilerplate/src/Shared/Resources/AppStrings.sv.resx index a5b6e60bab1..bda6066a0d7 100644 --- a/src/Templates/Boilerplate/Bit.Boilerplate/src/Shared/Resources/AppStrings.sv.resx +++ b/src/Templates/Boilerplate/Bit.Boilerplate/src/Shared/Resources/AppStrings.sv.resx @@ -2084,4 +2084,13 @@ Efter att ha nått {0} kommer extra inloggningar att ha reducerade funktioner. Ladda upp som den är + + Kioskläge + + + Den här appen är låst till skärmen: Windows-tangenten, Alt+Tab, Aktivitetshanteraren och att stänga fönstret är alla blockerade. Använd knappen för att avsluta. + + + Avsluta appen + diff --git a/src/Templates/Boilerplate/Bit.Boilerplate/src/Shared/Resources/AppStrings.zh.resx b/src/Templates/Boilerplate/Bit.Boilerplate/src/Shared/Resources/AppStrings.zh.resx index 5f72a441f8b..beb0a3d932f 100644 --- a/src/Templates/Boilerplate/Bit.Boilerplate/src/Shared/Resources/AppStrings.zh.resx +++ b/src/Templates/Boilerplate/Bit.Boilerplate/src/Shared/Resources/AppStrings.zh.resx @@ -2084,4 +2084,13 @@ 按原样上传 + + 自助终端模式 + + + 此应用已锁定在屏幕上:Windows 键、Alt+Tab、任务管理器和关闭窗口均已被阻止。请使用按钮退出。 + + + 退出应用 + diff --git a/src/Templates/Boilerplate/Bit.Boilerplate/src/Tests/Boilerplate.Tests.csproj b/src/Templates/Boilerplate/Bit.Boilerplate/src/Tests/Boilerplate.Tests.csproj index 7c8ddf186da..545439422e1 100644 --- a/src/Templates/Boilerplate/Bit.Boilerplate/src/Tests/Boilerplate.Tests.csproj +++ b/src/Templates/Boilerplate/Bit.Boilerplate/src/Tests/Boilerplate.Tests.csproj @@ -1,7 +1,7 @@ - net10.0 + net11.0 enable $(MSBuildProjectDirectory)\.runsettings --settings ./.runsettings --report-trx --report-trx-filename TestResults.trx --results-directory ./TestResults diff --git a/src/Templates/Boilerplate/Bit.Boilerplate/src/Tests/Features/Configuration/ClientSettingsValidationTests.cs b/src/Templates/Boilerplate/Bit.Boilerplate/src/Tests/Features/Configuration/ClientSettingsValidationTests.cs index 272c6d6ff70..c3fdea87f8c 100644 --- a/src/Templates/Boilerplate/Bit.Boilerplate/src/Tests/Features/Configuration/ClientSettingsValidationTests.cs +++ b/src/Templates/Boilerplate/Bit.Boilerplate/src/Tests/Features/Configuration/ClientSettingsValidationTests.cs @@ -45,6 +45,31 @@ public void TheInjectedSettings_Should_BeTheValidatedOptionsInstance() /// come from the settings validation itself. ///
[TestMethod] + //#if (framework == 'net11.0') + public async Task AnInvalidSetting_Should_FailTheHostsThatRunNoStartupValidator() + { + using var serviceProvider = BuildClientServiceProvider(new() { ["ServerAddress"] = " " }); + + var startupValidators = serviceProvider.GetServices().ToArray(); + + Assert.IsNotEmpty(startupValidators, + "No IAsyncStartupValidator is registered, so the explicit ValidateAsync() calls the non-IHost client hosts make would silently do nothing."); + + await Assert.ThrowsExactlyAsync(async () => + { + foreach (var startupValidator in startupValidators) + { + await startupValidator.ValidateAsync(); + } + }, "Settings validation passed for a ClientCoreSettings whose [Required] ServerAddress is whitespace."); + + Assert.ThrowsExactly(() => serviceProvider.GetRequiredService(), + "Resolving the settings returned an invalid instance instead of failing, which is what happens when the injected copy bypasses the options pipeline."); + } + //#else + //#if (IsInsideProjectTemplate == true) + /* + //#endif public void AnInvalidSetting_Should_FailTheHostsThatRunNoStartupValidator() { using var serviceProvider = BuildClientServiceProvider(new() { ["ServerAddress"] = " " }); @@ -60,6 +85,10 @@ public void AnInvalidSetting_Should_FailTheHostsThatRunNoStartupValidator() Assert.ThrowsExactly(() => serviceProvider.GetRequiredService(), "Resolving the settings returned an invalid instance instead of failing, which is what happens when the injected copy bypasses the options pipeline."); } + //#if (IsInsideProjectTemplate == true) + */ + //#endif + //#endif private static ServiceProvider BuildClientServiceProvider(Dictionary? overrides = null) { diff --git a/src/Templates/Boilerplate/Bit.Boilerplate/src/Tests/Features/Documentation/DocumentationTruthTests.cs b/src/Templates/Boilerplate/Bit.Boilerplate/src/Tests/Features/Documentation/DocumentationTruthTests.cs index 075dd8fd2ba..92feae0967a 100644 --- a/src/Templates/Boilerplate/Bit.Boilerplate/src/Tests/Features/Documentation/DocumentationTruthTests.cs +++ b/src/Templates/Boilerplate/Bit.Boilerplate/src/Tests/Features/Documentation/DocumentationTruthTests.cs @@ -267,7 +267,7 @@ private static bool TryNormalize(string candidate, bool fromLink, out string pat if (repositoryRoots.Any(root => candidate.StartsWith(root, StringComparison.Ordinal)) is false) return false; - // Build output. `.docs/17` legitimately tells the reader to run `src/Tests/bin/Debug/net10.0/playwright.ps1`, + // Build output. `.docs/17` legitimately tells the reader to run `src/Tests/bin/Debug/net11.0/playwright.ps1`, // which only exists after a build. if (candidate.Contains("/bin/", StringComparison.Ordinal) || candidate.Contains("/obj/", StringComparison.Ordinal)) return false; diff --git a/src/Templates/Boilerplate/Bit.Boilerplate/src/Tests/Features/Identity/IStorageServiceContractTests.cs b/src/Templates/Boilerplate/Bit.Boilerplate/src/Tests/Features/Identity/IStorageServiceContractTests.cs index 035a69283bc..168e1f3c013 100644 --- a/src/Templates/Boilerplate/Bit.Boilerplate/src/Tests/Features/Identity/IStorageServiceContractTests.cs +++ b/src/Templates/Boilerplate/Bit.Boilerplate/src/Tests/Features/Identity/IStorageServiceContractTests.cs @@ -13,7 +13,7 @@ namespace Boilerplate.Tests.Features.Identity; /// /// ⚠ Only the test double is exercised here, and that is a real gap, not an oversight. /// MauiStorageService and WindowsStorageService live in projects this one does not reference and cannot: -/// Client.Maui needs the MAUI workloads and Client.Windows is net10.0-windows, so referencing either would +/// Client.Maui needs the MAUI workloads and Client.Windows is net11.0-windows, so referencing either would /// retarget the test project and break the Linux CI job. WebStorageService is reachable as a type but its /// stores are localStorage and sessionStorage behind JS interop, so it needs a browser. What this class /// buys is a single, executable statement of the contract that a reader can diff the three by hand against; what it diff --git a/src/Templates/Boilerplate/Bit.Boilerplate/src/Tests/Features/Products/AddOrEditProductPageTests.cs b/src/Templates/Boilerplate/Bit.Boilerplate/src/Tests/Features/Products/AddOrEditProductPageTests.cs index 5cd254e04ad..7c0918aa4c8 100644 --- a/src/Templates/Boilerplate/Bit.Boilerplate/src/Tests/Features/Products/AddOrEditProductPageTests.cs +++ b/src/Templates/Boilerplate/Bit.Boilerplate/src/Tests/Features/Products/AddOrEditProductPageTests.cs @@ -14,7 +14,7 @@ namespace Boilerplate.Tests.Features.Products; /// A validation error on a field with no <ValidationMessage>. /// AppDataAnnotationsValidator writes every failure into a ValidationMessageStore and renders nothing /// itself; the page has to supply a message component per field. DescriptionHTML had none and the form had no -/// <ValidationSummary>, so an over-long description made EditContext.Validate() return false, +/// <ValidationSummary>, so an over-long description made EditContext.ValidateAsync() return false, /// OnValidSubmit never fired, Save never ran, and - because isSaving is assigned inside /// Save - the button did not even enter its loading state. Clicking Save did nothing whatsoever, forever. /// A failed load falling through to the form. OnInitAsync had no catch, so a transient diff --git a/src/Templates/Boilerplate/Readme.md b/src/Templates/Boilerplate/Readme.md index 3ae04a62db8..32a2f3e188c 100644 --- a/src/Templates/Boilerplate/Readme.md +++ b/src/Templates/Boilerplate/Readme.md @@ -47,7 +47,7 @@ Comprehensive **Data and Response caching**: - Powerful vectorized database search using embeddings ### Modern Stack -- **ASP.NET Core 10**, **C# 14**, **.NET Aspire** +- **ASP.NET Core 10 or 11**, **C# 14**, **.NET Aspire** - **Entity Framework Core** with multiple database support (SQL Server, PostgreSQL, MySQL, SQLite) - Flexible file storage (Local, S3, Azure Blob Storage) - CI/CD pipelines for GitHub Actions and Azure DevOps diff --git a/src/Utilities/Balette/Bit.Balette/Bit.Balette.csproj b/src/Utilities/Balette/Bit.Balette/Bit.Balette.csproj index b2d907b03ff..786c563ded9 100644 --- a/src/Utilities/Balette/Bit.Balette/Bit.Balette.csproj +++ b/src/Utilities/Balette/Bit.Balette/Bit.Balette.csproj @@ -3,7 +3,7 @@ - net10.0;net9.0;net8.0 + net11.0;net10.0;net9.0;net8.0 Bit.Balette enable true @@ -23,6 +23,7 @@ +
diff --git a/src/Utilities/Balette/Demo/Client/Bit.Balette.Demo.Client.csproj b/src/Utilities/Balette/Demo/Client/Bit.Balette.Demo.Client.csproj index b847f9a51bd..eaaad819bef 100644 --- a/src/Utilities/Balette/Demo/Client/Bit.Balette.Demo.Client.csproj +++ b/src/Utilities/Balette/Demo/Client/Bit.Balette.Demo.Client.csproj @@ -1,7 +1,8 @@  - net10.0 + net11.0 + false enable enable true @@ -14,7 +15,7 @@ - + diff --git a/src/Utilities/Balette/Demo/Server/Bit.Balette.Demo.Server.csproj b/src/Utilities/Balette/Demo/Server/Bit.Balette.Demo.Server.csproj index cf56e2935ed..38d63c0ce06 100644 --- a/src/Utilities/Balette/Demo/Server/Bit.Balette.Demo.Server.csproj +++ b/src/Utilities/Balette/Demo/Server/Bit.Balette.Demo.Server.csproj @@ -1,7 +1,7 @@  - net10.0 + net11.0 enable enable true @@ -10,7 +10,7 @@ - + diff --git a/src/Utilities/Balette/Demo/Server/Program.cs b/src/Utilities/Balette/Demo/Server/Program.cs index cf17c6b9062..f8b60f496c2 100644 --- a/src/Utilities/Balette/Demo/Server/Program.cs +++ b/src/Utilities/Balette/Demo/Server/Program.cs @@ -68,11 +68,7 @@ var app = builder.Build(); -if (app.Environment.IsDevelopment()) -{ - app.UseWebAssemblyDebugging(); -} -else +if (app.Environment.IsDevelopment() is false) { app.UseExceptionHandler("/Error", createScopeForErrors: true); app.UseHsts(); diff --git a/src/Utilities/Balette/Demo/Server/Properties/launchSettings.json b/src/Utilities/Balette/Demo/Server/Properties/launchSettings.json index 427934e5e04..2c68ed55f65 100644 --- a/src/Utilities/Balette/Demo/Server/Properties/launchSettings.json +++ b/src/Utilities/Balette/Demo/Server/Properties/launchSettings.json @@ -5,7 +5,6 @@ "commandName": "Project", "dotnetRunMessages": true, "launchBrowser": true, - "inspectUri": "{wsProtocol}://{url.hostname}:{url.port}/_framework/debug/ws-proxy?browser={browserInspectUri}", "applicationUrl": "https://localhost:5213;http://localhost:5212", "environmentVariables": { "ASPNETCORE_ENVIRONMENT": "Development" diff --git a/src/Utilities/Balette/Tests/Bit.Balette.Benchmarks/Bit.Balette.Benchmarks.csproj b/src/Utilities/Balette/Tests/Bit.Balette.Benchmarks/Bit.Balette.Benchmarks.csproj index cf1729a30b3..7ecbfa7ecd9 100644 --- a/src/Utilities/Balette/Tests/Bit.Balette.Benchmarks/Bit.Balette.Benchmarks.csproj +++ b/src/Utilities/Balette/Tests/Bit.Balette.Benchmarks/Bit.Balette.Benchmarks.csproj @@ -2,9 +2,9 @@ Exe - - net10.0 + net11.0 enable enable false diff --git a/src/Utilities/Balette/Tests/Bit.Balette.Tests.E2E/Bit.Balette.Tests.E2E.csproj b/src/Utilities/Balette/Tests/Bit.Balette.Tests.E2E/Bit.Balette.Tests.E2E.csproj index d84bb588a76..9d9190bd25c 100644 --- a/src/Utilities/Balette/Tests/Bit.Balette.Tests.E2E/Bit.Balette.Tests.E2E.csproj +++ b/src/Utilities/Balette/Tests/Bit.Balette.Tests.E2E/Bit.Balette.Tests.E2E.csproj @@ -1,7 +1,7 @@  - net10.0 + net11.0 enable enable false diff --git a/src/Utilities/Balette/Tests/Bit.Balette.Tests.E2E/Infrastructure/PlaywrightSession.cs b/src/Utilities/Balette/Tests/Bit.Balette.Tests.E2E/Infrastructure/PlaywrightSession.cs index 9d564bbad44..6af01bd4b1b 100644 --- a/src/Utilities/Balette/Tests/Bit.Balette.Tests.E2E/Infrastructure/PlaywrightSession.cs +++ b/src/Utilities/Balette/Tests/Bit.Balette.Tests.E2E/Infrastructure/PlaywrightSession.cs @@ -51,7 +51,7 @@ private static async Task StartAsync() if (browser is null) { playwright.Dispose(); - return Session.Fail("no Chromium-based browser could be launched. Run 'pwsh bin//net10.0/playwright.ps1 install chromium', or install Chrome or Edge."); + return Session.Fail("no Chromium-based browser could be launched. Run 'pwsh bin//net11.0/playwright.ps1 install chromium', or install Chrome or Edge."); } try diff --git a/src/Utilities/Balette/Tests/Bit.Balette.Tests.E2E/Infrastructure/RepoLayout.cs b/src/Utilities/Balette/Tests/Bit.Balette.Tests.E2E/Infrastructure/RepoLayout.cs index dccdd57dc96..376711c0558 100644 --- a/src/Utilities/Balette/Tests/Bit.Balette.Tests.E2E/Infrastructure/RepoLayout.cs +++ b/src/Utilities/Balette/Tests/Bit.Balette.Tests.E2E/Infrastructure/RepoLayout.cs @@ -11,7 +11,7 @@ public static class RepoLayout public static string DemoServerProject() => FindUpward(Path.Combine("Demo", "Server", $"{DemoServerName}.csproj")); public static string DemoServerAssembly(string configuration) => - Path.Combine(Path.GetDirectoryName(DemoServerProject())!, "bin", configuration, "net10.0", $"{DemoServerName}.dll"); + Path.Combine(Path.GetDirectoryName(DemoServerProject())!, "bin", configuration, "net11.0", $"{DemoServerName}.dll"); private static string FindUpward(string relativePath) { diff --git a/src/Utilities/Balette/Tests/Bit.Balette.Tests.Mcp/Bit.Balette.Tests.Mcp.csproj b/src/Utilities/Balette/Tests/Bit.Balette.Tests.Mcp/Bit.Balette.Tests.Mcp.csproj index b38b681b3ae..a2fa866ed54 100644 --- a/src/Utilities/Balette/Tests/Bit.Balette.Tests.Mcp/Bit.Balette.Tests.Mcp.csproj +++ b/src/Utilities/Balette/Tests/Bit.Balette.Tests.Mcp/Bit.Balette.Tests.Mcp.csproj @@ -1,9 +1,9 @@  + exists on net11.0, while the library's own tests multi-target back to net8.0. --> - net10.0 + net11.0 Exe @@ -20,7 +20,7 @@ - + diff --git a/src/Utilities/Balette/Tests/Bit.Balette.Tests/Bit.Balette.Tests.csproj b/src/Utilities/Balette/Tests/Bit.Balette.Tests/Bit.Balette.Tests.csproj index a2073aed41a..e3e7a4e495f 100644 --- a/src/Utilities/Balette/Tests/Bit.Balette.Tests/Bit.Balette.Tests.csproj +++ b/src/Utilities/Balette/Tests/Bit.Balette.Tests/Bit.Balette.Tests.csproj @@ -1,7 +1,7 @@  - net10.0;net9.0;net8.0 + net11.0;net10.0;net9.0;net8.0 enable enable false diff --git a/src/Utilities/BbScanner/Bit.BbScanner/Bit.BbScanner.csproj b/src/Utilities/BbScanner/Bit.BbScanner/Bit.BbScanner.csproj index e294321cfdf..970fc29bff4 100644 --- a/src/Utilities/BbScanner/Bit.BbScanner/Bit.BbScanner.csproj +++ b/src/Utilities/BbScanner/Bit.BbScanner/Bit.BbScanner.csproj @@ -3,7 +3,7 @@ - net10.0;net9.0;net8.0 + net11.0;net10.0;net9.0;net8.0 Bit.BbScanner enable true @@ -24,6 +24,7 @@ + - + diff --git a/src/Utilities/BbScanner/Demo/Server/Program.cs b/src/Utilities/BbScanner/Demo/Server/Program.cs index b59f26163cb..0d7fd06b4df 100644 --- a/src/Utilities/BbScanner/Demo/Server/Program.cs +++ b/src/Utilities/BbScanner/Demo/Server/Program.cs @@ -68,11 +68,7 @@ var app = builder.Build(); -if (app.Environment.IsDevelopment()) -{ - app.UseWebAssemblyDebugging(); -} -else +if (app.Environment.IsDevelopment() is false) { app.UseExceptionHandler("/Error", createScopeForErrors: true); app.UseHsts(); diff --git a/src/Utilities/BbScanner/Demo/Server/Properties/launchSettings.json b/src/Utilities/BbScanner/Demo/Server/Properties/launchSettings.json index 1d9c45a7595..b7efc8526f2 100644 --- a/src/Utilities/BbScanner/Demo/Server/Properties/launchSettings.json +++ b/src/Utilities/BbScanner/Demo/Server/Properties/launchSettings.json @@ -5,7 +5,6 @@ "commandName": "Project", "dotnetRunMessages": true, "launchBrowser": true, - "inspectUri": "{wsProtocol}://{url.hostname}:{url.port}/_framework/debug/ws-proxy?browser={browserInspectUri}", "applicationUrl": "https://localhost:5219;http://localhost:5218", "environmentVariables": { "ASPNETCORE_ENVIRONMENT": "Development" diff --git a/src/Utilities/BbScanner/Tests/Bit.BbScanner.Benchmarks/Bit.BbScanner.Benchmarks.csproj b/src/Utilities/BbScanner/Tests/Bit.BbScanner.Benchmarks/Bit.BbScanner.Benchmarks.csproj index 07de5e7964f..103741c28e4 100644 --- a/src/Utilities/BbScanner/Tests/Bit.BbScanner.Benchmarks/Bit.BbScanner.Benchmarks.csproj +++ b/src/Utilities/BbScanner/Tests/Bit.BbScanner.Benchmarks/Bit.BbScanner.Benchmarks.csproj @@ -2,9 +2,9 @@ Exe - - net10.0 + net11.0 enable enable false diff --git a/src/Utilities/BbScanner/Tests/Bit.BbScanner.TestKit/Bit.BbScanner.TestKit.csproj b/src/Utilities/BbScanner/Tests/Bit.BbScanner.TestKit/Bit.BbScanner.TestKit.csproj index ba3e1f9397f..597a5ea638c 100644 --- a/src/Utilities/BbScanner/Tests/Bit.BbScanner.TestKit/Bit.BbScanner.TestKit.csproj +++ b/src/Utilities/BbScanner/Tests/Bit.BbScanner.TestKit/Bit.BbScanner.TestKit.csproj @@ -5,7 +5,7 @@ unit tests and the benchmarks decode what this renders, and the demo draws its sample barcodes with it, so it targets every framework those projects do. It is test tooling, not part of the package. --> - net10.0;net9.0;net8.0 + net11.0;net10.0;net9.0;net8.0 enable enable false diff --git a/src/Utilities/BbScanner/Tests/Bit.BbScanner.Tests.E2E/Bit.BbScanner.Tests.E2E.csproj b/src/Utilities/BbScanner/Tests/Bit.BbScanner.Tests.E2E/Bit.BbScanner.Tests.E2E.csproj index 8e6ef0dfef6..7a82f9663c1 100644 --- a/src/Utilities/BbScanner/Tests/Bit.BbScanner.Tests.E2E/Bit.BbScanner.Tests.E2E.csproj +++ b/src/Utilities/BbScanner/Tests/Bit.BbScanner.Tests.E2E/Bit.BbScanner.Tests.E2E.csproj @@ -1,7 +1,7 @@  - net10.0 + net11.0 enable enable false diff --git a/src/Utilities/BbScanner/Tests/Bit.BbScanner.Tests.E2E/Infrastructure/PlaywrightSession.cs b/src/Utilities/BbScanner/Tests/Bit.BbScanner.Tests.E2E/Infrastructure/PlaywrightSession.cs index 7b2cf5551aa..fd49e62804f 100644 --- a/src/Utilities/BbScanner/Tests/Bit.BbScanner.Tests.E2E/Infrastructure/PlaywrightSession.cs +++ b/src/Utilities/BbScanner/Tests/Bit.BbScanner.Tests.E2E/Infrastructure/PlaywrightSession.cs @@ -53,7 +53,7 @@ private static async Task StartAsync() if (launch is null) { playwright.Dispose(); - return Session.Fail("no Chromium-based browser could be launched. Run 'pwsh bin//net10.0/playwright.ps1 install chromium', or install Chrome or Edge."); + return Session.Fail("no Chromium-based browser could be launched. Run 'pwsh bin//net11.0/playwright.ps1 install chromium', or install Chrome or Edge."); } var clips = CameraClips.Write(); diff --git a/src/Utilities/BbScanner/Tests/Bit.BbScanner.Tests.E2E/Infrastructure/RepoLayout.cs b/src/Utilities/BbScanner/Tests/Bit.BbScanner.Tests.E2E/Infrastructure/RepoLayout.cs index 3a818914e7b..3222fd7f37d 100644 --- a/src/Utilities/BbScanner/Tests/Bit.BbScanner.Tests.E2E/Infrastructure/RepoLayout.cs +++ b/src/Utilities/BbScanner/Tests/Bit.BbScanner.Tests.E2E/Infrastructure/RepoLayout.cs @@ -11,7 +11,7 @@ public static class RepoLayout public static string DemoServerProject() => FindUpward(Path.Combine("Demo", "Server", $"{DemoServerName}.csproj")); public static string DemoServerAssembly(string configuration) => - Path.Combine(Path.GetDirectoryName(DemoServerProject())!, "bin", configuration, "net10.0", $"{DemoServerName}.dll"); + Path.Combine(Path.GetDirectoryName(DemoServerProject())!, "bin", configuration, "net11.0", $"{DemoServerName}.dll"); private static string FindUpward(string relativePath) { diff --git a/src/Utilities/BbScanner/Tests/Bit.BbScanner.Tests.Mcp/Bit.BbScanner.Tests.Mcp.csproj b/src/Utilities/BbScanner/Tests/Bit.BbScanner.Tests.Mcp/Bit.BbScanner.Tests.Mcp.csproj index 8ab58fed241..1df4e990a84 100644 --- a/src/Utilities/BbScanner/Tests/Bit.BbScanner.Tests.Mcp/Bit.BbScanner.Tests.Mcp.csproj +++ b/src/Utilities/BbScanner/Tests/Bit.BbScanner.Tests.Mcp/Bit.BbScanner.Tests.Mcp.csproj @@ -1,9 +1,9 @@  + exists on net11.0, while the library's own tests multi-target back to net8.0. --> - net10.0 + net11.0 Exe @@ -20,7 +20,7 @@ - + diff --git a/src/Utilities/BbScanner/Tests/Bit.BbScanner.Tests/Bit.BbScanner.Tests.csproj b/src/Utilities/BbScanner/Tests/Bit.BbScanner.Tests/Bit.BbScanner.Tests.csproj index 5ca3754a0e3..d81ea9d7a67 100644 --- a/src/Utilities/BbScanner/Tests/Bit.BbScanner.Tests/Bit.BbScanner.Tests.csproj +++ b/src/Utilities/BbScanner/Tests/Bit.BbScanner.Tests/Bit.BbScanner.Tests.csproj @@ -1,7 +1,7 @@  - net10.0;net9.0;net8.0 + net11.0;net10.0;net9.0;net8.0 enable enable false diff --git a/src/Utilities/Bcrdt/Bit.Bcrdt.Server/Bit.Bcrdt.Server.csproj b/src/Utilities/Bcrdt/Bit.Bcrdt.Server/Bit.Bcrdt.Server.csproj index f8de0fe436b..f41bf05db23 100644 --- a/src/Utilities/Bcrdt/Bit.Bcrdt.Server/Bit.Bcrdt.Server.csproj +++ b/src/Utilities/Bcrdt/Bit.Bcrdt.Server/Bit.Bcrdt.Server.csproj @@ -3,7 +3,7 @@ - net10.0;net9.0;net8.0 + net11.0;net10.0;net9.0;net8.0 Bit.Bcrdt.Server enable true diff --git a/src/Utilities/Bcrdt/Bit.Bcrdt.SignalR/Bit.Bcrdt.SignalR.csproj b/src/Utilities/Bcrdt/Bit.Bcrdt.SignalR/Bit.Bcrdt.SignalR.csproj index ae8f6fffdcf..489fc3b65d1 100644 --- a/src/Utilities/Bcrdt/Bit.Bcrdt.SignalR/Bit.Bcrdt.SignalR.csproj +++ b/src/Utilities/Bcrdt/Bit.Bcrdt.SignalR/Bit.Bcrdt.SignalR.csproj @@ -3,7 +3,7 @@ - net10.0;net9.0;net8.0 + net11.0;net10.0;net9.0;net8.0 Bit.Bcrdt.SignalR enable true @@ -20,6 +20,7 @@ +
diff --git a/src/Utilities/Bcrdt/Bit.Bcrdt.Testing/Bit.Bcrdt.Testing.csproj b/src/Utilities/Bcrdt/Bit.Bcrdt.Testing/Bit.Bcrdt.Testing.csproj index 809b40a22a1..971ad604bec 100644 --- a/src/Utilities/Bcrdt/Bit.Bcrdt.Testing/Bit.Bcrdt.Testing.csproj +++ b/src/Utilities/Bcrdt/Bit.Bcrdt.Testing/Bit.Bcrdt.Testing.csproj @@ -3,7 +3,7 @@ - net10.0;net9.0;net8.0 + net11.0;net10.0;net9.0;net8.0 Bit.Bcrdt.Testing enable - + diff --git a/src/Utilities/Bcrdt/Demo/Server/Program.cs b/src/Utilities/Bcrdt/Demo/Server/Program.cs index ec1df3a129d..d924617fd68 100644 --- a/src/Utilities/Bcrdt/Demo/Server/Program.cs +++ b/src/Utilities/Bcrdt/Demo/Server/Program.cs @@ -74,11 +74,7 @@ var app = builder.Build(); -if (app.Environment.IsDevelopment()) -{ - app.UseWebAssemblyDebugging(); -} -else +if (app.Environment.IsDevelopment() is false) { app.UseExceptionHandler("/Error", createScopeForErrors: true); app.UseHsts(); diff --git a/src/Utilities/Bcrdt/Demo/Server/Properties/launchSettings.json b/src/Utilities/Bcrdt/Demo/Server/Properties/launchSettings.json index bdee3343e10..217545ed4fe 100644 --- a/src/Utilities/Bcrdt/Demo/Server/Properties/launchSettings.json +++ b/src/Utilities/Bcrdt/Demo/Server/Properties/launchSettings.json @@ -5,7 +5,6 @@ "commandName": "Project", "dotnetRunMessages": true, "launchBrowser": true, - "inspectUri": "{wsProtocol}://{url.hostname}:{url.port}/_framework/debug/ws-proxy?browser={browserInspectUri}", "applicationUrl": "https://localhost:5561;http://localhost:5560", "environmentVariables": { "ASPNETCORE_ENVIRONMENT": "Development" diff --git a/src/Utilities/Bcrdt/Demo/Server/Services/BcrdtServerInstructions.cs b/src/Utilities/Bcrdt/Demo/Server/Services/BcrdtServerInstructions.cs index 078e38c630a..07a1e829bde 100644 --- a/src/Utilities/Bcrdt/Demo/Server/Services/BcrdtServerInstructions.cs +++ b/src/Utilities/Bcrdt/Demo/Server/Services/BcrdtServerInstructions.cs @@ -19,7 +19,7 @@ public static class BcrdtServerInstructions /// and the build checks it against ReleaseVersion in Bit.Build.props (see the ReleaseVersionLiteral /// item in the .csproj), so a release cannot forget it. /// - public const string BcrdtVersion = "10.7.0-pre-02"; + public const string BcrdtVersion = "11.0.0-pre-10"; public static readonly string Text = $""" Bit.Bcrdt is real-time collaborative editing for .NET and Blazor, written natively in C#: a YATA-based CRDT engine diff --git a/src/Utilities/Bcrdt/Tests/Bit.Bcrdt.Benchmarks/Bit.Bcrdt.Benchmarks.csproj b/src/Utilities/Bcrdt/Tests/Bit.Bcrdt.Benchmarks/Bit.Bcrdt.Benchmarks.csproj index fcbb4f2e366..a5ae5837bb3 100644 --- a/src/Utilities/Bcrdt/Tests/Bit.Bcrdt.Benchmarks/Bit.Bcrdt.Benchmarks.csproj +++ b/src/Utilities/Bcrdt/Tests/Bit.Bcrdt.Benchmarks/Bit.Bcrdt.Benchmarks.csproj @@ -2,9 +2,9 @@ Exe - - net10.0 + net11.0 enable enable false diff --git a/src/Utilities/Bcrdt/Tests/Bit.Bcrdt.Tests.E2E/Bit.Bcrdt.Tests.E2E.csproj b/src/Utilities/Bcrdt/Tests/Bit.Bcrdt.Tests.E2E/Bit.Bcrdt.Tests.E2E.csproj index 8ac7fa786b8..db639df40df 100644 --- a/src/Utilities/Bcrdt/Tests/Bit.Bcrdt.Tests.E2E/Bit.Bcrdt.Tests.E2E.csproj +++ b/src/Utilities/Bcrdt/Tests/Bit.Bcrdt.Tests.E2E/Bit.Bcrdt.Tests.E2E.csproj @@ -1,7 +1,7 @@  - net10.0 + net11.0 enable enable false diff --git a/src/Utilities/Bcrdt/Tests/Bit.Bcrdt.Tests.E2E/Infrastructure/PlaywrightSession.cs b/src/Utilities/Bcrdt/Tests/Bit.Bcrdt.Tests.E2E/Infrastructure/PlaywrightSession.cs index ec8e0f435a7..470d09eee26 100644 --- a/src/Utilities/Bcrdt/Tests/Bit.Bcrdt.Tests.E2E/Infrastructure/PlaywrightSession.cs +++ b/src/Utilities/Bcrdt/Tests/Bit.Bcrdt.Tests.E2E/Infrastructure/PlaywrightSession.cs @@ -51,7 +51,7 @@ private static async Task StartAsync() if (browser is null) { playwright.Dispose(); - return Session.Fail("no Chromium-based browser could be launched. Run 'pwsh bin//net10.0/playwright.ps1 install chromium', or install Chrome or Edge."); + return Session.Fail("no Chromium-based browser could be launched. Run 'pwsh bin//net11.0/playwright.ps1 install chromium', or install Chrome or Edge."); } try diff --git a/src/Utilities/Bcrdt/Tests/Bit.Bcrdt.Tests.E2E/Infrastructure/RepoLayout.cs b/src/Utilities/Bcrdt/Tests/Bit.Bcrdt.Tests.E2E/Infrastructure/RepoLayout.cs index a07f6efc9b4..20ff5a7155d 100644 --- a/src/Utilities/Bcrdt/Tests/Bit.Bcrdt.Tests.E2E/Infrastructure/RepoLayout.cs +++ b/src/Utilities/Bcrdt/Tests/Bit.Bcrdt.Tests.E2E/Infrastructure/RepoLayout.cs @@ -14,7 +14,7 @@ public static class RepoLayout public static string DemoServerProject() => FindUpward(Path.Combine("Demo", "Server", $"{DemoServerName}.csproj")); public static string DemoServerAssembly(string configuration) => - Path.Combine(Path.GetDirectoryName(DemoServerProject())!, "bin", configuration, "net10.0", $"{DemoServerName}.dll"); + Path.Combine(Path.GetDirectoryName(DemoServerProject())!, "bin", configuration, "net11.0", $"{DemoServerName}.dll"); /// The demo's routable pages, which the page sweep reads its routes from. public static string DemoPagesDirectory() => diff --git a/src/Utilities/Bcrdt/Tests/Bit.Bcrdt.Tests.Mcp/Bit.Bcrdt.Tests.Mcp.csproj b/src/Utilities/Bcrdt/Tests/Bit.Bcrdt.Tests.Mcp/Bit.Bcrdt.Tests.Mcp.csproj index 043cc35b9e0..08ec5cc5de0 100644 --- a/src/Utilities/Bcrdt/Tests/Bit.Bcrdt.Tests.Mcp/Bit.Bcrdt.Tests.Mcp.csproj +++ b/src/Utilities/Bcrdt/Tests/Bit.Bcrdt.Tests.Mcp/Bit.Bcrdt.Tests.Mcp.csproj @@ -1,9 +1,9 @@  + exists on net11.0, while the library's own tests multi-target back to net8.0. --> - net10.0 + net11.0 Exe @@ -20,7 +20,7 @@ - + diff --git a/src/Utilities/Bcrdt/Tests/Bit.Bcrdt.Tests/Bit.Bcrdt.Tests.csproj b/src/Utilities/Bcrdt/Tests/Bit.Bcrdt.Tests/Bit.Bcrdt.Tests.csproj index ec997094f0a..56aa2f332b7 100644 --- a/src/Utilities/Bcrdt/Tests/Bit.Bcrdt.Tests/Bit.Bcrdt.Tests.csproj +++ b/src/Utilities/Bcrdt/Tests/Bit.Bcrdt.Tests/Bit.Bcrdt.Tests.csproj @@ -1,7 +1,7 @@  - net10.0;net9.0;net8.0 + net11.0;net10.0;net9.0;net8.0 enable enable preview @@ -28,13 +28,13 @@
- - + - + diff --git a/src/Utilities/Bdnd/Bit.Bdnd/Bit.Bdnd.csproj b/src/Utilities/Bdnd/Bit.Bdnd/Bit.Bdnd.csproj index 0f94251b33f..46c62c4e918 100644 --- a/src/Utilities/Bdnd/Bit.Bdnd/Bit.Bdnd.csproj +++ b/src/Utilities/Bdnd/Bit.Bdnd/Bit.Bdnd.csproj @@ -3,7 +3,7 @@ - net10.0;net9.0;net8.0 + net11.0;net10.0;net9.0;net8.0 Bit.Bdnd enable true @@ -22,6 +22,7 @@ + diff --git a/src/Utilities/Bdnd/Demo/Client/Bit.Bdnd.Demo.Client.csproj b/src/Utilities/Bdnd/Demo/Client/Bit.Bdnd.Demo.Client.csproj index f2ab73aa5fa..d7309a9123e 100644 --- a/src/Utilities/Bdnd/Demo/Client/Bit.Bdnd.Demo.Client.csproj +++ b/src/Utilities/Bdnd/Demo/Client/Bit.Bdnd.Demo.Client.csproj @@ -1,7 +1,8 @@  - net10.0 + net11.0 + false enable enable true @@ -14,7 +15,7 @@ - + diff --git a/src/Utilities/Bdnd/Demo/Server/Bit.Bdnd.Demo.Server.csproj b/src/Utilities/Bdnd/Demo/Server/Bit.Bdnd.Demo.Server.csproj index 6c9674bd295..edb0cbd1055 100644 --- a/src/Utilities/Bdnd/Demo/Server/Bit.Bdnd.Demo.Server.csproj +++ b/src/Utilities/Bdnd/Demo/Server/Bit.Bdnd.Demo.Server.csproj @@ -1,7 +1,7 @@  - net10.0 + net11.0 enable enable true @@ -10,7 +10,7 @@ - + diff --git a/src/Utilities/Bdnd/Demo/Server/Program.cs b/src/Utilities/Bdnd/Demo/Server/Program.cs index 0e11cbbd55f..89361734ed8 100644 --- a/src/Utilities/Bdnd/Demo/Server/Program.cs +++ b/src/Utilities/Bdnd/Demo/Server/Program.cs @@ -67,11 +67,7 @@ var app = builder.Build(); -if (app.Environment.IsDevelopment()) -{ - app.UseWebAssemblyDebugging(); -} -else +if (app.Environment.IsDevelopment() is false) { app.UseExceptionHandler("/Error", createScopeForErrors: true); app.UseHsts(); diff --git a/src/Utilities/Bdnd/Demo/Server/Properties/launchSettings.json b/src/Utilities/Bdnd/Demo/Server/Properties/launchSettings.json index bb0073aacda..3d808cbff9c 100644 --- a/src/Utilities/Bdnd/Demo/Server/Properties/launchSettings.json +++ b/src/Utilities/Bdnd/Demo/Server/Properties/launchSettings.json @@ -5,7 +5,6 @@ "commandName": "Project", "dotnetRunMessages": true, "launchBrowser": true, - "inspectUri": "{wsProtocol}://{url.hostname}:{url.port}/_framework/debug/ws-proxy?browser={browserInspectUri}", "applicationUrl": "https://localhost:5561;http://localhost:5560", "environmentVariables": { "ASPNETCORE_ENVIRONMENT": "Development" diff --git a/src/Utilities/Bdnd/Tests/Bit.Bdnd.Tests.E2E/Bit.Bdnd.Tests.E2E.csproj b/src/Utilities/Bdnd/Tests/Bit.Bdnd.Tests.E2E/Bit.Bdnd.Tests.E2E.csproj index 4db8920fc44..8604240801c 100644 --- a/src/Utilities/Bdnd/Tests/Bit.Bdnd.Tests.E2E/Bit.Bdnd.Tests.E2E.csproj +++ b/src/Utilities/Bdnd/Tests/Bit.Bdnd.Tests.E2E/Bit.Bdnd.Tests.E2E.csproj @@ -1,7 +1,7 @@  - net10.0 + net11.0 enable enable false diff --git a/src/Utilities/Bdnd/Tests/Bit.Bdnd.Tests.E2E/Infrastructure/PlaywrightSession.cs b/src/Utilities/Bdnd/Tests/Bit.Bdnd.Tests.E2E/Infrastructure/PlaywrightSession.cs index ad2d25231b9..fb4ee7ed942 100644 --- a/src/Utilities/Bdnd/Tests/Bit.Bdnd.Tests.E2E/Infrastructure/PlaywrightSession.cs +++ b/src/Utilities/Bdnd/Tests/Bit.Bdnd.Tests.E2E/Infrastructure/PlaywrightSession.cs @@ -51,7 +51,7 @@ private static async Task StartAsync() if (browser is null) { playwright.Dispose(); - return Session.Fail("no Chromium-based browser could be launched. Run 'pwsh bin//net10.0/playwright.ps1 install chromium', or install Chrome or Edge."); + return Session.Fail("no Chromium-based browser could be launched. Run 'pwsh bin//net11.0/playwright.ps1 install chromium', or install Chrome or Edge."); } try diff --git a/src/Utilities/Bdnd/Tests/Bit.Bdnd.Tests.E2E/Infrastructure/RepoLayout.cs b/src/Utilities/Bdnd/Tests/Bit.Bdnd.Tests.E2E/Infrastructure/RepoLayout.cs index 082f46dea67..0dd2c976e09 100644 --- a/src/Utilities/Bdnd/Tests/Bit.Bdnd.Tests.E2E/Infrastructure/RepoLayout.cs +++ b/src/Utilities/Bdnd/Tests/Bit.Bdnd.Tests.E2E/Infrastructure/RepoLayout.cs @@ -11,7 +11,7 @@ public static class RepoLayout public static string DemoServerProject() => FindUpward(Path.Combine("Demo", "Server", $"{DemoServerName}.csproj")); public static string DemoServerAssembly(string configuration) => - Path.Combine(Path.GetDirectoryName(DemoServerProject())!, "bin", configuration, "net10.0", $"{DemoServerName}.dll"); + Path.Combine(Path.GetDirectoryName(DemoServerProject())!, "bin", configuration, "net11.0", $"{DemoServerName}.dll"); /// The demo's routable pages, which the page sweep reads its routes from. public static string DemoPagesDirectory() => diff --git a/src/Utilities/Bdnd/Tests/Bit.Bdnd.Tests.E2E/publish-gate.sh b/src/Utilities/Bdnd/Tests/Bit.Bdnd.Tests.E2E/publish-gate.sh index 236275eb500..aeed387a307 100644 --- a/src/Utilities/Bdnd/Tests/Bit.Bdnd.Tests.E2E/publish-gate.sh +++ b/src/Utilities/Bdnd/Tests/Bit.Bdnd.Tests.E2E/publish-gate.sh @@ -18,7 +18,7 @@ set -euo pipefail here="$(cd "$(dirname "$0")" && pwd)" -# Unlike the other publish gates, no -p:TargetFrameworks=net10.0: the WebAssembly client would get it too and then -# no longer resolve its runtime pack (WASM0005). Nor is it needed: the client, a net10.0 app, is the only project +# Unlike the other publish gates, no -p:TargetFrameworks=net11.0: the WebAssembly client would get it too and then +# no longer resolve its runtime pack (WASM0005). Nor is it needed: the client, a net11.0 app, is the only project # AOT compiles, and Bit.Bdnd's other frameworks demand no wasm-tools workload of their own. exec bash "$here/../../../../publish-gate.sh" Bit.Bdnd 'Demo|Tests' "$here/../../Demo/Server/Bit.Bdnd.Demo.Server.csproj" "$@" diff --git a/src/Utilities/Bdnd/Tests/Bit.Bdnd.Tests.Mcp/Bit.Bdnd.Tests.Mcp.csproj b/src/Utilities/Bdnd/Tests/Bit.Bdnd.Tests.Mcp/Bit.Bdnd.Tests.Mcp.csproj index 1c578c6dd92..a0648ee6d1a 100644 --- a/src/Utilities/Bdnd/Tests/Bit.Bdnd.Tests.Mcp/Bit.Bdnd.Tests.Mcp.csproj +++ b/src/Utilities/Bdnd/Tests/Bit.Bdnd.Tests.Mcp/Bit.Bdnd.Tests.Mcp.csproj @@ -1,9 +1,9 @@  + exists on net11.0, while the library's own tests multi-target back to net8.0. --> - net10.0 + net11.0 Exe @@ -20,7 +20,7 @@ - + diff --git a/src/Utilities/Bdnd/Tests/Bit.Bdnd.Tests/Bit.Bdnd.Tests.csproj b/src/Utilities/Bdnd/Tests/Bit.Bdnd.Tests/Bit.Bdnd.Tests.csproj index 9dd2ecd814d..439c09f9056 100644 --- a/src/Utilities/Bdnd/Tests/Bit.Bdnd.Tests/Bit.Bdnd.Tests.csproj +++ b/src/Utilities/Bdnd/Tests/Bit.Bdnd.Tests/Bit.Bdnd.Tests.csproj @@ -1,7 +1,7 @@  - net10.0;net9.0;net8.0 + net11.0;net10.0;net9.0;net8.0 enable enable false diff --git a/src/Utilities/Belemetry/Bit.Belemetry.EntityFrameworkCore/Bit.Belemetry.EntityFrameworkCore.csproj b/src/Utilities/Belemetry/Bit.Belemetry.EntityFrameworkCore/Bit.Belemetry.EntityFrameworkCore.csproj index 6a1d5b77d23..7321501dcbc 100644 --- a/src/Utilities/Belemetry/Bit.Belemetry.EntityFrameworkCore/Bit.Belemetry.EntityFrameworkCore.csproj +++ b/src/Utilities/Belemetry/Bit.Belemetry.EntityFrameworkCore/Bit.Belemetry.EntityFrameworkCore.csproj @@ -7,7 +7,7 @@ because EF Core is a dependency most Blazor apps (every WebAssembly one) do not want in their telemetry SDK. --> - net10.0;net9.0;net8.0 + net11.0;net10.0;net9.0;net8.0 enable true @@ -19,6 +19,7 @@ + diff --git a/src/Utilities/Belemetry/Bit.Belemetry.Hangfire/Bit.Belemetry.Hangfire.csproj b/src/Utilities/Belemetry/Bit.Belemetry.Hangfire/Bit.Belemetry.Hangfire.csproj index b6107bf69c6..9b996ff60da 100644 --- a/src/Utilities/Belemetry/Bit.Belemetry.Hangfire/Bit.Belemetry.Hangfire.csproj +++ b/src/Utilities/Belemetry/Bit.Belemetry.Hangfire/Bit.Belemetry.Hangfire.csproj @@ -7,7 +7,7 @@ collects by default. A separate package because Hangfire is a server-only dependency. --> - net10.0;net9.0;net8.0 + net11.0;net10.0;net9.0;net8.0 enable true diff --git a/src/Utilities/Belemetry/Bit.Belemetry/Bit.Belemetry.csproj b/src/Utilities/Belemetry/Bit.Belemetry/Bit.Belemetry.csproj index 90d26e24e9e..c00eef403ce 100644 --- a/src/Utilities/Belemetry/Bit.Belemetry/Bit.Belemetry.csproj +++ b/src/Utilities/Belemetry/Bit.Belemetry/Bit.Belemetry.csproj @@ -3,7 +3,7 @@ - net10.0;net9.0;net8.0 + net11.0;net10.0;net9.0;net8.0 true @@ -30,6 +30,7 @@ + diff --git a/src/Utilities/Belemetry/Demo/Client/Bit.Belemetry.Demo.Client.csproj b/src/Utilities/Belemetry/Demo/Client/Bit.Belemetry.Demo.Client.csproj index 2addede371b..fc4ae6781df 100644 --- a/src/Utilities/Belemetry/Demo/Client/Bit.Belemetry.Demo.Client.csproj +++ b/src/Utilities/Belemetry/Demo/Client/Bit.Belemetry.Demo.Client.csproj @@ -1,7 +1,8 @@  - net10.0 + net11.0 + false enable enable true @@ -14,7 +15,7 @@ - + diff --git a/src/Utilities/Belemetry/Demo/Server/Bit.Belemetry.Demo.Server.csproj b/src/Utilities/Belemetry/Demo/Server/Bit.Belemetry.Demo.Server.csproj index e77331155b6..8375eb9b6fa 100644 --- a/src/Utilities/Belemetry/Demo/Server/Bit.Belemetry.Demo.Server.csproj +++ b/src/Utilities/Belemetry/Demo/Server/Bit.Belemetry.Demo.Server.csproj @@ -1,7 +1,7 @@  - net10.0 + net11.0 enable enable true @@ -10,7 +10,7 @@ - + diff --git a/src/Utilities/Belemetry/Demo/Server/Program.cs b/src/Utilities/Belemetry/Demo/Server/Program.cs index 2802978f2a2..9c04cd0a4ae 100644 --- a/src/Utilities/Belemetry/Demo/Server/Program.cs +++ b/src/Utilities/Belemetry/Demo/Server/Program.cs @@ -83,11 +83,7 @@ var app = builder.Build(); -if (app.Environment.IsDevelopment()) -{ - app.UseWebAssemblyDebugging(); -} -else +if (app.Environment.IsDevelopment() is false) { app.UseExceptionHandler("/Error", createScopeForErrors: true); app.UseHsts(); diff --git a/src/Utilities/Belemetry/Demo/Server/Properties/launchSettings.json b/src/Utilities/Belemetry/Demo/Server/Properties/launchSettings.json index 4ab91c216ee..a49531b60df 100644 --- a/src/Utilities/Belemetry/Demo/Server/Properties/launchSettings.json +++ b/src/Utilities/Belemetry/Demo/Server/Properties/launchSettings.json @@ -5,7 +5,6 @@ "commandName": "Project", "dotnetRunMessages": true, "launchBrowser": true, - "inspectUri": "{wsProtocol}://{url.hostname}:{url.port}/_framework/debug/ws-proxy?browser={browserInspectUri}", "applicationUrl": "https://localhost:5081;http://localhost:5080", "environmentVariables": { "ASPNETCORE_ENVIRONMENT": "Development" diff --git a/src/Utilities/Belemetry/Samples/Auto/Bit.Belemetry.Samples.Auto.Client/Bit.Belemetry.Samples.Auto.Client.csproj b/src/Utilities/Belemetry/Samples/Auto/Bit.Belemetry.Samples.Auto.Client/Bit.Belemetry.Samples.Auto.Client.csproj index 1709a6e5d77..3989d62b73a 100644 --- a/src/Utilities/Belemetry/Samples/Auto/Bit.Belemetry.Samples.Auto.Client/Bit.Belemetry.Samples.Auto.Client.csproj +++ b/src/Utilities/Belemetry/Samples/Auto/Bit.Belemetry.Samples.Auto.Client/Bit.Belemetry.Samples.Auto.Client.csproj @@ -1,7 +1,8 @@  - net10.0 + net11.0 + false enable enable false @@ -11,7 +12,7 @@ - + diff --git a/src/Utilities/Belemetry/Samples/Auto/Bit.Belemetry.Samples.Auto/Bit.Belemetry.Samples.Auto.csproj b/src/Utilities/Belemetry/Samples/Auto/Bit.Belemetry.Samples.Auto/Bit.Belemetry.Samples.Auto.csproj index fa78db73880..b6ea47e7ee9 100644 --- a/src/Utilities/Belemetry/Samples/Auto/Bit.Belemetry.Samples.Auto/Bit.Belemetry.Samples.Auto.csproj +++ b/src/Utilities/Belemetry/Samples/Auto/Bit.Belemetry.Samples.Auto/Bit.Belemetry.Samples.Auto.csproj @@ -1,7 +1,7 @@  - net10.0 + net11.0 enable enable false @@ -9,7 +9,7 @@ - + diff --git a/src/Utilities/Belemetry/Samples/Auto/Bit.Belemetry.Samples.Auto/Program.cs b/src/Utilities/Belemetry/Samples/Auto/Bit.Belemetry.Samples.Auto/Program.cs index 7b3981b26f2..144f7ad0522 100644 --- a/src/Utilities/Belemetry/Samples/Auto/Bit.Belemetry.Samples.Auto/Program.cs +++ b/src/Utilities/Belemetry/Samples/Auto/Bit.Belemetry.Samples.Auto/Program.cs @@ -35,11 +35,7 @@ var app = builder.Build(); -if (app.Environment.IsDevelopment()) -{ - app.UseWebAssemblyDebugging(); -} -else +if (app.Environment.IsDevelopment() is false) { app.UseExceptionHandler("/Error", createScopeForErrors: true); app.UseHsts(); diff --git a/src/Utilities/Belemetry/Samples/Auto/Bit.Belemetry.Samples.Auto/Properties/launchSettings.json b/src/Utilities/Belemetry/Samples/Auto/Bit.Belemetry.Samples.Auto/Properties/launchSettings.json index 7347e41649a..6d2d52b72bb 100644 --- a/src/Utilities/Belemetry/Samples/Auto/Bit.Belemetry.Samples.Auto/Properties/launchSettings.json +++ b/src/Utilities/Belemetry/Samples/Auto/Bit.Belemetry.Samples.Auto/Properties/launchSettings.json @@ -4,7 +4,6 @@ "commandName": "Project", "dotnetRunMessages": true, "launchBrowser": true, - "inspectUri": "{wsProtocol}://{url.hostname}:{url.port}/_framework/debug/ws-proxy?browser={browserInspectUri}", "applicationUrl": "https://localhost:7393;http://localhost:5393", "environmentVariables": { "ASPNETCORE_ENVIRONMENT": "Development" diff --git a/src/Utilities/Belemetry/Samples/Core/Bit.Belemetry.Samples.Core.csproj b/src/Utilities/Belemetry/Samples/Core/Bit.Belemetry.Samples.Core.csproj index d11c96d2348..d7af7ecfd84 100644 --- a/src/Utilities/Belemetry/Samples/Core/Bit.Belemetry.Samples.Core.csproj +++ b/src/Utilities/Belemetry/Samples/Core/Bit.Belemetry.Samples.Core.csproj @@ -4,7 +4,7 @@ host it runs in: each host's Program.cs owns its Belemetry setup, which is the part worth comparing. --> - net10.0 + net11.0 enable enable false diff --git a/src/Utilities/Belemetry/Samples/Maui/Bit.Belemetry.Samples.Maui.csproj b/src/Utilities/Belemetry/Samples/Maui/Bit.Belemetry.Samples.Maui.csproj index 77798d2912d..aa5d7ec43bb 100644 --- a/src/Utilities/Belemetry/Samples/Maui/Bit.Belemetry.Samples.Maui.csproj +++ b/src/Utilities/Belemetry/Samples/Maui/Bit.Belemetry.Samples.Maui.csproj @@ -1,9 +1,9 @@  - net10.0-android;net10.0-ios;net10.0-maccatalyst - $(TargetFrameworks);net10.0-windows10.0.19041.0 - net10.0-android + net11.0-android;net11.0-ios;net11.0-maccatalyst + $(TargetFrameworks);net11.0-windows10.0.19041.0 + net11.0-android Exe true true @@ -22,9 +22,6 @@ 1.0.0 1 - - True - $(NoWarn);ClassWithoutModifierAnalyzer 15.0 @@ -47,9 +44,10 @@ - - - + + + + diff --git a/src/Utilities/Belemetry/Samples/Server/Bit.Belemetry.Samples.Server.csproj b/src/Utilities/Belemetry/Samples/Server/Bit.Belemetry.Samples.Server.csproj index 675ea12f669..52e1ea003b6 100644 --- a/src/Utilities/Belemetry/Samples/Server/Bit.Belemetry.Samples.Server.csproj +++ b/src/Utilities/Belemetry/Samples/Server/Bit.Belemetry.Samples.Server.csproj @@ -1,7 +1,7 @@  - net10.0 + net11.0 enable enable false diff --git a/src/Utilities/Belemetry/Samples/Wasm/Bit.Belemetry.Samples.Wasm.Client/Bit.Belemetry.Samples.Wasm.Client.csproj b/src/Utilities/Belemetry/Samples/Wasm/Bit.Belemetry.Samples.Wasm.Client/Bit.Belemetry.Samples.Wasm.Client.csproj index 1709a6e5d77..3989d62b73a 100644 --- a/src/Utilities/Belemetry/Samples/Wasm/Bit.Belemetry.Samples.Wasm.Client/Bit.Belemetry.Samples.Wasm.Client.csproj +++ b/src/Utilities/Belemetry/Samples/Wasm/Bit.Belemetry.Samples.Wasm.Client/Bit.Belemetry.Samples.Wasm.Client.csproj @@ -1,7 +1,8 @@  - net10.0 + net11.0 + false enable enable false @@ -11,7 +12,7 @@ - + diff --git a/src/Utilities/Belemetry/Samples/Wasm/Bit.Belemetry.Samples.Wasm/Bit.Belemetry.Samples.Wasm.csproj b/src/Utilities/Belemetry/Samples/Wasm/Bit.Belemetry.Samples.Wasm/Bit.Belemetry.Samples.Wasm.csproj index f7ea4b92f49..31282a9c316 100644 --- a/src/Utilities/Belemetry/Samples/Wasm/Bit.Belemetry.Samples.Wasm/Bit.Belemetry.Samples.Wasm.csproj +++ b/src/Utilities/Belemetry/Samples/Wasm/Bit.Belemetry.Samples.Wasm/Bit.Belemetry.Samples.Wasm.csproj @@ -1,7 +1,7 @@  - net10.0 + net11.0 enable enable false @@ -9,7 +9,7 @@ - + diff --git a/src/Utilities/Belemetry/Samples/Wasm/Bit.Belemetry.Samples.Wasm/Program.cs b/src/Utilities/Belemetry/Samples/Wasm/Bit.Belemetry.Samples.Wasm/Program.cs index a27c2b4a17a..ab825b13cd5 100644 --- a/src/Utilities/Belemetry/Samples/Wasm/Bit.Belemetry.Samples.Wasm/Program.cs +++ b/src/Utilities/Belemetry/Samples/Wasm/Bit.Belemetry.Samples.Wasm/Program.cs @@ -31,11 +31,7 @@ var app = builder.Build(); -if (app.Environment.IsDevelopment()) -{ - app.UseWebAssemblyDebugging(); -} -else +if (app.Environment.IsDevelopment() is false) { app.UseExceptionHandler("/Error", createScopeForErrors: true); app.UseHsts(); diff --git a/src/Utilities/Belemetry/Samples/Wasm/Bit.Belemetry.Samples.Wasm/Properties/launchSettings.json b/src/Utilities/Belemetry/Samples/Wasm/Bit.Belemetry.Samples.Wasm/Properties/launchSettings.json index 7a196eeaeeb..85fb9b46292 100644 --- a/src/Utilities/Belemetry/Samples/Wasm/Bit.Belemetry.Samples.Wasm/Properties/launchSettings.json +++ b/src/Utilities/Belemetry/Samples/Wasm/Bit.Belemetry.Samples.Wasm/Properties/launchSettings.json @@ -4,7 +4,6 @@ "commandName": "Project", "dotnetRunMessages": true, "launchBrowser": true, - "inspectUri": "{wsProtocol}://{url.hostname}:{url.port}/_framework/debug/ws-proxy?browser={browserInspectUri}", "applicationUrl": "https://localhost:7392;http://localhost:5392", "environmentVariables": { "ASPNETCORE_ENVIRONMENT": "Development" diff --git a/src/Utilities/Belemetry/Samples/WinForms/Bit.Belemetry.Samples.WinForms.csproj b/src/Utilities/Belemetry/Samples/WinForms/Bit.Belemetry.Samples.WinForms.csproj index d3df803216e..5350f982422 100644 --- a/src/Utilities/Belemetry/Samples/WinForms/Bit.Belemetry.Samples.WinForms.csproj +++ b/src/Utilities/Belemetry/Samples/WinForms/Bit.Belemetry.Samples.WinForms.csproj @@ -6,7 +6,7 @@ WinExe - net10.0-windows + net11.0-windows true true @@ -17,8 +17,8 @@ - - + + diff --git a/src/Utilities/Belemetry/Tests/Bit.Belemetry.Tests.E2E/Bit.Belemetry.Tests.E2E.csproj b/src/Utilities/Belemetry/Tests/Bit.Belemetry.Tests.E2E/Bit.Belemetry.Tests.E2E.csproj index b7653dff331..b2dbbfa86db 100644 --- a/src/Utilities/Belemetry/Tests/Bit.Belemetry.Tests.E2E/Bit.Belemetry.Tests.E2E.csproj +++ b/src/Utilities/Belemetry/Tests/Bit.Belemetry.Tests.E2E/Bit.Belemetry.Tests.E2E.csproj @@ -1,7 +1,7 @@  - net10.0 + net11.0 enable enable false diff --git a/src/Utilities/Belemetry/Tests/Bit.Belemetry.Tests.E2E/Infrastructure/E2EEnvironment.cs b/src/Utilities/Belemetry/Tests/Bit.Belemetry.Tests.E2E/Infrastructure/E2EEnvironment.cs index 57b97397f5e..c9943982b4f 100644 --- a/src/Utilities/Belemetry/Tests/Bit.Belemetry.Tests.E2E/Infrastructure/E2EEnvironment.cs +++ b/src/Utilities/Belemetry/Tests/Bit.Belemetry.Tests.E2E/Infrastructure/E2EEnvironment.cs @@ -7,10 +7,10 @@ public static class E2EEnvironment { /// - /// BELEMETRY_E2E_FRAMEWORK: the target framework the web harness host runs on (net10.0, net9.0 or net8.0). - /// Defaults to net10.0. The hybrid host is always net10.0-windows. + /// BELEMETRY_E2E_FRAMEWORK: the target framework the web harness host runs on (net11.0, net10.0, net9.0 or net8.0). + /// Defaults to net11.0. The hybrid host is always net11.0-windows. /// - public static string Framework { get; } = Read("BELEMETRY_E2E_FRAMEWORK") ?? "net10.0"; + public static string Framework { get; } = Read("BELEMETRY_E2E_FRAMEWORK") ?? "net11.0"; /// /// BELEMETRY_E2E_CONFIGURATION: the build configuration of the harness hosts. Defaults to the configuration diff --git a/src/Utilities/Belemetry/Tests/Bit.Belemetry.Tests.E2E/Infrastructure/RepoLayout.cs b/src/Utilities/Belemetry/Tests/Bit.Belemetry.Tests.E2E/Infrastructure/RepoLayout.cs index 1e439165b4d..6870af1743f 100644 --- a/src/Utilities/Belemetry/Tests/Bit.Belemetry.Tests.E2E/Infrastructure/RepoLayout.cs +++ b/src/Utilities/Belemetry/Tests/Bit.Belemetry.Tests.E2E/Infrastructure/RepoLayout.cs @@ -17,7 +17,7 @@ public static string WebHostAssembly(string framework, string configuration) => Path.Combine(Path.GetDirectoryName(WebHostProject())!, "bin", configuration, framework, $"{WebHostName}.dll"); public static string HybridHostExecutable(string configuration) => - Path.Combine(Path.GetDirectoryName(HybridHostProject())!, "bin", configuration, "net10.0-windows", $"{HybridHostName}.exe"); + Path.Combine(Path.GetDirectoryName(HybridHostProject())!, "bin", configuration, "net11.0-windows", $"{HybridHostName}.exe"); private static string FindUpward(string relativePath) { diff --git a/src/Utilities/Belemetry/Tests/Bit.Belemetry.Tests.E2E/publish-gate.sh b/src/Utilities/Belemetry/Tests/Bit.Belemetry.Tests.E2E/publish-gate.sh index fa0adc9485d..06fbc208c0f 100644 --- a/src/Utilities/Belemetry/Tests/Bit.Belemetry.Tests.E2E/publish-gate.sh +++ b/src/Utilities/Belemetry/Tests/Bit.Belemetry.Tests.E2E/publish-gate.sh @@ -13,8 +13,8 @@ set -euo pipefail here="$(cd "$(dirname "$0")" && pwd)" -# TargetFrameworks=net10.0 on top of -f: -f alone does not reach project references, which then still +# TargetFrameworks=net11.0 on top of -f: -f alone does not reach project references, which then still # evaluate every framework they target - and with RunAOTCompilation each of those demands its own # wasm-tools workload. exec bash "$here/../../../../publish-gate.sh" Bit.Belemetry Tests "$here/../Bit.Belemetry.Tests.Harness.Web/Bit.Belemetry.Tests.Harness.Web.csproj" \ - "$1" -f net10.0 -p:TargetFrameworks=net10.0 "${@:2}" + "$1" -f net11.0 -p:TargetFrameworks=net11.0 "${@:2}" diff --git a/src/Utilities/Belemetry/Tests/Bit.Belemetry.Tests.EntityFrameworkCore/Bit.Belemetry.Tests.EntityFrameworkCore.csproj b/src/Utilities/Belemetry/Tests/Bit.Belemetry.Tests.EntityFrameworkCore/Bit.Belemetry.Tests.EntityFrameworkCore.csproj index b2b40af1e9d..a1b1d2d9007 100644 --- a/src/Utilities/Belemetry/Tests/Bit.Belemetry.Tests.EntityFrameworkCore/Bit.Belemetry.Tests.EntityFrameworkCore.csproj +++ b/src/Utilities/Belemetry/Tests/Bit.Belemetry.Tests.EntityFrameworkCore/Bit.Belemetry.Tests.EntityFrameworkCore.csproj @@ -4,7 +4,7 @@ tags, parenting, failures and the filter, on every target framework the package ships for. --> - net10.0;net9.0;net8.0 + net11.0;net10.0;net9.0;net8.0 enable enable false @@ -21,6 +21,7 @@ + diff --git a/src/Utilities/Belemetry/Tests/Bit.Belemetry.Tests.Hangfire/Bit.Belemetry.Tests.Hangfire.csproj b/src/Utilities/Belemetry/Tests/Bit.Belemetry.Tests.Hangfire/Bit.Belemetry.Tests.Hangfire.csproj index e8121188273..67de945adf4 100644 --- a/src/Utilities/Belemetry/Tests/Bit.Belemetry.Tests.Hangfire/Bit.Belemetry.Tests.Hangfire.csproj +++ b/src/Utilities/Belemetry/Tests/Bit.Belemetry.Tests.Hangfire/Bit.Belemetry.Tests.Hangfire.csproj @@ -4,7 +4,7 @@ enqueue, failures and the filter, on every target framework the package ships for. --> - net10.0;net9.0;net8.0 + net11.0;net10.0;net9.0;net8.0 enable enable false @@ -21,6 +21,7 @@ + diff --git a/src/Utilities/Belemetry/Tests/Bit.Belemetry.Tests.Harness.Hybrid/Bit.Belemetry.Tests.Harness.Hybrid.csproj b/src/Utilities/Belemetry/Tests/Bit.Belemetry.Tests.Harness.Hybrid/Bit.Belemetry.Tests.Harness.Hybrid.csproj index 6be5f2d1d75..7161de4b32a 100644 --- a/src/Utilities/Belemetry/Tests/Bit.Belemetry.Tests.Harness.Hybrid/Bit.Belemetry.Tests.Harness.Hybrid.csproj +++ b/src/Utilities/Belemetry/Tests/Bit.Belemetry.Tests.Harness.Hybrid/Bit.Belemetry.Tests.Harness.Hybrid.csproj @@ -7,7 +7,7 @@ WinExe - net10.0-windows + net11.0-windows true true @@ -17,7 +17,7 @@ - + diff --git a/src/Utilities/Belemetry/Tests/Bit.Belemetry.Tests.Harness.Web.Client/Bit.Belemetry.Tests.Harness.Web.Client.csproj b/src/Utilities/Belemetry/Tests/Bit.Belemetry.Tests.Harness.Web.Client/Bit.Belemetry.Tests.Harness.Web.Client.csproj index d2dbd929450..2596e18d812 100644 --- a/src/Utilities/Belemetry/Tests/Bit.Belemetry.Tests.Harness.Web.Client/Bit.Belemetry.Tests.Harness.Web.Client.csproj +++ b/src/Utilities/Belemetry/Tests/Bit.Belemetry.Tests.Harness.Web.Client/Bit.Belemetry.Tests.Harness.Web.Client.csproj @@ -5,7 +5,7 @@ Bit.Belemetry.Tests.Harness. --> - net10.0;net9.0;net8.0 + net11.0;net10.0;net9.0;net8.0 enable enable false @@ -18,6 +18,7 @@ + diff --git a/src/Utilities/Belemetry/Tests/Bit.Belemetry.Tests.Harness.Web/Bit.Belemetry.Tests.Harness.Web.csproj b/src/Utilities/Belemetry/Tests/Bit.Belemetry.Tests.Harness.Web/Bit.Belemetry.Tests.Harness.Web.csproj index 2ce29236f18..d65a8e00b89 100644 --- a/src/Utilities/Belemetry/Tests/Bit.Belemetry.Tests.Harness.Web/Bit.Belemetry.Tests.Harness.Web.csproj +++ b/src/Utilities/Belemetry/Tests/Bit.Belemetry.Tests.Harness.Web/Bit.Belemetry.Tests.Harness.Web.csproj @@ -7,7 +7,7 @@ because the library is: the suites can run the harness on every runtime Bit.Belemetry ships for. --> - net10.0;net9.0;net8.0 + net11.0;net10.0;net9.0;net8.0 enable enable false @@ -18,6 +18,7 @@ + diff --git a/src/Utilities/Belemetry/Tests/Bit.Belemetry.Tests.Harness.Web/Properties/launchSettings.json b/src/Utilities/Belemetry/Tests/Bit.Belemetry.Tests.Harness.Web/Properties/launchSettings.json index 18819c40db0..15fbafbc067 100644 --- a/src/Utilities/Belemetry/Tests/Bit.Belemetry.Tests.Harness.Web/Properties/launchSettings.json +++ b/src/Utilities/Belemetry/Tests/Bit.Belemetry.Tests.Harness.Web/Properties/launchSettings.json @@ -25,7 +25,6 @@ "commandName": "Project", "commandLineArgs": "--BelemetryHarness:Mode=wasm", "launchBrowser": true, - "inspectUri": "{wsProtocol}://{url.hostname}:{url.port}/_framework/debug/ws-proxy?browser={browserInspectUri}", "applicationUrl": "http://localhost:5390", "environmentVariables": { "ASPNETCORE_ENVIRONMENT": "Development" } }, diff --git a/src/Utilities/Belemetry/Tests/Bit.Belemetry.Tests.Harness/Bit.Belemetry.Tests.Harness.csproj b/src/Utilities/Belemetry/Tests/Bit.Belemetry.Tests.Harness/Bit.Belemetry.Tests.Harness.csproj index 77b0532d059..c776f9d8900 100644 --- a/src/Utilities/Belemetry/Tests/Bit.Belemetry.Tests.Harness/Bit.Belemetry.Tests.Harness.csproj +++ b/src/Utilities/Belemetry/Tests/Bit.Belemetry.Tests.Harness/Bit.Belemetry.Tests.Harness.csproj @@ -6,7 +6,7 @@ the same assertions against every host and attribute a difference to the host. --> - net10.0;net9.0;net8.0 + net11.0;net10.0;net9.0;net8.0 enable enable false diff --git a/src/Utilities/Belemetry/Tests/Bit.Belemetry.Tests.Hosting/AssemblySetup.cs b/src/Utilities/Belemetry/Tests/Bit.Belemetry.Tests.Hosting/AssemblySetup.cs index cf0c0f34f83..fdbc9c11a54 100644 --- a/src/Utilities/Belemetry/Tests/Bit.Belemetry.Tests.Hosting/AssemblySetup.cs +++ b/src/Utilities/Belemetry/Tests/Bit.Belemetry.Tests.Hosting/AssemblySetup.cs @@ -13,7 +13,7 @@ public static class AssemblySetup public static async Task CleanupAsync() { await HarnessHostFactory.DisposeSharedAsync(); -#if NET10_0_OR_GREATER +#if NET11_0_OR_GREATER await SampleHostFactories.DisposeAsync(); #endif } diff --git a/src/Utilities/Belemetry/Tests/Bit.Belemetry.Tests.Hosting/Bit.Belemetry.Tests.Hosting.csproj b/src/Utilities/Belemetry/Tests/Bit.Belemetry.Tests.Hosting/Bit.Belemetry.Tests.Hosting.csproj index 31b3b76dfbc..68af677730c 100644 --- a/src/Utilities/Belemetry/Tests/Bit.Belemetry.Tests.Hosting/Bit.Belemetry.Tests.Hosting.csproj +++ b/src/Utilities/Belemetry/Tests/Bit.Belemetry.Tests.Hosting/Bit.Belemetry.Tests.Hosting.csproj @@ -6,7 +6,7 @@ every target framework in the regular CI job. --> - net10.0;net9.0;net8.0 + net11.0;net10.0;net9.0;net8.0 enable enable false @@ -22,14 +22,15 @@ + - - + + diff --git a/src/Utilities/Belemetry/Tests/Bit.Belemetry.Tests.Hosting/SamplesHostingTests.cs b/src/Utilities/Belemetry/Tests/Bit.Belemetry.Tests.Hosting/SamplesHostingTests.cs index 3f7924ba935..805c70ad960 100644 --- a/src/Utilities/Belemetry/Tests/Bit.Belemetry.Tests.Hosting/SamplesHostingTests.cs +++ b/src/Utilities/Belemetry/Tests/Bit.Belemetry.Tests.Hosting/SamplesHostingTests.cs @@ -1,4 +1,4 @@ -#if NET10_0_OR_GREATER +#if NET11_0_OR_GREATER using System.Net; using Bit.Belemetry.Tests.Hosting.Infrastructure; using Microsoft.AspNetCore.Hosting; diff --git a/src/Utilities/Belemetry/Tests/Bit.Belemetry.Tests.Mcp/Bit.Belemetry.Tests.Mcp.csproj b/src/Utilities/Belemetry/Tests/Bit.Belemetry.Tests.Mcp/Bit.Belemetry.Tests.Mcp.csproj index b816fa1eca2..c36bb6bdf94 100644 --- a/src/Utilities/Belemetry/Tests/Bit.Belemetry.Tests.Mcp/Bit.Belemetry.Tests.Mcp.csproj +++ b/src/Utilities/Belemetry/Tests/Bit.Belemetry.Tests.Mcp/Bit.Belemetry.Tests.Mcp.csproj @@ -1,9 +1,9 @@  + only exists on net11.0, while the library's own tests multi-target back to net8.0. --> - net10.0 + net11.0 Exe @@ -20,7 +20,7 @@ - + diff --git a/src/Utilities/Belemetry/Tests/Bit.Belemetry.Tests/Bit.Belemetry.Tests.csproj b/src/Utilities/Belemetry/Tests/Bit.Belemetry.Tests/Bit.Belemetry.Tests.csproj index e4d89c28155..7727dde64a3 100644 --- a/src/Utilities/Belemetry/Tests/Bit.Belemetry.Tests/Bit.Belemetry.Tests.csproj +++ b/src/Utilities/Belemetry/Tests/Bit.Belemetry.Tests/Bit.Belemetry.Tests.csproj @@ -1,7 +1,7 @@  - net10.0;net9.0;net8.0 + net11.0;net10.0;net9.0;net8.0 enable enable false @@ -24,7 +24,9 @@ + + diff --git a/src/Utilities/Belemetry/Tests/Bit.Belemetry.Tests/Pipeline/BelemetryActivityCollectorTests.cs b/src/Utilities/Belemetry/Tests/Bit.Belemetry.Tests/Pipeline/BelemetryActivityCollectorTests.cs index c6b0afacb08..eeb810dd513 100644 --- a/src/Utilities/Belemetry/Tests/Bit.Belemetry.Tests/Pipeline/BelemetryActivityCollectorTests.cs +++ b/src/Utilities/Belemetry/Tests/Bit.Belemetry.Tests/Pipeline/BelemetryActivityCollectorTests.cs @@ -33,6 +33,7 @@ public async Task ConvertsAStoppedActivity() string traceId, spanId; DateTime startUtc; + int flags; using (var activity = source.StartActivity("GET /orders", ActivityKind.Client, parentContext: default, tags: null, links: links)!) { Assert.IsNotNull(activity); @@ -46,6 +47,7 @@ public async Task ConvertsAStoppedActivity() activity.AddEvent(new ActivityEvent("retry", DateTimeOffset.UtcNow, new ActivityTagsCollection { ["attempt"] = 2 })); activity.SetStatus(ActivityStatusCode.Error, "unavailable"); traceId = activity.TraceId.ToHexString(); + flags = (int)activity.ActivityTraceFlags; spanId = activity.SpanId.ToHexString(); startUtc = activity.StartTimeUtc; } @@ -57,7 +59,7 @@ public async Task ConvertsAStoppedActivity() Assert.AreEqual(spanId, span.SpanId); Assert.IsNull(span.ParentSpanId); Assert.AreEqual("vendor=1", span.TraceState); - Assert.AreEqual(1, span.Flags); + Assert.AreEqual(flags, span.Flags); Assert.AreEqual("GET /orders", span.Name); Assert.AreEqual(BelemetrySpanKind.Client, span.Kind); Assert.AreEqual(BelemetryTime.ToUnixNano(startUtc), span.StartTimeUnixNano); diff --git a/src/Utilities/Belemetry/Tests/Bit.Belemetry.Tests/Pipeline/BelemetryLoggerTests.cs b/src/Utilities/Belemetry/Tests/Bit.Belemetry.Tests/Pipeline/BelemetryLoggerTests.cs index 859aefa1993..a01386262b3 100644 --- a/src/Utilities/Belemetry/Tests/Bit.Belemetry.Tests/Pipeline/BelemetryLoggerTests.cs +++ b/src/Utilities/Belemetry/Tests/Bit.Belemetry.Tests/Pipeline/BelemetryLoggerTests.cs @@ -207,11 +207,13 @@ public async Task TraceContext_ComesFromActivityCurrent() var logger = host.StartLogging().CreateLogger("MyApp"); string traceId, spanId; + int flags; using (var activity = new Activity("op").SetIdFormat(ActivityIdFormat.W3C)) { activity.ActivityTraceFlags = ActivityTraceFlags.Recorded; activity.Start(); traceId = activity.TraceId.ToHexString(); + flags = (int)activity.ActivityTraceFlags; spanId = activity.SpanId.ToHexString(); logger.LogInformation("inside"); } @@ -221,7 +223,7 @@ public async Task TraceContext_ComesFromActivityCurrent() var logs = host.Memory.Logs.ToList(); Assert.AreEqual(traceId, logs[0].TraceId); Assert.AreEqual(spanId, logs[0].SpanId); - Assert.AreEqual(1, logs[0].Flags); + Assert.AreEqual(flags, logs[0].Flags); Assert.IsNull(logs[1].TraceId); Assert.IsNull(logs[1].SpanId); } diff --git a/src/Utilities/BevTools/Bit.BevTools.Loader/Bit.BevTools.Loader.csproj b/src/Utilities/BevTools/Bit.BevTools.Loader/Bit.BevTools.Loader.csproj index d93e1574159..cb89200f48c 100644 --- a/src/Utilities/BevTools/Bit.BevTools.Loader/Bit.BevTools.Loader.csproj +++ b/src/Utilities/BevTools/Bit.BevTools.Loader/Bit.BevTools.Loader.csproj @@ -3,7 +3,7 @@ - net10.0;net9.0;net8.0 + net11.0;net10.0;net9.0;net8.0 Bit.BevTools enable Lets a Blazor app load bit BevTools on demand: startup hooks (component activator, HTTP pipeline, service collection, framework diagnostics) that cost next to nothing until BevTools is attached, a service that lazy loads Bit.BevTools.wasm, attaches it to the running app and opens it, and a component that renders its panel. @@ -22,16 +22,20 @@ + + + + diff --git a/src/Utilities/BevTools/Bit.BevTools.Server/Bit.BevTools.Server.csproj b/src/Utilities/BevTools/Bit.BevTools.Server/Bit.BevTools.Server.csproj index 8693b308a48..a1f51b9a343 100644 --- a/src/Utilities/BevTools/Bit.BevTools.Server/Bit.BevTools.Server.csproj +++ b/src/Utilities/BevTools/Bit.BevTools.Server/Bit.BevTools.Server.csproj @@ -3,7 +3,7 @@ - net10.0;net9.0;net8.0 + net11.0;net10.0;net9.0;net8.0 Bit.BevTools enable diff --git a/src/Utilities/BevTools/Bit.BevTools/Bit.BevTools.csproj b/src/Utilities/BevTools/Bit.BevTools/Bit.BevTools.csproj index f578f88812a..a9782a16307 100644 --- a/src/Utilities/BevTools/Bit.BevTools/Bit.BevTools.csproj +++ b/src/Utilities/BevTools/Bit.BevTools/Bit.BevTools.csproj @@ -3,7 +3,7 @@ - net10.0;net9.0;net8.0 + net11.0;net10.0;net9.0;net8.0 Bit.BevTools enable Runtime instrumentation and in-app developer tools for Blazor: component tree, render profiler, event timeline, state, network, JS interop, errors, DI inspector and diagnostics, plus the extension API (panels, state providers, diagnostic rules, commands, timeline events) libraries use to integrate with it. @@ -30,12 +30,15 @@ + + + diff --git a/src/Utilities/BevTools/Demo/Client/Bit.BevTools.Demo.Client.csproj b/src/Utilities/BevTools/Demo/Client/Bit.BevTools.Demo.Client.csproj index a45e2a4a619..998ace999c8 100644 --- a/src/Utilities/BevTools/Demo/Client/Bit.BevTools.Demo.Client.csproj +++ b/src/Utilities/BevTools/Demo/Client/Bit.BevTools.Demo.Client.csproj @@ -1,7 +1,8 @@  - net10.0 + net11.0 + false enable enable true @@ -17,7 +18,7 @@ - + diff --git a/src/Utilities/BevTools/Demo/Server/Bit.BevTools.Demo.Server.csproj b/src/Utilities/BevTools/Demo/Server/Bit.BevTools.Demo.Server.csproj index ad06ba6b8bc..19619641524 100644 --- a/src/Utilities/BevTools/Demo/Server/Bit.BevTools.Demo.Server.csproj +++ b/src/Utilities/BevTools/Demo/Server/Bit.BevTools.Demo.Server.csproj @@ -1,7 +1,7 @@  - net10.0 + net11.0 enable enable true @@ -10,7 +10,7 @@ - + diff --git a/src/Utilities/BevTools/Demo/Server/Program.cs b/src/Utilities/BevTools/Demo/Server/Program.cs index 08cf148e464..4329c55104b 100644 --- a/src/Utilities/BevTools/Demo/Server/Program.cs +++ b/src/Utilities/BevTools/Demo/Server/Program.cs @@ -31,11 +31,7 @@ var app = builder.Build(); -if (app.Environment.IsDevelopment()) -{ - app.UseWebAssemblyDebugging(); -} -else +if (app.Environment.IsDevelopment() is false) { app.UseExceptionHandler("/Error", createScopeForErrors: true); app.UseHsts(); diff --git a/src/Utilities/BevTools/Demo/Server/Properties/launchSettings.json b/src/Utilities/BevTools/Demo/Server/Properties/launchSettings.json index 00a6745ccfb..cd0db99418c 100644 --- a/src/Utilities/BevTools/Demo/Server/Properties/launchSettings.json +++ b/src/Utilities/BevTools/Demo/Server/Properties/launchSettings.json @@ -6,7 +6,6 @@ "dotnetRunMessages": true, "launchBrowser": true, "launchUrl": "problems", - "inspectUri": "{wsProtocol}://{url.hostname}:{url.port}/_framework/debug/ws-proxy?browser={browserInspectUri}", "applicationUrl": "https://localhost:5091;http://localhost:5090", "environmentVariables": { "ASPNETCORE_ENVIRONMENT": "Development" diff --git a/src/Utilities/BevTools/Tests/Bit.BevTools.Benchmarks/Bit.BevTools.Benchmarks.csproj b/src/Utilities/BevTools/Tests/Bit.BevTools.Benchmarks/Bit.BevTools.Benchmarks.csproj index beca76968b7..f35d78f1e8e 100644 --- a/src/Utilities/BevTools/Tests/Bit.BevTools.Benchmarks/Bit.BevTools.Benchmarks.csproj +++ b/src/Utilities/BevTools/Tests/Bit.BevTools.Benchmarks/Bit.BevTools.Benchmarks.csproj @@ -2,9 +2,9 @@ Exe - - net10.0 + net11.0 disable enable false diff --git a/src/Utilities/BevTools/Tests/Bit.BevTools.Tests/Bit.BevTools.Tests.csproj b/src/Utilities/BevTools/Tests/Bit.BevTools.Tests/Bit.BevTools.Tests.csproj index 6f569892bb2..391fbcc4a76 100644 --- a/src/Utilities/BevTools/Tests/Bit.BevTools.Tests/Bit.BevTools.Tests.csproj +++ b/src/Utilities/BevTools/Tests/Bit.BevTools.Tests/Bit.BevTools.Tests.csproj @@ -1,7 +1,7 @@  - net10.0;net9.0;net8.0 + net11.0;net10.0;net9.0;net8.0 enable enable preview diff --git a/src/Utilities/BevTools/Tests/Bit.BevTools.Tests/PanelInteractionTests.cs b/src/Utilities/BevTools/Tests/Bit.BevTools.Tests/PanelInteractionTests.cs index 59417737f82..ec8470f618e 100644 --- a/src/Utilities/BevTools/Tests/Bit.BevTools.Tests/PanelInteractionTests.cs +++ b/src/Utilities/BevTools/Tests/Bit.BevTools.Tests/PanelInteractionTests.cs @@ -38,7 +38,7 @@ private IRenderedComponent RenderPanel(string? prefs = null) } [TestMethod] - public void Every_built_in_panel_can_be_opened_from_its_tab() + public async Task Every_built_in_panel_can_be_opened_from_its_tab() { var cut = RenderPanel(); var tabs = cut.FindAll(".bev-tab").Select(t => t.TextContent.Trim().Split('\n')[0].Trim()).ToList(); @@ -46,7 +46,7 @@ public void Every_built_in_panel_can_be_opened_from_its_tab() foreach (var tab in tabs) { - cut.FindAll(".bev-tab").First(t => t.TextContent.Trim().StartsWith(tab, StringComparison.Ordinal)).Click(); + await cut.InvokeAsync(() => cut.FindAll(".bev-tab").First(t => t.TextContent.Trim().StartsWith(tab, StringComparison.Ordinal)).Click()); Assert.IsNotEmpty(cut.FindAll(".bev-body")); Assert.DoesNotContain(e => e.TextContent.Contains("Unknown panel", StringComparison.Ordinal), cut.FindAll(".bev-empty")); } diff --git a/src/Utilities/Bink/Bit.Bink/Bit.Bink.csproj b/src/Utilities/Bink/Bit.Bink/Bit.Bink.csproj index e6d79d7d474..9db89d6e2e8 100644 --- a/src/Utilities/Bink/Bit.Bink/Bit.Bink.csproj +++ b/src/Utilities/Bink/Bit.Bink/Bit.Bink.csproj @@ -3,7 +3,7 @@ - net10.0;net9.0;net8.0 + net11.0;net10.0;net9.0;net8.0 Bit.Bink enable true @@ -24,6 +24,7 @@ + diff --git a/src/Utilities/Bink/Demo/Client/Bit.Bink.Demo.Client.csproj b/src/Utilities/Bink/Demo/Client/Bit.Bink.Demo.Client.csproj index e8674317f35..639c7c89aab 100644 --- a/src/Utilities/Bink/Demo/Client/Bit.Bink.Demo.Client.csproj +++ b/src/Utilities/Bink/Demo/Client/Bit.Bink.Demo.Client.csproj @@ -1,7 +1,8 @@  - net10.0 + net11.0 + false enable enable true @@ -14,7 +15,7 @@ - + diff --git a/src/Utilities/Bink/Demo/Server/Bit.Bink.Demo.Server.csproj b/src/Utilities/Bink/Demo/Server/Bit.Bink.Demo.Server.csproj index 9272b22b844..66ca305e16c 100644 --- a/src/Utilities/Bink/Demo/Server/Bit.Bink.Demo.Server.csproj +++ b/src/Utilities/Bink/Demo/Server/Bit.Bink.Demo.Server.csproj @@ -1,7 +1,7 @@  - net10.0 + net11.0 enable enable true @@ -10,7 +10,7 @@ - + diff --git a/src/Utilities/Bink/Demo/Server/Program.cs b/src/Utilities/Bink/Demo/Server/Program.cs index 8740cd91932..79cdc29f9b1 100644 --- a/src/Utilities/Bink/Demo/Server/Program.cs +++ b/src/Utilities/Bink/Demo/Server/Program.cs @@ -67,11 +67,7 @@ var app = builder.Build(); -if (app.Environment.IsDevelopment()) -{ - app.UseWebAssemblyDebugging(); -} -else +if (app.Environment.IsDevelopment() is false) { app.UseExceptionHandler("/Error", createScopeForErrors: true); app.UseHsts(); diff --git a/src/Utilities/Bink/Demo/Server/Properties/launchSettings.json b/src/Utilities/Bink/Demo/Server/Properties/launchSettings.json index 4790d7f9b87..c59046ff39e 100644 --- a/src/Utilities/Bink/Demo/Server/Properties/launchSettings.json +++ b/src/Utilities/Bink/Demo/Server/Properties/launchSettings.json @@ -5,7 +5,6 @@ "commandName": "Project", "dotnetRunMessages": true, "launchBrowser": true, - "inspectUri": "{wsProtocol}://{url.hostname}:{url.port}/_framework/debug/ws-proxy?browser={browserInspectUri}", "applicationUrl": "https://localhost:5209;http://localhost:5208", "environmentVariables": { "ASPNETCORE_ENVIRONMENT": "Development" diff --git a/src/Utilities/Bink/Tests/Bit.Bink.Benchmarks/Bit.Bink.Benchmarks.csproj b/src/Utilities/Bink/Tests/Bit.Bink.Benchmarks/Bit.Bink.Benchmarks.csproj index 4c239bf5eb2..fc41bfe3858 100644 --- a/src/Utilities/Bink/Tests/Bit.Bink.Benchmarks/Bit.Bink.Benchmarks.csproj +++ b/src/Utilities/Bink/Tests/Bit.Bink.Benchmarks/Bit.Bink.Benchmarks.csproj @@ -2,9 +2,9 @@ Exe - - net10.0 + net11.0 enable enable false diff --git a/src/Utilities/Bink/Tests/Bit.Bink.Tests.E2E/Bit.Bink.Tests.E2E.csproj b/src/Utilities/Bink/Tests/Bit.Bink.Tests.E2E/Bit.Bink.Tests.E2E.csproj index 1791eeb6a7f..7bdce8c4d4f 100644 --- a/src/Utilities/Bink/Tests/Bit.Bink.Tests.E2E/Bit.Bink.Tests.E2E.csproj +++ b/src/Utilities/Bink/Tests/Bit.Bink.Tests.E2E/Bit.Bink.Tests.E2E.csproj @@ -1,7 +1,7 @@  - net10.0 + net11.0 enable enable false diff --git a/src/Utilities/Bink/Tests/Bit.Bink.Tests.E2E/Infrastructure/PlaywrightSession.cs b/src/Utilities/Bink/Tests/Bit.Bink.Tests.E2E/Infrastructure/PlaywrightSession.cs index 72742fa533d..7779ab490e5 100644 --- a/src/Utilities/Bink/Tests/Bit.Bink.Tests.E2E/Infrastructure/PlaywrightSession.cs +++ b/src/Utilities/Bink/Tests/Bit.Bink.Tests.E2E/Infrastructure/PlaywrightSession.cs @@ -51,7 +51,7 @@ private static async Task StartAsync() if (browser is null) { playwright.Dispose(); - return Session.Fail("no Chromium-based browser could be launched. Run 'pwsh bin//net10.0/playwright.ps1 install chromium', or install Chrome or Edge."); + return Session.Fail("no Chromium-based browser could be launched. Run 'pwsh bin//net11.0/playwright.ps1 install chromium', or install Chrome or Edge."); } try diff --git a/src/Utilities/Bink/Tests/Bit.Bink.Tests.E2E/Infrastructure/RepoLayout.cs b/src/Utilities/Bink/Tests/Bit.Bink.Tests.E2E/Infrastructure/RepoLayout.cs index 7790da32640..26dbad96cbf 100644 --- a/src/Utilities/Bink/Tests/Bit.Bink.Tests.E2E/Infrastructure/RepoLayout.cs +++ b/src/Utilities/Bink/Tests/Bit.Bink.Tests.E2E/Infrastructure/RepoLayout.cs @@ -11,7 +11,7 @@ public static class RepoLayout public static string DemoServerProject() => FindUpward(Path.Combine("Demo", "Server", $"{DemoServerName}.csproj")); public static string DemoServerAssembly(string configuration) => - Path.Combine(Path.GetDirectoryName(DemoServerProject())!, "bin", configuration, "net10.0", $"{DemoServerName}.dll"); + Path.Combine(Path.GetDirectoryName(DemoServerProject())!, "bin", configuration, "net11.0", $"{DemoServerName}.dll"); private static string FindUpward(string relativePath) { diff --git a/src/Utilities/Bink/Tests/Bit.Bink.Tests.Mcp/Bit.Bink.Tests.Mcp.csproj b/src/Utilities/Bink/Tests/Bit.Bink.Tests.Mcp/Bit.Bink.Tests.Mcp.csproj index 45f604141a2..b82ecc4c035 100644 --- a/src/Utilities/Bink/Tests/Bit.Bink.Tests.Mcp/Bit.Bink.Tests.Mcp.csproj +++ b/src/Utilities/Bink/Tests/Bit.Bink.Tests.Mcp/Bit.Bink.Tests.Mcp.csproj @@ -1,9 +1,9 @@  + exists on net11.0, while the library's own tests multi-target back to net8.0. --> - net10.0 + net11.0 Exe @@ -20,7 +20,7 @@ - + diff --git a/src/Utilities/Bink/Tests/Bit.Bink.Tests/Bit.Bink.Tests.csproj b/src/Utilities/Bink/Tests/Bit.Bink.Tests/Bit.Bink.Tests.csproj index 1126890f975..c82d18e1082 100644 --- a/src/Utilities/Bink/Tests/Bit.Bink.Tests/Bit.Bink.Tests.csproj +++ b/src/Utilities/Bink/Tests/Bit.Bink.Tests/Bit.Bink.Tests.csproj @@ -1,7 +1,7 @@  - net10.0;net9.0;net8.0 + net11.0;net10.0;net9.0;net8.0 enable enable false diff --git a/src/Utilities/BlazeDb/Bit.BlazeDb.EntityFrameworkCore/Bit.BlazeDb.EntityFrameworkCore.csproj b/src/Utilities/BlazeDb/Bit.BlazeDb.EntityFrameworkCore/Bit.BlazeDb.EntityFrameworkCore.csproj index d88198e8daa..46a5cc291fa 100644 --- a/src/Utilities/BlazeDb/Bit.BlazeDb.EntityFrameworkCore/Bit.BlazeDb.EntityFrameworkCore.csproj +++ b/src/Utilities/BlazeDb/Bit.BlazeDb.EntityFrameworkCore/Bit.BlazeDb.EntityFrameworkCore.csproj @@ -3,7 +3,7 @@ - net10.0;net9.0;net8.0 + net11.0;net10.0;net9.0;net8.0 Bit.BlazeDb.EntityFrameworkCore enable @@ -20,6 +20,7 @@ + diff --git a/src/Utilities/BlazeDb/Bit.BlazeDb.Generators/Bit.BlazeDb.Generators.csproj b/src/Utilities/BlazeDb/Bit.BlazeDb.Generators/Bit.BlazeDb.Generators.csproj index 25f3d7386bd..02faba2234c 100644 --- a/src/Utilities/BlazeDb/Bit.BlazeDb.Generators/Bit.BlazeDb.Generators.csproj +++ b/src/Utilities/BlazeDb/Bit.BlazeDb.Generators/Bit.BlazeDb.Generators.csproj @@ -5,7 +5,7 @@ netstandard2.0 - + - net10.0 + net11.0 enable enable preview @@ -20,7 +20,7 @@ - + diff --git a/src/Utilities/BlazeDb/Tests/Bit.BlazeDb.Tests.E2E/Bit.BlazeDb.Tests.E2E.csproj b/src/Utilities/BlazeDb/Tests/Bit.BlazeDb.Tests.E2E/Bit.BlazeDb.Tests.E2E.csproj index 153a3e3a355..7dc6b323a15 100644 --- a/src/Utilities/BlazeDb/Tests/Bit.BlazeDb.Tests.E2E/Bit.BlazeDb.Tests.E2E.csproj +++ b/src/Utilities/BlazeDb/Tests/Bit.BlazeDb.Tests.E2E/Bit.BlazeDb.Tests.E2E.csproj @@ -1,7 +1,7 @@  - net10.0 + net11.0 enable enable preview diff --git a/src/Utilities/BlazeDb/Tests/Bit.BlazeDb.Tests.E2E/Infrastructure/PlaywrightSession.cs b/src/Utilities/BlazeDb/Tests/Bit.BlazeDb.Tests.E2E/Infrastructure/PlaywrightSession.cs index c403c57418d..b3f8e28023b 100644 --- a/src/Utilities/BlazeDb/Tests/Bit.BlazeDb.Tests.E2E/Infrastructure/PlaywrightSession.cs +++ b/src/Utilities/BlazeDb/Tests/Bit.BlazeDb.Tests.E2E/Infrastructure/PlaywrightSession.cs @@ -51,7 +51,7 @@ private static async Task StartAsync() if (browser is null) { playwright.Dispose(); - return Session.Fail("no Chromium-based browser could be launched. Run 'pwsh bin//net10.0/playwright.ps1 install chromium', or install Chrome or Edge."); + return Session.Fail("no Chromium-based browser could be launched. Run 'pwsh bin//net11.0/playwright.ps1 install chromium', or install Chrome or Edge."); } try diff --git a/src/Utilities/BlazeDb/Tests/Bit.BlazeDb.Tests.E2E/Infrastructure/RepoLayout.cs b/src/Utilities/BlazeDb/Tests/Bit.BlazeDb.Tests.E2E/Infrastructure/RepoLayout.cs index 1124efb5d79..5f75bb79697 100644 --- a/src/Utilities/BlazeDb/Tests/Bit.BlazeDb.Tests.E2E/Infrastructure/RepoLayout.cs +++ b/src/Utilities/BlazeDb/Tests/Bit.BlazeDb.Tests.E2E/Infrastructure/RepoLayout.cs @@ -11,7 +11,7 @@ public static class RepoLayout public static string DemoServerProject() => FindUpward(Path.Combine("Demo", "Server", $"{DemoServerName}.csproj")); public static string DemoServerAssembly(string configuration) => - Path.Combine(Path.GetDirectoryName(DemoServerProject())!, "bin", configuration, "net10.0", $"{DemoServerName}.dll"); + Path.Combine(Path.GetDirectoryName(DemoServerProject())!, "bin", configuration, "net11.0", $"{DemoServerName}.dll"); private static string FindUpward(string relativePath) { diff --git a/src/Utilities/BlazeDb/Tests/Bit.BlazeDb.Tests.Mcp/Bit.BlazeDb.Tests.Mcp.csproj b/src/Utilities/BlazeDb/Tests/Bit.BlazeDb.Tests.Mcp/Bit.BlazeDb.Tests.Mcp.csproj index 564e7caca20..158e888ae57 100644 --- a/src/Utilities/BlazeDb/Tests/Bit.BlazeDb.Tests.Mcp/Bit.BlazeDb.Tests.Mcp.csproj +++ b/src/Utilities/BlazeDb/Tests/Bit.BlazeDb.Tests.Mcp/Bit.BlazeDb.Tests.Mcp.csproj @@ -1,9 +1,9 @@  + exists on net11.0, while the library's own tests multi-target back to net8.0. --> - net10.0 + net11.0 Exe @@ -21,7 +21,7 @@ - + diff --git a/src/Utilities/BlazeDb/Tests/Bit.BlazeDb.Tests/Bit.BlazeDb.Tests.csproj b/src/Utilities/BlazeDb/Tests/Bit.BlazeDb.Tests/Bit.BlazeDb.Tests.csproj index d27c0fb70dd..bae1d4ca984 100644 --- a/src/Utilities/BlazeDb/Tests/Bit.BlazeDb.Tests/Bit.BlazeDb.Tests.csproj +++ b/src/Utilities/BlazeDb/Tests/Bit.BlazeDb.Tests/Bit.BlazeDb.Tests.csproj @@ -1,7 +1,7 @@  - net10.0;net9.0;net8.0 + net11.0;net10.0;net9.0;net8.0 enable enable preview diff --git a/src/Utilities/Blex/Bit.Blex.Generators/Bit.Blex.Generators.csproj b/src/Utilities/Blex/Bit.Blex.Generators/Bit.Blex.Generators.csproj index e5b1bf4103f..2b05eae6c04 100644 --- a/src/Utilities/Blex/Bit.Blex.Generators/Bit.Blex.Generators.csproj +++ b/src/Utilities/Blex/Bit.Blex.Generators/Bit.Blex.Generators.csproj @@ -5,7 +5,7 @@ netstandard2.0 - + diff --git a/src/Utilities/Blex/Demo/Server/Program.cs b/src/Utilities/Blex/Demo/Server/Program.cs index c59dfa91226..b6a9b7d6401 100644 --- a/src/Utilities/Blex/Demo/Server/Program.cs +++ b/src/Utilities/Blex/Demo/Server/Program.cs @@ -68,11 +68,7 @@ var app = builder.Build(); -if (app.Environment.IsDevelopment()) -{ - app.UseWebAssemblyDebugging(); -} -else +if (app.Environment.IsDevelopment() is false) { app.UseExceptionHandler("/Error", createScopeForErrors: true); app.UseHsts(); diff --git a/src/Utilities/Blex/Demo/Server/Properties/launchSettings.json b/src/Utilities/Blex/Demo/Server/Properties/launchSettings.json index 6c5634e4ad6..a59e9686f08 100644 --- a/src/Utilities/Blex/Demo/Server/Properties/launchSettings.json +++ b/src/Utilities/Blex/Demo/Server/Properties/launchSettings.json @@ -5,7 +5,6 @@ "commandName": "Project", "dotnetRunMessages": true, "launchBrowser": true, - "inspectUri": "{wsProtocol}://{url.hostname}:{url.port}/_framework/debug/ws-proxy?browser={browserInspectUri}", "applicationUrl": "https://localhost:7280;http://localhost:5280", "environmentVariables": { "ASPNETCORE_ENVIRONMENT": "Development" diff --git a/src/Utilities/Blex/Samples/Bit.Blex.Samples.Wasm/Bit.Blex.Samples.Wasm.csproj b/src/Utilities/Blex/Samples/Bit.Blex.Samples.Wasm/Bit.Blex.Samples.Wasm.csproj index d3cb59d68d6..e83a65c71ce 100644 --- a/src/Utilities/Blex/Samples/Bit.Blex.Samples.Wasm/Bit.Blex.Samples.Wasm.csproj +++ b/src/Utilities/Blex/Samples/Bit.Blex.Samples.Wasm/Bit.Blex.Samples.Wasm.csproj @@ -1,14 +1,15 @@  - net10.0 + net11.0 + false enable enable - - + + diff --git a/src/Utilities/Blex/Samples/Bit.Blex.Samples.Wasm/Properties/launchSettings.json b/src/Utilities/Blex/Samples/Bit.Blex.Samples.Wasm/Properties/launchSettings.json index 8cbe3121156..03e68eef9f6 100644 --- a/src/Utilities/Blex/Samples/Bit.Blex.Samples.Wasm/Properties/launchSettings.json +++ b/src/Utilities/Blex/Samples/Bit.Blex.Samples.Wasm/Properties/launchSettings.json @@ -5,7 +5,6 @@ "commandName": "Project", "dotnetRunMessages": true, "launchBrowser": true, - "inspectUri": "{wsProtocol}://{url.hostname}:{url.port}/_framework/debug/ws-proxy?browser={browserInspectUri}", "applicationUrl": "https://localhost:7215;http://localhost:5263", "environmentVariables": { "ASPNETCORE_ENVIRONMENT": "Development" diff --git a/src/Utilities/Blex/Tests/Bit.Blex.Benchmarks/Bit.Blex.Benchmarks.csproj b/src/Utilities/Blex/Tests/Bit.Blex.Benchmarks/Bit.Blex.Benchmarks.csproj index ca8b49f0561..788a5ce4255 100644 --- a/src/Utilities/Blex/Tests/Bit.Blex.Benchmarks/Bit.Blex.Benchmarks.csproj +++ b/src/Utilities/Blex/Tests/Bit.Blex.Benchmarks/Bit.Blex.Benchmarks.csproj @@ -2,9 +2,9 @@ Exe - - net10.0 + net11.0 enable enable false diff --git a/src/Utilities/Blex/Tests/Bit.Blex.Tests.E2E/Bit.Blex.Tests.E2E.csproj b/src/Utilities/Blex/Tests/Bit.Blex.Tests.E2E/Bit.Blex.Tests.E2E.csproj index 744c7c0b7a5..a5f73f6d541 100644 --- a/src/Utilities/Blex/Tests/Bit.Blex.Tests.E2E/Bit.Blex.Tests.E2E.csproj +++ b/src/Utilities/Blex/Tests/Bit.Blex.Tests.E2E/Bit.Blex.Tests.E2E.csproj @@ -1,7 +1,7 @@  - net10.0 + net11.0 enable enable false diff --git a/src/Utilities/Blex/Tests/Bit.Blex.Tests.E2E/HybridModeTests.cs b/src/Utilities/Blex/Tests/Bit.Blex.Tests.E2E/HybridModeTests.cs index 8a0c1aed8cb..811e7f056ef 100644 --- a/src/Utilities/Blex/Tests/Bit.Blex.Tests.E2E/HybridModeTests.cs +++ b/src/Utilities/Blex/Tests/Bit.Blex.Tests.E2E/HybridModeTests.cs @@ -18,7 +18,7 @@ public class HybridModeTests : InteractiveHarnessTests { protected override string BaseUrl => HybridHarnessHost.AppOrigin; - protected override string Framework => "net10.0"; + protected override string Framework => "net11.0"; protected override IReadOnlyList ExpectedRenderers => ["WebView"]; diff --git a/src/Utilities/Blex/Tests/Bit.Blex.Tests.E2E/Infrastructure/E2EEnvironment.cs b/src/Utilities/Blex/Tests/Bit.Blex.Tests.E2E/Infrastructure/E2EEnvironment.cs index 044d7372448..6657af14ca9 100644 --- a/src/Utilities/Blex/Tests/Bit.Blex.Tests.E2E/Infrastructure/E2EEnvironment.cs +++ b/src/Utilities/Blex/Tests/Bit.Blex.Tests.E2E/Infrastructure/E2EEnvironment.cs @@ -8,9 +8,9 @@ public static class E2EEnvironment { /// /// BLEX_E2E_FRAMEWORK: the target framework the web harness host runs on - /// (net10.0, net9.0 or net8.0). Defaults to net10.0. The hybrid host is always net10.0-windows. + /// (net11.0, net10.0, net9.0 or net8.0). Defaults to net11.0. The hybrid host is always net11.0-windows. /// - public static string Framework { get; } = Read("BLEX_E2E_FRAMEWORK") ?? "net10.0"; + public static string Framework { get; } = Read("BLEX_E2E_FRAMEWORK") ?? "net11.0"; /// /// BLEX_E2E_CONFIGURATION: the build configuration of the harness hosts. Defaults to the diff --git a/src/Utilities/Blex/Tests/Bit.Blex.Tests.E2E/Infrastructure/RepoLayout.cs b/src/Utilities/Blex/Tests/Bit.Blex.Tests.E2E/Infrastructure/RepoLayout.cs index 2217b92a1e4..842a6b0ed53 100644 --- a/src/Utilities/Blex/Tests/Bit.Blex.Tests.E2E/Infrastructure/RepoLayout.cs +++ b/src/Utilities/Blex/Tests/Bit.Blex.Tests.E2E/Infrastructure/RepoLayout.cs @@ -17,7 +17,7 @@ public static string WebHostAssembly(string framework, string configuration) => Path.Combine(Path.GetDirectoryName(WebHostProject())!, "bin", configuration, framework, $"{WebHostName}.dll"); public static string HybridHostExecutable(string configuration) => - Path.Combine(Path.GetDirectoryName(HybridHostProject())!, "bin", configuration, "net10.0-windows", $"{HybridHostName}.exe"); + Path.Combine(Path.GetDirectoryName(HybridHostProject())!, "bin", configuration, "net11.0-windows", $"{HybridHostName}.exe"); private static string FindUpward(string relativePath) { diff --git a/src/Utilities/Blex/Tests/Bit.Blex.Tests.E2E/publish-gate.sh b/src/Utilities/Blex/Tests/Bit.Blex.Tests.E2E/publish-gate.sh index cf8802f2a6a..13a3cec1293 100644 --- a/src/Utilities/Blex/Tests/Bit.Blex.Tests.E2E/publish-gate.sh +++ b/src/Utilities/Blex/Tests/Bit.Blex.Tests.E2E/publish-gate.sh @@ -16,8 +16,8 @@ set -euo pipefail here="$(cd "$(dirname "$0")" && pwd)" -# TargetFrameworks=net10.0 on top of -f: -f alone does not reach project references, which then still +# TargetFrameworks=net11.0 on top of -f: -f alone does not reach project references, which then still # evaluate every framework they target - and with RunAOTCompilation each of those demands its own # wasm-tools workload. exec bash "$here/../../../../publish-gate.sh" Bit.Blex Tests "$here/../Bit.Blex.Tests.Harness.Web/Bit.Blex.Tests.Harness.Web.csproj" \ - "$1" -f net10.0 -p:TargetFrameworks=net10.0 "${@:2}" + "$1" -f net11.0 -p:TargetFrameworks=net11.0 "${@:2}" diff --git a/src/Utilities/Blex/Tests/Bit.Blex.Tests.Generators/Bit.Blex.Tests.Generators.csproj b/src/Utilities/Blex/Tests/Bit.Blex.Tests.Generators/Bit.Blex.Tests.Generators.csproj index af7c3405a4a..0de54dcc0af 100644 --- a/src/Utilities/Blex/Tests/Bit.Blex.Tests.Generators/Bit.Blex.Tests.Generators.csproj +++ b/src/Utilities/Blex/Tests/Bit.Blex.Tests.Generators/Bit.Blex.Tests.Generators.csproj @@ -1,7 +1,7 @@  - net10.0 + net11.0 enable enable false diff --git a/src/Utilities/Blex/Tests/Bit.Blex.Tests.Harness.Hybrid/Bit.Blex.Tests.Harness.Hybrid.csproj b/src/Utilities/Blex/Tests/Bit.Blex.Tests.Harness.Hybrid/Bit.Blex.Tests.Harness.Hybrid.csproj index eb142d56a41..1468f3d7d32 100644 --- a/src/Utilities/Blex/Tests/Bit.Blex.Tests.Harness.Hybrid/Bit.Blex.Tests.Harness.Hybrid.csproj +++ b/src/Utilities/Blex/Tests/Bit.Blex.Tests.Harness.Hybrid/Bit.Blex.Tests.Harness.Hybrid.csproj @@ -8,7 +8,7 @@ WinExe - net10.0-windows + net11.0-windows true true @@ -18,7 +18,7 @@ - + diff --git a/src/Utilities/Blex/Tests/Bit.Blex.Tests.Harness.Web.Client/Bit.Blex.Tests.Harness.Web.Client.csproj b/src/Utilities/Blex/Tests/Bit.Blex.Tests.Harness.Web.Client/Bit.Blex.Tests.Harness.Web.Client.csproj index f6e305f3921..3eee11b1f84 100644 --- a/src/Utilities/Blex/Tests/Bit.Blex.Tests.Harness.Web.Client/Bit.Blex.Tests.Harness.Web.Client.csproj +++ b/src/Utilities/Blex/Tests/Bit.Blex.Tests.Harness.Web.Client/Bit.Blex.Tests.Harness.Web.Client.csproj @@ -1,7 +1,7 @@  - net10.0;net9.0;net8.0 + net11.0;net10.0;net9.0;net8.0 enable enable false @@ -13,6 +13,7 @@ + diff --git a/src/Utilities/Blex/Tests/Bit.Blex.Tests.Harness.Web/Bit.Blex.Tests.Harness.Web.csproj b/src/Utilities/Blex/Tests/Bit.Blex.Tests.Harness.Web/Bit.Blex.Tests.Harness.Web.csproj index a8fc2bb6aeb..6e26495cc39 100644 --- a/src/Utilities/Blex/Tests/Bit.Blex.Tests.Harness.Web/Bit.Blex.Tests.Harness.Web.csproj +++ b/src/Utilities/Blex/Tests/Bit.Blex.Tests.Harness.Web/Bit.Blex.Tests.Harness.Web.csproj @@ -7,7 +7,7 @@ runtime Bit.Blex ships for. --> - net10.0;net9.0;net8.0 + net11.0;net10.0;net9.0;net8.0 enable enable false @@ -17,6 +17,7 @@ + diff --git a/src/Utilities/Blex/Tests/Bit.Blex.Tests.Harness.Web/Properties/launchSettings.json b/src/Utilities/Blex/Tests/Bit.Blex.Tests.Harness.Web/Properties/launchSettings.json index be50d03912e..d83d60ebdfb 100644 --- a/src/Utilities/Blex/Tests/Bit.Blex.Tests.Harness.Web/Properties/launchSettings.json +++ b/src/Utilities/Blex/Tests/Bit.Blex.Tests.Harness.Web/Properties/launchSettings.json @@ -18,7 +18,6 @@ "commandName": "Project", "commandLineArgs": "--BlexHarness:Mode=wasm", "launchBrowser": true, - "inspectUri": "{wsProtocol}://{url.hostname}:{url.port}/_framework/debug/ws-proxy?browser={browserInspectUri}", "applicationUrl": "http://localhost:5291", "environmentVariables": { "ASPNETCORE_ENVIRONMENT": "Development" } }, diff --git a/src/Utilities/Blex/Tests/Bit.Blex.Tests.Harness/Bit.Blex.Tests.Harness.csproj b/src/Utilities/Blex/Tests/Bit.Blex.Tests.Harness/Bit.Blex.Tests.Harness.csproj index 1a011a491d0..f634a94e20d 100644 --- a/src/Utilities/Blex/Tests/Bit.Blex.Tests.Harness/Bit.Blex.Tests.Harness.csproj +++ b/src/Utilities/Blex/Tests/Bit.Blex.Tests.Harness/Bit.Blex.Tests.Harness.csproj @@ -6,7 +6,7 @@ run the same assertions against every host and attribute a difference to the host. --> - net10.0;net9.0;net8.0 + net11.0;net10.0;net9.0;net8.0 enable enable preview @@ -22,6 +22,7 @@ + diff --git a/src/Utilities/Blex/Tests/Bit.Blex.Tests.Mcp/Bit.Blex.Tests.Mcp.csproj b/src/Utilities/Blex/Tests/Bit.Blex.Tests.Mcp/Bit.Blex.Tests.Mcp.csproj index e6e82a22287..4d860ab7081 100644 --- a/src/Utilities/Blex/Tests/Bit.Blex.Tests.Mcp/Bit.Blex.Tests.Mcp.csproj +++ b/src/Utilities/Blex/Tests/Bit.Blex.Tests.Mcp/Bit.Blex.Tests.Mcp.csproj @@ -1,7 +1,7 @@  - net10.0 + net11.0 enable enable false @@ -15,7 +15,7 @@ - + diff --git a/src/Utilities/Blex/Tests/Bit.Blex.Tests/Bit.Blex.Tests.csproj b/src/Utilities/Blex/Tests/Bit.Blex.Tests/Bit.Blex.Tests.csproj index 876c57b5e13..4b9f2e5fbe8 100644 --- a/src/Utilities/Blex/Tests/Bit.Blex.Tests/Bit.Blex.Tests.csproj +++ b/src/Utilities/Blex/Tests/Bit.Blex.Tests/Bit.Blex.Tests.csproj @@ -2,7 +2,7 @@ - net10.0;net9.0;net8.0 + net11.0;net10.0;net9.0;net8.0 enable enable preview diff --git a/src/Utilities/Blow/Bit.Blow/Bit.Blow.csproj b/src/Utilities/Blow/Bit.Blow/Bit.Blow.csproj index 456adab4ae2..872604ff60e 100644 --- a/src/Utilities/Blow/Bit.Blow/Bit.Blow.csproj +++ b/src/Utilities/Blow/Bit.Blow/Bit.Blow.csproj @@ -3,7 +3,7 @@ - net10.0;net9.0;net8.0 + net11.0;net10.0;net9.0;net8.0 Bit.Blow enable true @@ -22,6 +22,7 @@ + diff --git a/src/Utilities/Blow/Demo/Client/Bit.Blow.Demo.Client.csproj b/src/Utilities/Blow/Demo/Client/Bit.Blow.Demo.Client.csproj index 61ef1682202..0e139442232 100644 --- a/src/Utilities/Blow/Demo/Client/Bit.Blow.Demo.Client.csproj +++ b/src/Utilities/Blow/Demo/Client/Bit.Blow.Demo.Client.csproj @@ -1,7 +1,8 @@  - net10.0 + net11.0 + false enable enable true @@ -14,7 +15,7 @@ - + diff --git a/src/Utilities/Blow/Demo/Server/Bit.Blow.Demo.Server.csproj b/src/Utilities/Blow/Demo/Server/Bit.Blow.Demo.Server.csproj index c3d41eeed87..1cedf2d6cf4 100644 --- a/src/Utilities/Blow/Demo/Server/Bit.Blow.Demo.Server.csproj +++ b/src/Utilities/Blow/Demo/Server/Bit.Blow.Demo.Server.csproj @@ -1,7 +1,7 @@  - net10.0 + net11.0 enable enable true @@ -10,7 +10,7 @@ - + diff --git a/src/Utilities/Blow/Demo/Server/Program.cs b/src/Utilities/Blow/Demo/Server/Program.cs index 146ac66b45f..c85e059af50 100644 --- a/src/Utilities/Blow/Demo/Server/Program.cs +++ b/src/Utilities/Blow/Demo/Server/Program.cs @@ -67,11 +67,7 @@ var app = builder.Build(); -if (app.Environment.IsDevelopment()) -{ - app.UseWebAssemblyDebugging(); -} -else +if (app.Environment.IsDevelopment() is false) { app.UseExceptionHandler("/Error", createScopeForErrors: true); app.UseHsts(); diff --git a/src/Utilities/Blow/Demo/Server/Properties/launchSettings.json b/src/Utilities/Blow/Demo/Server/Properties/launchSettings.json index c8f39b58912..4e8a6751fef 100644 --- a/src/Utilities/Blow/Demo/Server/Properties/launchSettings.json +++ b/src/Utilities/Blow/Demo/Server/Properties/launchSettings.json @@ -5,7 +5,6 @@ "commandName": "Project", "dotnetRunMessages": true, "launchBrowser": true, - "inspectUri": "{wsProtocol}://{url.hostname}:{url.port}/_framework/debug/ws-proxy?browser={browserInspectUri}", "applicationUrl": "https://localhost:5551;http://localhost:5550", "environmentVariables": { "ASPNETCORE_ENVIRONMENT": "Development" diff --git a/src/Utilities/Blow/Tests/Bit.Blow.Tests.E2E/Bit.Blow.Tests.E2E.csproj b/src/Utilities/Blow/Tests/Bit.Blow.Tests.E2E/Bit.Blow.Tests.E2E.csproj index ecf5bd276a9..ff4b47c98fe 100644 --- a/src/Utilities/Blow/Tests/Bit.Blow.Tests.E2E/Bit.Blow.Tests.E2E.csproj +++ b/src/Utilities/Blow/Tests/Bit.Blow.Tests.E2E/Bit.Blow.Tests.E2E.csproj @@ -1,7 +1,7 @@  - net10.0 + net11.0 enable enable false diff --git a/src/Utilities/Blow/Tests/Bit.Blow.Tests.E2E/Infrastructure/PlaywrightSession.cs b/src/Utilities/Blow/Tests/Bit.Blow.Tests.E2E/Infrastructure/PlaywrightSession.cs index 6a8d0029414..80b64d105ff 100644 --- a/src/Utilities/Blow/Tests/Bit.Blow.Tests.E2E/Infrastructure/PlaywrightSession.cs +++ b/src/Utilities/Blow/Tests/Bit.Blow.Tests.E2E/Infrastructure/PlaywrightSession.cs @@ -51,7 +51,7 @@ private static async Task StartAsync() if (browser is null) { playwright.Dispose(); - return Session.Fail("no Chromium-based browser could be launched. Run 'pwsh bin//net10.0/playwright.ps1 install chromium', or install Chrome or Edge."); + return Session.Fail("no Chromium-based browser could be launched. Run 'pwsh bin//net11.0/playwright.ps1 install chromium', or install Chrome or Edge."); } try diff --git a/src/Utilities/Blow/Tests/Bit.Blow.Tests.E2E/Infrastructure/RepoLayout.cs b/src/Utilities/Blow/Tests/Bit.Blow.Tests.E2E/Infrastructure/RepoLayout.cs index 26e7b8ad6eb..5cb683c518a 100644 --- a/src/Utilities/Blow/Tests/Bit.Blow.Tests.E2E/Infrastructure/RepoLayout.cs +++ b/src/Utilities/Blow/Tests/Bit.Blow.Tests.E2E/Infrastructure/RepoLayout.cs @@ -11,7 +11,7 @@ public static class RepoLayout public static string DemoServerProject() => FindUpward(Path.Combine("Demo", "Server", $"{DemoServerName}.csproj")); public static string DemoServerAssembly(string configuration) => - Path.Combine(Path.GetDirectoryName(DemoServerProject())!, "bin", configuration, "net10.0", $"{DemoServerName}.dll"); + Path.Combine(Path.GetDirectoryName(DemoServerProject())!, "bin", configuration, "net11.0", $"{DemoServerName}.dll"); /// The demo's routable pages, which the page sweep reads its routes from. public static string DemoPagesDirectory() => diff --git a/src/Utilities/Blow/Tests/Bit.Blow.Tests.Mcp/Bit.Blow.Tests.Mcp.csproj b/src/Utilities/Blow/Tests/Bit.Blow.Tests.Mcp/Bit.Blow.Tests.Mcp.csproj index 72d8b3b8614..9d0de127170 100644 --- a/src/Utilities/Blow/Tests/Bit.Blow.Tests.Mcp/Bit.Blow.Tests.Mcp.csproj +++ b/src/Utilities/Blow/Tests/Bit.Blow.Tests.Mcp/Bit.Blow.Tests.Mcp.csproj @@ -1,9 +1,9 @@  + exists on net11.0, while the library's own tests multi-target back to net8.0. --> - net10.0 + net11.0 Exe @@ -20,7 +20,7 @@ - + diff --git a/src/Utilities/Blow/Tests/Bit.Blow.Tests/Bit.Blow.Tests.csproj b/src/Utilities/Blow/Tests/Bit.Blow.Tests/Bit.Blow.Tests.csproj index 4d425bd3820..405f00361a7 100644 --- a/src/Utilities/Blow/Tests/Bit.Blow.Tests/Bit.Blow.Tests.csproj +++ b/src/Utilities/Blow/Tests/Bit.Blow.Tests/Bit.Blow.Tests.csproj @@ -1,7 +1,7 @@  - net10.0;net9.0;net8.0 + net11.0;net10.0;net9.0;net8.0 enable enable false diff --git a/src/Utilities/Bmage/Bit.Bmage/Bit.Bmage.csproj b/src/Utilities/Bmage/Bit.Bmage/Bit.Bmage.csproj index 33efacf03a9..7ecd5cce853 100644 --- a/src/Utilities/Bmage/Bit.Bmage/Bit.Bmage.csproj +++ b/src/Utilities/Bmage/Bit.Bmage/Bit.Bmage.csproj @@ -3,7 +3,7 @@ - net10.0;net9.0;net8.0 + net11.0;net10.0;net9.0;net8.0 Bit.Bmage enable true @@ -24,6 +24,7 @@ + - + diff --git a/src/Utilities/Bmage/Demo/Server/Program.cs b/src/Utilities/Bmage/Demo/Server/Program.cs index 02d4375d935..10183a469d3 100644 --- a/src/Utilities/Bmage/Demo/Server/Program.cs +++ b/src/Utilities/Bmage/Demo/Server/Program.cs @@ -63,11 +63,7 @@ var app = builder.Build(); -if (app.Environment.IsDevelopment()) -{ - app.UseWebAssemblyDebugging(); -} -else +if (app.Environment.IsDevelopment() is false) { app.UseExceptionHandler("/Error", createScopeForErrors: true); app.UseHsts(); diff --git a/src/Utilities/Bmage/Demo/Server/Properties/launchSettings.json b/src/Utilities/Bmage/Demo/Server/Properties/launchSettings.json index bdadb2fb053..76ed69c1c3d 100644 --- a/src/Utilities/Bmage/Demo/Server/Properties/launchSettings.json +++ b/src/Utilities/Bmage/Demo/Server/Properties/launchSettings.json @@ -5,7 +5,6 @@ "commandName": "Project", "dotnetRunMessages": true, "launchBrowser": true, - "inspectUri": "{wsProtocol}://{url.hostname}:{url.port}/_framework/debug/ws-proxy?browser={browserInspectUri}", "applicationUrl": "https://localhost:5093;http://localhost:5092", "environmentVariables": { "ASPNETCORE_ENVIRONMENT": "Development" diff --git a/src/Utilities/Bmage/Tests/Bit.Bmage.Benchmarks/Bit.Bmage.Benchmarks.csproj b/src/Utilities/Bmage/Tests/Bit.Bmage.Benchmarks/Bit.Bmage.Benchmarks.csproj index f0c113dc5e6..adf1d8a78aa 100644 --- a/src/Utilities/Bmage/Tests/Bit.Bmage.Benchmarks/Bit.Bmage.Benchmarks.csproj +++ b/src/Utilities/Bmage/Tests/Bit.Bmage.Benchmarks/Bit.Bmage.Benchmarks.csproj @@ -2,10 +2,10 @@ Exe - - net10.0 + net11.0 enable enable false diff --git a/src/Utilities/Bmage/Tests/Bit.Bmage.Tests.E2E/Bit.Bmage.Tests.E2E.csproj b/src/Utilities/Bmage/Tests/Bit.Bmage.Tests.E2E/Bit.Bmage.Tests.E2E.csproj index c20a4274077..bfdefeb9e9b 100644 --- a/src/Utilities/Bmage/Tests/Bit.Bmage.Tests.E2E/Bit.Bmage.Tests.E2E.csproj +++ b/src/Utilities/Bmage/Tests/Bit.Bmage.Tests.E2E/Bit.Bmage.Tests.E2E.csproj @@ -1,7 +1,7 @@  - net10.0 + net11.0 enable enable false diff --git a/src/Utilities/Bmage/Tests/Bit.Bmage.Tests.E2E/Infrastructure/PlaywrightSession.cs b/src/Utilities/Bmage/Tests/Bit.Bmage.Tests.E2E/Infrastructure/PlaywrightSession.cs index 512360cab6d..27f386ff4a9 100644 --- a/src/Utilities/Bmage/Tests/Bit.Bmage.Tests.E2E/Infrastructure/PlaywrightSession.cs +++ b/src/Utilities/Bmage/Tests/Bit.Bmage.Tests.E2E/Infrastructure/PlaywrightSession.cs @@ -71,7 +71,7 @@ public static async Task StopAsync() } } - return (null, "No browser is available. Run 'pwsh bin/Debug/net10.0/playwright.ps1 install chromium', or install Chrome or Edge. " + return (null, "No browser is available. Run 'pwsh bin/Debug/net11.0/playwright.ps1 install chromium', or install Chrome or Edge. " + string.Join(" | ", failures)); } } diff --git a/src/Utilities/Bmage/Tests/Bit.Bmage.Tests.E2E/Infrastructure/RepoLayout.cs b/src/Utilities/Bmage/Tests/Bit.Bmage.Tests.E2E/Infrastructure/RepoLayout.cs index 7deabfe9e80..a2a49725750 100644 --- a/src/Utilities/Bmage/Tests/Bit.Bmage.Tests.E2E/Infrastructure/RepoLayout.cs +++ b/src/Utilities/Bmage/Tests/Bit.Bmage.Tests.E2E/Infrastructure/RepoLayout.cs @@ -13,7 +13,7 @@ public static class RepoLayout public static string ServerDirectory() => Path.GetDirectoryName(ServerProject())!; public static string ServerAssembly(string configuration) => - Path.Combine(ServerDirectory(), "bin", configuration, "net10.0", $"{ServerName}.dll"); + Path.Combine(ServerDirectory(), "bin", configuration, "net11.0", $"{ServerName}.dll"); private static string FindUpward(string relativePath) { diff --git a/src/Utilities/Bmage/Tests/Bit.Bmage.Tests.Mcp/Bit.Bmage.Tests.Mcp.csproj b/src/Utilities/Bmage/Tests/Bit.Bmage.Tests.Mcp/Bit.Bmage.Tests.Mcp.csproj index ffc4f933a02..d1eac9bdeb6 100644 --- a/src/Utilities/Bmage/Tests/Bit.Bmage.Tests.Mcp/Bit.Bmage.Tests.Mcp.csproj +++ b/src/Utilities/Bmage/Tests/Bit.Bmage.Tests.Mcp/Bit.Bmage.Tests.Mcp.csproj @@ -1,9 +1,9 @@  + exists on net11.0, while the library's own tests multi-target back to net8.0. --> - net10.0 + net11.0 Exe @@ -20,7 +20,7 @@ - + diff --git a/src/Utilities/Bmage/Tests/Bit.Bmage.Tests/Bit.Bmage.Tests.csproj b/src/Utilities/Bmage/Tests/Bit.Bmage.Tests/Bit.Bmage.Tests.csproj index baf1164101f..70ee2d3a3fd 100644 --- a/src/Utilities/Bmage/Tests/Bit.Bmage.Tests/Bit.Bmage.Tests.csproj +++ b/src/Utilities/Bmage/Tests/Bit.Bmage.Tests/Bit.Bmage.Tests.csproj @@ -1,7 +1,7 @@  - net10.0;net9.0;net8.0 + net11.0;net10.0;net9.0;net8.0 enable enable false diff --git a/src/Utilities/Bmotion/Bit.Bmotion/Bit.Bmotion.csproj b/src/Utilities/Bmotion/Bit.Bmotion/Bit.Bmotion.csproj index d6f287c8740..8abdb65080a 100644 --- a/src/Utilities/Bmotion/Bit.Bmotion/Bit.Bmotion.csproj +++ b/src/Utilities/Bmotion/Bit.Bmotion/Bit.Bmotion.csproj @@ -3,7 +3,7 @@ - net10.0;net9.0;net8.0 + net11.0;net10.0;net9.0;net8.0 Bit.Bmotion enable true @@ -27,6 +27,7 @@ + diff --git a/src/Utilities/Bmotion/Demo/Client/Bit.Bmotion.Demo.Client.csproj b/src/Utilities/Bmotion/Demo/Client/Bit.Bmotion.Demo.Client.csproj index 776dc5b6ec4..df85508bbb9 100644 --- a/src/Utilities/Bmotion/Demo/Client/Bit.Bmotion.Demo.Client.csproj +++ b/src/Utilities/Bmotion/Demo/Client/Bit.Bmotion.Demo.Client.csproj @@ -1,7 +1,8 @@  - net10.0 + net11.0 + false enable enable true @@ -13,7 +14,7 @@ - + diff --git a/src/Utilities/Bmotion/Demo/Server/Bit.Bmotion.Demo.Server.csproj b/src/Utilities/Bmotion/Demo/Server/Bit.Bmotion.Demo.Server.csproj index 1dd7c26411f..6cb4508f2f6 100644 --- a/src/Utilities/Bmotion/Demo/Server/Bit.Bmotion.Demo.Server.csproj +++ b/src/Utilities/Bmotion/Demo/Server/Bit.Bmotion.Demo.Server.csproj @@ -1,7 +1,7 @@  - net10.0 + net11.0 enable enable true @@ -9,7 +9,7 @@ - + diff --git a/src/Utilities/Bmotion/Demo/Server/Program.cs b/src/Utilities/Bmotion/Demo/Server/Program.cs index 281c0697cfc..29ffb1d43b4 100644 --- a/src/Utilities/Bmotion/Demo/Server/Program.cs +++ b/src/Utilities/Bmotion/Demo/Server/Program.cs @@ -32,11 +32,7 @@ var app = builder.Build(); -if (app.Environment.IsDevelopment()) -{ - app.UseWebAssemblyDebugging(); -} -else +if (app.Environment.IsDevelopment() is false) { app.UseExceptionHandler("/Error", createScopeForErrors: true); app.UseHsts(); diff --git a/src/Utilities/Bmotion/Demo/Server/Properties/launchSettings.json b/src/Utilities/Bmotion/Demo/Server/Properties/launchSettings.json index ba4f4303414..7c75402dcb5 100644 --- a/src/Utilities/Bmotion/Demo/Server/Properties/launchSettings.json +++ b/src/Utilities/Bmotion/Demo/Server/Properties/launchSettings.json @@ -5,7 +5,6 @@ "commandName": "Project", "dotnetRunMessages": true, "launchBrowser": true, - "inspectUri": "{wsProtocol}://{url.hostname}:{url.port}/_framework/debug/ws-proxy?browser={browserInspectUri}", "applicationUrl": "https://localhost:5071;http://localhost:5070", "environmentVariables": { "ASPNETCORE_ENVIRONMENT": "Development" diff --git a/src/Utilities/Bmotion/Tests/Bit.Bmotion.Tests.E2E/Bit.Bmotion.Tests.E2E.csproj b/src/Utilities/Bmotion/Tests/Bit.Bmotion.Tests.E2E/Bit.Bmotion.Tests.E2E.csproj index ff33d841615..cc4993601c9 100644 --- a/src/Utilities/Bmotion/Tests/Bit.Bmotion.Tests.E2E/Bit.Bmotion.Tests.E2E.csproj +++ b/src/Utilities/Bmotion/Tests/Bit.Bmotion.Tests.E2E/Bit.Bmotion.Tests.E2E.csproj @@ -4,7 +4,7 @@ Playwright), in whichever render mode BMOTION_E2E_HOST names - see README.md. --> - net10.0 + net11.0 enable enable false diff --git a/src/Utilities/Bmotion/Tests/Bit.Bmotion.Tests.E2E/Infrastructure/E2EEnvironment.cs b/src/Utilities/Bmotion/Tests/Bit.Bmotion.Tests.E2E/Infrastructure/E2EEnvironment.cs index aecbf8c9c85..0ebd7caec36 100644 --- a/src/Utilities/Bmotion/Tests/Bit.Bmotion.Tests.E2E/Infrastructure/E2EEnvironment.cs +++ b/src/Utilities/Bmotion/Tests/Bit.Bmotion.Tests.E2E/Infrastructure/E2EEnvironment.cs @@ -14,8 +14,8 @@ public static class E2EEnvironment /// public static string Host { get; } = HarnessHostKinds.Validate(Read("BMOTION_E2E_HOST") ?? HarnessHostKinds.WebAssembly); - /// BMOTION_E2E_FRAMEWORK: the target framework the harness host runs on. Defaults to net10.0. - public static string Framework { get; } = Read("BMOTION_E2E_FRAMEWORK") ?? "net10.0"; + /// BMOTION_E2E_FRAMEWORK: the target framework the harness host runs on. Defaults to net11.0. + public static string Framework { get; } = Read("BMOTION_E2E_FRAMEWORK") ?? "net11.0"; /// /// BMOTION_E2E_CONFIGURATION: the build configuration of the harness host. Defaults to the configuration diff --git a/src/Utilities/Bmotion/Tests/Bit.Bmotion.Tests.Harness.Web.Client/Bit.Bmotion.Tests.Harness.Web.Client.csproj b/src/Utilities/Bmotion/Tests/Bit.Bmotion.Tests.Harness.Web.Client/Bit.Bmotion.Tests.Harness.Web.Client.csproj index 9eecf09f92b..8ff5c5a1387 100644 --- a/src/Utilities/Bmotion/Tests/Bit.Bmotion.Tests.Harness.Web.Client/Bit.Bmotion.Tests.Harness.Web.Client.csproj +++ b/src/Utilities/Bmotion/Tests/Bit.Bmotion.Tests.Harness.Web.Client/Bit.Bmotion.Tests.Harness.Web.Client.csproj @@ -5,7 +5,7 @@ circuit and in the WebAssembly runtime, whichever render mode the host was started in. --> - net10.0;net9.0;net8.0 + net11.0;net10.0;net9.0;net8.0 $(BmotionHarnessFramework) enable @@ -21,6 +21,7 @@ + diff --git a/src/Utilities/Bmotion/Tests/Bit.Bmotion.Tests.Harness.Web/Bit.Bmotion.Tests.Harness.Web.csproj b/src/Utilities/Bmotion/Tests/Bit.Bmotion.Tests.Harness.Web/Bit.Bmotion.Tests.Harness.Web.csproj index 248d657b488..aff6579ffab 100644 --- a/src/Utilities/Bmotion/Tests/Bit.Bmotion.Tests.Harness.Web/Bit.Bmotion.Tests.Harness.Web.csproj +++ b/src/Utilities/Bmotion/Tests/Bit.Bmotion.Tests.Harness.Web/Bit.Bmotion.Tests.Harness.Web.csproj @@ -9,7 +9,7 @@ ships for. --> - net10.0;net9.0;net8.0 + net11.0;net10.0;net9.0;net8.0 $(BmotionHarnessFramework) enable enable @@ -22,6 +22,7 @@ + diff --git a/src/Utilities/Bmotion/Tests/Bit.Bmotion.Tests.Harness.Web/Properties/launchSettings.json b/src/Utilities/Bmotion/Tests/Bit.Bmotion.Tests.Harness.Web/Properties/launchSettings.json index 7f7e2446e0d..350cb05488d 100644 --- a/src/Utilities/Bmotion/Tests/Bit.Bmotion.Tests.Harness.Web/Properties/launchSettings.json +++ b/src/Utilities/Bmotion/Tests/Bit.Bmotion.Tests.Harness.Web/Properties/launchSettings.json @@ -18,7 +18,6 @@ "commandName": "Project", "commandLineArgs": "--BmotionHarness:Mode=wasm", "launchBrowser": true, - "inspectUri": "{wsProtocol}://{url.hostname}:{url.port}/_framework/debug/ws-proxy?browser={browserInspectUri}", "applicationUrl": "http://localhost:5470", "environmentVariables": { "ASPNETCORE_ENVIRONMENT": "Development" } }, @@ -33,7 +32,6 @@ "commandName": "Project", "commandLineArgs": "--BmotionHarness:Mode=wasm --BmotionHarness:Prerender=Animate --BmotionHarness:ReducedMotion=User --BmotionHarness:CssSafeMode=Throw", "launchBrowser": true, - "inspectUri": "{wsProtocol}://{url.hostname}:{url.port}/_framework/debug/ws-proxy?browser={browserInspectUri}", "applicationUrl": "http://localhost:5470", "environmentVariables": { "ASPNETCORE_ENVIRONMENT": "Development" } } diff --git a/src/Utilities/Bmotion/Tests/Bit.Bmotion.Tests.Mcp/Bit.Bmotion.Tests.Mcp.csproj b/src/Utilities/Bmotion/Tests/Bit.Bmotion.Tests.Mcp/Bit.Bmotion.Tests.Mcp.csproj index 5029f62626c..b52f0b2dde9 100644 --- a/src/Utilities/Bmotion/Tests/Bit.Bmotion.Tests.Mcp/Bit.Bmotion.Tests.Mcp.csproj +++ b/src/Utilities/Bmotion/Tests/Bit.Bmotion.Tests.Mcp/Bit.Bmotion.Tests.Mcp.csproj @@ -1,9 +1,9 @@ + only exists on net11.0, while the library's own tests multi-target back to net8.0. --> - net10.0 + net11.0 Exe @@ -20,7 +20,7 @@ - + diff --git a/src/Utilities/Bmotion/Tests/Bit.Bmotion.Tests/Bit.Bmotion.Tests.csproj b/src/Utilities/Bmotion/Tests/Bit.Bmotion.Tests/Bit.Bmotion.Tests.csproj index de2229af626..4bca9d78c2f 100644 --- a/src/Utilities/Bmotion/Tests/Bit.Bmotion.Tests/Bit.Bmotion.Tests.csproj +++ b/src/Utilities/Bmotion/Tests/Bit.Bmotion.Tests/Bit.Bmotion.Tests.csproj @@ -1,7 +1,7 @@ - net10.0;net9.0;net8.0 + net11.0;net10.0;net9.0;net8.0 enable enable false diff --git a/src/Utilities/Bonboarding/Bit.Bonboarding/Bit.Bonboarding.csproj b/src/Utilities/Bonboarding/Bit.Bonboarding/Bit.Bonboarding.csproj index 40e78b12375..62e91cad398 100644 --- a/src/Utilities/Bonboarding/Bit.Bonboarding/Bit.Bonboarding.csproj +++ b/src/Utilities/Bonboarding/Bit.Bonboarding/Bit.Bonboarding.csproj @@ -3,7 +3,7 @@ - net10.0;net9.0;net8.0 + net11.0;net10.0;net9.0;net8.0 Bit.Bonboarding enable true @@ -22,6 +22,7 @@ + diff --git a/src/Utilities/Bonboarding/Demo/Client/Bit.Bonboarding.Demo.Client.csproj b/src/Utilities/Bonboarding/Demo/Client/Bit.Bonboarding.Demo.Client.csproj index d6511d52596..42c560ba6bb 100644 --- a/src/Utilities/Bonboarding/Demo/Client/Bit.Bonboarding.Demo.Client.csproj +++ b/src/Utilities/Bonboarding/Demo/Client/Bit.Bonboarding.Demo.Client.csproj @@ -1,7 +1,8 @@  - net10.0 + net11.0 + false enable enable true @@ -14,7 +15,7 @@ - + diff --git a/src/Utilities/Bonboarding/Demo/Server/Bit.Bonboarding.Demo.Server.csproj b/src/Utilities/Bonboarding/Demo/Server/Bit.Bonboarding.Demo.Server.csproj index a1d66e77663..c0109e1a220 100644 --- a/src/Utilities/Bonboarding/Demo/Server/Bit.Bonboarding.Demo.Server.csproj +++ b/src/Utilities/Bonboarding/Demo/Server/Bit.Bonboarding.Demo.Server.csproj @@ -1,7 +1,7 @@  - net10.0 + net11.0 enable enable true @@ -10,7 +10,7 @@ - + diff --git a/src/Utilities/Bonboarding/Demo/Server/Program.cs b/src/Utilities/Bonboarding/Demo/Server/Program.cs index 2ffbeeabb0f..12ad3415f0a 100644 --- a/src/Utilities/Bonboarding/Demo/Server/Program.cs +++ b/src/Utilities/Bonboarding/Demo/Server/Program.cs @@ -68,11 +68,7 @@ var app = builder.Build(); -if (app.Environment.IsDevelopment()) -{ - app.UseWebAssemblyDebugging(); -} -else +if (app.Environment.IsDevelopment() is false) { app.UseExceptionHandler("/Error", createScopeForErrors: true); app.UseHsts(); diff --git a/src/Utilities/Bonboarding/Demo/Server/Properties/launchSettings.json b/src/Utilities/Bonboarding/Demo/Server/Properties/launchSettings.json index a1ac91fb294..453e449ff92 100644 --- a/src/Utilities/Bonboarding/Demo/Server/Properties/launchSettings.json +++ b/src/Utilities/Bonboarding/Demo/Server/Properties/launchSettings.json @@ -5,7 +5,6 @@ "commandName": "Project", "dotnetRunMessages": true, "launchBrowser": true, - "inspectUri": "{wsProtocol}://{url.hostname}:{url.port}/_framework/debug/ws-proxy?browser={browserInspectUri}", "applicationUrl": "https://localhost:5091;http://localhost:5090", "environmentVariables": { "ASPNETCORE_ENVIRONMENT": "Development" diff --git a/src/Utilities/Bonboarding/Tests/Bit.Bonboarding.Tests.Mcp/Bit.Bonboarding.Tests.Mcp.csproj b/src/Utilities/Bonboarding/Tests/Bit.Bonboarding.Tests.Mcp/Bit.Bonboarding.Tests.Mcp.csproj index f6ccb52f4fe..cb202e5c571 100644 --- a/src/Utilities/Bonboarding/Tests/Bit.Bonboarding.Tests.Mcp/Bit.Bonboarding.Tests.Mcp.csproj +++ b/src/Utilities/Bonboarding/Tests/Bit.Bonboarding.Tests.Mcp/Bit.Bonboarding.Tests.Mcp.csproj @@ -1,7 +1,7 @@  - net10.0 + net11.0 enable enable false @@ -15,7 +15,7 @@ - + diff --git a/src/Utilities/Bonboarding/Tests/Bit.Bonboarding.Tests/Bit.Bonboarding.Tests.csproj b/src/Utilities/Bonboarding/Tests/Bit.Bonboarding.Tests/Bit.Bonboarding.Tests.csproj index 1db06bf7757..67a810a7a3e 100644 --- a/src/Utilities/Bonboarding/Tests/Bit.Bonboarding.Tests/Bit.Bonboarding.Tests.csproj +++ b/src/Utilities/Bonboarding/Tests/Bit.Bonboarding.Tests/Bit.Bonboarding.Tests.csproj @@ -1,7 +1,7 @@  - net10.0;net9.0;net8.0 + net11.0;net10.0;net9.0;net8.0 enable enable false diff --git a/src/Utilities/Borm/Bit.Borm.FluentValidation/Bit.Borm.FluentValidation.csproj b/src/Utilities/Borm/Bit.Borm.FluentValidation/Bit.Borm.FluentValidation.csproj index a98d54e34ae..d453a12ac17 100644 --- a/src/Utilities/Borm/Bit.Borm.FluentValidation/Bit.Borm.FluentValidation.csproj +++ b/src/Utilities/Borm/Bit.Borm.FluentValidation/Bit.Borm.FluentValidation.csproj @@ -3,7 +3,7 @@ - net10.0;net9.0;net8.0 + net11.0;net10.0;net9.0;net8.0 Bit.Borm enable diff --git a/src/Utilities/Borm/Bit.Borm/Bit.Borm.csproj b/src/Utilities/Borm/Bit.Borm/Bit.Borm.csproj index 7498e0183bb..f17e72644aa 100644 --- a/src/Utilities/Borm/Bit.Borm/Bit.Borm.csproj +++ b/src/Utilities/Borm/Bit.Borm/Bit.Borm.csproj @@ -3,7 +3,7 @@ - net10.0;net9.0;net8.0 + net11.0;net10.0;net9.0;net8.0 Bit.Borm enable - + diff --git a/src/Utilities/Borm/Demo/Server/Program.cs b/src/Utilities/Borm/Demo/Server/Program.cs index 4b8b5a0a6f0..7da1c4ef7b4 100644 --- a/src/Utilities/Borm/Demo/Server/Program.cs +++ b/src/Utilities/Borm/Demo/Server/Program.cs @@ -68,11 +68,7 @@ var app = builder.Build(); -if (app.Environment.IsDevelopment()) -{ - app.UseWebAssemblyDebugging(); -} -else +if (app.Environment.IsDevelopment() is false) { app.UseExceptionHandler("/Error", createScopeForErrors: true); app.UseHsts(); diff --git a/src/Utilities/Borm/Demo/Server/Properties/launchSettings.json b/src/Utilities/Borm/Demo/Server/Properties/launchSettings.json index af994dba2b2..5f420df2ec7 100644 --- a/src/Utilities/Borm/Demo/Server/Properties/launchSettings.json +++ b/src/Utilities/Borm/Demo/Server/Properties/launchSettings.json @@ -5,7 +5,6 @@ "commandName": "Project", "dotnetRunMessages": true, "launchBrowser": true, - "inspectUri": "{wsProtocol}://{url.hostname}:{url.port}/_framework/debug/ws-proxy?browser={browserInspectUri}", "applicationUrl": "https://localhost:5581;http://localhost:5580", "environmentVariables": { "ASPNETCORE_ENVIRONMENT": "Development" diff --git a/src/Utilities/Borm/Tests/Bit.Borm.Tests.E2E/Bit.Borm.Tests.E2E.csproj b/src/Utilities/Borm/Tests/Bit.Borm.Tests.E2E/Bit.Borm.Tests.E2E.csproj index 858b2fde073..9eafbcc8fb6 100644 --- a/src/Utilities/Borm/Tests/Bit.Borm.Tests.E2E/Bit.Borm.Tests.E2E.csproj +++ b/src/Utilities/Borm/Tests/Bit.Borm.Tests.E2E/Bit.Borm.Tests.E2E.csproj @@ -1,7 +1,7 @@  - net10.0 + net11.0 enable enable false diff --git a/src/Utilities/Borm/Tests/Bit.Borm.Tests.E2E/Infrastructure/PlaywrightSession.cs b/src/Utilities/Borm/Tests/Bit.Borm.Tests.E2E/Infrastructure/PlaywrightSession.cs index 5558cdf303b..d4696f7058a 100644 --- a/src/Utilities/Borm/Tests/Bit.Borm.Tests.E2E/Infrastructure/PlaywrightSession.cs +++ b/src/Utilities/Borm/Tests/Bit.Borm.Tests.E2E/Infrastructure/PlaywrightSession.cs @@ -51,7 +51,7 @@ private static async Task StartAsync() if (browser is null) { playwright.Dispose(); - return Session.Fail("no Chromium-based browser could be launched. Run 'pwsh bin//net10.0/playwright.ps1 install chromium', or install Chrome or Edge."); + return Session.Fail("no Chromium-based browser could be launched. Run 'pwsh bin//net11.0/playwright.ps1 install chromium', or install Chrome or Edge."); } try diff --git a/src/Utilities/Borm/Tests/Bit.Borm.Tests.E2E/Infrastructure/RepoLayout.cs b/src/Utilities/Borm/Tests/Bit.Borm.Tests.E2E/Infrastructure/RepoLayout.cs index 39928d2ac1d..94c2dd0e6bd 100644 --- a/src/Utilities/Borm/Tests/Bit.Borm.Tests.E2E/Infrastructure/RepoLayout.cs +++ b/src/Utilities/Borm/Tests/Bit.Borm.Tests.E2E/Infrastructure/RepoLayout.cs @@ -11,7 +11,7 @@ public static class RepoLayout public static string DemoServerProject() => FindUpward(Path.Combine("Demo", "Server", $"{DemoServerName}.csproj")); public static string DemoServerAssembly(string configuration) => - Path.Combine(Path.GetDirectoryName(DemoServerProject())!, "bin", configuration, "net10.0", $"{DemoServerName}.dll"); + Path.Combine(Path.GetDirectoryName(DemoServerProject())!, "bin", configuration, "net11.0", $"{DemoServerName}.dll"); /// The demo's routable pages, which the page sweep reads its routes from. public static string DemoPagesDirectory() => diff --git a/src/Utilities/Borm/Tests/Bit.Borm.Tests.Mcp/Bit.Borm.Tests.Mcp.csproj b/src/Utilities/Borm/Tests/Bit.Borm.Tests.Mcp/Bit.Borm.Tests.Mcp.csproj index b5b4682cdd3..fcbaaac2c52 100644 --- a/src/Utilities/Borm/Tests/Bit.Borm.Tests.Mcp/Bit.Borm.Tests.Mcp.csproj +++ b/src/Utilities/Borm/Tests/Bit.Borm.Tests.Mcp/Bit.Borm.Tests.Mcp.csproj @@ -1,9 +1,9 @@  + exists on net11.0, while the library's own tests multi-target back to net8.0. --> - net10.0 + net11.0 Exe @@ -20,7 +20,7 @@ - + diff --git a/src/Utilities/Borm/Tests/Bit.Borm.Tests/Bit.Borm.Tests.csproj b/src/Utilities/Borm/Tests/Bit.Borm.Tests/Bit.Borm.Tests.csproj index 5ab8039b7e0..8fa7483e05d 100644 --- a/src/Utilities/Borm/Tests/Bit.Borm.Tests/Bit.Borm.Tests.csproj +++ b/src/Utilities/Borm/Tests/Bit.Borm.Tests/Bit.Borm.Tests.csproj @@ -1,7 +1,7 @@  - net10.0;net9.0;net8.0 + net11.0;net10.0;net9.0;net8.0 enable enable false diff --git a/src/Utilities/Bortable/Bit.Bortable/Bit.Bortable.csproj b/src/Utilities/Bortable/Bit.Bortable/Bit.Bortable.csproj index b098a948e32..32e1d681e22 100644 --- a/src/Utilities/Bortable/Bit.Bortable/Bit.Bortable.csproj +++ b/src/Utilities/Bortable/Bit.Bortable/Bit.Bortable.csproj @@ -3,7 +3,7 @@ - net10.0;net9.0;net8.0 + net11.0;net10.0;net9.0;net8.0 Bit.Bortable enable true @@ -22,6 +22,7 @@ + diff --git a/src/Utilities/Bortable/Demo/Client/Bit.Bortable.Demo.Client.csproj b/src/Utilities/Bortable/Demo/Client/Bit.Bortable.Demo.Client.csproj index e2ce58bc76a..76021a1cefa 100644 --- a/src/Utilities/Bortable/Demo/Client/Bit.Bortable.Demo.Client.csproj +++ b/src/Utilities/Bortable/Demo/Client/Bit.Bortable.Demo.Client.csproj @@ -1,7 +1,8 @@  - net10.0 + net11.0 + false enable enable true @@ -14,7 +15,7 @@ - + diff --git a/src/Utilities/Bortable/Demo/Server/Bit.Bortable.Demo.Server.csproj b/src/Utilities/Bortable/Demo/Server/Bit.Bortable.Demo.Server.csproj index cc72042992d..ae1c1cbf01d 100644 --- a/src/Utilities/Bortable/Demo/Server/Bit.Bortable.Demo.Server.csproj +++ b/src/Utilities/Bortable/Demo/Server/Bit.Bortable.Demo.Server.csproj @@ -1,7 +1,7 @@  - net10.0 + net11.0 enable enable true @@ -10,7 +10,7 @@ - + diff --git a/src/Utilities/Bortable/Demo/Server/Program.cs b/src/Utilities/Bortable/Demo/Server/Program.cs index 84cc5ed6405..999b371727a 100644 --- a/src/Utilities/Bortable/Demo/Server/Program.cs +++ b/src/Utilities/Bortable/Demo/Server/Program.cs @@ -67,11 +67,7 @@ var app = builder.Build(); -if (app.Environment.IsDevelopment()) -{ - app.UseWebAssemblyDebugging(); -} -else +if (app.Environment.IsDevelopment() is false) { app.UseExceptionHandler("/Error", createScopeForErrors: true); app.UseHsts(); diff --git a/src/Utilities/Bortable/Demo/Server/Properties/launchSettings.json b/src/Utilities/Bortable/Demo/Server/Properties/launchSettings.json index d4b54a18b7e..f461365bf09 100644 --- a/src/Utilities/Bortable/Demo/Server/Properties/launchSettings.json +++ b/src/Utilities/Bortable/Demo/Server/Properties/launchSettings.json @@ -5,7 +5,6 @@ "commandName": "Project", "dotnetRunMessages": true, "launchBrowser": true, - "inspectUri": "{wsProtocol}://{url.hostname}:{url.port}/_framework/debug/ws-proxy?browser={browserInspectUri}", "applicationUrl": "https://localhost:5561;http://localhost:5560", "environmentVariables": { "ASPNETCORE_ENVIRONMENT": "Development" diff --git a/src/Utilities/Bortable/Tests/Bit.Bortable.Tests.E2E/Bit.Bortable.Tests.E2E.csproj b/src/Utilities/Bortable/Tests/Bit.Bortable.Tests.E2E/Bit.Bortable.Tests.E2E.csproj index d022f068b6f..cb826eac6ae 100644 --- a/src/Utilities/Bortable/Tests/Bit.Bortable.Tests.E2E/Bit.Bortable.Tests.E2E.csproj +++ b/src/Utilities/Bortable/Tests/Bit.Bortable.Tests.E2E/Bit.Bortable.Tests.E2E.csproj @@ -1,7 +1,7 @@  - net10.0 + net11.0 enable enable false diff --git a/src/Utilities/Bortable/Tests/Bit.Bortable.Tests.E2E/Infrastructure/PlaywrightSession.cs b/src/Utilities/Bortable/Tests/Bit.Bortable.Tests.E2E/Infrastructure/PlaywrightSession.cs index e50ed862f03..49c942e3627 100644 --- a/src/Utilities/Bortable/Tests/Bit.Bortable.Tests.E2E/Infrastructure/PlaywrightSession.cs +++ b/src/Utilities/Bortable/Tests/Bit.Bortable.Tests.E2E/Infrastructure/PlaywrightSession.cs @@ -51,7 +51,7 @@ private static async Task StartAsync() if (browser is null) { playwright.Dispose(); - return Session.Fail("no Chromium-based browser could be launched. Run 'pwsh bin//net10.0/playwright.ps1 install chromium', or install Chrome or Edge."); + return Session.Fail("no Chromium-based browser could be launched. Run 'pwsh bin//net11.0/playwright.ps1 install chromium', or install Chrome or Edge."); } try diff --git a/src/Utilities/Bortable/Tests/Bit.Bortable.Tests.E2E/Infrastructure/RepoLayout.cs b/src/Utilities/Bortable/Tests/Bit.Bortable.Tests.E2E/Infrastructure/RepoLayout.cs index 88382bc3a4a..b09d5468473 100644 --- a/src/Utilities/Bortable/Tests/Bit.Bortable.Tests.E2E/Infrastructure/RepoLayout.cs +++ b/src/Utilities/Bortable/Tests/Bit.Bortable.Tests.E2E/Infrastructure/RepoLayout.cs @@ -11,7 +11,7 @@ public static class RepoLayout public static string DemoServerProject() => FindUpward(Path.Combine("Demo", "Server", $"{DemoServerName}.csproj")); public static string DemoServerAssembly(string configuration) => - Path.Combine(Path.GetDirectoryName(DemoServerProject())!, "bin", configuration, "net10.0", $"{DemoServerName}.dll"); + Path.Combine(Path.GetDirectoryName(DemoServerProject())!, "bin", configuration, "net11.0", $"{DemoServerName}.dll"); /// The demo's routable pages, which the page sweep reads its routes from. public static string DemoPagesDirectory() => diff --git a/src/Utilities/Bortable/Tests/Bit.Bortable.Tests.Mcp/Bit.Bortable.Tests.Mcp.csproj b/src/Utilities/Bortable/Tests/Bit.Bortable.Tests.Mcp/Bit.Bortable.Tests.Mcp.csproj index e4a0053bf5e..f6d8441fdf9 100644 --- a/src/Utilities/Bortable/Tests/Bit.Bortable.Tests.Mcp/Bit.Bortable.Tests.Mcp.csproj +++ b/src/Utilities/Bortable/Tests/Bit.Bortable.Tests.Mcp/Bit.Bortable.Tests.Mcp.csproj @@ -1,9 +1,9 @@  + exists on net11.0, while the library's own tests multi-target back to net8.0. --> - net10.0 + net11.0 Exe @@ -20,7 +20,7 @@ - + diff --git a/src/Utilities/Bortable/Tests/Bit.Bortable.Tests/Bit.Bortable.Tests.csproj b/src/Utilities/Bortable/Tests/Bit.Bortable.Tests/Bit.Bortable.Tests.csproj index c3f2d8f3aca..6e0ac0bab13 100644 --- a/src/Utilities/Bortable/Tests/Bit.Bortable.Tests/Bit.Bortable.Tests.csproj +++ b/src/Utilities/Bortable/Tests/Bit.Bortable.Tests/Bit.Bortable.Tests.csproj @@ -1,7 +1,7 @@  - net10.0;net9.0;net8.0 + net11.0;net10.0;net9.0;net8.0 enable enable false diff --git a/src/Utilities/Bsqlite/Bit.Bsqlite.Testing/Bit.Bsqlite.Testing.csproj b/src/Utilities/Bsqlite/Bit.Bsqlite.Testing/Bit.Bsqlite.Testing.csproj index 0f39eca102e..7ecc00bf3cb 100644 --- a/src/Utilities/Bsqlite/Bit.Bsqlite.Testing/Bit.Bsqlite.Testing.csproj +++ b/src/Utilities/Bsqlite/Bit.Bsqlite.Testing/Bit.Bsqlite.Testing.csproj @@ -3,7 +3,7 @@ - net10.0;net9.0;net8.0 + net11.0;net10.0;net9.0;net8.0 Bit.Bsqlite enable Test support for bit Bsqlite: an in-process IBsqliteTransport backed by Microsoft.Data.Sqlite, so the stack can be unit-tested on desktop .NET without a browser, and the MSTest conformance kit every storage provider must pass - inherit its test classes in your provider's test project and hand them your provider. @@ -22,11 +22,13 @@ + - + + diff --git a/src/Utilities/Bsqlite/Bit.Bsqlite/Bit.Bsqlite.csproj b/src/Utilities/Bsqlite/Bit.Bsqlite/Bit.Bsqlite.csproj index 7a2f7a1447e..a030cef69fa 100644 --- a/src/Utilities/Bsqlite/Bit.Bsqlite/Bit.Bsqlite.csproj +++ b/src/Utilities/Bsqlite/Bit.Bsqlite/Bit.Bsqlite.csproj @@ -3,7 +3,7 @@ - net10.0;net9.0;net8.0 + net11.0;net10.0;net9.0;net8.0 Bit.Bsqlite enable @@ -45,14 +45,21 @@ + + + + + - + once a newer one is resolved, so every target framework compiles against the newest version its EF Core + providers accept (2.x below net11.0, 3.x on net11.0), rather than the 2.1.6/2.1.10/2.1.11 each EF Core + band would pick on its own. --> + + diff --git a/src/Utilities/Bsqlite/Demo/Client/Bit.Bsqlite.Demo.Client.csproj b/src/Utilities/Bsqlite/Demo/Client/Bit.Bsqlite.Demo.Client.csproj index c2e38175306..225965dd914 100644 --- a/src/Utilities/Bsqlite/Demo/Client/Bit.Bsqlite.Demo.Client.csproj +++ b/src/Utilities/Bsqlite/Demo/Client/Bit.Bsqlite.Demo.Client.csproj @@ -1,7 +1,8 @@  - net10.0 + net11.0 + false enable enable true @@ -14,7 +15,7 @@ - + diff --git a/src/Utilities/Bsqlite/Demo/Data/Bit.Bsqlite.Demo.Data.csproj b/src/Utilities/Bsqlite/Demo/Data/Bit.Bsqlite.Demo.Data.csproj index 42f48d0ee7a..f626038602c 100644 --- a/src/Utilities/Bsqlite/Demo/Data/Bit.Bsqlite.Demo.Data.csproj +++ b/src/Utilities/Bsqlite/Demo/Data/Bit.Bsqlite.Demo.Data.csproj @@ -3,7 +3,7 @@ - net10.0 + net11.0 enable enable Bit.Bsqlite.Demo.Data @@ -12,7 +12,7 @@ - + diff --git a/src/Utilities/Bsqlite/Demo/Domain/Bit.Bsqlite.Demo.Domain.csproj b/src/Utilities/Bsqlite/Demo/Domain/Bit.Bsqlite.Demo.Domain.csproj index 0275d7247b1..3b49b4792e5 100644 --- a/src/Utilities/Bsqlite/Demo/Domain/Bit.Bsqlite.Demo.Domain.csproj +++ b/src/Utilities/Bsqlite/Demo/Domain/Bit.Bsqlite.Demo.Domain.csproj @@ -3,7 +3,7 @@ - net10.0 + net11.0 enable enable Bit.Bsqlite.Demo.Domain diff --git a/src/Utilities/Bsqlite/Demo/Server/Bit.Bsqlite.Demo.Server.csproj b/src/Utilities/Bsqlite/Demo/Server/Bit.Bsqlite.Demo.Server.csproj index f7af95a6ad2..56055d5fcac 100644 --- a/src/Utilities/Bsqlite/Demo/Server/Bit.Bsqlite.Demo.Server.csproj +++ b/src/Utilities/Bsqlite/Demo/Server/Bit.Bsqlite.Demo.Server.csproj @@ -1,7 +1,7 @@  - net10.0 + net11.0 enable enable true @@ -10,9 +10,9 @@ - + - + diff --git a/src/Utilities/Bsqlite/Demo/Server/Program.cs b/src/Utilities/Bsqlite/Demo/Server/Program.cs index 2dfce01b70b..2662010f55c 100644 --- a/src/Utilities/Bsqlite/Demo/Server/Program.cs +++ b/src/Utilities/Bsqlite/Demo/Server/Program.cs @@ -95,11 +95,7 @@ await DemoData.SeedIfEmptyAsync(db); } -if (app.Environment.IsDevelopment()) -{ - app.UseWebAssemblyDebugging(); -} -else +if (app.Environment.IsDevelopment() is false) { app.UseExceptionHandler("/Error", createScopeForErrors: true); app.UseHsts(); diff --git a/src/Utilities/Bsqlite/Demo/Server/Properties/launchSettings.json b/src/Utilities/Bsqlite/Demo/Server/Properties/launchSettings.json index 6584cb2b880..0e238cf2389 100644 --- a/src/Utilities/Bsqlite/Demo/Server/Properties/launchSettings.json +++ b/src/Utilities/Bsqlite/Demo/Server/Properties/launchSettings.json @@ -5,7 +5,6 @@ "commandName": "Project", "dotnetRunMessages": true, "launchBrowser": true, - "inspectUri": "{wsProtocol}://{url.hostname}:{url.port}/_framework/debug/ws-proxy?browser={browserInspectUri}", "applicationUrl": "https://localhost:5297;http://localhost:5296", "environmentVariables": { "ASPNETCORE_ENVIRONMENT": "Development" diff --git a/src/Utilities/Bsqlite/Tests/Bit.Bsqlite.Tests.E2E/Bit.Bsqlite.Tests.E2E.csproj b/src/Utilities/Bsqlite/Tests/Bit.Bsqlite.Tests.E2E/Bit.Bsqlite.Tests.E2E.csproj index 9b92dcb164b..36b30ca39e1 100644 --- a/src/Utilities/Bsqlite/Tests/Bit.Bsqlite.Tests.E2E/Bit.Bsqlite.Tests.E2E.csproj +++ b/src/Utilities/Bsqlite/Tests/Bit.Bsqlite.Tests.E2E/Bit.Bsqlite.Tests.E2E.csproj @@ -1,7 +1,7 @@  - net10.0 + net11.0 enable enable false diff --git a/src/Utilities/Bsqlite/Tests/Bit.Bsqlite.Tests.E2E/Infrastructure/PlaywrightSession.cs b/src/Utilities/Bsqlite/Tests/Bit.Bsqlite.Tests.E2E/Infrastructure/PlaywrightSession.cs index c0eeeceba82..a71423478a8 100644 --- a/src/Utilities/Bsqlite/Tests/Bit.Bsqlite.Tests.E2E/Infrastructure/PlaywrightSession.cs +++ b/src/Utilities/Bsqlite/Tests/Bit.Bsqlite.Tests.E2E/Infrastructure/PlaywrightSession.cs @@ -58,7 +58,7 @@ private static async Task StartAsync() if (browser is null) { playwright.Dispose(); - return Session.Fail($"no {E2EEnvironment.Browser} browser could be launched. Run 'pwsh bin//net10.0/playwright.ps1 install {E2EEnvironment.Browser}'" + return Session.Fail($"no {E2EEnvironment.Browser} browser could be launched. Run 'pwsh bin//net11.0/playwright.ps1 install {E2EEnvironment.Browser}'" + (E2EEnvironment.Browser == "chromium" ? ", or install Chrome or Edge." : ".")); } diff --git a/src/Utilities/Bsqlite/Tests/Bit.Bsqlite.Tests.E2E/Infrastructure/RepoLayout.cs b/src/Utilities/Bsqlite/Tests/Bit.Bsqlite.Tests.E2E/Infrastructure/RepoLayout.cs index 0e798227a1a..35733da9f6c 100644 --- a/src/Utilities/Bsqlite/Tests/Bit.Bsqlite.Tests.E2E/Infrastructure/RepoLayout.cs +++ b/src/Utilities/Bsqlite/Tests/Bit.Bsqlite.Tests.E2E/Infrastructure/RepoLayout.cs @@ -29,7 +29,7 @@ public static class RepoLayout public static string DemoServerProject() => Path.Combine(BsqliteRoot(), "Demo", "Server", $"{DemoServerName}.csproj"); public static string DemoServerAssembly(string configuration) => - Path.Combine(Path.GetDirectoryName(DemoServerProject())!, "bin", configuration, "net10.0", $"{DemoServerName}.dll"); + Path.Combine(Path.GetDirectoryName(DemoServerProject())!, "bin", configuration, "net11.0", $"{DemoServerName}.dll"); private static string FindUpward(string relativePath) { diff --git a/src/Utilities/Bsqlite/Tests/Bit.Bsqlite.Tests.Mcp/Bit.Bsqlite.Tests.Mcp.csproj b/src/Utilities/Bsqlite/Tests/Bit.Bsqlite.Tests.Mcp/Bit.Bsqlite.Tests.Mcp.csproj index f07d9a5eae8..d935d94ae6a 100644 --- a/src/Utilities/Bsqlite/Tests/Bit.Bsqlite.Tests.Mcp/Bit.Bsqlite.Tests.Mcp.csproj +++ b/src/Utilities/Bsqlite/Tests/Bit.Bsqlite.Tests.Mcp/Bit.Bsqlite.Tests.Mcp.csproj @@ -1,9 +1,9 @@  + exists on net11.0, while the library's own tests multi-target back to net8.0. --> - net10.0 + net11.0 Exe @@ -20,7 +20,7 @@ - + diff --git a/src/Utilities/Bsqlite/Tests/Bit.Bsqlite.Tests/Bit.Bsqlite.Tests.csproj b/src/Utilities/Bsqlite/Tests/Bit.Bsqlite.Tests/Bit.Bsqlite.Tests.csproj index fd6b89bed30..0cdbac3586d 100644 --- a/src/Utilities/Bsqlite/Tests/Bit.Bsqlite.Tests/Bit.Bsqlite.Tests.csproj +++ b/src/Utilities/Bsqlite/Tests/Bit.Bsqlite.Tests/Bit.Bsqlite.Tests.csproj @@ -1,7 +1,7 @@  - net10.0;net9.0;net8.0 + net11.0;net10.0;net9.0;net8.0 enable enable false @@ -25,6 +25,7 @@ + @@ -33,12 +34,12 @@ - + sides. The demo only exists for net11.0, so the tests that load it do too. --> + - + diff --git a/src/Websites/Careers/src/Bit.Websites.Careers.Client/Bit.Websites.Careers.Client.csproj b/src/Websites/Careers/src/Bit.Websites.Careers.Client/Bit.Websites.Careers.Client.csproj index 6dbc8280e9a..804038df960 100644 --- a/src/Websites/Careers/src/Bit.Websites.Careers.Client/Bit.Websites.Careers.Client.csproj +++ b/src/Websites/Careers/src/Bit.Websites.Careers.Client/Bit.Websites.Careers.Client.csproj @@ -1,7 +1,8 @@  - net10.0 + net11.0 + false true Default true @@ -11,13 +12,12 @@ false false false - false true - + @@ -26,20 +26,20 @@ - - - - - - + + + + + + all runtime; build; native; contentfiles; analyzers; buildtransitive - + all runtime; build; native; contentfiles; analyzers; buildtransitive - + diff --git a/src/Websites/Careers/src/Bit.Websites.Careers.Client/wwwroot/service-worker.published.js b/src/Websites/Careers/src/Bit.Websites.Careers.Client/wwwroot/service-worker.published.js index c5dcf14fc1c..64fea6ac2c7 100644 --- a/src/Websites/Careers/src/Bit.Websites.Careers.Client/wwwroot/service-worker.published.js +++ b/src/Websites/Careers/src/Bit.Websites.Careers.Client/wwwroot/service-worker.published.js @@ -1,4 +1,4 @@ -// bit version: 10.7.0-pre-02 +// bit version: 11.0.0-pre-10 // https://github.com/bitfoundation/bitplatform/tree/develop/src/Bswup self.assetsInclude = []; diff --git a/src/Websites/Careers/src/Bit.Websites.Careers.Server/Bit.Websites.Careers.Server.csproj b/src/Websites/Careers/src/Bit.Websites.Careers.Server/Bit.Websites.Careers.Server.csproj index 80a4b326159..90d2ab1ca76 100644 --- a/src/Websites/Careers/src/Bit.Websites.Careers.Server/Bit.Websites.Careers.Server.csproj +++ b/src/Websites/Careers/src/Bit.Websites.Careers.Server/Bit.Websites.Careers.Server.csproj @@ -1,7 +1,7 @@ - net10.0 + net11.0 true true @@ -13,18 +13,18 @@ - - + + all runtime; build; native; contentfiles; analyzers; buildtransitive - + all runtime; build; native; contentfiles; analyzers; buildtransitive - - - + + + diff --git a/src/Websites/Careers/src/Bit.Websites.Careers.Server/Properties/launchSettings.json b/src/Websites/Careers/src/Bit.Websites.Careers.Server/Properties/launchSettings.json index 7c9462e500b..378a2cff059 100644 --- a/src/Websites/Careers/src/Bit.Websites.Careers.Server/Properties/launchSettings.json +++ b/src/Websites/Careers/src/Bit.Websites.Careers.Server/Properties/launchSettings.json @@ -14,7 +14,6 @@ "commandName": "Project", "dotnetRunMessages": true, "launchBrowser": true, - "inspectUri": "{wsProtocol}://{url.hostname}:{url.port}/_framework/debug/ws-proxy?browser={browserInspectUri}", "applicationUrl": "http://localhost:5080;https://localhost:5081", "environmentVariables": { "ASPNETCORE_ENVIRONMENT": "Development" diff --git a/src/Websites/Careers/src/Bit.Websites.Careers.Server/Startup/Middlewares.cs b/src/Websites/Careers/src/Bit.Websites.Careers.Server/Startup/Middlewares.cs index f091dee2bc2..eaf7a582fed 100644 --- a/src/Websites/Careers/src/Bit.Websites.Careers.Server/Startup/Middlewares.cs +++ b/src/Websites/Careers/src/Bit.Websites.Careers.Server/Startup/Middlewares.cs @@ -15,11 +15,7 @@ public static void Use(WebApplication app, IWebHostEnvironment env, IConfigurati { app.UseForwardedHeaders(); - if (env.IsDevelopment()) - { - app.UseWebAssemblyDebugging(); - } - else + if (env.IsDevelopment() is false) { app.UseHttpsRedirection(); app.UseResponseCompression(); diff --git a/src/Websites/Careers/src/Bit.Websites.Careers.Shared/Bit.Websites.Careers.Shared.csproj b/src/Websites/Careers/src/Bit.Websites.Careers.Shared/Bit.Websites.Careers.Shared.csproj index dfd4c11b3a3..241778e5fe7 100644 --- a/src/Websites/Careers/src/Bit.Websites.Careers.Shared/Bit.Websites.Careers.Shared.csproj +++ b/src/Websites/Careers/src/Bit.Websites.Careers.Shared/Bit.Websites.Careers.Shared.csproj @@ -1,22 +1,22 @@  - net10.0 + net11.0 en-US - + all runtime; build; native; contentfiles; analyzers; buildtransitive - + all runtime; build; native; contentfiles; analyzers; buildtransitive - - - + + + compile; build; native; contentfiles; analyzers; buildtransitive diff --git a/src/Websites/Careers/src/Directory.Build.props b/src/Websites/Careers/src/Directory.Build.props index 773561a44eb..f5bdce0bf92 100644 --- a/src/Websites/Careers/src/Directory.Build.props +++ b/src/Websites/Careers/src/Directory.Build.props @@ -1,4 +1,4 @@ - + 14.0 diff --git a/src/Websites/Platform/src/Bit.Websites.Platform.Client/Bit.Websites.Platform.Client.csproj b/src/Websites/Platform/src/Bit.Websites.Platform.Client/Bit.Websites.Platform.Client.csproj index 12367ff2b22..8deaf842a90 100644 --- a/src/Websites/Platform/src/Bit.Websites.Platform.Client/Bit.Websites.Platform.Client.csproj +++ b/src/Websites/Platform/src/Bit.Websites.Platform.Client/Bit.Websites.Platform.Client.csproj @@ -1,10 +1,11 @@  - net10.0 + net11.0 + false true Default - true @@ -14,10 +15,6 @@ false false false - - false true @@ -26,28 +23,28 @@ - + - - - - - - - + + + + + + + all runtime; build; native; contentfiles; analyzers; buildtransitive - + all runtime; build; native; contentfiles; analyzers; buildtransitive - - + + diff --git a/src/Websites/Platform/src/Bit.Websites.Platform.Client/wwwroot/service-worker.published.js b/src/Websites/Platform/src/Bit.Websites.Platform.Client/wwwroot/service-worker.published.js index 88a36ae10a0..b1b500c81d6 100644 --- a/src/Websites/Platform/src/Bit.Websites.Platform.Client/wwwroot/service-worker.published.js +++ b/src/Websites/Platform/src/Bit.Websites.Platform.Client/wwwroot/service-worker.published.js @@ -1,4 +1,4 @@ -// bit version: 10.7.0-pre-02 +// bit version: 11.0.0-pre-10 // https://github.com/bitfoundation/bitplatform/tree/develop/src/Bswup self.assetsInclude = []; diff --git a/src/Websites/Platform/src/Bit.Websites.Platform.Server/Bit.Websites.Platform.Server.csproj b/src/Websites/Platform/src/Bit.Websites.Platform.Server/Bit.Websites.Platform.Server.csproj index f8c7654ad3e..5ec3540f6a6 100644 --- a/src/Websites/Platform/src/Bit.Websites.Platform.Server/Bit.Websites.Platform.Server.csproj +++ b/src/Websites/Platform/src/Bit.Websites.Platform.Server/Bit.Websites.Platform.Server.csproj @@ -1,7 +1,7 @@ - net10.0 + net11.0 @@ -16,20 +16,20 @@ - - + + all runtime; build; native; contentfiles; analyzers; buildtransitive - + all runtime; build; native; contentfiles; analyzers; buildtransitive - - - + + + diff --git a/src/Websites/Platform/src/Bit.Websites.Platform.Server/Properties/launchSettings.json b/src/Websites/Platform/src/Bit.Websites.Platform.Server/Properties/launchSettings.json index 71267e16ba4..d4248eaee6e 100644 --- a/src/Websites/Platform/src/Bit.Websites.Platform.Server/Properties/launchSettings.json +++ b/src/Websites/Platform/src/Bit.Websites.Platform.Server/Properties/launchSettings.json @@ -14,7 +14,6 @@ "commandName": "Project", "dotnetRunMessages": true, "launchBrowser": true, - "inspectUri": "{wsProtocol}://{url.hostname}:{url.port}/_framework/debug/ws-proxy?browser={browserInspectUri}", "applicationUrl": "http://localhost:5055;https://localhost:5066", "environmentVariables": { "ASPNETCORE_ENVIRONMENT": "Development" diff --git a/src/Websites/Platform/src/Bit.Websites.Platform.Server/Startup/Middlewares.cs b/src/Websites/Platform/src/Bit.Websites.Platform.Server/Startup/Middlewares.cs index 56d4d2d2a65..90280806634 100644 --- a/src/Websites/Platform/src/Bit.Websites.Platform.Server/Startup/Middlewares.cs +++ b/src/Websites/Platform/src/Bit.Websites.Platform.Server/Startup/Middlewares.cs @@ -19,11 +19,7 @@ public static void Use(WebApplication app, IWebHostEnvironment env, IConfigurati { app.UseForwardedHeaders(); - if (env.IsDevelopment()) - { - app.UseWebAssemblyDebugging(); - } - else + if (env.IsDevelopment() is false) { app.UseHttpsRedirection(); app.UseResponseCompression(); diff --git a/src/Websites/Platform/src/Bit.Websites.Platform.Shared/Bit.Websites.Platform.Shared.csproj b/src/Websites/Platform/src/Bit.Websites.Platform.Shared/Bit.Websites.Platform.Shared.csproj index dfd4c11b3a3..241778e5fe7 100644 --- a/src/Websites/Platform/src/Bit.Websites.Platform.Shared/Bit.Websites.Platform.Shared.csproj +++ b/src/Websites/Platform/src/Bit.Websites.Platform.Shared/Bit.Websites.Platform.Shared.csproj @@ -1,22 +1,22 @@  - net10.0 + net11.0 en-US - + all runtime; build; native; contentfiles; analyzers; buildtransitive - + all runtime; build; native; contentfiles; analyzers; buildtransitive - - - + + + compile; build; native; contentfiles; analyzers; buildtransitive diff --git a/src/Websites/Platform/src/Directory.Build.props b/src/Websites/Platform/src/Directory.Build.props index fbc2c3b36eb..b63a7d3ea38 100644 --- a/src/Websites/Platform/src/Directory.Build.props +++ b/src/Websites/Platform/src/Directory.Build.props @@ -1,4 +1,4 @@ - + preview diff --git a/src/Websites/Sales/src/Bit.Websites.Sales.Client/Bit.Websites.Sales.Client.csproj b/src/Websites/Sales/src/Bit.Websites.Sales.Client/Bit.Websites.Sales.Client.csproj index 6a8d1d760f3..7a5376936d6 100644 --- a/src/Websites/Sales/src/Bit.Websites.Sales.Client/Bit.Websites.Sales.Client.csproj +++ b/src/Websites/Sales/src/Bit.Websites.Sales.Client/Bit.Websites.Sales.Client.csproj @@ -1,7 +1,8 @@  - net10.0 + net11.0 + false true Default true @@ -11,13 +12,12 @@ false false false - false true - + @@ -26,20 +26,20 @@ - - - - - - + + + + + + all runtime; build; native; contentfiles; analyzers; buildtransitive - + all runtime; build; native; contentfiles; analyzers; buildtransitive - + diff --git a/src/Websites/Sales/src/Bit.Websites.Sales.Client/wwwroot/service-worker.published.js b/src/Websites/Sales/src/Bit.Websites.Sales.Client/wwwroot/service-worker.published.js index e7db83c4aa2..b40c7f737d5 100644 --- a/src/Websites/Sales/src/Bit.Websites.Sales.Client/wwwroot/service-worker.published.js +++ b/src/Websites/Sales/src/Bit.Websites.Sales.Client/wwwroot/service-worker.published.js @@ -1,4 +1,4 @@ -// bit version: 10.7.0-pre-02 +// bit version: 11.0.0-pre-10 // https://github.com/bitfoundation/bitplatform/tree/develop/src/Bswup self.assetsInclude = []; diff --git a/src/Websites/Sales/src/Bit.Websites.Sales.Server/Bit.Websites.Sales.Server.csproj b/src/Websites/Sales/src/Bit.Websites.Sales.Server/Bit.Websites.Sales.Server.csproj index c0333c53e6e..ba8e6ba6e1a 100644 --- a/src/Websites/Sales/src/Bit.Websites.Sales.Server/Bit.Websites.Sales.Server.csproj +++ b/src/Websites/Sales/src/Bit.Websites.Sales.Server/Bit.Websites.Sales.Server.csproj @@ -1,7 +1,7 @@ - net10.0 + net11.0 true true @@ -13,18 +13,18 @@ - - + + all runtime; build; native; contentfiles; analyzers; buildtransitive - + all runtime; build; native; contentfiles; analyzers; buildtransitive - - - + + + diff --git a/src/Websites/Sales/src/Bit.Websites.Sales.Server/Properties/launchSettings.json b/src/Websites/Sales/src/Bit.Websites.Sales.Server/Properties/launchSettings.json index 01bd023c72b..fdbda58f7b6 100644 --- a/src/Websites/Sales/src/Bit.Websites.Sales.Server/Properties/launchSettings.json +++ b/src/Websites/Sales/src/Bit.Websites.Sales.Server/Properties/launchSettings.json @@ -14,7 +14,6 @@ "commandName": "Project", "dotnetRunMessages": true, "launchBrowser": true, - "inspectUri": "{wsProtocol}://{url.hostname}:{url.port}/_framework/debug/ws-proxy?browser={browserInspectUri}", "applicationUrl": "http://localhost:5070;https://localhost:5071", "environmentVariables": { "ASPNETCORE_ENVIRONMENT": "Development" diff --git a/src/Websites/Sales/src/Bit.Websites.Sales.Server/Startup/Middlewares.cs b/src/Websites/Sales/src/Bit.Websites.Sales.Server/Startup/Middlewares.cs index d95ed2e5316..3b1f0c31576 100644 --- a/src/Websites/Sales/src/Bit.Websites.Sales.Server/Startup/Middlewares.cs +++ b/src/Websites/Sales/src/Bit.Websites.Sales.Server/Startup/Middlewares.cs @@ -15,11 +15,7 @@ public static void Use(WebApplication app, IWebHostEnvironment env, IConfigurati { app.UseForwardedHeaders(); - if (env.IsDevelopment()) - { - app.UseWebAssemblyDebugging(); - } - else + if (env.IsDevelopment() is false) { app.UseHttpsRedirection(); app.UseResponseCompression(); diff --git a/src/Websites/Sales/src/Bit.Websites.Sales.Shared/Bit.Websites.Sales.Shared.csproj b/src/Websites/Sales/src/Bit.Websites.Sales.Shared/Bit.Websites.Sales.Shared.csproj index dfd4c11b3a3..241778e5fe7 100644 --- a/src/Websites/Sales/src/Bit.Websites.Sales.Shared/Bit.Websites.Sales.Shared.csproj +++ b/src/Websites/Sales/src/Bit.Websites.Sales.Shared/Bit.Websites.Sales.Shared.csproj @@ -1,22 +1,22 @@  - net10.0 + net11.0 en-US - + all runtime; build; native; contentfiles; analyzers; buildtransitive - + all runtime; build; native; contentfiles; analyzers; buildtransitive - - - + + + compile; build; native; contentfiles; analyzers; buildtransitive diff --git a/src/Websites/Sales/src/Directory.Build.props b/src/Websites/Sales/src/Directory.Build.props index adcc42b7679..0a450666c15 100644 --- a/src/Websites/Sales/src/Directory.Build.props +++ b/src/Websites/Sales/src/Directory.Build.props @@ -1,4 +1,4 @@ - + 14.0 diff --git a/src/global.json b/src/global.json index e28ed3df4a7..47ca5c294ee 100644 --- a/src/global.json +++ b/src/global.json @@ -1,6 +1,6 @@ { "sdk": { - "version": "10.0.402", + "version": "11.0.100-rc.2.26504.105", "rollForward": "disable" }, "test": {