@oddessentials/repo-standards 2.1.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 +3 -3
- package/dist/config/standards.csharp-dotnet.azure-devops.json +140 -7
- package/dist/config/standards.csharp-dotnet.github-actions.json +140 -7
- package/dist/config/standards.csharp-dotnet.json +152 -7
- package/dist/config/standards.go.azure-devops.json +140 -7
- package/dist/config/standards.go.github-actions.json +140 -7
- package/dist/config/standards.go.json +152 -7
- package/dist/config/standards.json +613 -24
- package/dist/config/standards.python.azure-devops.json +152 -7
- package/dist/config/standards.python.github-actions.json +152 -7
- package/dist/config/standards.python.json +164 -7
- package/dist/config/standards.rust.azure-devops.json +139 -6
- package/dist/config/standards.rust.github-actions.json +139 -6
- package/dist/config/standards.rust.json +151 -6
- package/dist/config/standards.schema.json +4 -4
- package/dist/config/standards.typescript-js.azure-devops.json +150 -9
- package/dist/config/standards.typescript-js.github-actions.json +150 -9
- package/dist/config/standards.typescript-js.json +162 -9
- package/package.json +1 -1
|
@@ -141,7 +141,7 @@
|
|
|
141
141
|
"stage": "release"
|
|
142
142
|
}
|
|
143
143
|
},
|
|
144
|
-
"description": "Use MAJOR.MINOR.PATCH versioning with clear rules and automated changelog generation based on commit history.",
|
|
144
|
+
"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.",
|
|
145
145
|
"id": "semantic-versioning",
|
|
146
146
|
"label": "Semantic Versioning",
|
|
147
147
|
"stack": {
|
|
@@ -154,8 +154,49 @@
|
|
|
154
154
|
"semantic-release",
|
|
155
155
|
"standard-version"
|
|
156
156
|
],
|
|
157
|
-
"notes": "Automate version bumping and changelog generation from Conventional Commits using semantic-release or standard-version.
|
|
158
|
-
"
|
|
157
|
+
"notes": "Automate version bumping and changelog generation from Conventional Commits using semantic-release or standard-version. Keep package.json (or a VERSION file) as the single canonical version source and have CI publish npm/GitHub/Docker artifacts from that same version. Protect release branches and ensure release tooling only runs there.",
|
|
158
|
+
"optionalFiles": [
|
|
159
|
+
"VERSION",
|
|
160
|
+
"CHANGELOG.md"
|
|
161
|
+
],
|
|
162
|
+
"requiredFiles": [
|
|
163
|
+
"package.json"
|
|
164
|
+
],
|
|
165
|
+
"requiredScripts": [
|
|
166
|
+
"release"
|
|
167
|
+
],
|
|
168
|
+
"verification": "Check that the canonical version field follows SemVer, and trigger the configured release workflow (for example, a dry run of semantic-release or standard-version) to confirm it generates the expected next version, updates package.json or VERSION, and creates/updates CHANGELOG.md with commit-based entries."
|
|
169
|
+
}
|
|
170
|
+
},
|
|
171
|
+
{
|
|
172
|
+
"ciHints": {
|
|
173
|
+
"azure-devops": {
|
|
174
|
+
"stage": "release"
|
|
175
|
+
}
|
|
176
|
+
},
|
|
177
|
+
"description": "Use a single CI release pipeline that publishes all artifacts (GitHub releases, packages, containers) from the same canonical version source.",
|
|
178
|
+
"id": "unified-release-workflow",
|
|
179
|
+
"label": "Unified Release Workflow",
|
|
180
|
+
"stack": {
|
|
181
|
+
"exampleConfigFiles": [
|
|
182
|
+
".github/workflows/release.yml",
|
|
183
|
+
"azure-pipelines.yml"
|
|
184
|
+
],
|
|
185
|
+
"exampleTools": [
|
|
186
|
+
"semantic-release",
|
|
187
|
+
"changesets",
|
|
188
|
+
"npm publish",
|
|
189
|
+
"docker buildx"
|
|
190
|
+
],
|
|
191
|
+
"notes": "Release workflow must publish npm packages, GitHub releases, and Docker images from the same canonical version (package.json or VERSION). Avoid separate manual steps or ad-hoc scripts for different artifacts.",
|
|
192
|
+
"optionalFiles": [
|
|
193
|
+
"CHANGELOG.md",
|
|
194
|
+
"VERSION"
|
|
195
|
+
],
|
|
196
|
+
"requiredScripts": [
|
|
197
|
+
"release"
|
|
198
|
+
],
|
|
199
|
+
"verification": "Trigger the release pipeline and confirm all artifacts share the same version number and tag."
|
|
159
200
|
}
|
|
160
201
|
},
|
|
161
202
|
{
|
|
@@ -164,10 +205,16 @@
|
|
|
164
205
|
"stage": "quality"
|
|
165
206
|
}
|
|
166
207
|
},
|
|
167
|
-
"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.",
|
|
168
209
|
"id": "commit-linting",
|
|
169
210
|
"label": "Commit Linting",
|
|
170
211
|
"stack": {
|
|
212
|
+
"anyOfFiles": [
|
|
213
|
+
"commitlint.config.js",
|
|
214
|
+
"commitlint.config.cjs",
|
|
215
|
+
"commitlint.config.mjs",
|
|
216
|
+
"commitlint.config.json"
|
|
217
|
+
],
|
|
171
218
|
"exampleConfigFiles": [
|
|
172
219
|
"commitlint.config.*"
|
|
173
220
|
],
|
|
@@ -175,8 +222,11 @@
|
|
|
175
222
|
"@commitlint/cli",
|
|
176
223
|
"@commitlint/config-conventional"
|
|
177
224
|
],
|
|
178
|
-
"notes": "Enforce
|
|
179
|
-
"
|
|
225
|
+
"notes": "Enforce Conventional Commits via commit-msg hooks (e.g., Husky) and a CI job so versioning/changelog automation is deterministic.",
|
|
226
|
+
"requiredScripts": [
|
|
227
|
+
"commitlint"
|
|
228
|
+
],
|
|
229
|
+
"verification": "Create a test commit using the documented convention and ensure the commit message passes both local commit-msg hooks and CI checks."
|
|
180
230
|
}
|
|
181
231
|
},
|
|
182
232
|
{
|
|
@@ -288,7 +338,7 @@
|
|
|
288
338
|
"stage": "quality"
|
|
289
339
|
}
|
|
290
340
|
},
|
|
291
|
-
"description": "Use static type checking to catch errors before runtime and enforce strictness on new code.",
|
|
341
|
+
"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.",
|
|
292
342
|
"id": "type-checking",
|
|
293
343
|
"label": "Type Checking",
|
|
294
344
|
"stack": {
|
|
@@ -304,14 +354,14 @@
|
|
|
304
354
|
"exampleTools": [
|
|
305
355
|
"TypeScript compiler (tsc)"
|
|
306
356
|
],
|
|
307
|
-
"notes": "
|
|
357
|
+
"notes": "Adopt a TypeScript-first policy. Require tsconfig.json with strict mode enabled ('strict': true) and enforce `npm run typecheck` (or equivalent) in CI. For legacy JS, allow JSDoc + `checkJs` or staged migration with `allowJs` while incrementally increasing coverage.",
|
|
308
358
|
"requiredFiles": [
|
|
309
359
|
"tsconfig.json"
|
|
310
360
|
],
|
|
311
361
|
"requiredScripts": [
|
|
312
362
|
"typecheck"
|
|
313
363
|
],
|
|
314
|
-
"verification": "
|
|
364
|
+
"verification": "tsconfig.json exists with strict mode enabled and CI runs the typecheck script; legacy JS modules use JSDoc/checkJs or allowJs as an explicit migration path."
|
|
315
365
|
}
|
|
316
366
|
},
|
|
317
367
|
{
|
|
@@ -342,6 +392,97 @@
|
|
|
342
392
|
"verification": "Dependency lockfile is present; security scanning is configured in CI or project tooling."
|
|
343
393
|
}
|
|
344
394
|
},
|
|
395
|
+
{
|
|
396
|
+
"ciHints": {
|
|
397
|
+
"azure-devops": {
|
|
398
|
+
"stage": "build"
|
|
399
|
+
}
|
|
400
|
+
},
|
|
401
|
+
"description": "Ensure builds are reproducible by pinning dependencies, base images, and tool/runtime versions. Avoid network/time variance and fail when lockfiles drift.",
|
|
402
|
+
"id": "deterministic-builds",
|
|
403
|
+
"label": "Deterministic & Hermetic Builds",
|
|
404
|
+
"stack": {
|
|
405
|
+
"anyOfFiles": [
|
|
406
|
+
"package-lock.json",
|
|
407
|
+
"pnpm-lock.yaml",
|
|
408
|
+
"yarn.lock"
|
|
409
|
+
],
|
|
410
|
+
"exampleConfigFiles": [
|
|
411
|
+
"package-lock.json",
|
|
412
|
+
"pnpm-lock.yaml",
|
|
413
|
+
"yarn.lock"
|
|
414
|
+
],
|
|
415
|
+
"exampleTools": [
|
|
416
|
+
"npm ci",
|
|
417
|
+
"pnpm install --frozen-lockfile",
|
|
418
|
+
"yarn --immutable"
|
|
419
|
+
],
|
|
420
|
+
"notes": "Require a lockfile and pinned Node/tool versions (.nvmrc or .tool-versions). Pin base images in Dockerfiles and avoid non-deterministic install flags.",
|
|
421
|
+
"optionalFiles": [
|
|
422
|
+
".nvmrc",
|
|
423
|
+
".tool-versions"
|
|
424
|
+
],
|
|
425
|
+
"verification": "Lockfile is present and CI uses a frozen/immutable install. Dockerfiles reference pinned base images."
|
|
426
|
+
}
|
|
427
|
+
},
|
|
428
|
+
{
|
|
429
|
+
"ciHints": {
|
|
430
|
+
"azure-devops": {
|
|
431
|
+
"stage": "security"
|
|
432
|
+
}
|
|
433
|
+
},
|
|
434
|
+
"description": "Produce SBOMs or provenance metadata, enable secret/code scanning, and sign tags or commits for critical repos.",
|
|
435
|
+
"id": "provenance-security",
|
|
436
|
+
"label": "Provenance & Security Metadata",
|
|
437
|
+
"stack": {
|
|
438
|
+
"exampleConfigFiles": [
|
|
439
|
+
".github/workflows/codeql.yml",
|
|
440
|
+
".github/workflows/provenance.yml"
|
|
441
|
+
],
|
|
442
|
+
"exampleTools": [
|
|
443
|
+
"syft",
|
|
444
|
+
"cyclonedx-npm",
|
|
445
|
+
"codeql",
|
|
446
|
+
"gitleaks",
|
|
447
|
+
"cosign"
|
|
448
|
+
],
|
|
449
|
+
"notes": "Generate SBOM/provenance for npm and container artifacts, enable secret scanning, and sign tags/commits for protected branches.",
|
|
450
|
+
"optionalFiles": [
|
|
451
|
+
"SECURITY.md",
|
|
452
|
+
".github/workflows/codeql.yml"
|
|
453
|
+
],
|
|
454
|
+
"verification": "SBOM/provenance artifacts are published alongside releases, and CI runs secret/code scanning."
|
|
455
|
+
}
|
|
456
|
+
},
|
|
457
|
+
{
|
|
458
|
+
"ciHints": {
|
|
459
|
+
"azure-devops": {
|
|
460
|
+
"stage": "ci"
|
|
461
|
+
}
|
|
462
|
+
},
|
|
463
|
+
"description": "Adopt standard CI templates and config samples to scale across repositories, minimizing bespoke pipeline logic.",
|
|
464
|
+
"id": "ci-templates-automation",
|
|
465
|
+
"label": "CI Templates & Automation",
|
|
466
|
+
"stack": {
|
|
467
|
+
"anyOfFiles": [
|
|
468
|
+
".github/workflows/ci.yml",
|
|
469
|
+
"azure-pipelines.yml"
|
|
470
|
+
],
|
|
471
|
+
"exampleConfigFiles": [
|
|
472
|
+
".github/workflows/ci.yml",
|
|
473
|
+
"azure-pipelines.yml"
|
|
474
|
+
],
|
|
475
|
+
"exampleTools": [
|
|
476
|
+
"GitHub Actions reusable workflows",
|
|
477
|
+
"Azure DevOps templates"
|
|
478
|
+
],
|
|
479
|
+
"notes": "Use shared CI templates for lint/test/build/release stages and keep repo-specific overrides minimal.",
|
|
480
|
+
"requiredScripts": [
|
|
481
|
+
"ci"
|
|
482
|
+
],
|
|
483
|
+
"verification": "CI pipeline references a shared template or reusable workflow and follows the standard job naming."
|
|
484
|
+
}
|
|
485
|
+
},
|
|
345
486
|
{
|
|
346
487
|
"ciHints": {
|
|
347
488
|
"azure-devops": {
|
|
@@ -141,7 +141,7 @@
|
|
|
141
141
|
"job": "release"
|
|
142
142
|
}
|
|
143
143
|
},
|
|
144
|
-
"description": "Use MAJOR.MINOR.PATCH versioning with clear rules and automated changelog generation based on commit history.",
|
|
144
|
+
"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.",
|
|
145
145
|
"id": "semantic-versioning",
|
|
146
146
|
"label": "Semantic Versioning",
|
|
147
147
|
"stack": {
|
|
@@ -154,8 +154,49 @@
|
|
|
154
154
|
"semantic-release",
|
|
155
155
|
"standard-version"
|
|
156
156
|
],
|
|
157
|
-
"notes": "Automate version bumping and changelog generation from Conventional Commits using semantic-release or standard-version.
|
|
158
|
-
"
|
|
157
|
+
"notes": "Automate version bumping and changelog generation from Conventional Commits using semantic-release or standard-version. Keep package.json (or a VERSION file) as the single canonical version source and have CI publish npm/GitHub/Docker artifacts from that same version. Protect release branches and ensure release tooling only runs there.",
|
|
158
|
+
"optionalFiles": [
|
|
159
|
+
"VERSION",
|
|
160
|
+
"CHANGELOG.md"
|
|
161
|
+
],
|
|
162
|
+
"requiredFiles": [
|
|
163
|
+
"package.json"
|
|
164
|
+
],
|
|
165
|
+
"requiredScripts": [
|
|
166
|
+
"release"
|
|
167
|
+
],
|
|
168
|
+
"verification": "Check that the canonical version field follows SemVer, and trigger the configured release workflow (for example, a dry run of semantic-release or standard-version) to confirm it generates the expected next version, updates package.json or VERSION, and creates/updates CHANGELOG.md with commit-based entries."
|
|
169
|
+
}
|
|
170
|
+
},
|
|
171
|
+
{
|
|
172
|
+
"ciHints": {
|
|
173
|
+
"github-actions": {
|
|
174
|
+
"job": "release"
|
|
175
|
+
}
|
|
176
|
+
},
|
|
177
|
+
"description": "Use a single CI release pipeline that publishes all artifacts (GitHub releases, packages, containers) from the same canonical version source.",
|
|
178
|
+
"id": "unified-release-workflow",
|
|
179
|
+
"label": "Unified Release Workflow",
|
|
180
|
+
"stack": {
|
|
181
|
+
"exampleConfigFiles": [
|
|
182
|
+
".github/workflows/release.yml",
|
|
183
|
+
"azure-pipelines.yml"
|
|
184
|
+
],
|
|
185
|
+
"exampleTools": [
|
|
186
|
+
"semantic-release",
|
|
187
|
+
"changesets",
|
|
188
|
+
"npm publish",
|
|
189
|
+
"docker buildx"
|
|
190
|
+
],
|
|
191
|
+
"notes": "Release workflow must publish npm packages, GitHub releases, and Docker images from the same canonical version (package.json or VERSION). Avoid separate manual steps or ad-hoc scripts for different artifacts.",
|
|
192
|
+
"optionalFiles": [
|
|
193
|
+
"CHANGELOG.md",
|
|
194
|
+
"VERSION"
|
|
195
|
+
],
|
|
196
|
+
"requiredScripts": [
|
|
197
|
+
"release"
|
|
198
|
+
],
|
|
199
|
+
"verification": "Trigger the release pipeline and confirm all artifacts share the same version number and tag."
|
|
159
200
|
}
|
|
160
201
|
},
|
|
161
202
|
{
|
|
@@ -164,10 +205,16 @@
|
|
|
164
205
|
"job": "ci"
|
|
165
206
|
}
|
|
166
207
|
},
|
|
167
|
-
"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.",
|
|
168
209
|
"id": "commit-linting",
|
|
169
210
|
"label": "Commit Linting",
|
|
170
211
|
"stack": {
|
|
212
|
+
"anyOfFiles": [
|
|
213
|
+
"commitlint.config.js",
|
|
214
|
+
"commitlint.config.cjs",
|
|
215
|
+
"commitlint.config.mjs",
|
|
216
|
+
"commitlint.config.json"
|
|
217
|
+
],
|
|
171
218
|
"exampleConfigFiles": [
|
|
172
219
|
"commitlint.config.*"
|
|
173
220
|
],
|
|
@@ -175,8 +222,11 @@
|
|
|
175
222
|
"@commitlint/cli",
|
|
176
223
|
"@commitlint/config-conventional"
|
|
177
224
|
],
|
|
178
|
-
"notes": "Enforce
|
|
179
|
-
"
|
|
225
|
+
"notes": "Enforce Conventional Commits via commit-msg hooks (e.g., Husky) and a CI job so versioning/changelog automation is deterministic.",
|
|
226
|
+
"requiredScripts": [
|
|
227
|
+
"commitlint"
|
|
228
|
+
],
|
|
229
|
+
"verification": "Create a test commit using the documented convention and ensure the commit message passes both local commit-msg hooks and CI checks."
|
|
180
230
|
}
|
|
181
231
|
},
|
|
182
232
|
{
|
|
@@ -288,7 +338,7 @@
|
|
|
288
338
|
"job": "ci"
|
|
289
339
|
}
|
|
290
340
|
},
|
|
291
|
-
"description": "Use static type checking to catch errors before runtime and enforce strictness on new code.",
|
|
341
|
+
"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.",
|
|
292
342
|
"id": "type-checking",
|
|
293
343
|
"label": "Type Checking",
|
|
294
344
|
"stack": {
|
|
@@ -304,14 +354,14 @@
|
|
|
304
354
|
"exampleTools": [
|
|
305
355
|
"TypeScript compiler (tsc)"
|
|
306
356
|
],
|
|
307
|
-
"notes": "
|
|
357
|
+
"notes": "Adopt a TypeScript-first policy. Require tsconfig.json with strict mode enabled ('strict': true) and enforce `npm run typecheck` (or equivalent) in CI. For legacy JS, allow JSDoc + `checkJs` or staged migration with `allowJs` while incrementally increasing coverage.",
|
|
308
358
|
"requiredFiles": [
|
|
309
359
|
"tsconfig.json"
|
|
310
360
|
],
|
|
311
361
|
"requiredScripts": [
|
|
312
362
|
"typecheck"
|
|
313
363
|
],
|
|
314
|
-
"verification": "
|
|
364
|
+
"verification": "tsconfig.json exists with strict mode enabled and CI runs the typecheck script; legacy JS modules use JSDoc/checkJs or allowJs as an explicit migration path."
|
|
315
365
|
}
|
|
316
366
|
},
|
|
317
367
|
{
|
|
@@ -342,6 +392,97 @@
|
|
|
342
392
|
"verification": "Dependency lockfile is present; security scanning is configured in CI or project tooling."
|
|
343
393
|
}
|
|
344
394
|
},
|
|
395
|
+
{
|
|
396
|
+
"ciHints": {
|
|
397
|
+
"github-actions": {
|
|
398
|
+
"job": "ci"
|
|
399
|
+
}
|
|
400
|
+
},
|
|
401
|
+
"description": "Ensure builds are reproducible by pinning dependencies, base images, and tool/runtime versions. Avoid network/time variance and fail when lockfiles drift.",
|
|
402
|
+
"id": "deterministic-builds",
|
|
403
|
+
"label": "Deterministic & Hermetic Builds",
|
|
404
|
+
"stack": {
|
|
405
|
+
"anyOfFiles": [
|
|
406
|
+
"package-lock.json",
|
|
407
|
+
"pnpm-lock.yaml",
|
|
408
|
+
"yarn.lock"
|
|
409
|
+
],
|
|
410
|
+
"exampleConfigFiles": [
|
|
411
|
+
"package-lock.json",
|
|
412
|
+
"pnpm-lock.yaml",
|
|
413
|
+
"yarn.lock"
|
|
414
|
+
],
|
|
415
|
+
"exampleTools": [
|
|
416
|
+
"npm ci",
|
|
417
|
+
"pnpm install --frozen-lockfile",
|
|
418
|
+
"yarn --immutable"
|
|
419
|
+
],
|
|
420
|
+
"notes": "Require a lockfile and pinned Node/tool versions (.nvmrc or .tool-versions). Pin base images in Dockerfiles and avoid non-deterministic install flags.",
|
|
421
|
+
"optionalFiles": [
|
|
422
|
+
".nvmrc",
|
|
423
|
+
".tool-versions"
|
|
424
|
+
],
|
|
425
|
+
"verification": "Lockfile is present and CI uses a frozen/immutable install. Dockerfiles reference pinned base images."
|
|
426
|
+
}
|
|
427
|
+
},
|
|
428
|
+
{
|
|
429
|
+
"ciHints": {
|
|
430
|
+
"github-actions": {
|
|
431
|
+
"job": "security"
|
|
432
|
+
}
|
|
433
|
+
},
|
|
434
|
+
"description": "Produce SBOMs or provenance metadata, enable secret/code scanning, and sign tags or commits for critical repos.",
|
|
435
|
+
"id": "provenance-security",
|
|
436
|
+
"label": "Provenance & Security Metadata",
|
|
437
|
+
"stack": {
|
|
438
|
+
"exampleConfigFiles": [
|
|
439
|
+
".github/workflows/codeql.yml",
|
|
440
|
+
".github/workflows/provenance.yml"
|
|
441
|
+
],
|
|
442
|
+
"exampleTools": [
|
|
443
|
+
"syft",
|
|
444
|
+
"cyclonedx-npm",
|
|
445
|
+
"codeql",
|
|
446
|
+
"gitleaks",
|
|
447
|
+
"cosign"
|
|
448
|
+
],
|
|
449
|
+
"notes": "Generate SBOM/provenance for npm and container artifacts, enable secret scanning, and sign tags/commits for protected branches.",
|
|
450
|
+
"optionalFiles": [
|
|
451
|
+
"SECURITY.md",
|
|
452
|
+
".github/workflows/codeql.yml"
|
|
453
|
+
],
|
|
454
|
+
"verification": "SBOM/provenance artifacts are published alongside releases, and CI runs secret/code scanning."
|
|
455
|
+
}
|
|
456
|
+
},
|
|
457
|
+
{
|
|
458
|
+
"ciHints": {
|
|
459
|
+
"github-actions": {
|
|
460
|
+
"job": "ci"
|
|
461
|
+
}
|
|
462
|
+
},
|
|
463
|
+
"description": "Adopt standard CI templates and config samples to scale across repositories, minimizing bespoke pipeline logic.",
|
|
464
|
+
"id": "ci-templates-automation",
|
|
465
|
+
"label": "CI Templates & Automation",
|
|
466
|
+
"stack": {
|
|
467
|
+
"anyOfFiles": [
|
|
468
|
+
".github/workflows/ci.yml",
|
|
469
|
+
"azure-pipelines.yml"
|
|
470
|
+
],
|
|
471
|
+
"exampleConfigFiles": [
|
|
472
|
+
".github/workflows/ci.yml",
|
|
473
|
+
"azure-pipelines.yml"
|
|
474
|
+
],
|
|
475
|
+
"exampleTools": [
|
|
476
|
+
"GitHub Actions reusable workflows",
|
|
477
|
+
"Azure DevOps templates"
|
|
478
|
+
],
|
|
479
|
+
"notes": "Use shared CI templates for lint/test/build/release stages and keep repo-specific overrides minimal.",
|
|
480
|
+
"requiredScripts": [
|
|
481
|
+
"ci"
|
|
482
|
+
],
|
|
483
|
+
"verification": "CI pipeline references a shared template or reusable workflow and follows the standard job naming."
|
|
484
|
+
}
|
|
485
|
+
},
|
|
345
486
|
{
|
|
346
487
|
"ciHints": {
|
|
347
488
|
"github-actions": {
|
|
@@ -156,7 +156,7 @@
|
|
|
156
156
|
"job": "release"
|
|
157
157
|
}
|
|
158
158
|
},
|
|
159
|
-
"description": "Use MAJOR.MINOR.PATCH versioning with clear rules and automated changelog generation based on commit history.",
|
|
159
|
+
"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.",
|
|
160
160
|
"id": "semantic-versioning",
|
|
161
161
|
"label": "Semantic Versioning",
|
|
162
162
|
"stack": {
|
|
@@ -169,8 +169,52 @@
|
|
|
169
169
|
"semantic-release",
|
|
170
170
|
"standard-version"
|
|
171
171
|
],
|
|
172
|
-
"notes": "Automate version bumping and changelog generation from Conventional Commits using semantic-release or standard-version.
|
|
173
|
-
"
|
|
172
|
+
"notes": "Automate version bumping and changelog generation from Conventional Commits using semantic-release or standard-version. Keep package.json (or a VERSION file) as the single canonical version source and have CI publish npm/GitHub/Docker artifacts from that same version. Protect release branches and ensure release tooling only runs there.",
|
|
173
|
+
"optionalFiles": [
|
|
174
|
+
"VERSION",
|
|
175
|
+
"CHANGELOG.md"
|
|
176
|
+
],
|
|
177
|
+
"requiredFiles": [
|
|
178
|
+
"package.json"
|
|
179
|
+
],
|
|
180
|
+
"requiredScripts": [
|
|
181
|
+
"release"
|
|
182
|
+
],
|
|
183
|
+
"verification": "Check that the canonical version field follows SemVer, and trigger the configured release workflow (for example, a dry run of semantic-release or standard-version) to confirm it generates the expected next version, updates package.json or VERSION, and creates/updates CHANGELOG.md with commit-based entries."
|
|
184
|
+
}
|
|
185
|
+
},
|
|
186
|
+
{
|
|
187
|
+
"ciHints": {
|
|
188
|
+
"azure-devops": {
|
|
189
|
+
"stage": "release"
|
|
190
|
+
},
|
|
191
|
+
"github-actions": {
|
|
192
|
+
"job": "release"
|
|
193
|
+
}
|
|
194
|
+
},
|
|
195
|
+
"description": "Use a single CI release pipeline that publishes all artifacts (GitHub releases, packages, containers) from the same canonical version source.",
|
|
196
|
+
"id": "unified-release-workflow",
|
|
197
|
+
"label": "Unified Release Workflow",
|
|
198
|
+
"stack": {
|
|
199
|
+
"exampleConfigFiles": [
|
|
200
|
+
".github/workflows/release.yml",
|
|
201
|
+
"azure-pipelines.yml"
|
|
202
|
+
],
|
|
203
|
+
"exampleTools": [
|
|
204
|
+
"semantic-release",
|
|
205
|
+
"changesets",
|
|
206
|
+
"npm publish",
|
|
207
|
+
"docker buildx"
|
|
208
|
+
],
|
|
209
|
+
"notes": "Release workflow must publish npm packages, GitHub releases, and Docker images from the same canonical version (package.json or VERSION). Avoid separate manual steps or ad-hoc scripts for different artifacts.",
|
|
210
|
+
"optionalFiles": [
|
|
211
|
+
"CHANGELOG.md",
|
|
212
|
+
"VERSION"
|
|
213
|
+
],
|
|
214
|
+
"requiredScripts": [
|
|
215
|
+
"release"
|
|
216
|
+
],
|
|
217
|
+
"verification": "Trigger the release pipeline and confirm all artifacts share the same version number and tag."
|
|
174
218
|
}
|
|
175
219
|
},
|
|
176
220
|
{
|
|
@@ -182,10 +226,16 @@
|
|
|
182
226
|
"job": "ci"
|
|
183
227
|
}
|
|
184
228
|
},
|
|
185
|
-
"description": "Enforce structured commit messages such as Conventional Commits.",
|
|
229
|
+
"description": "Enforce structured commit messages such as Conventional Commits via commit-msg hooks and CI. This is required for deterministic versioning and changelog generation.",
|
|
186
230
|
"id": "commit-linting",
|
|
187
231
|
"label": "Commit Linting",
|
|
188
232
|
"stack": {
|
|
233
|
+
"anyOfFiles": [
|
|
234
|
+
"commitlint.config.js",
|
|
235
|
+
"commitlint.config.cjs",
|
|
236
|
+
"commitlint.config.mjs",
|
|
237
|
+
"commitlint.config.json"
|
|
238
|
+
],
|
|
189
239
|
"exampleConfigFiles": [
|
|
190
240
|
"commitlint.config.*"
|
|
191
241
|
],
|
|
@@ -193,8 +243,11 @@
|
|
|
193
243
|
"@commitlint/cli",
|
|
194
244
|
"@commitlint/config-conventional"
|
|
195
245
|
],
|
|
196
|
-
"notes": "Enforce
|
|
197
|
-
"
|
|
246
|
+
"notes": "Enforce Conventional Commits via commit-msg hooks (e.g., Husky) and a CI job so versioning/changelog automation is deterministic.",
|
|
247
|
+
"requiredScripts": [
|
|
248
|
+
"commitlint"
|
|
249
|
+
],
|
|
250
|
+
"verification": "Create a test commit using the documented convention and ensure the commit message passes both local commit-msg hooks and CI checks."
|
|
198
251
|
}
|
|
199
252
|
},
|
|
200
253
|
{
|
|
@@ -321,7 +374,7 @@
|
|
|
321
374
|
"job": "ci"
|
|
322
375
|
}
|
|
323
376
|
},
|
|
324
|
-
"description": "Use static type checking to catch errors before runtime and enforce strictness on new code.",
|
|
377
|
+
"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.",
|
|
325
378
|
"id": "type-checking",
|
|
326
379
|
"label": "Type Checking",
|
|
327
380
|
"stack": {
|
|
@@ -337,14 +390,14 @@
|
|
|
337
390
|
"exampleTools": [
|
|
338
391
|
"TypeScript compiler (tsc)"
|
|
339
392
|
],
|
|
340
|
-
"notes": "
|
|
393
|
+
"notes": "Adopt a TypeScript-first policy. Require tsconfig.json with strict mode enabled ('strict': true) and enforce `npm run typecheck` (or equivalent) in CI. For legacy JS, allow JSDoc + `checkJs` or staged migration with `allowJs` while incrementally increasing coverage.",
|
|
341
394
|
"requiredFiles": [
|
|
342
395
|
"tsconfig.json"
|
|
343
396
|
],
|
|
344
397
|
"requiredScripts": [
|
|
345
398
|
"typecheck"
|
|
346
399
|
],
|
|
347
|
-
"verification": "
|
|
400
|
+
"verification": "tsconfig.json exists with strict mode enabled and CI runs the typecheck script; legacy JS modules use JSDoc/checkJs or allowJs as an explicit migration path."
|
|
348
401
|
}
|
|
349
402
|
},
|
|
350
403
|
{
|
|
@@ -378,6 +431,106 @@
|
|
|
378
431
|
"verification": "Dependency lockfile is present; security scanning is configured in CI or project tooling."
|
|
379
432
|
}
|
|
380
433
|
},
|
|
434
|
+
{
|
|
435
|
+
"ciHints": {
|
|
436
|
+
"azure-devops": {
|
|
437
|
+
"stage": "build"
|
|
438
|
+
},
|
|
439
|
+
"github-actions": {
|
|
440
|
+
"job": "ci"
|
|
441
|
+
}
|
|
442
|
+
},
|
|
443
|
+
"description": "Ensure builds are reproducible by pinning dependencies, base images, and tool/runtime versions. Avoid network/time variance and fail when lockfiles drift.",
|
|
444
|
+
"id": "deterministic-builds",
|
|
445
|
+
"label": "Deterministic & Hermetic Builds",
|
|
446
|
+
"stack": {
|
|
447
|
+
"anyOfFiles": [
|
|
448
|
+
"package-lock.json",
|
|
449
|
+
"pnpm-lock.yaml",
|
|
450
|
+
"yarn.lock"
|
|
451
|
+
],
|
|
452
|
+
"exampleConfigFiles": [
|
|
453
|
+
"package-lock.json",
|
|
454
|
+
"pnpm-lock.yaml",
|
|
455
|
+
"yarn.lock"
|
|
456
|
+
],
|
|
457
|
+
"exampleTools": [
|
|
458
|
+
"npm ci",
|
|
459
|
+
"pnpm install --frozen-lockfile",
|
|
460
|
+
"yarn --immutable"
|
|
461
|
+
],
|
|
462
|
+
"notes": "Require a lockfile and pinned Node/tool versions (.nvmrc or .tool-versions). Pin base images in Dockerfiles and avoid non-deterministic install flags.",
|
|
463
|
+
"optionalFiles": [
|
|
464
|
+
".nvmrc",
|
|
465
|
+
".tool-versions"
|
|
466
|
+
],
|
|
467
|
+
"verification": "Lockfile is present and CI uses a frozen/immutable install. Dockerfiles reference pinned base images."
|
|
468
|
+
}
|
|
469
|
+
},
|
|
470
|
+
{
|
|
471
|
+
"ciHints": {
|
|
472
|
+
"azure-devops": {
|
|
473
|
+
"stage": "security"
|
|
474
|
+
},
|
|
475
|
+
"github-actions": {
|
|
476
|
+
"job": "security"
|
|
477
|
+
}
|
|
478
|
+
},
|
|
479
|
+
"description": "Produce SBOMs or provenance metadata, enable secret/code scanning, and sign tags or commits for critical repos.",
|
|
480
|
+
"id": "provenance-security",
|
|
481
|
+
"label": "Provenance & Security Metadata",
|
|
482
|
+
"stack": {
|
|
483
|
+
"exampleConfigFiles": [
|
|
484
|
+
".github/workflows/codeql.yml",
|
|
485
|
+
".github/workflows/provenance.yml"
|
|
486
|
+
],
|
|
487
|
+
"exampleTools": [
|
|
488
|
+
"syft",
|
|
489
|
+
"cyclonedx-npm",
|
|
490
|
+
"codeql",
|
|
491
|
+
"gitleaks",
|
|
492
|
+
"cosign"
|
|
493
|
+
],
|
|
494
|
+
"notes": "Generate SBOM/provenance for npm and container artifacts, enable secret scanning, and sign tags/commits for protected branches.",
|
|
495
|
+
"optionalFiles": [
|
|
496
|
+
"SECURITY.md",
|
|
497
|
+
".github/workflows/codeql.yml"
|
|
498
|
+
],
|
|
499
|
+
"verification": "SBOM/provenance artifacts are published alongside releases, and CI runs secret/code scanning."
|
|
500
|
+
}
|
|
501
|
+
},
|
|
502
|
+
{
|
|
503
|
+
"ciHints": {
|
|
504
|
+
"azure-devops": {
|
|
505
|
+
"stage": "ci"
|
|
506
|
+
},
|
|
507
|
+
"github-actions": {
|
|
508
|
+
"job": "ci"
|
|
509
|
+
}
|
|
510
|
+
},
|
|
511
|
+
"description": "Adopt standard CI templates and config samples to scale across repositories, minimizing bespoke pipeline logic.",
|
|
512
|
+
"id": "ci-templates-automation",
|
|
513
|
+
"label": "CI Templates & Automation",
|
|
514
|
+
"stack": {
|
|
515
|
+
"anyOfFiles": [
|
|
516
|
+
".github/workflows/ci.yml",
|
|
517
|
+
"azure-pipelines.yml"
|
|
518
|
+
],
|
|
519
|
+
"exampleConfigFiles": [
|
|
520
|
+
".github/workflows/ci.yml",
|
|
521
|
+
"azure-pipelines.yml"
|
|
522
|
+
],
|
|
523
|
+
"exampleTools": [
|
|
524
|
+
"GitHub Actions reusable workflows",
|
|
525
|
+
"Azure DevOps templates"
|
|
526
|
+
],
|
|
527
|
+
"notes": "Use shared CI templates for lint/test/build/release stages and keep repo-specific overrides minimal.",
|
|
528
|
+
"requiredScripts": [
|
|
529
|
+
"ci"
|
|
530
|
+
],
|
|
531
|
+
"verification": "CI pipeline references a shared template or reusable workflow and follows the standard job naming."
|
|
532
|
+
}
|
|
533
|
+
},
|
|
381
534
|
{
|
|
382
535
|
"ciHints": {
|
|
383
536
|
"azure-devops": {
|