Skip to content

Update build tooling, packages and conventions (2026-10) - #10

Merged
HowardvanRooijen merged 5 commits into
mainfrom
package-updates-2026-10
Oct 12, 2026
Merged

HowardvanRooijen merged 5 commits into
mainfrom
package-updates-2026-10

Conversation

@HowardvanRooijen

Copy link
Copy Markdown
Contributor

Summary

  • Build tooling: ZeroFailed 1.0.5 → 1.0.7, InvokeBuild 5.12.1 → 5.14.23.
  • Packages: MSTest.Sdk 4.3.2 → 4.5.1 (pinned in global.json, which also lifts MSTest, the TRX report and code coverage extensions), NSubstitute 6.0.0 → 6.2.0. dotnet list package --outdated now reports nothing.
  • Conventions: Endjin.RecommendedPractices.GitHub is replaced by a checked-in Solutions/Endjin.Conventions.props (same pattern as Ais.Net.Receiver) plus Directory.Build.props, which turn on the .NET analyzers and EnforceCodeStyleInBuild. stylecop.json and the StyleCop suppressions go with the package. Package metadata (authors, icon, Source Link, deterministic build, computed copyright year) is preserved.
  • Code style: the house-style .editorconfig replaces the package template; dotnet format moved using directives outside namespaces and removed unused ones. No behavioural changes.
  • .gitignore now covers the Microsoft.Testing.Platform .diag logs 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

- 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>
Copilot AI balanced review requested due to automatic review settings October 12, 2026 09:31

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🟡 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.

Comment thread Solutions/Endjin.Conventions.props Outdated
@github-actions

github-actions Bot commented Oct 12, 2026 •

Copy link
Copy Markdown

Test Results

245 tests  ±0   245 ✅ ±0   0s ⏱️ ±0s
  1 suites ±0     0 💤 ±0 
  1 files   ±0     0 ❌ ±0 

Results for commit 4be19d8. ± Comparison against base commit 9f8eaea.

♻️ This comment has been updated with latest results.

HowardvanRooijen and others added 4 commits October 12, 2026 15:02
…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>

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🟢 Approval recommended

The previous CI locked-restore issue is resolved, and no remaining correctness problems were identified.

0 open findings

1 resolved since last review

🧠 Review effort: Balanced

@github-actions

Copy link
Copy Markdown

Code Coverage Summary Report - Linux (No TFM)

Summary
Generated on: 10/12/2026 - 14:31:18
Parser: Cobertura
Assemblies: 1
Classes: 10
Files: 10
Line coverage: 100% (141 of 141)
Covered lines: 141
Uncovered lines: 0
Coverable lines: 141
Total lines: 721
Branch coverage: 98.5% (70 of 71)
Covered branches: 70
Total branches: 71
Method coverage: Feature is only available for sponsors

Coverage

Ais.Net.Models - 100%
Name Line Branch
Ais.Net.Models 100% 98.5%
Ais.Net.Models.Abstractions.Position 100%
Ais.Net.Models.AisMessageBase 100%
Ais.Net.Models.AisMessageExtensions 100% 98.5%
Ais.Net.Models.AisMessageType18 100%
Ais.Net.Models.AisMessageType19 100%
Ais.Net.Models.AisMessageType1Through3 100%
Ais.Net.Models.AisMessageType24Part0 100%
Ais.Net.Models.AisMessageType24Part1 100%
Ais.Net.Models.AisMessageType27 100%
Ais.Net.Models.AisMessageType5 100%

@HowardvanRooijen
HowardvanRooijen merged commit 8d36e2d into main Oct 12, 2026
8 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants