Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .github/agents/dependency-update.md
Original file line number Diff line number Diff line change
Expand Up @@ -90,7 +90,7 @@ higher-numbered lines exist there.
**TypeScript is held at 5.9.3 in the libraries.** 7.x is the Go rewrite
(`microsoft/typescript-go`), not an incremental release. `Boilerplate.Client.Core` is the canary and
is already on 7.0.2 — if a bump is wanted, move one library project, build it, and only then the
rest. Do not move all fifteen at once.
rest. Do not move all sixteen at once.

**Vitest is held at `^3`** in `src/Bmotion/Tests/bit-bmotion-js` and `src/Bswup/Tests/bit-bswup-js`.

Expand Down
4 changes: 2 additions & 2 deletions .github/agents/test-platform.md
Original file line number Diff line number Diff line change
Expand Up @@ -351,7 +351,7 @@ does not serve silently gets the newest one it does.
`feat(release): v-X.Y.Z` commit on `develop` has its tag: an untagged release is answered by the previous one,
without a word.
2. **What it does serve.** `mcp -McpVersion X.Y.Z` for each. The library tools (`Search*`, `Get*` and `Inspect*` of BlazorUI,
Brouter, Butil, Bswup, Bmotion and - from the first release that ships them - Bink, Bonboarding, Blex and Bmage) and the source tools (`FindBitPlatformSymbols`, `GetBitPlatformSymbolSource`,
Brouter, Butil, Bswup, Bmotion and - from the first release that ships them - Bink, Balette, Bonboarding, Blex and Bmage) and the source tools (`FindBitPlatformSymbols`, `GetBitPlatformSymbolSource`,
`SearchBitPlatformCode`) must all be there. Only the five shared ones (`AskGitHubRepository`,
`SendBitPlatformFeedback`, `microsoft_docs_*`) means no release is served at all, and the README's
*PlatformWebsite's MCP* section says why that happens. The server version it reports is the website's own build,
Expand All @@ -370,7 +370,7 @@ does not serve silently gets the newest one it does.
4. **The answers are good.** Put one real task to each library's `Search` tool, worded the way a developer would
describe it - BlazorUI "a dropdown the user can also type into", Butil "copy text to the clipboard", Bmotion "fade
a list item in", Brouter "a route parameter that must be a number", Bswup "show the download progress of the app's
update", Bink "a signature pad that exports a PNG", Bonboarding "a step that waits for a panel that loads later", Blex "a counter whose value survives a page reload", Bmage "shrink an uploaded photo under 200 KB without its location" - follow up with the `Get` tool it points to, and ask `SearchBitPlatformCode` about the Boilerplate. An
update", Bink "a signature pad that exports a PNG", Balette "a command that asks for a name before it runs", Bonboarding "a step that waits for a panel that loads later", Blex "a counter whose value survives a page reload", Bmage "shrink an uploaded photo under 200 KB without its location" - follow up with the `Get` tool it points to, and ask `SearchBitPlatformCode` about the Boilerplate. An
answer must be on topic, specific and true to the version asked for; one that answers wrongly is a failure too.

Like an E2E failure, an MCP problem is fixed in `src/Websites/Platform` or in the library's own MCP server, and goes
Expand Down
4 changes: 2 additions & 2 deletions .github/copilot-instructions.md
Original file line number Diff line number Diff line change
Expand Up @@ -46,8 +46,8 @@
## Rules

**RULE 1:** If a task (question, code modification or review) involves the use of bit BlazorUI components (e.g., `BitButton`, `BitTooltip`, `BitTextField`),
or refers to `bitplatform`, `bit Bswup`, `bit Butil`, `bit Bmotion`, `bit Bink`, `bit Bonboarding`, `bit Blex`, `bit Bmage`, `bit Brouter`, or `bit Boilerplate`, or involves UI components without explicitly specifying their UI toolkit,
you **MUST** use the `bitplatform` MCP server's tools - start with the matching `Search<Library>` tool (e.g. `SearchBitBlazorUI`, `SearchBswup`, `SearchButil`, `SearchBmotion`, `SearchBink`, `SearchBonboarding`, `SearchBlex`, `SearchBmage`, `SearchBrouter`) and follow the calls it names - to find the correct implementation and usage patterns before writing or changing any code.
or refers to `bitplatform`, `bit Bswup`, `bit Butil`, `bit Bmotion`, `bit Bink`, `bit Balette`, `bit Bonboarding`, `bit Blex`, `bit Bmage`, `bit Brouter`, or `bit Boilerplate`, or involves UI components without explicitly specifying their UI toolkit,
you **MUST** use the `bitplatform` MCP server's tools - start with the matching `Search<Library>` tool (e.g. `SearchBitBlazorUI`, `SearchBswup`, `SearchButil`, `SearchBmotion`, `SearchBink`, `SearchBalette`, `SearchBonboarding`, `SearchBlex`, `SearchBmage`, `SearchBrouter`) and follow the calls it names - to find the correct implementation and usage patterns before writing or changing any code.

**End of RULE 1**

Expand Down
6 changes: 6 additions & 0 deletions .github/workflows/all.cd.yml
Original file line number Diff line number Diff line change
Expand Up @@ -77,6 +77,12 @@ jobs:
uses: ./.github/workflows/bink.demo.cd.yml
secrets: inherit

balette_demo:
name: balette demo
if: inputs.server
uses: ./.github/workflows/balette.demo.cd.yml
secrets: inherit

bonboarding_demo:
name: bonboarding demo
if: inputs.server
Expand Down
14 changes: 14 additions & 0 deletions .github/workflows/all.ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -59,6 +59,10 @@ on:
description: Bink solution
type: boolean
default: true
balette:
description: Balette solution
type: boolean
default: true
blex:
description: Blex solution
type: boolean
Expand Down Expand Up @@ -603,6 +607,11 @@ jobs:
dotnet build src/Bink/Bit.Bink/Bit.Bink.csproj -c Release -p:GeneratePackageOnBuild=false -p:WarningLevel=0 -p:RunCodeAnalysis=false
dotnet pack src/Bink/Bit.Bink/Bit.Bink.csproj --output ./packages --configuration Release

- name: Build and pack Balette
run: |
dotnet build src/Balette/Bit.Balette/Bit.Balette.csproj -c Release -p:GeneratePackageOnBuild=false -p:WarningLevel=0 -p:RunCodeAnalysis=false
dotnet pack src/Balette/Bit.Balette/Bit.Balette.csproj --output ./packages --configuration Release

- name: Build and pack Blex
run: |
dotnet build src/Blex/Bit.Blex/Bit.Blex.csproj -c Release -p:GeneratePackageOnBuild=false -p:WarningLevel=0 -p:RunCodeAnalysis=false
Expand Down Expand Up @@ -701,6 +710,11 @@ jobs:
if: ${{ inputs.bink }}
uses: ./.github/workflows/bit.ci.Bink.yml

balette:
name: balette
if: ${{ inputs.balette }}
uses: ./.github/workflows/bit.ci.Balette.yml

blex:
name: blex
if: ${{ inputs.blex }}
Expand Down
75 changes: 75 additions & 0 deletions .github/workflows/balette.demo.cd.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,75 @@
name: Balette Demo CD

on:
workflow_dispatch:
workflow_call:

permissions:
contents: read

jobs:

build_blazor_wasm:
name: build blazor wasm
runs-on: ubuntu-24.04

steps:

- name: Checkout source code
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
with:
persist-credentials: false

- name: Setup .NET
uses: actions/setup-dotnet@a98b56852c35b8e3190ac28c8c2271da59106c68 # v6.0.0
with:
global-json-file: src/global.json

- uses: actions/setup-node@949feb2413d6458794dcd2491c4babbbce0c15c1 # v7.1.0
with:
node-version: 24

- name: Install wasm
run: cd src && dotnet workload install wasm-tools

- name: Publish
run: dotnet publish src/Balette/Demo/Server/Bit.Balette.Demo.Server.csproj -c Release -o server -p:Version="${{ vars.APP_VERSION}}" -p:InvariantGlobalization=true

# Server-owned; C:\inetpub keeps its own copies.
- name: Strip server-owned files from bundle
run: rm -fv server/appsettings*.json server/AppCertificate.* server/AppleAuthKey.p8 server/*.pfx

- name: Upload artifact
uses: actions/upload-artifact@cf430e030ddbb5b0abf93d22962f4752f3646cd9 # v7.0.2
with:
name: BaletteDemo
path: server
include-hidden-files: true

deploy_server:
name: deploy
needs: build_blazor_wasm
runs-on: [self-hosted, Windows, X64, bitplatform-iis]
environment:
name: production
url: 'https://balette.bitplatform.dev'

steps:

- name: Checkout deploy action
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
with:
persist-credentials: false
fetch-depth: 1
sparse-checkout: .github/actions

- name: Deploy
uses: ./.github/actions/deploy-to-server
with:
artifact-name: BaletteDemo
app-pool: Balette
site-path: C:\inetpub\BaletteDemo
sentinel-file: Bit.Balette.Demo.Server.dll
health-check-url: 'https://balette.bitplatform.dev/'
cloudflare-zone-id: ${{ secrets.CLOUDFLARE_ZONE_ID }}
cloudflare-token: ${{ secrets.CLOUDFLARE_TOKEN }}
61 changes: 61 additions & 0 deletions .github/workflows/bit.ci.Balette.e2e.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
name: bit platform CI - Balette E2E

# The demo app in Chromium: opening and closing, typing and ranking, keyboard navigation, nested pages, modes and
# async sources, global shortcuts and sequences, theming and every demo page, against the Release build that
# ships. It takes far longer than the build-and-unit pipeline (bit.ci.Balette.yml), so it runs only when started
# by hand. See src/Balette/Tests/Bit.Balette.Tests.E2E/README.md for what the browser suite proves and how to run
# it locally.

on:
workflow_dispatch:

env:
DOTNET_SYSTEM_CONSOLE_ALLOW_ANSI_COLOR_REDIRECTION: true

permissions:
contents: read

jobs:

e2e:
name: Balette E2E (Chromium)
runs-on: ubuntu-24.04

steps:

- name: Checkout source code
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
with:
persist-credentials: false

- name: Setup .NET 10.0
uses: actions/setup-dotnet@a98b56852c35b8e3190ac28c8c2271da59106c68 # v6.0.0
with:
global-json-file: src/global.json

- uses: actions/setup-node@949feb2413d6458794dcd2491c4babbbce0c15c1 # v7.1.0
with:
node-version: 24

- name: Build the demo and the E2E suite
run: |
dotnet build src/Balette/Demo/Server/Bit.Balette.Demo.Server.csproj -c Release
dotnet build src/Balette/Tests/Bit.Balette.Tests.E2E/Bit.Balette.Tests.E2E.csproj -c Release

- name: Install Playwright Chromium
run: pwsh src/Balette/Tests/Bit.Balette.Tests.E2E/bin/Release/net10.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.
run: >
cd src/Balette/Tests/Bit.Balette.Tests.E2E &&
dotnet test -c Release --no-build
--report-trx --report-trx-filename balette-e2e.trx

- name: Upload test results
if: always()
uses: actions/upload-artifact@cf430e030ddbb5b0abf93d22962f4752f3646cd9 # v7.0.2
with:
name: balette-e2e
path: '**/balette-e2e.trx'
if-no-files-found: ignore
65 changes: 65 additions & 0 deletions .github/workflows/bit.ci.Balette.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,65 @@
name: bit platform CI - Balette

