Repository navigation
Update build tooling, packages and conventions (2026-10) - #10
Merged
Merged
Conversation
- ZeroFailed 1.0.5 -> 1.0.7 and InvokeBuild 5.12.1 -> 5.14.23 in build.ps1 - MSTest.Sdk 4.3.2 -> 4.5.1 (global.json); NSubstitute 6.0.0 -> 6.2.0 - Replace Endjin.RecommendedPractices.GitHub with a checked-in Endjin.Conventions.props and Directory.Build.props, enabling the .NET analyzers and EnforceCodeStyleInBuild; remove stylecop.json - Adopt the house-style .editorconfig; move using directives outside namespaces and drop unused ones (dotnet format) - Ignore Microsoft.Testing.Platform .diag logs Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
There was a problem hiding this comment.
🟡 Changes recommended
The GitHub Actions CI property does not reach the test project, leaving locked restore enforcement disabled.
1 open finding
What changed in this PR
Updates build dependencies, replaces package-provided conventions with checked-in configuration, and applies the resulting code-style cleanup.
Changes:
- Upgrades ZeroFailed, InvokeBuild, MSTest, and NSubstitute.
- Introduces shared analyzer, packaging, and build conventions.
- Reorganizes using directives and ignores test diagnostic logs.
| File | Description |
|---|---|
.gitignore |
Ignores test-platform diagnostic logs. |
build.ps1 |
Upgrades build modules. |
global.json |
Upgrades MSTest SDK. |
Solutions/.editorconfig |
Defines house style and analyzer settings. |
Solutions/Directory.Build.props |
Enables analyzers solution-wide. |
Solutions/Directory.Packages.props |
Updates centralized dependencies. |
Solutions/Endjin.Conventions.props |
Replaces package-provided conventions. |
Solutions/stylecop.json |
Removes obsolete StyleCop configuration. |
Solutions/Ais.Net.Models/Ais.Net.Models.csproj |
Imports checked-in conventions. |
Solutions/Ais.Net.Models.Specs/packages.lock.json |
Locks upgraded test dependencies. |
Solutions/Ais.Net.Models.Specs/ShipTypeClassificationTests.cs |
Cleans using directives. |
Solutions/Ais.Net.Models.Specs/PositionTests.cs |
Cleans using directives. |
Solutions/Ais.Net.Models.Specs/AisMessageType5Tests.cs |
Cleans using directives. |
Solutions/Ais.Net.Models.Specs/AisMessageType27Tests.cs |
Cleans using directives. |
Solutions/Ais.Net.Models.Specs/AisMessageType24Part1Tests.cs |
Cleans using directives. |
Solutions/Ais.Net.Models.Specs/AisMessageType24Part0Tests.cs |
Cleans using directives. |
Solutions/Ais.Net.Models.Specs/AisMessageType1Through3Tests.cs |
Cleans using directives. |
Solutions/Ais.Net.Models.Specs/AisMessageType19Tests.cs |
Cleans using directives. |
Solutions/Ais.Net.Models.Specs/AisMessageType18Tests.cs |
Cleans using directives. |
Solutions/Ais.Net.Models.Specs/AisMessageExtensionsTests.cs |
Cleans using directives. |
Solutions/Ais.Net.Models.Benchmarks/VesselNameBenchmarks.cs |
Cleans using directives. |
Solutions/Ais.Net.Models.Benchmarks/PositionBenchmarks.cs |
Moves using directives. |
Solutions/Ais.Net.Models.Benchmarks/MessageConstructionBenchmarks.cs |
Cleans using directives. |
Solutions/Ais.Net.Models.Benchmarks/ConversionBenchmarks.cs |
Cleans using directives. |
🧠 Review effort: Balanced
💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.
…sletter offerings
…oject The ContinuousIntegrationBuild mapping from TF_BUILD / GITHUB_ACTIONS lived in the opt-in Endjin.Conventions.props, which only the library imports, so the Specs project's RestoreLockedMode never engaged in CI and packages.lock.json was not enforced (Copilot finding on #10). The mapping now lives in Directory.Build.props, which every project imports; packaging and warning conventions stay opt-in. Verified that under GITHUB_ACTIONS=true the Specs project evaluates RestoreLockedMode=true and a forced locked restore succeeds. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
The computed copyright year keeps the notice current but makes a rebuild of the same commit differ across a UTC year boundary (assembly attribute and nuspec). When SOURCE_DATE_EPOCH is set - the reproducible-builds convention - the year now comes from it instead of the clock, so a build that needs to be reproducible byte for byte can pin it; the default behaviour is unchanged. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
The ZeroFailed build config now sets SOURCE_DATE_EPOCH from the HEAD commit's timestamp when the environment has not set it, so the copyright year derives from the commit being built and a commit rebuilds byte for byte in any year. An ad-hoc dotnet build without the variable still uses the current year. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Code Coverage Summary Report - Linux (No TFM)Summary
CoverageAis.Net.Models - 100%
|
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.

Summary
global.json, which also lifts MSTest, the TRX report and code coverage extensions), NSubstitute 6.0.0 → 6.2.0.dotnet list package --outdatednow reports nothing.Endjin.RecommendedPractices.GitHubis replaced by a checked-inSolutions/Endjin.Conventions.props(same pattern as Ais.Net.Receiver) plusDirectory.Build.props, which turn on the .NET analyzers andEnforceCodeStyleInBuild.stylecop.jsonand the StyleCop suppressions go with the package. Package metadata (authors, icon, Source Link, deterministic build, computed copyright year) is preserved..editorconfigreplaces the package template;dotnet formatmoved using directives outside namespaces and removed unused ones. No behavioural changes..gitignorenow covers the Microsoft.Testing.Platform.diaglogs the test task writes to the repo root.Verification
Full
./build.ps1 -Configuration Release: build clean with zero warnings, 245 tests passed, SBOM generated, package built with icon and metadata intact.🤖 Generated with Claude Code