Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
216 commits
Select commit Hold shift + click to select a range
8bc9a13
Initial commit
glennawatson Feb 7, 2026
d0e9631
Initial commit
glennawatson Feb 16, 2026
ecc9e66
Add github action scripts
glennawatson Feb 17, 2026
bb1b17d
Update location from Brisbane to Melbourne
glennawatson Feb 17, 2026
8b8b15c
chore: add .NET Framework polyfills and fix MAUI Visibility ambiguity…
glennawatson Feb 17, 2026
010024f
Update dependency Microsoft.SourceLink.GitHub to 10.0.103 (#1)
renovate[bot] Feb 17, 2026
6ca427c
chore: increase the amount of unit testing (#5)
glennawatson Feb 20, 2026
b64b4e2
chore: Fix the readme file to valid have urls and icons
glennawatson Feb 20, 2026
338eeae
chore(deps): update dependency tunit to 1.15.11 (#6)
renovate[bot] Feb 21, 2026
cdd3926
Add release workflow using actions-common reusable workflow
glennawatson Feb 21, 2026
d23bb2d
Switch NuGet publishing to OIDC trusted publishing via NuGet/login
glennawatson Feb 21, 2026
9ddc81d
Run NuGet OIDC login in caller context, pass key to reusable workflow
glennawatson Feb 21, 2026
951c00f
Add release environment to nuget-auth job for NuGet trusted publishin…
glennawatson Feb 21, 2026
e61c222
Move NuGet publish to caller job for correct OIDC job_workflow_ref
glennawatson Feb 21, 2026
2d00919
Sequence jobs: build+sign → publish NuGet → create GitHub release
glennawatson Feb 21, 2026
4460e3f
chore(deps): update actions/download-artifact action to v8 (#8)
renovate[bot] Mar 1, 2026
8bb90f7
chore(deps): update dependency tunit to 1.17.36 (#9)
renovate[bot] Mar 2, 2026
4c5e858
feat: add BindCommand and BindInteraction source-generated bindings (…
glennawatson Mar 8, 2026
f6d518b
chore(deps): update dependency tunit to 1.19.11 (#12)
renovate[bot] Mar 9, 2026
ac1f5a1
feat: interface-based observation plugin system with ReactiveUI-align…
glennawatson Mar 9, 2026
0281c27
Update version from 2.1 to 3.0.x
glennawatson Mar 9, 2026
bab552d
feat: add AOT-safe ViewLocator with source-generated view dispatch (#15)
glennawatson Mar 9, 2026
f673531
chore release 3.1.x
glennawatson Mar 9, 2026
3c0fe71
chore(deps): update dependency tunit to 1.19.16 (#16)
renovate[bot] Mar 10, 2026
fbbcd52
feat: add view registration attributes and attribute-aware dispatch (…
glennawatson Mar 10, 2026
def5687
chore: Update version from 3.1 to 3.2.x
glennawatson Mar 10, 2026
d4c5160
chore(deps): update dependency microsoft.sourcelink.github to 10.0.20…
renovate[bot] Mar 15, 2026
cda3db7
chore(deps): update dependency tunit to 1.19.22 (#19)
renovate[bot] Mar 15, 2026
2e1d04d
chore(deps): update dependency microsoft.sourcelink.github to 10.0.30…
renovate[bot] May 18, 2026
68631a6
chore(deps): update reactiveui (#22)
renovate[bot] May 18, 2026
0fae601
ci(release): migrate signing from SSL.com eSigner to Certum SimplySign
glennawatson May 23, 2026
01cc97d
ci(security): pin 3rd-party actions to commit SHAs (CodeQL actions/un…
glennawatson May 23, 2026
3f7718c
build: migrate versioning to MinVer and adopt container signing
glennawatson May 23, 2026
a28c058
ci: drop redundant versioningTool input (MinVer is now unconditional)
glennawatson May 23, 2026
f6514cf
feat(binding): BindTo generator + analyzer, dependency updates, Sonar…
glennawatson May 27, 2026
8fc57ef
chore(deps): update dependency verify.tunit to 31.18.0 (#21)
renovate[bot] May 27, 2026
782a6d5
ci(release): allow releasing from a historical ref
glennawatson Jun 3, 2026
ed90a91
chore(deps): update dependencies to latest
glennawatson Jun 4, 2026
4f42ea4
chore(renovate): group related dependency cohorts (#50)
glennawatson Aug 1, 2026
8565c11
feat(runtime): split runtime into lean and System.Reactive leaves (#49)
glennawatson Aug 2, 2026
1986fbe
chore(deps): update dependency tunit to 1.62.0 (#36)
renovate[bot] Aug 2, 2026
7ac5080
chore(deps): update actions/setup-dotnet action to v6 (#54)
renovate[bot] Aug 2, 2026
934298d
fix(observables): serialize the initial emit with concurrent handlers…
dwcullop Aug 2, 2026
d3f2052
chore(deps): update dependency sonaranalyzer.csharp to 10.31.0.145097…
renovate[bot] Aug 2, 2026
c37f8ca
fix(binding): stop memoizing a failed ICreatesObservableForProperty l…
glennawatson Aug 2, 2026
244c2f2
fix(generator): declare observation helpers for every dispatch file (…
glennawatson Aug 2, 2026
2896c13
chore(renovate): hold the generator and analyzer at the Roslyn baseli…
glennawatson Aug 2, 2026
92bda88
fix(generator): preserve legacy null-chain observation semantics (#63)
danwalmsley Aug 14, 2026
1c8e12c
chore(deps): update tunit (#60)
renovate[bot] Aug 14, 2026
152ee14
chore(deps): update dependency splat to v21 (#40)
renovate[bot] Aug 14, 2026
5a626b2
chore(deps): update dependency nsubstitute to 6.2.0 (#61)
renovate[bot] Aug 14, 2026
1e5b893
chore(deps): update analyzers (#62)
renovate[bot] Aug 14, 2026
45cdc42
chore(deps): update reactiveui (#35)
renovate[bot] Aug 14, 2026
ae5b668
chore(deps): update dependency tunit to 1.65.0 (#67)
renovate[bot] Aug 14, 2026
16941b2
chore(deps): update dependency reactiveui.primitives to 7.1.1 (#65)
renovate[bot] Aug 14, 2026
eec0687
chore(deps): update dependency microsoft.sourcelink.github to 10.0.40…
renovate[bot] Aug 14, 2026
92f770d
chore(deps): update reference assemblies to 1.8.11 (#66)
renovate[bot] Aug 14, 2026
93eb6e3
chore(analyzers)!: adopt the 3.45.0 analyzer baseline (#68)
glennawatson Aug 16, 2026
00c55bc
chore(deps): update dependency roslynator.analyzers to 4.16.1 (#69)
renovate[bot] Aug 20, 2026
ab1f1e8
chore(deps): update dependency microsoft.codeanalysis.analyzers to 5.…
renovate[bot] Aug 20, 2026
9d512fc
chore(deps): update packages to their latest releases (#76)
glennawatson Sep 5, 2026
7eb7514
feat(binding)!: honour registered observation plugins, and replace tu…
glennawatson Sep 6, 2026
e3ec297
fix(binding): follow the view model a view holds, and observe what a …
glennawatson Sep 7, 2026
e03a653
fix(binding): honour registered plugins without the reflection engine…
glennawatson Sep 7, 2026
012ed30
fix(binding): apply and report a two-way binding from one pipeline (#80)
glennawatson Sep 8, 2026
8b5efc6
chore(deps): update dependency minver to v8 (#85)
renovate[bot] Sep 9, 2026
4adab24
feat(observation): add WhenAnyDynamic and cover the runtime overloads…
glennawatson Sep 9, 2026
5393d32
fix: correct the expression rewriter's trimming annotation and the an…
glennawatson Sep 9, 2026
8472562
feat: claim binding call sites through interceptors (#89)
glennawatson Sep 9, 2026
74bd257
fix(generator): correct which call sites the dispatch claims (#91)
glennawatson Sep 10, 2026
032fe47
feat(binding): execute a command with each value a stream produces (#92)
glennawatson Sep 10, 2026
717e199
feat!: resolve reflection only through Unsafe overloads (#94)
glennawatson Sep 11, 2026
22cf75c
ci(benchmarks): run the suite on demand across every supported runtime
glennawatson Sep 11, 2026
2e29358
fix(benchmarks): keep the suite runnable when the net462 leg is asked…
glennawatson Sep 11, 2026
de71d0c
docs: describe the library in plain english and correct what it claim…
glennawatson Sep 11, 2026
4af4928
fix(benchmarks): unbreak the Windows build and compile the net462 leg…
glennawatson Sep 11, 2026
8c1991c
test(benchmarks): measure every operator the suite can measure honestly
glennawatson Sep 11, 2026
f6d1b23
fix(binding): deliver a view write on the thread that owns it (#96)
glennawatson Sep 11, 2026
c565a3a
fix(benchmarks): give the NativeAOT link a path it can write to
glennawatson Sep 11, 2026
26b0018
build: keep source linking out of the benchmarks
glennawatson Sep 11, 2026
ea18eb1
fix(benchmarks): name the repository on the short-path clone's remote
glennawatson Sep 11, 2026
ffafa79
fix(benchmarks): build the NativeAOT jobs under a short output path
glennawatson Sep 11, 2026
27a2f03
docs(benchmarks): publish what the suite measures
glennawatson Sep 11, 2026
ada4feb
ci: run the benchmarks at raised priority
glennawatson Sep 12, 2026
0620010
ci: run the benchmarks through the common workflow
glennawatson Sep 12, 2026
f861bad
fix(binding): detach when the initial read throws (#97)
glennawatson Sep 14, 2026
9b63f2c
feat!: route binding writes consistently and track the public API (#98)
glennawatson Sep 14, 2026
f1e7aa2
feat!: route view writes through platform invokers and target net47 (…
glennawatson Sep 14, 2026
b4968f4
test(benchmarks): trace every benchmark through a shared config (#101)
glennawatson Sep 14, 2026
a63e97a
fix(binding): settle two-way bindings and drop needless locks (#100)
glennawatson Sep 14, 2026
2a14647
test(benchmarks): run NativeAOT jobs with the memory diagnoser (#102)
glennawatson Sep 14, 2026
f078e2f
test(interactions): name the shared input and handler count
glennawatson Sep 14, 2026
e6bc8aa
chore(deps): update reactiveui to 7.5.0 (#103)
renovate[bot] Sep 14, 2026
e200cb3
fix(build): register interceptor namespaces through the InterceptorsN…
glennawatson Sep 14, 2026
3f924ce
fix(observables): deliver property changes on the raising thread (#105)
glennawatson Sep 15, 2026
2f097ea
ci: pass the renamed checkout inputs to the shared workflows
glennawatson Sep 15, 2026
6554a67
chore(deps): pin github actions digests (#106)
renovate[bot] Sep 15, 2026
2913e02
ci(lock): run the lock workflow at its own time of day
glennawatson Sep 15, 2026
18ed7c0
docs: add security policy
glennawatson Sep 16, 2026
ee200d3
chore: Update copyright header, editorconfig and nuget versions (#107)
glennawatson Sep 17, 2026
3230c96
chore(deps): update reactiveui to v8 (#108)
renovate[bot] Sep 17, 2026
8200c9b
build(deps): update Primitives and analyzers (#109)
glennawatson Sep 17, 2026
e57d96e
feat!: add Unsafe triggers and Primitives 8 delivery (#110)
glennawatson Sep 17, 2026
eee8186
feat(bindings): generate native platform adapters (#111)
glennawatson Sep 18, 2026
cf27c40
docs: point the code of conduct at the website
glennawatson Sep 21, 2026
50c1a77
fix: correct binding dispatch, analyzer and threading defects and add…
glennawatson Sep 21, 2026
beb5349
docs(examples): add one example project per documentation page on Pri…
glennawatson Sep 21, 2026
0761cd7
feat(interactions)!: narrow IInteraction to handler registration (#114)
glennawatson Sep 21, 2026
ff1cd53
feat!: make internal service APIs public
glennawatson Sep 23, 2026
c0a1535
chore(deps): update dependency tunit to 1.68.17 (#115)
renovate[bot] Sep 23, 2026
b788e37
chore(deps): update dependency avalonia to 12.1.3 (#116)
renovate[bot] Sep 23, 2026
a971036
fix(analyzer): allow unsafe interface observation (#117)
glennawatson Sep 23, 2026
b842759
Fix generated bindings across ReactiveUI runtime flavors (#118)
glennawatson Sep 23, 2026
61f234f
feat: add ToProperty, ObservableAsPropertyHelper and [ObservableAsPro…
glennawatson Sep 24, 2026
4164027
fix: declare caller-expression parameters on every target framework (…
glennawatson Sep 24, 2026
5211001
fix: add net8-11 -windows targets to the WPF and WinForms packages (#…
glennawatson Sep 24, 2026
95445b8
fix: leave call sites naming unreachable types to the runtime stub (#…
glennawatson Sep 24, 2026
5645fef
feat: generate paths through instance fields (#123)
glennawatson Sep 24, 2026
e2f4aea
fix: leave call sites built from a type parameter to the runtime stub…
glennawatson Sep 24, 2026
25c517f
fix: report RXUIBIND011 only for ReactiveUI methods that take a selec…
glennawatson Sep 24, 2026
57ec0ae
fix: view-first bindings take a nullable view model and follow the vi…
glennawatson Sep 24, 2026
ca26dbc
fix: claim every string-named ToProperty call site under interception…
glennawatson Sep 24, 2026
6b83159
fix: view-first bindings leave the view untouched while the view mode…
glennawatson Sep 25, 2026
4602a48
fix: generate a path only when it runs from the lambda's parameter (#…
glennawatson Sep 25, 2026
2ac5d08
fix: runtime bindings accept indexer paths and pass runtime-typed val…
glennawatson Sep 25, 2026
51f4435
fix: binding hook readers no longer keep the source alive (#131)
glennawatson Sep 25, 2026
1036769
test: cover the type-parameter and lambda-parameter fallbacks (#133)
glennawatson Sep 25, 2026
5c922be
fix: route BindCommand writes onto the control's thread when the view…
glennawatson Sep 25, 2026
256570d
fix: generate WhenChanging and BindInteraction calls that start at a …
glennawatson Sep 25, 2026
d578530
docs: state the generation, coverage, examples and pull request rules…
glennawatson Sep 25, 2026
059a8ac
docs(examples): show field paths, view-first bindings that wait for a…
glennawatson Sep 25, 2026
0544dea
docs(readme): add a Sponsors section
glennawatson Sep 25, 2026
bea89e5
feat: generated bindings use runtime helpers and a per-assembly names…
glennawatson Sep 25, 2026
f1e4d7c
feat: resolve views by view model type, and write generated code thro…
glennawatson Sep 25, 2026
12ff8e3
fix: resolve a view contract only to a view registered under it, and …
glennawatson Sep 25, 2026
df3d4fc
fix: publish generated BindCommand code without trim warnings (#140)
glennawatson Sep 25, 2026
1c622f6
fix: honour this library's visibility hints in generated conversions …
glennawatson Sep 25, 2026
ad104c5
feat: cover ReactiveUI.SourceGenerators' ObservableAsProperty and IVi…
glennawatson Sep 25, 2026
7daac61
feat!: make ResolveView(object) AOT-safe and add ResolveViewUnsafe (#…
glennawatson Sep 26, 2026
611bc6c
feat: explain a view model held as an object that resolves no view (#…
glennawatson Sep 26, 2026
66214dc
feat: map a view from the service locator under its own contract (#145)
glennawatson Sep 26, 2026
c2e06c3
feat: generate bindings for members ReactiveUI.SourceGenerators write…
glennawatson Sep 26, 2026
9e769e5
feat: add ObservedProperty for code other source generators write (#147)
glennawatson Sep 26, 2026
a2d3afe
feat: generate bindings for controls named in MAUI and Avalonia XAML …
glennawatson Sep 26, 2026
938828f
test: run the SourceGenerators contract tests against 4.2.0 (#149)
glennawatson Sep 26, 2026
07b217d
fix: generate AppKit BindCommand bindings that compile against ObjCRu…
glennawatson Sep 27, 2026
eb255f3
feat: ask an interaction as an observable and run its handlers on a s…
glennawatson Sep 27, 2026
040fff3
chore(deps): update dependency reactiveui to 24.3.0 (#152)
renovate[bot] Sep 28, 2026
ea3d604
feat: add Avalonia and Uno binding packages and route view writes thr…
glennawatson Sep 28, 2026
642e53b
fix!: format a float with the invariant culture in the runtime conver…
renovate[bot] Sep 28, 2026
64d1efa
fix: observe and route bindings on Uno controls, whose DependencyObje…
glennawatson Sep 28, 2026
c2e9c2c
fix: bind a field control to the view's current view model, so a view…
glennawatson Sep 28, 2026
760b967
chore(deps): update dependency reactiveui.sourcegenerators to 4.2.0 (…
renovate[bot] Sep 30, 2026
397cd84
fix: report a runtime property chain's initial value once when a link…
glennawatson Oct 1, 2026
43bee0b
chore(deps): update reactiveui to 25.1.1 (#164)
renovate[bot] Oct 3, 2026
b0e6a29
chore(deps): update dependency tunit to 1.72.4 (#154)
renovate[bot] Oct 3, 2026
1687e2e
chore(deps): update dependency reactiveui to v25 (#161)
renovate[bot] Oct 3, 2026
cbb8e3c
fix: dispose the displaced binding when BindCommandUnsafe rebinds (#165)
glennawatson Oct 3, 2026
6609f8e
feat(generator): intercept calls whose types generated code cannot na…
glennawatson Oct 4, 2026
b0c70a0
build(deps): update ReactiveUI.Primitives to 9.0.0 (#168)
glennawatson Oct 4, 2026
07d1f81
perf(generator): share semantic models per source file (#169)
glennawatson Oct 4, 2026
f441414
chore(deps): update dependency tunit to 1.73.5 (#173)
renovate[bot] Oct 11, 2026
c79c70c
chore(deps): update reactiveui to v26 (#171)
renovate[bot] Oct 11, 2026
330ff38
fix: raise unsafe property changes across assemblies (#177)
ChrisPulman Oct 13, 2026
85fda95
fix: format numbers with the current culture (#179)
ChrisPulman Oct 13, 2026
e9e4bce
fix: follow ViewModel inherited from referenced assemblies (#180)
ChrisPulman Oct 13, 2026
d1e1b65
chore(deps): update dependency tunit to 1.73.19 (#174)
renovate[bot] Oct 13, 2026
1075dca
chore: merge ReactiveUI.Binding.SourceGenerators history
glennawatson Oct 25, 2026
3d2d370
refactor: lay out the attribute generators like the Binding projects
glennawatson Oct 25, 2026
9a606cf
test: run the attribute generator tests inside the combined solution
glennawatson Oct 26, 2026
21801aa
refactor: share the source writer and equatable array between both ge…
glennawatson Oct 26, 2026
4ccd8c2
test: point the Binding generator tests at the shared array type
glennawatson Oct 26, 2026
030b083
style: bring the attribute generators and their tests up to the combi…
glennawatson Oct 26, 2026
4cd689c
refactor: drop the advisory analyzers
glennawatson Oct 26, 2026
3dab1d6
test: keep the attribute generators' assembly out of the Binding test…
glennawatson Oct 26, 2026
5fbfe4f
feat: restore [IViewFor<T>] and [IViewFor("Type")]
glennawatson Oct 26, 2026
81472d3
build: track the attribute library's public API and align the benchma…
glennawatson Oct 26, 2026
22d9262
bench: cover [IViewFor] in the generator benchmark and keep the conso…
glennawatson Oct 26, 2026
32962f1
fix: generate ToProperty for owners built from type parameters
glennawatson Oct 26, 2026
90953a0
fix: read x:Class and x:Name from the 2009 XAML namespace
glennawatson Oct 26, 2026
5ff1652
fix: read an ObservableAsProperty value from the notifications its he…
glennawatson Oct 26, 2026
d9f042f
docs: describe the combined repository, its CI and its benchmarks
glennawatson Oct 26, 2026
ac77d39
docs: restructure the README with tables and per-example READMEs
glennawatson Oct 26, 2026
35629f6
build: skip the documentation file when publishing the AOT validation…
glennawatson Oct 26, 2026
df32641
build: keep ReactiveUI.Binding on its own 9.x version line
glennawatson Oct 26, 2026
7053187
build: fix the MAUI sample and the .NET 11 Apple baselines
glennawatson Oct 26, 2026
1ed8a9b
build: pin TUnit back and let the binding packages compute their version
glennawatson Oct 26, 2026
75c0706
build: drop Microsoft.NET.Test.Sdk from the attribute generator tests
glennawatson Oct 26, 2026
0c15fbd
ci: build and test with the .NET 11 rc.2 SDK
glennawatson Oct 26, 2026
a7f7fb1
ci: temporary diagnostic for dotnet test device selection
glennawatson Oct 26, 2026
7cc7935
ci: go back to the default SDK
glennawatson Oct 26, 2026
fb81df4
ci: narrow the device diagnostic
glennawatson Oct 26, 2026
8f7528c
ci: compare SDKs in the device diagnostic
glennawatson Oct 26, 2026
36eefc1
ci: pin the SDK inside the device diagnostic
glennawatson Oct 26, 2026
6b9ed5f
ci: compare against the Binding repository in the device diagnostic
glennawatson Oct 26, 2026
6e5c258
build: stop the Uno libraries being Android applications
glennawatson Oct 26, 2026
e3e4872
ci: per-framework device diagnostic
glennawatson Oct 26, 2026
14495a9
build: give libraries a placeholder device so dotnet test skips devic…
glennawatson Oct 26, 2026
b364c64
build: keep libraries out of the Apple SDK's device selection
glennawatson Oct 26, 2026
1773a6c
ci: remove the device diagnostic
glennawatson Oct 26, 2026
9466eb8
build: use the latest TUnit and cover every binding API in the genera…
glennawatson Oct 26, 2026
25a453b
refactor: pass arrays through the binding emitters
glennawatson Oct 26, 2026
275b388
ci: run the SonarCloud scan on every build again
glennawatson Oct 26, 2026
2744a45
build: remove the analyzer suppressions carried into the samples and …
glennawatson Oct 26, 2026
17840cd
fix: restore the shipped analyzers and diagnostics
glennawatson Oct 26, 2026
e431c05
fix: show idempotent disposal without a redundant Dispose call
glennawatson Oct 26, 2026
8d1569a
fix: type the disposal helper's parameter as the binding
glennawatson Oct 26, 2026
323092f
test: cover a read-only dependency property exposed through its key
glennawatson Oct 26, 2026
338c761
test: cover every line of the changed helper and analyzer files
glennawatson Oct 26, 2026
c044d01
chore: remove the coverage script
glennawatson Oct 26, 2026
22896ba
chore: name ReactiveUI and Contributors as the copyright holder
glennawatson Oct 26, 2026
fe05422
fix: write a fixed ReactiveUI and Contributors header into generated …
glennawatson Oct 26, 2026
edce85e
build: version every package from one tag stream
glennawatson Oct 26, 2026
5c234ee
build: release the attribute and binding families separately
glennawatson Oct 26, 2026
66b81dc
fix: dispose the example binding through IDisposable without a typed …
glennawatson Oct 26, 2026
5eecda4
fix: drop the double dispose from the ReactiveBinding example
glennawatson Oct 26, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
2,256 changes: 996 additions & 1,260 deletions .editorconfig

Large diffs are not rendered by default.

23 changes: 19 additions & 4 deletions .gitattributes
Original file line number Diff line number Diff line change
@@ -1,13 +1,28 @@
# Text files are stored and checked out with LF line endings on every platform.
# Files are UTF-8 without a byte order mark; .editorconfig sets that for editors.
# Every text file is stored and checked out with LF, on every platform.
#
# Without this, a Windows checkout with core.autocrlf=true rewrites LF to CRLF
# on the way to disk. The line-ending analyzer then fails the whole build on the
# Windows leg while the Linux and macOS legs pass, because the files on disk no
# longer match what is in the repository. `eol=lf` pins the checkout, so the
# working tree matches the index everywhere.
#
# The .editorconfig already sets end_of_line = lf for editors; this is the same
# rule for git, which editors do not control.
* text=auto eol=lf

# Binary files are never normalised.
# Never normalise binary content — a stray LF-to-CRLF pass corrupts it.
*.png binary
*.jpg binary
*.jpeg binary
*.gif binary
*.ico binary
*.pdf binary
*.snk binary
*.pfx binary
*.dll binary
*.exe binary
*.zip binary
*.nupkg binary
*.nettrace binary
*.ttf binary
*.woff binary
*.woff2 binary
23 changes: 16 additions & 7 deletions .github/renovate.json
Original file line number Diff line number Diff line change
Expand Up @@ -4,15 +4,25 @@
"local>reactiveui/.github:renovate"
],
"packageRules": [
{
"description": "The generator and analyzer are held at the Roslyn 4.8.0 baseline (VS 2022 17.8, .NET 8.0.1xx SDK) and must not move with the toolchain. Both ship in the version-less analyzers/dotnet/cs folder, and a compiler refuses to load a generator or analyzer built against a newer Roslyn than itself, so raising this floor silently drops every consumer on an older SDK. It is a compatibility decision, not a maintenance lag, and the only reason to change it is to raise the minimum supported SDK on purpose. Microsoft.CodeAnalysis.Analyzers is deliberately absent: it supplies analyzer-authoring rules and has no bearing on the load floor.",
"matchManagers": [
"nuget"
],
"enabled": false,
"matchPackageNames": [
"/^Microsoft\\.CodeAnalysis\\.CSharp$/",
"/^Microsoft\\.CodeAnalysis\\.CSharp\\.Workspaces$/"
]
},
{
"description": "Analyzer packages all gate the build through the same warnings-as-errors pass, so landing them separately just means several red CI runs in a row. Move them in one PR.",
"matchManagers": [
"nuget"
],
"groupName": "analyzers",
"matchPackageNames": [
"/^Roslynator\\./",
"/^stylecop\\.analyzers$/i"
"/^(Style|Performance|Security|PublicApi)Sharp\\.Analyzers$/"
]
},
{
Expand All @@ -27,14 +37,13 @@
]
},
{
"description": "Verify.TUnit is built against a specific TUnit version. The shared preset groups TUnit separately from Verify.*, which can split a matched pair across two PRs and red the build; keep them together here.",
"description": "Basic.Reference.Assemblies ships one package per target runtime and the generator tests compile against all of them. A partial bump leaves the suite straddling two versions.",
"matchManagers": [
"nuget"
],
"groupName": "TUnit",
"groupName": "reference assemblies",
"matchPackageNames": [
"/^TUnit(\\.|$)/",
"/^Verify\\./"
"/^Basic\\.Reference\\.Assemblies(\\.|$)/"
]
},
{
Expand All @@ -44,7 +53,7 @@
],
"groupName": "test tooling",
"matchPackageNames": [
"/^PublicApiGenerator$/"
"/^BenchmarkDotNet(\\.|$)/"
]
}
]
Expand Down
30 changes: 30 additions & 0 deletions .github/workflows/benchmarks-ab.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
name: Benchmarks A/B

on:
workflow_dispatch:
inputs:
base:
description: 'Baseline commit SHA.'
type: string
required: true
head:
description: 'Commit SHA compared against the baseline.'
type: string
required: true

permissions:
contents: read

jobs:
benchmark:
uses: reactiveui/actions-common/.github/workflows/workflow-common-benchmarks-ab.yml@main
with:
base: ${{ inputs.base }}
head: ${{ inputs.head }}
projects: |
benchmarks/ReactiveUI.Binding.Benchmarks/ReactiveUI.Binding.Benchmarks.csproj
benchmarks/ReactiveUI.Binding.Generator.Benchmarks/ReactiveUI.Binding.Generator.Benchmarks.csproj
benchmarks/ReactiveUI.Binding.Analyzer.Benchmarks/ReactiveUI.Binding.Analyzer.Benchmarks.csproj
benchmarks/ReactiveUI.SourceGenerators.Benchmarks/ReactiveUI.SourceGenerators.Benchmarks.csproj
solutionFile: ReactiveUI.SourceGenerators.slnf
installWorkloads: true
27 changes: 27 additions & 0 deletions .github/workflows/benchmarks.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
name: Benchmarks

on:
workflow_dispatch:
inputs:
sha:
description: 'Commit to benchmark. Empty benchmarks the latest commit of the chosen branch.'
type: string
default: ''

permissions:
contents: read

jobs:
benchmark:
uses: reactiveui/actions-common/.github/workflows/workflow-common-benchmarks.yml@main
with:
revision: ${{ inputs.sha }}
projects: |
benchmarks/ReactiveUI.Binding.Benchmarks/ReactiveUI.Binding.Benchmarks.csproj
benchmarks/ReactiveUI.Binding.Benchmarks.ReactiveUI/ReactiveUI.Binding.Benchmarks.ReactiveUI.csproj
benchmarks/ReactiveUI.Binding.Generator.Benchmarks/ReactiveUI.Binding.Generator.Benchmarks.csproj
benchmarks/ReactiveUI.Binding.Analyzer.Benchmarks/ReactiveUI.Binding.Analyzer.Benchmarks.csproj
benchmarks/ReactiveUI.SourceGenerators.Benchmarks/ReactiveUI.SourceGenerators.Benchmarks.csproj
benchmarks/ReactiveUI.SourceGenerators.Runtime.Benchmarks/ReactiveUI.SourceGenerators.Runtime.Benchmarks.csproj
solutionFile: ReactiveUI.SourceGenerators.slnf
installWorkloads: true
13 changes: 8 additions & 5 deletions .github/workflows/ci-build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -6,20 +6,23 @@ on:
pull_request:
branches: [ main ]

env:
productNamespacePrefix: "ReactiveUI.SourceGenerators"

# Needed so the reusable workflow can optionally delete the temp per-OS artifacts it creates.
permissions:
contents: read
actions: write

env:
productNamespacePrefix: "ReactiveUI"

jobs:
build:
uses: reactiveui/actions-common/.github/workflows/workflow-common-setup-and-build.yml@main
with:
productNamespacePrefix: ReactiveUI.SourceGenerators
configuration: Release
productNamespacePrefix: "ReactiveUI"
# The Uno.Sdk projects need MSBuild, so they build and test in their own Windows job.
solutionFile: ReactiveUI.SourceGenerators.slnf
msbuildSolutionFile: ReactiveUI.SourceGenerators.Uno.slnf
installWorkloads: true
secrets:
CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }}

16 changes: 2 additions & 14 deletions .github/workflows/codeql.yml
Original file line number Diff line number Diff line change
@@ -1,15 +1,3 @@
# For most projects, this workflow file will not need changing; you simply need
# to commit it to your repository.
#
# You may wish to alter this file to override the set of languages analyzed,
# or to provide custom queries or build logic.
#
# ******** NOTE ********
# We have attempted to detect the languages in your repository. Please check
# the `language` matrix defined below to confirm you have the correct set of
# supported CodeQL languages.
#

name: "CodeQL Advanced"

on:
Expand All @@ -18,7 +6,7 @@ on:
pull_request:
branches: [ main ]
schedule:
- cron: '37 15 * * 3'
- cron: '18 12 * * 3'

permissions:
security-events: write
Expand All @@ -31,7 +19,7 @@ jobs:
uses: reactiveui/actions-common/.github/workflows/workflow-common-codeql.yml@main
with:
srcFolder: src
solutionFile: ReactiveUI.SourceGenerators.slnx
solutionFile: ReactiveUI.SourceGenerators.slnf
installWorkloads: true
analyzeCSharp: true
analyzeActions: true
Expand Down
16 changes: 16 additions & 0 deletions .github/workflows/native-aot.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
name: Native AOT

on:
push:
branches: [ main ]
pull_request:
branches: [ main ]

permissions:
contents: read

jobs:
native-aot-smoke:
uses: reactiveui/actions-common/.github/workflows/workflow-common-aot-smoke.yml@main
with:
projectFile: src/tests/ReactiveUI.Binding.AotValidation/ReactiveUI.Binding.AotValidation.csproj
77 changes: 77 additions & 0 deletions .github/workflows/release-binding.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,77 @@
name: Release ReactiveUI.Binding

on:
workflow_dispatch:
inputs:
bump:
description: 'Release level'
required: true
type: choice
options:
- patch
- minor
- major

sourceRef:
description: 'Optional git ref (tag/branch/SHA) to release from. Leave blank to release from this branch (normally main).'
required: false
type: string
default: ''

permissions:
contents: write
id-token: write
packages: read

jobs:
release:
uses: reactiveui/actions-common/.github/workflows/workflow-common-release.yml@main
with:
solutionFile: ReactiveUI.Binding.slnf
msbuildSolutionFile: ReactiveUI.Binding.Uno.slnf
installWorkloads: true
minverTagPrefix: binding-v
minverMinimumMajorMinor: '9.2'
bump: ${{ inputs.bump }}
sourceRef: ${{ inputs.sourceRef }}
secrets:
CERTUM_USER_ID: ${{ secrets.CERTUM_USER_ID }}
CERTUM_OTP_URI: ${{ secrets.CERTUM_OTP_URI }}
CERTUM_CERT_FINGERPRINT: ${{ secrets.CERTUM_CERT_FINGERPRINT }}

publish-nuget:
needs: release
runs-on: ubuntu-latest
environment:
name: release
permissions:
id-token: write
steps:
- name: Download signed packages
uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8
with:
name: signed-nuget

- name: Setup .NET
uses: actions/setup-dotnet@a98b56852c35b8e3190ac28c8c2271da59106c68 # v6

- name: NuGet login (OIDC trusted publishing)
id: nuget-login
uses: NuGet/login@8d196754b4036150537f80ac539e15c2f1028841 # v1.2.0
with:
user: ${{ secrets.NUGET_USER }}

- name: Push to NuGet
shell: bash
run: |
for pkg in *.nupkg; do
dotnet nuget push "$pkg" --source https://api.nuget.org/v3/index.json --api-key "${{ steps.nuget-login.outputs.NUGET_API_KEY }}"
done

create-release:
needs: [release, publish-nuget]
uses: reactiveui/actions-common/.github/workflows/workflow-common-create-release.yml@main
with:
version: ${{ needs.release.outputs.semver2 }}
tag: ${{ needs.release.outputs.tag }}
target: ${{ needs.release.outputs.sourceSha }}
9 changes: 4 additions & 5 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
name: Release
name: Release ReactiveUI.SourceGenerators

on:
workflow_dispatch:
Expand Down Expand Up @@ -27,9 +27,8 @@ jobs:
release:
uses: reactiveui/actions-common/.github/workflows/workflow-common-release.yml@main
with:
solutionFile: ReactiveUI.SourceGenerators.slnx
installWorkloads: true
minverMinimumMajorMinor: '2.7'
solutionFile: ReactiveUI.SourceGenerators.Package.slnf
minverTagPrefix: v
bump: ${{ inputs.bump }}
sourceRef: ${{ inputs.sourceRef }}
secrets:
Expand All @@ -46,7 +45,7 @@ jobs:
id-token: write
steps:
- name: Download signed packages
uses: actions/download-artifact@9000827ccba6bdab643e8b6fd33ac0654aef8333 # v8
uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8
with:
name: signed-nuget

Expand Down
34 changes: 34 additions & 0 deletions .github/workflows/sonarcloud.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
name: SonarCloud

on:
push:
branches: [ main ]
pull_request:
branches: [ main ]

permissions:
contents: read

jobs:
sonarcloud:
uses: reactiveui/actions-common/.github/workflows/workflow-common-sonarcloud.yml@main
with:
productNamespacePrefix: ReactiveUI
solutionFile: ReactiveUI.SourceGenerators.slnf
installWorkloads: true
sonarProjectKey: ReactiveUI.Binding.SourceGenerators
sonarOrganization: reactiveui
sonarExclusions: '**/tests/**,**/benchmarks/**,**/TestResults/**'
sonarCoverageExclusions: '**/tests/**,**/benchmarks/**,**/examples/**,**/*Tests/**,**/*Tests.cs,**/*TestModels/**'
# Copy-paste detection is switched off for the arity-expanded surface and the platform packages.
# A *.WideArity.cs file is the same operator written once per type-parameter count, and the
# CombineLatest observables are one class per arity; each repetition is what makes the call site
# allocation-free and reflection-free, so collapsing them is not an option. The platform packages
# implement the same small abstractions against different UI frameworks.
sonarCpdExclusions: '**/tests/**,**/benchmarks/**,**/examples/**,**/*.WideArity.cs,**/*.WideArity.Unsafe.cs,**/Observables/CombineLatest*Observable.cs,**/ReactiveUI.Binding.Maui.Shared/**,**/ReactiveUI.Binding.Wpf.Shared/**,**/ReactiveUI.Binding.WinForms.Shared/**,**/ReactiveUI.Binding.Platform.Shared/**'
sonarTestExclusions: '**/tests/**,**/benchmarks/**,**/examples/**'
# Matches ci-build.yml: the MTP/TUnit suite is far slower on Windows net10
# than on net8/9, so allow generous headroom for the coverage run.
testTimeout: '15m'
secrets:
SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }}
19 changes: 19 additions & 0 deletions .github/workflows/trimmed.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
name: Trimmed

# The shared smoke workflow keys its concurrency group on github.workflow, so the trimmed harness runs from
# its own file. Both in one file share a group, and whichever starts second cancels the other.

on:
push:
branches: [ main ]
pull_request:
branches: [ main ]

permissions:
contents: read

jobs:
trimmed-smoke:
uses: reactiveui/actions-common/.github/workflows/workflow-common-aot-smoke.yml@main
with:
projectFile: src/tests/ReactiveUI.Binding.TrimValidation/ReactiveUI.Binding.TrimValidation.csproj
Loading
Loading