Skip to content
Draft
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
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
2 changes: 2 additions & 0 deletions .codex/config.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
[mcp_servers.avalonia-docs]
url = "https://docs-mcp.avaloniaui.net/mcp"
13 changes: 13 additions & 0 deletions .config/dotnet-tools.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
{
"version": 1,
"isRoot": true,
"tools": {
"dotnet-reportgenerator-globaltool": {
"version": "5.5.10",
"commands": [
"reportgenerator"
],
"rollForward": false
}
}
}
160 changes: 160 additions & 0 deletions .editorconfig
Original file line number Diff line number Diff line change
@@ -0,0 +1,160 @@
root = true

[*]
charset = utf-8
end_of_line = crlf
insert_final_newline = true
trim_trailing_whitespace = true
indent_style = space
indent_size = 4

[*.{csproj,props,targets,slnx}]
indent_size = 2

[*.cs]
indent_size = 4

# Baseline C# style. Repository-wide preferences remain advisory where possible;
# the active GenLauncherGO projects use the stricter severities below.
dotnet_sort_system_directives_first = true
dotnet_separate_import_directive_groups = false

csharp_style_namespace_declarations = file_scoped:suggestion
csharp_style_prefer_method_group_conversion = true:suggestion
csharp_style_prefer_primary_constructors = false:suggestion
csharp_style_prefer_null_check_over_type_check = true:suggestion
csharp_style_prefer_switch_expression = true:suggestion
csharp_style_prefer_pattern_matching = true:suggestion
csharp_style_pattern_matching_over_as_with_null_check = true:suggestion
csharp_style_pattern_matching_over_is_with_cast_check = true:suggestion
csharp_style_prefer_not_pattern = true:suggestion
csharp_style_prefer_extended_property_pattern = true:suggestion
csharp_style_prefer_readonly_struct = true:suggestion
csharp_style_prefer_readonly_struct_member = true:suggestion
csharp_style_expression_bodied_methods = false:suggestion
csharp_style_expression_bodied_constructors = false:suggestion
csharp_style_expression_bodied_operators = false:suggestion
csharp_style_expression_bodied_properties = true:suggestion
csharp_style_expression_bodied_indexers = true:suggestion
csharp_style_expression_bodied_accessors = true:suggestion
csharp_style_throw_expression = true:suggestion
csharp_style_conditional_delegate_call = true:suggestion
csharp_prefer_braces = true:suggestion
csharp_prefer_simple_using_statement = true:suggestion
csharp_prefer_static_local_function = true:suggestion

csharp_style_var_for_built_in_types = false:suggestion
csharp_style_var_when_type_is_apparent = true:suggestion
csharp_style_var_elsewhere = false:suggestion

dotnet_style_qualification_for_field = false:suggestion
dotnet_style_qualification_for_property = false:suggestion
dotnet_style_qualification_for_method = false:suggestion
dotnet_style_qualification_for_event = false:suggestion
dotnet_style_predefined_type_for_locals_parameters_members = true:suggestion
dotnet_style_predefined_type_for_member_access = true:suggestion
dotnet_style_object_initializer = true:suggestion
dotnet_style_collection_initializer = true:suggestion
dotnet_style_coalesce_expression = true:suggestion
dotnet_style_null_propagation = true:suggestion
dotnet_style_prefer_is_null_check_over_reference_equality_method = true:suggestion
dotnet_style_prefer_auto_properties = true:suggestion
dotnet_style_prefer_inferred_tuple_names = true:suggestion
dotnet_style_prefer_inferred_anonymous_type_member_names = true:suggestion
dotnet_style_prefer_simplified_boolean_expressions = true:suggestion
dotnet_style_prefer_conditional_expression_over_assignment = false:suggestion
dotnet_style_prefer_conditional_expression_over_return = false:suggestion
dotnet_style_readonly_field = true:suggestion
dotnet_style_require_accessibility_modifiers = for_non_interface_members:suggestion