# Build, model, search and component tests, and MCP server tests. The browser suite lives in
# bit.ci.Balette.e2e.yml and runs on demand only.

on:
workflow_dispatch:
workflow_call:
pull_request:
paths:
- 'src/Balette/**'

env:
DOTNET_SYSTEM_CONSOLE_ALLOW_ANSI_COLOR_REDIRECTION: true

permissions:
contents: read

jobs:

# Its `if:` skips the job on Release/Prerelease/Version PRs.
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

steps:

- name: Checkout source code
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
with:
persist-credentials: false

- name: Setup .NET 10.0
uses: actions/setup-dotnet@a98b56852c35b8e3190ac28c8c2271da59106c68 # v6.0.0
with:
global-json-file: src/global.json

- name: Setup .NET 9.0
uses: actions/setup-dotnet@a98b56852c35b8e3190ac28c8c2271da59106c68 # v6.0.0
with:
dotnet-version: 9.0.x

- name: Setup .NET 8.0
uses: actions/setup-dotnet@a98b56852c35b8e3190ac28c8c2271da59106c68 # v6.0.0
with:
dotnet-version: 8.0.x

- uses: actions/setup-node@949feb2413d6458794dcd2491c4babbbce0c15c1 # v7.1.0
with:
node-version: 24

- name: dotnet workload restore
run: cd src/Balette && dotnet workload restore

- name: dotnet build
run: dotnet build src/Balette/Bit.Balette.slnx

- name: dotnet test (model, search + component tests, net8.0/net9.0/net10.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/Balette/Tests/Bit.Balette.Tests && dotnet test --no-build

- name: dotnet test (MCP server)
run: cd src/Balette/Tests/Bit.Balette.Tests.Mcp && dotnet test --no-build
60 changes: 60 additions & 0 deletions .github/workflows/bit.ci.Bink.e2e.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
name: bit platform CI - Bink E2E

# The demo app in Chromium: drawing with mouse, touch and pen input, keyboard handling, display scaling and every
# demo page, against the Release build that ships. It takes far longer than the build-and-unit pipeline
# (bit.ci.Bink.yml), so it runs only when started by hand. See src/Bink/Tests/Bit.Bink.Tests.E2E/README.md for
# what the browser suite proves and how to run it locally.

on:
workflow_dispatch:

env:
DOTNET_SYSTEM_CONSOLE_ALLOW_ANSI_COLOR_REDIRECTION: true

permissions:
contents: read

jobs:

e2e:
name: Bink E2E (Chromium)
runs-on: ubuntu-24.04

steps:

- name: Checkout source code
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
with:
persist-credentials: false

- name: Setup .NET 10.0
uses: actions/setup-dotnet@a98b56852c35b8e3190ac28c8c2271da59106c68 # v6.0.0
with:
global-json-file: src/global.json

- uses: actions/setup-node@949feb2413d6458794dcd2491c4babbbce0c15c1 # v7.1.0
with:
node-version: 24

- name: Build the demo and the E2E suite
run: |
dotnet build src/Bink/Bit.Bink.Demo/Server/Bit.Bink.Demo.Server.csproj -c Release
dotnet build src/Bink/Tests/Bit.Bink.Tests.E2E/Bit.Bink.Tests.E2E.csproj -c Release

- name: Install Playwright Chromium
run: pwsh src/Bink/Tests/Bit.Bink.Tests.E2E/bin/Release/net10.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.
run: >
cd src/Bink/Tests/Bit.Bink.Tests.E2E &&
dotnet test -c Release --no-build
--report-trx --report-trx-filename bink-e2e.trx

- name: Upload test results
if: always()
uses: actions/upload-artifact@cf430e030ddbb5b0abf93d22962f4752f3646cd9 # v7.0.2
with:
name: bink-e2e
path: '**/bink-e2e.trx'
if-no-files-found: ignore
Loading
Loading