## What Brings AppKit into conformance with [KofTwentyTwo/standards](https://github.com/KofTwentyTwo/standards). Reviewable commit by commit: | Commit | Change | | --- | --- | | build | Quality gate from `configs/dotnet` (analyzers incl. Meziantou, warnings as errors), `packages.lock.json` per project, locked-mode restore | | style | Kingsrook layout and LF line endings, produced mechanically by `dotnet format` (formatting only) | | docs | SPDX license header on every C# file | | refactor | Real code changes: analyzer findings fixed (one type per file, regex timeouts, async void, …) and header comments on every type and member | | ci | Old workflows replaced by callers of the shared standards workflows (PR gates, security, CodeQL, .NET CI, NuGet release with SBOM + attestation + trusted publishing), Scorecard | | docs | README, CONTRIBUTING (GitHub Flow, DCO, signing), SECURITY, CODEOWNERS, templates, Dependabot, threat model, ADRs, RELEASING | Also includes `dev`'s CI fix, so it supersedes #1; the `dev` branch goes away under GitHub Flow. ## Why AppKit is the first Product repository to adopt the standards. Static conformance before: 16 FAIL; after: 0 FAIL, 0 WARN (the remaining UNKNOWN rows are GitHub settings and rulesets, applied separately). ## How tested Locally with `CI=true` (lock files enforced): locked restore x64 and ARM64; zero-warning x64 build; 115 unit tests with 100% line coverage of `KofTwentyTwo.AppKit` and `KofTwentyTwo.AppKit.Updates`; 12 FlaUI UI tests (WinUI + WPF samples); `dotnet format --verify-no-changes --severity warn` clean; pack produces 4 packages + symbols; actionlint, zizmor (pedantic), gitleaks clean. The UI tests caught a regression introduced while fixing MA0147 (the WPF splash stopped dismissing because no UI context existed yet); fixed by starting the countdown through the dispatcher in both packages. ## Notes - `ci.yml` and `release.yml` are pinned to KofTwentyTwo/standards#3's head commit; they are repinned after that PR merges. - This pull request's new check names become required checks once the repository's rulesets are updated. 🤖 Generated with [Claude Code](https://claude.com/claude-code) --------- Signed-off-by: James Maes <james@kof22.com> Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
73 lines
3.3 KiB
XML
73 lines
3.3 KiB
XML
<Project>
|
|
|
|
<!-- KofTwentyTwo .NET quality gate (standards: K22-CODE-CS, from
|
|
KofTwentyTwo/standards configs/dotnet). Every rule fails `dotnet build` locally
|
|
exactly as it fails in CI. -->
|
|
<PropertyGroup>
|
|
<Nullable>enable</Nullable>
|
|
<ImplicitUsings>enable</ImplicitUsings>
|
|
<LangVersion>latest</LangVersion>
|
|
<IsPackable>false</IsPackable>
|
|
|
|
<!-- Warnings are errors; analyzers and .editorconfig style run in every build. -->
|
|
<TreatWarningsAsErrors>true</TreatWarningsAsErrors>
|
|
<MSBuildTreatWarningsAsErrors>true</MSBuildTreatWarningsAsErrors>
|
|
<AnalysisLevel>latest-recommended</AnalysisLevel>
|
|
<EnforceCodeStyleInBuild>true</EnforceCodeStyleInBuild>
|
|
<!-- Required for IDE0005 (unused usings) to run during build. CS1591 (missing XML
|
|
doc) stays on for packable projects and is silenced for everything else below. -->
|
|
<GenerateDocumentationFile>true</GenerateDocumentationFile>
|
|
|
|
<!-- Reproducible builds with source-linked symbols. -->
|
|
<Deterministic>true</Deterministic>
|
|
<EmbedUntrackedSources>true</EmbedUntrackedSources>
|
|
<PublishRepositoryUrl>true</PublishRepositoryUrl>
|
|
<IncludeSymbols>true</IncludeSymbols>
|
|
<SymbolPackageFormat>snupkg</SymbolPackageFormat>
|
|
|
|
<!-- Supply chain: audit direct AND transitive packages; pin the whole graph. -->
|
|
<NuGetAudit>true</NuGetAudit>
|
|
<NuGetAuditMode>all</NuGetAuditMode>
|
|
<NuGetAuditLevel>low</NuGetAuditLevel>
|
|
<RestorePackagesWithLockFile>true</RestorePackagesWithLockFile>
|
|
<ManagePackageVersionsCentrally>true</ManagePackageVersionsCentrally>
|
|
</PropertyGroup>
|
|
|
|
<!-- CI: normalized paths, and restore must match the committed lock files exactly. -->
|
|
<PropertyGroup Condition="'$(GITHUB_ACTIONS)' == 'true' or '$(CI)' == 'true'">
|
|
<ContinuousIntegrationBuild>true</ContinuousIntegrationBuild>
|
|
<RestoreLockedMode>true</RestoreLockedMode>
|
|
</PropertyGroup>
|
|
|
|
<!-- Only shipped libraries must document their public API. -->
|
|
<PropertyGroup Condition="'$(IsPackable)' != 'true'">
|
|
<NoWarn>$(NoWarn);CS1591</NoWarn>
|
|
</PropertyGroup>
|
|
|
|
<ItemGroup>
|
|
<!-- Repository-wide analyzers; versions live in Directory.Packages.props. -->
|
|
<PackageReference Include="Meziantou.Analyzer" PrivateAssets="all" IncludeAssets="runtime; build; native; contentfiles; analyzers" />
|
|
</ItemGroup>
|
|
|
|
<!-- Single version source for every package in the repo; they always release
|
|
together. Local builds are <prefix>-dev; release builds pass an explicit
|
|
-p:Version=<tag-version>, which overrides both parts. SourceLink appends the
|
|
git commit as "+<sha>" on AssemblyInformationalVersion. -->
|
|
<PropertyGroup>
|
|
<VersionPrefix>0.1.0</VersionPrefix>
|
|
<VersionSuffix>dev</VersionSuffix>
|
|
</PropertyGroup>
|
|
|
|
<!-- Package metadata shared by every packable project. -->
|
|
<PropertyGroup>
|
|
<Authors>James Maes</Authors>
|
|
<Copyright>Copyright (c) 2026 James Maes (KofTwentyTwo)</Copyright>
|
|
<PackageLicenseExpression>MIT</PackageLicenseExpression>
|
|
<PackageProjectUrl>https://github.com/KofTwentyTwo/AppKit</PackageProjectUrl>
|
|
<RepositoryUrl>https://github.com/KofTwentyTwo/AppKit</RepositoryUrl>
|
|
<RepositoryType>git</RepositoryType>
|
|
<PackageTags>windows;desktop;winui;wpf;velopack</PackageTags>
|
|
</PropertyGroup>
|
|
|
|
</Project>
|