Public Access
Moves the scaffold to src/DodoSSH.Api and establishes the repo conventions the rest
of the milestones build on.
Structure:
- src/{Contracts,Crypto,Domain,Infrastructure,Api}, tests/{Contracts,Crypto,Domain}.Tests
- DodoSSH.slnx rewritten with src/ and tests/ solution folders
Build:
- Directory.Build.props centralises TFM, nullable, deterministic builds and
TreatWarningsAsErrors; Directory.Packages.props pins every version centrally
- packages.lock.json committed so CI restores in locked mode
- NuGet.config clears machine-level sources, which both fixes NU1507 under central
package management and makes restore reproducible off this machine
- Microsoft.OpenApi pinned to 2.11.0: ASP.NET Core 10.0.10 resolves 2.0.0, which is
covered by GHSA-v5pm-xwqc-g5wc (high, patched in 2.7.5)
Analyzers:
- AnalysisLevel is Recommended, not All. With warnings-as-errors, All turns opinionated
naming rules into build breaks and trains people to blanket-suppress.
- BannedSymbols.txt bans DateTime.UtcNow (TimeProvider), Guid.NewGuid (CreateVersion7),
sync-over-async, MD5/SHA1, PBKDF2 and SecureString
- CA1711/CA1724 disabled: both are .NET Framework CAS-era naming rules
- PublicApiAnalyzers on Contracts only, since that assembly is the client's real contract
API:
- weather-forecast template removed
- UseHttpsRedirection removed; TLS terminates at the reverse proxy and redirecting
behind one causes loops
- /healthz/{live,ready,startup}. Liveness deliberately checks no dependencies so a
transient database outage cannot restart the container and kill live SSH sessions.
Notes:
- No coverage collector yet. Microsoft.Testing.Extensions.CodeCoverage pulls an MTP 1.x
MSBuild extension that throws TypeLoadException against the MTP 2.3.x xunit.v3 brings.
Coverage gates are an M3 concern; revisit with an MTP 2.x-aligned version then.
Verified: dotnet build (0 warnings), 17 tests pass, format check clean, API serves
health and OpenAPI endpoints.
96 lines
1.6 KiB
Plaintext
96 lines
1.6 KiB
Plaintext
## Build results
|
|
[Bb]in/
|
|
[Oo]bj/
|
|
[Oo]ut/
|
|
[Ll]og/
|
|
[Ll]ogs/
|
|
# artifacts/* rather than artifacts/ — git does not descend into an excluded directory,
|
|
# so a negation under a directory-level ignore never matches. The committed OpenAPI
|
|
# document and schema snapshots live here and are CI-diffed.
|
|
artifacts/*
|
|
!artifacts/openapi/
|
|
!artifacts/schema/
|
|
|
|
## .NET / MSBuild
|
|
*.user
|
|
*.suo
|
|
*.userosscache
|
|
*.sln.docstates
|
|
project.lock.json
|
|
project.fragment.lock.json
|
|
*.binlog
|
|
*.nuget.props
|
|
*.nuget.targets
|
|
msbuild.log
|
|
msbuild.err
|
|
msbuild.wrn
|
|
|
|
## NuGet
|
|
*.nupkg
|
|
*.snupkg
|
|
.nuget/
|
|
**/packages/*
|
|
!**/packages/build/
|
|
# packages.lock.json IS committed — restore --locked-mode depends on it
|
|
|
|
## Test / coverage
|
|
[Tt]est[Rr]esult*/
|
|
coverage*.json
|
|
coverage*.xml
|
|
coverage*.info
|
|
*.coverage
|
|
*.coveragexml
|
|
TestResults/
|
|
BenchmarkDotNet.Artifacts/
|
|
|
|
## IDEs
|
|
.vs/
|
|
.vscode/*
|
|
!.vscode/extensions.json
|
|
!.vscode/launch.json
|
|
!.vscode/tasks.json
|
|
.idea/**/workspace.xml
|
|
.idea/**/tasks.xml
|
|
.idea/**/usage.statistics.xml
|
|
.idea/**/dictionaries/
|
|
.idea/**/shelf/
|
|
.idea/**/contentModel.xml
|
|
.idea/**/dataSources/
|
|
.idea/**/dataSources.ids
|
|
.idea/**/dataSources.local.xml
|
|
.idea/**/sqlDataSources.xml
|
|
.idea/**/httpRequests/
|
|
*.DotSettings.user
|
|
|
|
## OS
|
|
.DS_Store
|
|
Thumbs.db
|
|
desktop.ini
|
|
|
|
## Node (xterm.js bundle in DodoSSH.Client.WebAssets)
|
|
node_modules/
|
|
npm-debug.log*
|
|
yarn-error.log*
|
|
.pnpm-store/
|
|
|
|
## Client build / packaging output
|
|
publish/
|
|
Releases/
|
|
*.AppImage
|
|
*.dmg
|
|
*.deb
|
|
*.rpm
|
|
*.msix
|
|
*.appinstaller
|
|
|
|
## Secrets and local config — never commit these
|
|
*.pfx
|
|
*.p12
|
|
*.snk
|
|
appsettings.Local.json
|
|
appsettings.*.Local.json
|
|
.env
|
|
.env.*
|
|
!deploy/.env.example
|
|
secrets/
|