@oddessentials/repo-standards 3.0.0 → 3.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +2 -1
- package/dist/config/standards.csharp-dotnet.azure-devops.json +141 -8
- package/dist/config/standards.csharp-dotnet.github-actions.json +141 -8
- package/dist/config/standards.csharp-dotnet.json +153 -8
- package/dist/config/standards.go.azure-devops.json +141 -8
- package/dist/config/standards.go.github-actions.json +141 -8
- package/dist/config/standards.go.json +153 -8
- package/dist/config/standards.json +614 -25
- package/dist/config/standards.python.azure-devops.json +153 -8
- package/dist/config/standards.python.github-actions.json +153 -8
- package/dist/config/standards.python.json +165 -8
- package/dist/config/standards.rust.azure-devops.json +140 -7
- package/dist/config/standards.rust.github-actions.json +140 -7
- package/dist/config/standards.rust.json +152 -7
- package/dist/config/standards.typescript-js.azure-devops.json +151 -10
- package/dist/config/standards.typescript-js.github-actions.json +151 -10
- package/dist/config/standards.typescript-js.json +163 -10
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -68,7 +68,7 @@ The master spec includes a `meta` block that defines system-wide expectations:
|
|
|
68
68
|
|
|
69
69
|
## Structure of `config/standards.json`
|
|
70
70
|
|
|
71
|
-
- `version` — schema version (currently `
|
|
71
|
+
- `version` — schema version (currently `3`)
|
|
72
72
|
- `meta` — global rules and migration policy
|
|
73
73
|
- `ciSystems` — supported CI platforms
|
|
74
74
|
_(currently `github-actions`, `azure-devops`)_
|
|
@@ -102,6 +102,7 @@ The `version` field indicates schema compatibility:
|
|
|
102
102
|
|
|
103
103
|
- `1` — Original schema
|
|
104
104
|
- `2` — Adds `bazelHints`, `meta.executorHints.bazel` for Bazel support, `anyOfFiles`, `pinningNotes`, enforcement/severity levels, ratio-based coverage thresholds, Rust/Go stacks. Enforces strict validation with `additionalProperties: false`.
|
|
105
|
+
- `3` — Expands release, build determinism, and provenance/CI automation requirements; adds unified release workflow and template automation guidance.
|
|
105
106
|
|
|
106
107
|
Consumers should ignore unknown fields for forward compatibility.
|
|
107
108
|
|
|
@@ -121,7 +121,7 @@
|
|
|
121
121
|
"stage": "release"
|
|
122
122
|
}
|
|
123
123
|
},
|
|
124
|
-
"description": "Use MAJOR.MINOR.PATCH versioning with clear rules and automated changelog generation based on commit history.",
|
|
124
|
+
"description": "Use MAJOR.MINOR.PATCH versioning with clear rules and automated changelog generation based on commit history. Maintain a single canonical version source (for example, package.json or VERSION) that all release artifacts use.",
|
|
125
125
|
"id": "semantic-versioning",
|
|
126
126
|
"label": "Semantic Versioning",
|
|
127
127
|
"stack": {
|
|
@@ -133,8 +133,49 @@
|
|
|
133
133
|
"exampleTools": [
|
|
134
134
|
"GitVersion"
|
|
135
135
|
],
|
|
136
|
-
"notes": "Use GitVersion
|
|
137
|
-
"
|
|
136
|
+
"notes": "Use GitVersion (or Directory.Build.props) as the single canonical version source, computed from git history, and feed it into assembly/package versions. Configure CI to auto-generate or update CHANGELOG.md from commit messages and git tags. Integrate with the release pipeline to version assemblies, NuGet packages, and publish GitHub releases from the same version.",
|
|
137
|
+
"optionalFiles": [
|
|
138
|
+
"GitVersion.yml",
|
|
139
|
+
"Directory.Build.props",
|
|
140
|
+
"CHANGELOG.md"
|
|
141
|
+
],
|
|
142
|
+
"requiredFiles": [
|
|
143
|
+
"*.csproj"
|
|
144
|
+
],
|
|
145
|
+
"requiredScripts": [
|
|
146
|
+
"release"
|
|
147
|
+
],
|
|
148
|
+
"verification": "Check that versioning is driven by a SemVer-aware tool (for example, GitVersion) and verify that running the release/versioning step locally or in CI produces the expected version metadata, updates project files, and generates changelog entries from commit history."
|
|
149
|
+
}
|
|
150
|
+
},
|
|
151
|
+
{
|
|
152
|
+
"ciHints": {
|
|
153
|
+
"azure-devops": {
|
|
154
|
+
"stage": "release"
|
|
155
|
+
}
|
|
156
|
+
},
|
|
157
|
+
"description": "Use a single CI release pipeline that publishes all artifacts (GitHub releases, packages, containers) from the same canonical version source.",
|
|
158
|
+
"id": "unified-release-workflow",
|
|
159
|
+
"label": "Unified Release Workflow",
|
|
160
|
+
"stack": {
|
|
161
|
+
"exampleConfigFiles": [
|
|
162
|
+
"azure-pipelines.yml",
|
|
163
|
+
".github/workflows/release.yml"
|
|
164
|
+
],
|
|
165
|
+
"exampleTools": [
|
|
166
|
+
"GitVersion",
|
|
167
|
+
"dotnet pack",
|
|
168
|
+
"dotnet nuget push"
|
|
169
|
+
],
|
|
170
|
+
"notes": "Use a single release pipeline to publish NuGet packages, GitHub releases, and Docker images from the canonical version source (GitVersion or Directory.Build.props).",
|
|
171
|
+
"optionalFiles": [
|
|
172
|
+
"GitVersion.yml",
|
|
173
|
+
"Directory.Build.props"
|
|
174
|
+
],
|
|
175
|
+
"requiredScripts": [
|
|
176
|
+
"release"
|
|
177
|
+
],
|
|
178
|
+
"verification": "Trigger the release pipeline and confirm all artifacts share the same version number and tag."
|
|
138
179
|
}
|
|
139
180
|
},
|
|
140
181
|
{
|
|
@@ -143,10 +184,17 @@
|
|
|
143
184
|
"stage": "quality"
|
|
144
185
|
}
|
|
145
186
|
},
|
|
146
|
-
"description": "Enforce structured commit messages such as Conventional Commits.",
|
|
187
|
+
"description": "Enforce structured commit messages such as Conventional Commits via commit-msg hooks and CI. This is required for deterministic versioning and changelog generation.",
|
|
147
188
|
"id": "commit-linting",
|
|
148
189
|
"label": "Commit Linting",
|
|
149
190
|
"stack": {
|
|
191
|
+
"anyOfFiles": [
|
|
192
|
+
"commitlint.config.js",
|
|
193
|
+
"commitlint.config.cjs",
|
|
194
|
+
"commitlint.config.mjs",
|
|
195
|
+
"commitlint.config.json",
|
|
196
|
+
".cz.toml"
|
|
197
|
+
],
|
|
150
198
|
"exampleConfigFiles": [
|
|
151
199
|
"commitlint.config.*",
|
|
152
200
|
".cz.toml"
|
|
@@ -155,8 +203,11 @@
|
|
|
155
203
|
"commitlint",
|
|
156
204
|
"commitizen"
|
|
157
205
|
],
|
|
158
|
-
"notes": "Document your
|
|
159
|
-
"
|
|
206
|
+
"notes": "Document your Conventional Commit convention and enforce it via commit-msg hooks and CI so release tooling can compute versions deterministically.",
|
|
207
|
+
"requiredScripts": [
|
|
208
|
+
"commitlint"
|
|
209
|
+
],
|
|
210
|
+
"verification": "Create a test commit following the documented convention and confirm that commit-msg hooks and CI checks accept it."
|
|
160
211
|
}
|
|
161
212
|
},
|
|
162
213
|
{
|
|
@@ -264,7 +315,7 @@
|
|
|
264
315
|
"stage": "quality"
|
|
265
316
|
}
|
|
266
317
|
},
|
|
267
|
-
"description": "Use static type checking to catch errors before runtime and enforce strictness on new code.",
|
|
318
|
+
"description": "Use static type checking to catch errors before runtime and enforce strictness on new code. For JS/TS stacks, require a TypeScript-first policy with strict mode and a CI typecheck step; allow JSDoc/checkJs migration for legacy JS.",
|
|
268
319
|
"id": "type-checking",
|
|
269
320
|
"label": "Type Checking",
|
|
270
321
|
"stack": {
|
|
@@ -316,6 +367,88 @@
|
|
|
316
367
|
"verification": "Dependency lockfile or package reference is present; security scanning is configured."
|
|
317
368
|
}
|
|
318
369
|
},
|
|
370
|
+
{
|
|
371
|
+
"ciHints": {
|
|
372
|
+
"azure-devops": {
|
|
373
|
+
"stage": "build"
|
|
374
|
+
}
|
|
375
|
+
},
|
|
376
|
+
"description": "Ensure builds are reproducible by pinning dependencies, base images, and tool/runtime versions. Avoid network/time variance and fail when lockfiles drift.",
|
|
377
|
+
"id": "deterministic-builds",
|
|
378
|
+
"label": "Deterministic & Hermetic Builds",
|
|
379
|
+
"stack": {
|
|
380
|
+
"exampleConfigFiles": [
|
|
381
|
+
"packages.lock.json",
|
|
382
|
+
"global.json"
|
|
383
|
+
],
|
|
384
|
+
"exampleTools": [
|
|
385
|
+
"dotnet restore --locked-mode"
|
|
386
|
+
],
|
|
387
|
+
"notes": "Enable packages.lock.json and use locked restore. Pin SDK versions via global.json and pin base images in Dockerfiles.",
|
|
388
|
+
"optionalFiles": [
|
|
389
|
+
"packages.lock.json",
|
|
390
|
+
"global.json"
|
|
391
|
+
],
|
|
392
|
+
"verification": "packages.lock.json or equivalent lock files exist and restore runs in locked mode. SDK versions are pinned."
|
|
393
|
+
}
|
|
394
|
+
},
|
|
395
|
+
{
|
|
396
|
+
"ciHints": {
|
|
397
|
+
"azure-devops": {
|
|
398
|
+
"stage": "security"
|
|
399
|
+
}
|
|
400
|
+
},
|
|
401
|
+
"description": "Produce SBOMs or provenance metadata, enable secret/code scanning, and sign tags or commits for critical repos.",
|
|
402
|
+
"id": "provenance-security",
|
|
403
|
+
"label": "Provenance & Security Metadata",
|
|
404
|
+
"stack": {
|
|
405
|
+
"exampleConfigFiles": [
|
|
406
|
+
".github/workflows/codeql.yml",
|
|
407
|
+
".github/workflows/provenance.yml"
|
|
408
|
+
],
|
|
409
|
+
"exampleTools": [
|
|
410
|
+
"sbom-tool",
|
|
411
|
+
"codeql",
|
|
412
|
+
"gitleaks",
|
|
413
|
+
"cosign"
|
|
414
|
+
],
|
|
415
|
+
"notes": "Generate SBOM/provenance for NuGet and container artifacts, enable secret scanning, and sign tags/commits for critical repos.",
|
|
416
|
+
"optionalFiles": [
|
|
417
|
+
"SECURITY.md",
|
|
418
|
+
".github/workflows/codeql.yml"
|
|
419
|
+
],
|
|
420
|
+
"verification": "SBOM/provenance artifacts are published alongside releases, and CI runs secret/code scanning."
|
|
421
|
+
}
|
|
422
|
+
},
|
|
423
|
+
{
|
|
424
|
+
"ciHints": {
|
|
425
|
+
"azure-devops": {
|
|
426
|
+
"stage": "ci"
|
|
427
|
+
}
|
|
428
|
+
},
|
|
429
|
+
"description": "Adopt standard CI templates and config samples to scale across repositories, minimizing bespoke pipeline logic.",
|
|
430
|
+
"id": "ci-templates-automation",
|
|
431
|
+
"label": "CI Templates & Automation",
|
|
432
|
+
"stack": {
|
|
433
|
+
"anyOfFiles": [
|
|
434
|
+
".github/workflows/ci.yml",
|
|
435
|
+
"azure-pipelines.yml"
|
|
436
|
+
],
|
|
437
|
+
"exampleConfigFiles": [
|
|
438
|
+
".github/workflows/ci.yml",
|
|
439
|
+
"azure-pipelines.yml"
|
|
440
|
+
],
|
|
441
|
+
"exampleTools": [
|
|
442
|
+
"GitHub Actions reusable workflows",
|
|
443
|
+
"Azure DevOps templates"
|
|
444
|
+
],
|
|
445
|
+
"notes": "Use shared CI templates for build/test/pack/release stages to standardize across .NET repos.",
|
|
446
|
+
"requiredScripts": [
|
|
447
|
+
"ci"
|
|
448
|
+
],
|
|
449
|
+
"verification": "CI pipeline references a shared template or reusable workflow and follows the standard job naming."
|
|
450
|
+
}
|
|
451
|
+
},
|
|
319
452
|
{
|
|
320
453
|
"ciHints": {
|
|
321
454
|
"azure-devops": {
|
|
@@ -666,5 +799,5 @@
|
|
|
666
799
|
},
|
|
667
800
|
"stack": "csharp-dotnet",
|
|
668
801
|
"stackLabel": "C# / .NET",
|
|
669
|
-
"version":
|
|
802
|
+
"version": 3
|
|
670
803
|
}
|
|
@@ -121,7 +121,7 @@
|
|
|
121
121
|
"job": "release"
|
|
122
122
|
}
|
|
123
123
|
},
|
|
124
|
-
"description": "Use MAJOR.MINOR.PATCH versioning with clear rules and automated changelog generation based on commit history.",
|
|
124
|
+
"description": "Use MAJOR.MINOR.PATCH versioning with clear rules and automated changelog generation based on commit history. Maintain a single canonical version source (for example, package.json or VERSION) that all release artifacts use.",
|
|
125
125
|
"id": "semantic-versioning",
|
|
126
126
|
"label": "Semantic Versioning",
|
|
127
127
|
"stack": {
|
|
@@ -133,8 +133,49 @@
|
|
|
133
133
|
"exampleTools": [
|
|
134
134
|
"GitVersion"
|
|
135
135
|
],
|
|
136
|
-
"notes": "Use GitVersion
|
|
137
|
-
"
|
|
136
|
+
"notes": "Use GitVersion (or Directory.Build.props) as the single canonical version source, computed from git history, and feed it into assembly/package versions. Configure CI to auto-generate or update CHANGELOG.md from commit messages and git tags. Integrate with the release pipeline to version assemblies, NuGet packages, and publish GitHub releases from the same version.",
|
|
137
|
+
"optionalFiles": [
|
|
138
|
+
"GitVersion.yml",
|
|
139
|
+
"Directory.Build.props",
|
|
140
|
+
"CHANGELOG.md"
|
|
141
|
+
],
|
|
142
|
+
"requiredFiles": [
|
|
143
|
+
"*.csproj"
|
|
144
|
+
],
|
|
145
|
+
"requiredScripts": [
|
|
146
|
+
"release"
|
|
147
|
+
],
|
|
148
|
+
"verification": "Check that versioning is driven by a SemVer-aware tool (for example, GitVersion) and verify that running the release/versioning step locally or in CI produces the expected version metadata, updates project files, and generates changelog entries from commit history."
|
|
149
|
+
}
|
|
150
|
+
},
|
|
151
|
+
{
|
|
152
|
+
"ciHints": {
|
|
153
|
+
"github-actions": {
|
|
154
|
+
"job": "release"
|
|
155
|
+
}
|
|
156
|
+
},
|
|
157
|
+
"description": "Use a single CI release pipeline that publishes all artifacts (GitHub releases, packages, containers) from the same canonical version source.",
|
|
158
|
+
"id": "unified-release-workflow",
|
|
159
|
+
"label": "Unified Release Workflow",
|
|
160
|
+
"stack": {
|
|
161
|
+
"exampleConfigFiles": [
|
|
162
|
+
"azure-pipelines.yml",
|
|
163
|
+
".github/workflows/release.yml"
|
|
164
|
+
],
|
|
165
|
+
"exampleTools": [
|
|
166
|
+
"GitVersion",
|
|
167
|
+
"dotnet pack",
|
|
168
|
+
"dotnet nuget push"
|
|
169
|
+
],
|
|
170
|
+
"notes": "Use a single release pipeline to publish NuGet packages, GitHub releases, and Docker images from the canonical version source (GitVersion or Directory.Build.props).",
|
|
171
|
+
"optionalFiles": [
|
|
172
|
+
"GitVersion.yml",
|
|
173
|
+
"Directory.Build.props"
|
|
174
|
+
],
|
|
175
|
+
"requiredScripts": [
|
|
176
|
+
"release"
|
|
177
|
+
],
|
|
178
|
+
"verification": "Trigger the release pipeline and confirm all artifacts share the same version number and tag."
|
|
138
179
|
}
|
|
139
180
|
},
|
|
140
181
|
{
|
|
@@ -143,10 +184,17 @@
|
|
|
143
184
|
"job": "ci"
|
|
144
185
|
}
|
|
145
186
|
},
|
|
146
|
-
"description": "Enforce structured commit messages such as Conventional Commits.",
|
|
187
|
+
"description": "Enforce structured commit messages such as Conventional Commits via commit-msg hooks and CI. This is required for deterministic versioning and changelog generation.",
|
|
147
188
|
"id": "commit-linting",
|
|
148
189
|
"label": "Commit Linting",
|
|
149
190
|
"stack": {
|
|
191
|
+
"anyOfFiles": [
|
|
192
|
+
"commitlint.config.js",
|
|
193
|
+
"commitlint.config.cjs",
|
|
194
|
+
"commitlint.config.mjs",
|
|
195
|
+
"commitlint.config.json",
|
|
196
|
+
".cz.toml"
|
|
197
|
+
],
|
|
150
198
|
"exampleConfigFiles": [
|
|
151
199
|
"commitlint.config.*",
|
|
152
200
|
".cz.toml"
|
|
@@ -155,8 +203,11 @@
|
|
|
155
203
|
"commitlint",
|
|
156
204
|
"commitizen"
|
|
157
205
|
],
|
|
158
|
-
"notes": "Document your
|
|
159
|
-
"
|
|
206
|
+
"notes": "Document your Conventional Commit convention and enforce it via commit-msg hooks and CI so release tooling can compute versions deterministically.",
|
|
207
|
+
"requiredScripts": [
|
|
208
|
+
"commitlint"
|
|
209
|
+
],
|
|
210
|
+
"verification": "Create a test commit following the documented convention and confirm that commit-msg hooks and CI checks accept it."
|
|
160
211
|
}
|
|
161
212
|
},
|
|
162
213
|
{
|
|
@@ -264,7 +315,7 @@
|
|
|
264
315
|
"job": "ci"
|
|
265
316
|
}
|
|
266
317
|
},
|
|
267
|
-
"description": "Use static type checking to catch errors before runtime and enforce strictness on new code.",
|
|
318
|
+
"description": "Use static type checking to catch errors before runtime and enforce strictness on new code. For JS/TS stacks, require a TypeScript-first policy with strict mode and a CI typecheck step; allow JSDoc/checkJs migration for legacy JS.",
|
|
268
319
|
"id": "type-checking",
|
|
269
320
|
"label": "Type Checking",
|
|
270
321
|
"stack": {
|
|
@@ -316,6 +367,88 @@
|
|
|
316
367
|
"verification": "Dependency lockfile or package reference is present; security scanning is configured."
|
|
317
368
|
}
|
|
318
369
|
},
|
|
370
|
+
{
|
|
371
|
+
"ciHints": {
|
|
372
|
+
"github-actions": {
|
|
373
|
+
"job": "ci"
|
|
374
|
+
}
|
|
375
|
+
},
|
|
376
|
+
"description": "Ensure builds are reproducible by pinning dependencies, base images, and tool/runtime versions. Avoid network/time variance and fail when lockfiles drift.",
|
|
377
|
+
"id": "deterministic-builds",
|
|
378
|
+
"label": "Deterministic & Hermetic Builds",
|
|
379
|
+
"stack": {
|
|
380
|
+
"exampleConfigFiles": [
|
|
381
|
+
"packages.lock.json",
|
|
382
|
+
"global.json"
|
|
383
|
+
],
|
|
384
|
+
"exampleTools": [
|
|
385
|
+
"dotnet restore --locked-mode"
|
|
386
|
+
],
|
|
387
|
+
"notes": "Enable packages.lock.json and use locked restore. Pin SDK versions via global.json and pin base images in Dockerfiles.",
|
|
388
|
+
"optionalFiles": [
|
|
389
|
+
"packages.lock.json",
|
|
390
|
+
"global.json"
|
|
391
|
+
],
|
|
392
|
+
"verification": "packages.lock.json or equivalent lock files exist and restore runs in locked mode. SDK versions are pinned."
|
|
393
|
+
}
|
|
394
|
+
},
|
|
395
|
+
{
|
|
396
|
+
"ciHints": {
|
|
397
|
+
"github-actions": {
|
|
398
|
+
"job": "security"
|
|
399
|
+
}
|
|
400
|
+
},
|
|
401
|
+
"description": "Produce SBOMs or provenance metadata, enable secret/code scanning, and sign tags or commits for critical repos.",
|
|
402
|
+
"id": "provenance-security",
|
|
403
|
+
"label": "Provenance & Security Metadata",
|
|
404
|
+
"stack": {
|
|
405
|
+
"exampleConfigFiles": [
|
|
406
|
+
".github/workflows/codeql.yml",
|
|
407
|
+
".github/workflows/provenance.yml"
|
|
408
|
+
],
|
|
409
|
+
"exampleTools": [
|
|
410
|
+
"sbom-tool",
|
|
411
|
+
"codeql",
|
|
412
|
+
"gitleaks",
|
|
413
|
+
"cosign"
|
|
414
|
+
],
|
|
415
|
+
"notes": "Generate SBOM/provenance for NuGet and container artifacts, enable secret scanning, and sign tags/commits for critical repos.",
|
|
416
|
+
"optionalFiles": [
|
|
417
|
+
"SECURITY.md",
|
|
418
|
+
".github/workflows/codeql.yml"
|
|
419
|
+
],
|
|
420
|
+
"verification": "SBOM/provenance artifacts are published alongside releases, and CI runs secret/code scanning."
|
|
421
|
+
}
|
|
422
|
+
},
|
|
423
|
+
{
|
|
424
|
+
"ciHints": {
|
|
425
|
+
"github-actions": {
|
|
426
|
+
"job": "ci"
|
|
427
|
+
}
|
|
428
|
+
},
|
|
429
|
+
"description": "Adopt standard CI templates and config samples to scale across repositories, minimizing bespoke pipeline logic.",
|
|
430
|
+
"id": "ci-templates-automation",
|
|
431
|
+
"label": "CI Templates & Automation",
|
|
432
|
+
"stack": {
|
|
433
|
+
"anyOfFiles": [
|
|
434
|
+
".github/workflows/ci.yml",
|
|
435
|
+
"azure-pipelines.yml"
|
|
436
|
+
],
|
|
437
|
+
"exampleConfigFiles": [
|
|
438
|
+
".github/workflows/ci.yml",
|
|
439
|
+
"azure-pipelines.yml"
|
|
440
|
+
],
|
|
441
|
+
"exampleTools": [
|
|
442
|
+
"GitHub Actions reusable workflows",
|
|
443
|
+
"Azure DevOps templates"
|
|
444
|
+
],
|
|
445
|
+
"notes": "Use shared CI templates for build/test/pack/release stages to standardize across .NET repos.",
|
|
446
|
+
"requiredScripts": [
|
|
447
|
+
"ci"
|
|
448
|
+
],
|
|
449
|
+
"verification": "CI pipeline references a shared template or reusable workflow and follows the standard job naming."
|
|
450
|
+
}
|
|
451
|
+
},
|
|
319
452
|
{
|
|
320
453
|
"ciHints": {
|
|
321
454
|
"github-actions": {
|
|
@@ -666,5 +799,5 @@
|
|
|
666
799
|
},
|
|
667
800
|
"stack": "csharp-dotnet",
|
|
668
801
|
"stackLabel": "C# / .NET",
|
|
669
|
-
"version":
|
|
802
|
+
"version": 3
|
|
670
803
|
}
|
|
@@ -136,7 +136,7 @@
|
|
|
136
136
|
"job": "release"
|
|
137
137
|
}
|
|
138
138
|
},
|
|
139
|
-
"description": "Use MAJOR.MINOR.PATCH versioning with clear rules and automated changelog generation based on commit history.",
|
|
139
|
+
"description": "Use MAJOR.MINOR.PATCH versioning with clear rules and automated changelog generation based on commit history. Maintain a single canonical version source (for example, package.json or VERSION) that all release artifacts use.",
|
|
140
140
|
"id": "semantic-versioning",
|
|
141
141
|
"label": "Semantic Versioning",
|
|
142
142
|
"stack": {
|
|
@@ -148,8 +148,52 @@
|
|
|
148
148
|
"exampleTools": [
|
|
149
149
|
"GitVersion"
|
|
150
150
|
],
|
|
151
|
-
"notes": "Use GitVersion
|
|
152
|
-
"
|
|
151
|
+
"notes": "Use GitVersion (or Directory.Build.props) as the single canonical version source, computed from git history, and feed it into assembly/package versions. Configure CI to auto-generate or update CHANGELOG.md from commit messages and git tags. Integrate with the release pipeline to version assemblies, NuGet packages, and publish GitHub releases from the same version.",
|
|
152
|
+
"optionalFiles": [
|
|
153
|
+
"GitVersion.yml",
|
|
154
|
+
"Directory.Build.props",
|
|
155
|
+
"CHANGELOG.md"
|
|
156
|
+
],
|
|
157
|
+
"requiredFiles": [
|
|
158
|
+
"*.csproj"
|
|
159
|
+
],
|
|
160
|
+
"requiredScripts": [
|
|
161
|
+
"release"
|
|
162
|
+
],
|
|
163
|
+
"verification": "Check that versioning is driven by a SemVer-aware tool (for example, GitVersion) and verify that running the release/versioning step locally or in CI produces the expected version metadata, updates project files, and generates changelog entries from commit history."
|
|
164
|
+
}
|
|
165
|
+
},
|
|
166
|
+
{
|
|
167
|
+
"ciHints": {
|
|
168
|
+
"azure-devops": {
|
|
169
|
+
"stage": "release"
|
|
170
|
+
},
|
|
171
|
+
"github-actions": {
|
|
172
|
+
"job": "release"
|
|
173
|
+
}
|
|
174
|
+
},
|
|
175
|
+
"description": "Use a single CI release pipeline that publishes all artifacts (GitHub releases, packages, containers) from the same canonical version source.",
|
|
176
|
+
"id": "unified-release-workflow",
|
|
177
|
+
"label": "Unified Release Workflow",
|
|
178
|
+
"stack": {
|
|
179
|
+
"exampleConfigFiles": [
|
|
180
|
+
"azure-pipelines.yml",
|
|
181
|
+
".github/workflows/release.yml"
|
|
182
|
+
],
|
|
183
|
+
"exampleTools": [
|
|
184
|
+
"GitVersion",
|
|
185
|
+
"dotnet pack",
|
|
186
|
+
"dotnet nuget push"
|
|
187
|
+
],
|
|
188
|
+
"notes": "Use a single release pipeline to publish NuGet packages, GitHub releases, and Docker images from the canonical version source (GitVersion or Directory.Build.props).",
|
|
189
|
+
"optionalFiles": [
|
|
190
|
+
"GitVersion.yml",
|
|
191
|
+
"Directory.Build.props"
|
|
192
|
+
],
|
|
193
|
+
"requiredScripts": [
|
|
194
|
+
"release"
|
|
195
|
+
],
|
|
196
|
+
"verification": "Trigger the release pipeline and confirm all artifacts share the same version number and tag."
|
|
153
197
|
}
|
|
154
198
|
},
|
|
155
199
|
{
|
|
@@ -161,10 +205,17 @@
|
|
|
161
205
|
"job": "ci"
|
|
162
206
|
}
|
|
163
207
|
},
|
|
164
|
-
"description": "Enforce structured commit messages such as Conventional Commits.",
|
|
208
|
+
"description": "Enforce structured commit messages such as Conventional Commits via commit-msg hooks and CI. This is required for deterministic versioning and changelog generation.",
|
|
165
209
|
"id": "commit-linting",
|
|
166
210
|
"label": "Commit Linting",
|
|
167
211
|
"stack": {
|
|
212
|
+
"anyOfFiles": [
|
|
213
|
+
"commitlint.config.js",
|
|
214
|
+
"commitlint.config.cjs",
|
|
215
|
+
"commitlint.config.mjs",
|
|
216
|
+
"commitlint.config.json",
|
|
217
|
+
".cz.toml"
|
|
218
|
+
],
|
|
168
219
|
"exampleConfigFiles": [
|
|
169
220
|
"commitlint.config.*",
|
|
170
221
|
".cz.toml"
|
|
@@ -173,8 +224,11 @@
|
|
|
173
224
|
"commitlint",
|
|
174
225
|
"commitizen"
|
|
175
226
|
],
|
|
176
|
-
"notes": "Document your
|
|
177
|
-
"
|
|
227
|
+
"notes": "Document your Conventional Commit convention and enforce it via commit-msg hooks and CI so release tooling can compute versions deterministically.",
|
|
228
|
+
"requiredScripts": [
|
|
229
|
+
"commitlint"
|
|
230
|
+
],
|
|
231
|
+
"verification": "Create a test commit following the documented convention and confirm that commit-msg hooks and CI checks accept it."
|
|
178
232
|
}
|
|
179
233
|
},
|
|
180
234
|
{
|
|
@@ -297,7 +351,7 @@
|
|
|
297
351
|
"job": "ci"
|
|
298
352
|
}
|
|
299
353
|
},
|
|
300
|
-
"description": "Use static type checking to catch errors before runtime and enforce strictness on new code.",
|
|
354
|
+
"description": "Use static type checking to catch errors before runtime and enforce strictness on new code. For JS/TS stacks, require a TypeScript-first policy with strict mode and a CI typecheck step; allow JSDoc/checkJs migration for legacy JS.",
|
|
301
355
|
"id": "type-checking",
|
|
302
356
|
"label": "Type Checking",
|
|
303
357
|
"stack": {
|
|
@@ -352,6 +406,97 @@
|
|
|
352
406
|
"verification": "Dependency lockfile or package reference is present; security scanning is configured."
|
|
353
407
|
}
|
|
354
408
|
},
|
|
409
|
+
{
|
|
410
|
+
"ciHints": {
|
|
411
|
+
"azure-devops": {
|
|
412
|
+
"stage": "build"
|
|
413
|
+
},
|
|
414
|
+
"github-actions": {
|
|
415
|
+
"job": "ci"
|
|
416
|
+
}
|
|
417
|
+
},
|
|
418
|
+
"description": "Ensure builds are reproducible by pinning dependencies, base images, and tool/runtime versions. Avoid network/time variance and fail when lockfiles drift.",
|
|
419
|
+
"id": "deterministic-builds",
|
|
420
|
+
"label": "Deterministic & Hermetic Builds",
|
|
421
|
+
"stack": {
|
|
422
|
+
"exampleConfigFiles": [
|
|
423
|
+
"packages.lock.json",
|
|
424
|
+
"global.json"
|
|
425
|
+
],
|
|
426
|
+
"exampleTools": [
|
|
427
|
+
"dotnet restore --locked-mode"
|
|
428
|
+
],
|
|
429
|
+
"notes": "Enable packages.lock.json and use locked restore. Pin SDK versions via global.json and pin base images in Dockerfiles.",
|
|
430
|
+
"optionalFiles": [
|
|
431
|
+
"packages.lock.json",
|
|
432
|
+
"global.json"
|
|
433
|
+
],
|
|
434
|
+
"verification": "packages.lock.json or equivalent lock files exist and restore runs in locked mode. SDK versions are pinned."
|
|
435
|
+
}
|
|
436
|
+
},
|
|
437
|
+
{
|
|
438
|
+
"ciHints": {
|
|
439
|
+
"azure-devops": {
|
|
440
|
+
"stage": "security"
|
|
441
|
+
},
|
|
442
|
+
"github-actions": {
|
|
443
|
+
"job": "security"
|
|
444
|
+
}
|
|
445
|
+
},
|
|
446
|
+
"description": "Produce SBOMs or provenance metadata, enable secret/code scanning, and sign tags or commits for critical repos.",
|
|
447
|
+
"id": "provenance-security",
|
|
448
|
+
"label": "Provenance & Security Metadata",
|
|
449
|
+
"stack": {
|
|
450
|
+
"exampleConfigFiles": [
|
|
451
|
+
".github/workflows/codeql.yml",
|
|
452
|
+
".github/workflows/provenance.yml"
|
|
453
|
+
],
|
|
454
|
+
"exampleTools": [
|
|
455
|
+
"sbom-tool",
|
|
456
|
+
"codeql",
|
|
457
|
+
"gitleaks",
|
|
458
|
+
"cosign"
|
|
459
|
+
],
|
|
460
|
+
"notes": "Generate SBOM/provenance for NuGet and container artifacts, enable secret scanning, and sign tags/commits for critical repos.",
|
|
461
|
+
"optionalFiles": [
|
|
462
|
+
"SECURITY.md",
|
|
463
|
+
".github/workflows/codeql.yml"
|
|
464
|
+
],
|
|
465
|
+
"verification": "SBOM/provenance artifacts are published alongside releases, and CI runs secret/code scanning."
|
|
466
|
+
}
|
|
467
|
+
},
|
|
468
|
+
{
|
|
469
|
+
"ciHints": {
|
|
470
|
+
"azure-devops": {
|
|
471
|
+
"stage": "ci"
|
|
472
|
+
},
|
|
473
|
+
"github-actions": {
|
|
474
|
+
"job": "ci"
|
|
475
|
+
}
|
|
476
|
+
},
|
|
477
|
+
"description": "Adopt standard CI templates and config samples to scale across repositories, minimizing bespoke pipeline logic.",
|
|
478
|
+
"id": "ci-templates-automation",
|
|
479
|
+
"label": "CI Templates & Automation",
|
|
480
|
+
"stack": {
|
|
481
|
+
"anyOfFiles": [
|
|
482
|
+
".github/workflows/ci.yml",
|
|
483
|
+
"azure-pipelines.yml"
|
|
484
|
+
],
|
|
485
|
+
"exampleConfigFiles": [
|
|
486
|
+
".github/workflows/ci.yml",
|
|
487
|
+
"azure-pipelines.yml"
|
|
488
|
+
],
|
|
489
|
+
"exampleTools": [
|
|
490
|
+
"GitHub Actions reusable workflows",
|
|
491
|
+
"Azure DevOps templates"
|
|
492
|
+
],
|
|
493
|
+
"notes": "Use shared CI templates for build/test/pack/release stages to standardize across .NET repos.",
|
|
494
|
+
"requiredScripts": [
|
|
495
|
+
"ci"
|
|
496
|
+
],
|
|
497
|
+
"verification": "CI pipeline references a shared template or reusable workflow and follows the standard job naming."
|
|
498
|
+
}
|
|
499
|
+
},
|
|
355
500
|
{
|
|
356
501
|
"ciHints": {
|
|
357
502
|
"azure-devops": {
|
|
@@ -735,5 +880,5 @@
|
|
|
735
880
|
},
|
|
736
881
|
"stack": "csharp-dotnet",
|
|
737
882
|
"stackLabel": "C# / .NET",
|
|
738
|
-
"version":
|
|
883
|
+
"version": 3
|
|
739
884
|
}
|