chore: adopt the standard CI shape, CodeQL and Dependabot - #10
Merged
Conversation
Adopts NextIteration.Standards section 3 and the section 4 workflow clauses. Closes 3.0, 3.1, 3.5, 3.6, 3.7, 4.4 and 4.6 for this repo. ci.yml is the canonical template, with two repo-specific parts. The `release` job that cut the GitHub release from CHANGELOG.md is kept and moved downstream of `publish`, so a release is only ever cut for bytes that reached nuget.org; STANDARD.md 3.1 names four jobs and does not forbid a fifth. The test matrix now runs all three platforms per 3.1.1 with no exception claimed — this is a filesystem library, so Windows and macOS exercise real differences rather than the same code path twice. Adding the Windows leg exposed a defect in AtomicFile that has shipped since 0.1.0. File.Move(overwrite: true) is rename(2) on POSIX, which replaces a destination another handle holds open and serialises concurrent renames; on Windows it is MoveFileEx, which raises a sharing violation in both cases. WriteAllTextAsync now routes Windows through File.Replace (ReplaceFile) with a short retry for the window between testing for the destination and replacing it. Fixed here rather than follow-up so the branch is green on every leg it now runs. Coverage was referenced but never collected: `-- --coverage` now invokes the Microsoft.Testing.Platform extension and the .coverage files are uploaded per platform. dependabot.yml's ignore list carries only the one package this repo floors per TFM. Copying Auth's three verbatim would assert two dependencies that are not in the tree. Build is clean at zero warnings and all 64 tests pass on net8.0 and net10.0 locally; the Windows and macOS legs run for the first time in this PR. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
|
You are seeing this message because GitHub Code Scanning has recently been set up for this repository, or this pull request contains the workflow file for the Code Scanning tool. What Enabling Code Scanning Means:
For more information about GitHub Code Scanning, check out the documentation. |
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.
What changed
PR A of the NextIteration.Standards adoption sequence — CI and verification. Closes §3.0, §3.1, §3.5, §3.6, §3.7, §4.4 and §4.6 for this repo. §2.3 was already met.
ci.ymlreplaced with the canonical template.buildandtestsplit,testruns a three-platform matrix, and a new aggregatingcigate is the intended single required status check. Addsconcurrency,timeout-minutes, a least-privilegepermissionsblock and a NuGet cache. Coverage is now actually invoked (-- --coverage) and uploaded per platform.codeql.ymladded (security-and-quality, weekly + per push/PR).dependabot.ymlanddependabot-auto-merge.ymladded. Minor/patch grouped and auto-merged behind CI; majors stay open.AtomicFileWindows fix — see below.Why
Two repo-specific decisions worth calling out:
The
releasejob is kept. §3.1 names four canonical jobs and does not forbid a fifth. This repo'sreleasejob cuts the GitHub release fromCHANGELOG.md; deleting it would remove working behaviour that no clause objects to. It now sits downstream ofpublish, so a release is only ever cut for bytes that reached nuget.org, and it is tag-gated so it can never run on a PR.No platform exception is claimed. §3.1.1 makes all three platforms the default. This library has no OS-native backend, but it is a filesystem library —
AtomicFile's replace primitive genuinely differs by platform, which is precisely the point.dependabot.yml'signorelist has one entry, not Auth's three. §4.10 defines it as the packages this repo floors per TFM, and this repo floors exactly one. Copying the template verbatim would assert two dependencies that are not in the tree.Consumer impact
AtomicFileraised a sharing violation on Windows.File.Move(overwrite: true)isrename(2)on POSIX, which replaces a destination another handle holds open and serialises concurrent renames. On Windows the same call isMoveFileEx, which does neither: it throws when the destination is open or when two replacements race.WriteAllTextAsyncnow routes Windows throughFile.Replace(ReplaceFile) with a short retry for the window between testing for the destination and replacing it — the same fix Auth needed.This has shipped since 0.1.0 and was never caught, because the concurrent-writer test had only ever run on Linux. It is a pre-existing defect surfaced by the new matrix leg, not a regression, and per
ADOPTING.mdit is fixed in the same PR so the branch stays green.No public API, target framework, dependency floor or on-disk format change.
Checklist
TreatWarningsAsErrorsis on)net8.0andnet10.0locally; Windows and macOS run here for the first timeAtomicFileisinternaland its remarks are updatedCHANGELOG.mdupdated under[Unreleased]🤖 Generated with Claude Code