# Naming rules.
dotnet_naming_rule.types_are_pascal_case.symbols = types
dotnet_naming_rule.types_are_pascal_case.style = pascal_case
dotnet_naming_rule.types_are_pascal_case.severity = suggestion
dotnet_naming_symbols.types.applicable_kinds = class, struct, enum, delegate
dotnet_naming_style.pascal_case.capitalization = pascal_case

dotnet_naming_rule.interfaces_start_with_i.symbols = interfaces
dotnet_naming_rule.interfaces_start_with_i.style = prefix_interface_with_i
dotnet_naming_rule.interfaces_start_with_i.severity = suggestion
dotnet_naming_symbols.interfaces.applicable_kinds = interface
dotnet_naming_style.prefix_interface_with_i.required_prefix = I
dotnet_naming_style.prefix_interface_with_i.capitalization = pascal_case

dotnet_naming_rule.members_are_pascal_case.symbols = members
dotnet_naming_rule.members_are_pascal_case.style = pascal_case
dotnet_naming_rule.members_are_pascal_case.severity = suggestion
dotnet_naming_symbols.members.applicable_kinds = property, method, event

dotnet_naming_rule.non_private_fields_are_pascal_case.symbols = non_private_fields
dotnet_naming_rule.non_private_fields_are_pascal_case.style = pascal_case
dotnet_naming_rule.non_private_fields_are_pascal_case.severity = suggestion
dotnet_naming_symbols.non_private_fields.applicable_kinds = field
dotnet_naming_symbols.non_private_fields.applicable_accessibilities = public, internal, protected, protected_internal, private_protected

dotnet_naming_rule.private_fields_are_camel_case.symbols = private_fields
dotnet_naming_rule.private_fields_are_camel_case.style = underscore_camel_case
dotnet_naming_rule.private_fields_are_camel_case.severity = suggestion
dotnet_naming_symbols.private_fields.applicable_kinds = field
dotnet_naming_symbols.private_fields.applicable_accessibilities = private
dotnet_naming_style.underscore_camel_case.required_prefix = _
dotnet_naming_style.underscore_camel_case.capitalization = camel_case

dotnet_naming_rule.constants_are_pascal_case.symbols = constants
dotnet_naming_rule.constants_are_pascal_case.style = pascal_case
dotnet_naming_rule.constants_are_pascal_case.severity = suggestion
dotnet_naming_symbols.constants.applicable_kinds = field
dotnet_naming_symbols.constants.required_modifiers = const

dotnet_naming_rule.async_methods_end_in_async.symbols = async_methods
dotnet_naming_rule.async_methods_end_in_async.style = suffix_async
dotnet_naming_rule.async_methods_end_in_async.severity = suggestion
dotnet_naming_symbols.async_methods.applicable_kinds = method
dotnet_naming_symbols.async_methods.required_modifiers = async
dotnet_naming_style.suffix_async.required_suffix = Async
dotnet_naming_style.suffix_async.capitalization = pascal_case

dotnet_naming_rule.parameters_are_camel_case.symbols = parameters
dotnet_naming_rule.parameters_are_camel_case.style = camel_case
dotnet_naming_rule.parameters_are_camel_case.severity = suggestion
dotnet_naming_symbols.parameters.applicable_kinds = parameter
dotnet_naming_style.camel_case.capitalization = camel_case

dotnet_naming_rule.type_parameters_start_with_t.symbols = type_parameters
dotnet_naming_rule.type_parameters_start_with_t.style = prefix_type_parameter_with_t
dotnet_naming_rule.type_parameters_start_with_t.severity = suggestion
dotnet_naming_symbols.type_parameters.applicable_kinds = type_parameter
dotnet_naming_style.prefix_type_parameter_with_t.required_prefix = T
dotnet_naming_style.prefix_type_parameter_with_t.capitalization = pascal_case

# Active GenLauncherGO architecture code follows these conventions as
# build-enforced warnings or errors.
[GenLauncherGO.*/**.cs]
csharp_style_namespace_declarations = file_scoped:warning
csharp_prefer_braces = true:warning
csharp_style_var_for_built_in_types = false:warning
csharp_style_var_when_type_is_apparent = true:warning
csharp_style_var_elsewhere = false:warning
dotnet_style_readonly_field = true:warning
dotnet_style_require_accessibility_modifiers = for_non_interface_members:warning
dotnet_naming_rule.types_are_pascal_case.severity = error
dotnet_naming_rule.interfaces_start_with_i.severity = error
dotnet_naming_rule.members_are_pascal_case.severity = error
dotnet_naming_rule.non_private_fields_are_pascal_case.severity = error
dotnet_naming_rule.private_fields_are_camel_case.severity = error
dotnet_naming_rule.constants_are_pascal_case.severity = error
dotnet_naming_rule.async_methods_end_in_async.severity = error
dotnet_naming_rule.parameters_are_camel_case.severity = error
dotnet_naming_rule.type_parameters_start_with_t.severity = error
dotnet_diagnostic.IDE1006.severity = error
dotnet_diagnostic.IDE0130.severity = warning

# Keep intentional XML documentation valid. Documentation is required for
# cross-project contracts and non-obvious behavior, side effects, invariants,
# safety rules, or platform constraints—not every self-explanatory member.
dotnet_diagnostic.CS1570.severity = warning
dotnet_diagnostic.CS1572.severity = warning
dotnet_diagnostic.CS1573.severity = warning

[*.xaml]
indent_size = 4
28 changes: 0 additions & 28 deletions .github/ISSUE_TEMPLATE/bug_report.md

This file was deleted.

20 changes: 0 additions & 20 deletions .github/ISSUE_TEMPLATE/feature_request.md

This file was deleted.

60 changes: 60 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
name: CI

on:
push:
pull_request:
workflow_dispatch:

permissions:
contents: read

jobs:
build-and-test:
name: Build, test, and publish
runs-on: windows-2022
timeout-minutes: 20
env:
DOTNET_CLI_TELEMETRY_OPTOUT: true
DOTNET_NOLOGO: true
GENLAUNCHERGO_REQUIRE_SYMBOLIC_LINK_TESTS: true

steps:
- name: Check out repository
uses: actions/checkout@v6

- name: Set up .NET
uses: actions/setup-dotnet@v5
with:
dotnet-version: 10.0.3xx
dotnet-quality: ga

- name: Verify .NET SDK
shell: pwsh
run: |
$sdkVersion = dotnet --version
if (-not $sdkVersion.StartsWith("10.")) {
throw "Expected a .NET 10 SDK, but dotnet selected $sdkVersion."
}

- name: Restore
run: dotnet restore .\GenLauncherGO.sln

- name: Build
run: dotnet build .\GenLauncherGO.sln --configuration Release --no-restore

- name: Test
run: dotnet test .\GenLauncherGO.sln --configuration Release --no-build --no-restore

- name: Publish supported single-file executable
shell: pwsh
run: |
$publishDirectory = Join-Path $env:RUNNER_TEMP "GenLauncherGO-publish"
dotnet publish .\GenLauncherGO.UI\GenLauncherGO.UI.csproj -p:PublishProfile=WinX64SelfContained --output $publishDirectory
$launcherPath = Join-Path $publishDirectory "GenLauncherGO.exe"
if (-not (Test-Path -LiteralPath $launcherPath -PathType Leaf)) {
throw "Expected the supported launcher executable at $launcherPath."
}
$looseLibraries = @(Get-ChildItem -LiteralPath $publishDirectory -Filter "*.dll" -File -Recurse)
if ($looseLibraries.Count -ne 0) {
throw "The supported single-file publish unexpectedly produced loose DLL files."
}
Loading