evergreen-deprecation 0.4.0 → 0.6.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.
Files changed (264) hide show
  1. package/README.md +35 -13
  2. package/dist/src/action.js +9 -0
  3. package/dist/src/action.js.map +1 -1
  4. package/dist/src/agent-tools.js +3 -1
  5. package/dist/src/agent-tools.js.map +1 -1
  6. package/dist/src/as-of.d.ts +8 -0
  7. package/dist/src/as-of.js +21 -0
  8. package/dist/src/as-of.js.map +1 -0
  9. package/dist/src/badge.d.ts +15 -0
  10. package/dist/src/badge.js +81 -0
  11. package/dist/src/badge.js.map +1 -0
  12. package/dist/src/baseline.d.ts +15 -2
  13. package/dist/src/baseline.js +32 -3
  14. package/dist/src/baseline.js.map +1 -1
  15. package/dist/src/capabilities.js +18 -9
  16. package/dist/src/capabilities.js.map +1 -1
  17. package/dist/src/check-dependency.d.ts +2 -0
  18. package/dist/src/check-dependency.js +13 -1
  19. package/dist/src/check-dependency.js.map +1 -1
  20. package/dist/src/cli.js +400 -91
  21. package/dist/src/cli.js.map +1 -1
  22. package/dist/src/completions.d.ts +16 -0
  23. package/dist/src/completions.js +113 -0
  24. package/dist/src/completions.js.map +1 -0
  25. package/dist/src/conformance/checks/inputs.d.ts +7 -0
  26. package/dist/src/conformance/checks/inputs.js +21 -0
  27. package/dist/src/conformance/checks/inputs.js.map +1 -0
  28. package/dist/src/conformance/trace-reads.d.ts +19 -0
  29. package/dist/src/conformance/trace-reads.js +68 -0
  30. package/dist/src/conformance/trace-reads.js.map +1 -0
  31. package/dist/src/data-bundle.d.ts +1 -1
  32. package/dist/src/data-bundle.js +1 -1
  33. package/dist/src/data-bundle.js.map +1 -1
  34. package/dist/src/data-source.d.ts +3 -1
  35. package/dist/src/data-source.js +5 -2
  36. package/dist/src/data-source.js.map +1 -1
  37. package/dist/src/detector-inputs.d.ts +7 -0
  38. package/dist/src/detector-inputs.js +24 -0
  39. package/dist/src/detector-inputs.js.map +1 -0
  40. package/dist/src/detectors/android/index.d.ts +14 -0
  41. package/dist/src/detectors/android/index.js +299 -0
  42. package/dist/src/detectors/android/index.js.map +1 -0
  43. package/dist/src/detectors/ci-images/index.d.ts +3 -1
  44. package/dist/src/detectors/ci-images/index.js +2 -0
  45. package/dist/src/detectors/ci-images/index.js.map +1 -1
  46. package/dist/src/detectors/container/index.d.ts +3 -1
  47. package/dist/src/detectors/container/index.js +30 -7
  48. package/dist/src/detectors/container/index.js.map +1 -1
  49. package/dist/src/detectors/cpp/index.d.ts +14 -0
  50. package/dist/src/detectors/cpp/index.js +250 -0
  51. package/dist/src/detectors/cpp/index.js.map +1 -0
  52. package/dist/src/detectors/dart/index.d.ts +14 -0
  53. package/dist/src/detectors/dart/index.js +218 -0
  54. package/dist/src/detectors/dart/index.js.map +1 -0
  55. package/dist/src/detectors/dart/parse-fvm.d.ts +20 -0
  56. package/dist/src/detectors/dart/parse-fvm.js +30 -0
  57. package/dist/src/detectors/dart/parse-fvm.js.map +1 -0
  58. package/dist/src/detectors/dart/parse-pubspec-lock.d.ts +53 -0
  59. package/dist/src/detectors/dart/parse-pubspec-lock.js +251 -0
  60. package/dist/src/detectors/dart/parse-pubspec-lock.js.map +1 -0
  61. package/dist/src/detectors/dart/parse-pubspec.d.ts +66 -0
  62. package/dist/src/detectors/dart/parse-pubspec.js +208 -0
  63. package/dist/src/detectors/dart/parse-pubspec.js.map +1 -0
  64. package/dist/src/detectors/database/index.d.ts +14 -0
  65. package/dist/src/detectors/database/index.js +179 -0
  66. package/dist/src/detectors/database/index.js.map +1 -0
  67. package/dist/src/detectors/database/parse-compose.d.ts +21 -0
  68. package/dist/src/detectors/database/parse-compose.js +33 -0
  69. package/dist/src/detectors/database/parse-compose.js.map +1 -0
  70. package/dist/src/detectors/database/parse-terraform.d.ts +26 -0
  71. package/dist/src/detectors/database/parse-terraform.js +47 -0
  72. package/dist/src/detectors/database/parse-terraform.js.map +1 -0
  73. package/dist/src/detectors/dotnet/index.d.ts +3 -1
  74. package/dist/src/detectors/dotnet/index.js +6 -0
  75. package/dist/src/detectors/dotnet/index.js.map +1 -1
  76. package/dist/src/detectors/github-actions-dotnet.d.ts +22 -0
  77. package/dist/src/detectors/github-actions-dotnet.js +65 -0
  78. package/dist/src/detectors/github-actions-dotnet.js.map +1 -0
  79. package/dist/src/detectors/github-actions-node.d.ts +23 -0
  80. package/dist/src/detectors/github-actions-node.js +76 -0
  81. package/dist/src/detectors/github-actions-node.js.map +1 -0
  82. package/dist/src/detectors/github-actions.d.ts +3 -1
  83. package/dist/src/detectors/github-actions.js +90 -1
  84. package/dist/src/detectors/github-actions.js.map +1 -1
  85. package/dist/src/detectors/go/index.d.ts +3 -1
  86. package/dist/src/detectors/go/index.js +2 -0
  87. package/dist/src/detectors/go/index.js.map +1 -1
  88. package/dist/src/detectors/index.js +18 -0
  89. package/dist/src/detectors/index.js.map +1 -1
  90. package/dist/src/detectors/java/index.d.ts +3 -1
  91. package/dist/src/detectors/java/index.js +5 -0
  92. package/dist/src/detectors/java/index.js.map +1 -1
  93. package/dist/src/detectors/kubernetes/index.d.ts +3 -1
  94. package/dist/src/detectors/kubernetes/index.js +2 -0
  95. package/dist/src/detectors/kubernetes/index.js.map +1 -1
  96. package/dist/src/detectors/npm.d.ts +3 -1
  97. package/dist/src/detectors/npm.js +140 -29
  98. package/dist/src/detectors/npm.js.map +1 -1
  99. package/dist/src/detectors/php/index.d.ts +14 -0
  100. package/dist/src/detectors/php/index.js +208 -0
  101. package/dist/src/detectors/php/index.js.map +1 -0
  102. package/dist/src/detectors/python.d.ts +11 -1
  103. package/dist/src/detectors/python.js +64 -14
  104. package/dist/src/detectors/python.js.map +1 -1
  105. package/dist/src/detectors/ruby/index.d.ts +3 -1
  106. package/dist/src/detectors/ruby/index.js +2 -0
  107. package/dist/src/detectors/ruby/index.js.map +1 -1
  108. package/dist/src/detectors/rust/index.d.ts +3 -1
  109. package/dist/src/detectors/rust/index.js +2 -0
  110. package/dist/src/detectors/rust/index.js.map +1 -1
  111. package/dist/src/detectors/serverless/index.d.ts +15 -0
  112. package/dist/src/detectors/serverless/index.js +159 -0
  113. package/dist/src/detectors/serverless/index.js.map +1 -0
  114. package/dist/src/detectors/serverless/parse-serverless-yml.d.ts +22 -0
  115. package/dist/src/detectors/serverless/parse-serverless-yml.js +76 -0
  116. package/dist/src/detectors/serverless/parse-serverless-yml.js.map +1 -0
  117. package/dist/src/detectors/serverless/parse-template.d.ts +22 -0
  118. package/dist/src/detectors/serverless/parse-template.js +74 -0
  119. package/dist/src/detectors/serverless/parse-template.js.map +1 -0
  120. package/dist/src/detectors/serverless/parse-tf.d.ts +31 -0
  121. package/dist/src/detectors/serverless/parse-tf.js +334 -0
  122. package/dist/src/detectors/serverless/parse-tf.js.map +1 -0
  123. package/dist/src/detectors/shell/index.d.ts +14 -0
  124. package/dist/src/detectors/shell/index.js +168 -0
  125. package/dist/src/detectors/shell/index.js.map +1 -0
  126. package/dist/src/detectors/shell/parse-powershell.d.ts +17 -0
  127. package/dist/src/detectors/shell/parse-powershell.js +187 -0
  128. package/dist/src/detectors/shell/parse-powershell.js.map +1 -0
  129. package/dist/src/detectors/shell/parse-workflow.d.ts +29 -0
  130. package/dist/src/detectors/shell/parse-workflow.js +95 -0
  131. package/dist/src/detectors/shell/parse-workflow.js.map +1 -0
  132. package/dist/src/detectors/swift/index.d.ts +14 -0
  133. package/dist/src/detectors/swift/index.js +266 -0
  134. package/dist/src/detectors/swift/index.js.map +1 -0
  135. package/dist/src/detectors/swift/parse-xcode-project.d.ts +26 -0
  136. package/dist/src/detectors/swift/parse-xcode-project.js +113 -0
  137. package/dist/src/detectors/swift/parse-xcode-project.js.map +1 -0
  138. package/dist/src/detectors/terraform/hcl.d.ts +45 -0
  139. package/dist/src/detectors/terraform/hcl.js +184 -0
  140. package/dist/src/detectors/terraform/hcl.js.map +1 -0
  141. package/dist/src/detectors/terraform/index.d.ts +14 -0
  142. package/dist/src/detectors/terraform/index.js +221 -0
  143. package/dist/src/detectors/terraform/index.js.map +1 -0
  144. package/dist/src/detectors/terraform/parse-lock.d.ts +24 -0
  145. package/dist/src/detectors/terraform/parse-lock.js +44 -0
  146. package/dist/src/detectors/terraform/parse-lock.js.map +1 -0
  147. package/dist/src/detectors/terraform/parse-terraform.d.ts +37 -0
  148. package/dist/src/detectors/terraform/parse-terraform.js +57 -0
  149. package/dist/src/detectors/terraform/parse-terraform.js.map +1 -0
  150. package/dist/src/detectors/terraform/parse-version-files.d.ts +24 -0
  151. package/dist/src/detectors/terraform/parse-version-files.js +58 -0
  152. package/dist/src/detectors/terraform/parse-version-files.js.map +1 -0
  153. package/dist/src/doctor.d.ts +23 -1
  154. package/dist/src/doctor.js +89 -1
  155. package/dist/src/doctor.js.map +1 -1
  156. package/dist/src/domain.d.ts +55 -4
  157. package/dist/src/domain.js +32 -0
  158. package/dist/src/domain.js.map +1 -1
  159. package/dist/src/engine.d.ts +25 -2
  160. package/dist/src/engine.js +47 -2
  161. package/dist/src/engine.js.map +1 -1
  162. package/dist/src/exposure.d.ts +22 -0
  163. package/dist/src/exposure.js +62 -0
  164. package/dist/src/exposure.js.map +1 -0
  165. package/dist/src/forecast.d.ts +45 -0
  166. package/dist/src/forecast.js +68 -0
  167. package/dist/src/forecast.js.map +1 -0
  168. package/dist/src/github-action.d.ts +9 -0
  169. package/dist/src/github-action.js +21 -0
  170. package/dist/src/github-action.js.map +1 -1
  171. package/dist/src/init-agents.d.ts +7 -0
  172. package/dist/src/init-agents.js +33 -23
  173. package/dist/src/init-agents.js.map +1 -1
  174. package/dist/src/init-hooks.d.ts +30 -0
  175. package/dist/src/init-hooks.js +97 -0
  176. package/dist/src/init-hooks.js.map +1 -0
  177. package/dist/src/init-personal.d.ts +22 -0
  178. package/dist/src/init-personal.js +75 -0
  179. package/dist/src/init-personal.js.map +1 -0
  180. package/dist/src/migration-packet.d.ts +37 -1
  181. package/dist/src/migration-packet.js +104 -4
  182. package/dist/src/migration-packet.js.map +1 -1
  183. package/dist/src/min-support.d.ts +9 -0
  184. package/dist/src/min-support.js +31 -0
  185. package/dist/src/min-support.js.map +1 -0
  186. package/dist/src/registry.d.ts +8 -1
  187. package/dist/src/registry.js +26 -1
  188. package/dist/src/registry.js.map +1 -1
  189. package/dist/src/report-issue.d.ts +13 -0
  190. package/dist/src/report-issue.js +85 -0
  191. package/dist/src/report-issue.js.map +1 -0
  192. package/dist/src/reporters.d.ts +33 -1
  193. package/dist/src/reporters.js +182 -3
  194. package/dist/src/reporters.js.map +1 -1
  195. package/dist/src/runtime-pin.d.ts +9 -0
  196. package/dist/src/runtime-pin.js +52 -0
  197. package/dist/src/runtime-pin.js.map +1 -0
  198. package/dist/src/sdk.d.ts +23 -1
  199. package/dist/src/sdk.js +2 -2
  200. package/dist/src/sdk.js.map +1 -1
  201. package/dist/src/setup.d.ts +19 -0
  202. package/dist/src/setup.js +65 -0
  203. package/dist/src/setup.js.map +1 -0
  204. package/dist/src/source-usage.d.ts +36 -1
  205. package/dist/src/source-usage.js +746 -23
  206. package/dist/src/source-usage.js.map +1 -1
  207. package/dist/src/status-file.d.ts +11 -0
  208. package/dist/src/status-file.js +42 -0
  209. package/dist/src/status-file.js.map +1 -0
  210. package/dist/src/tui.d.ts +37 -0
  211. package/dist/src/tui.js +112 -0
  212. package/dist/src/tui.js.map +1 -0
  213. package/dist/src/usage/javascript.js +83 -0
  214. package/dist/src/usage/javascript.js.map +1 -1
  215. package/dist/src/usage/python.d.ts +15 -0
  216. package/dist/src/usage/python.js +243 -0
  217. package/dist/src/usage/python.js.map +1 -0
  218. package/dist/src/usage/queries/python.scm +48 -0
  219. package/dist/src/usage/symbols.d.ts +28 -0
  220. package/dist/src/usage/symbols.js +90 -0
  221. package/dist/src/usage/symbols.js.map +1 -0
  222. package/dist/src/usage/tree-sitter.d.ts +5 -0
  223. package/dist/src/usage/tree-sitter.js +21 -3
  224. package/dist/src/usage/tree-sitter.js.map +1 -1
  225. package/dist/src/usage-log.d.ts +39 -0
  226. package/dist/src/usage-log.js +112 -0
  227. package/dist/src/usage-log.js.map +1 -0
  228. package/dist/src/version.d.ts +1 -1
  229. package/dist/src/version.js +1 -1
  230. package/dist/src/watch.d.ts +37 -0
  231. package/dist/src/watch.js +109 -0
  232. package/dist/src/watch.js.map +1 -0
  233. package/examples/agents/copilot/.vscode/mcp.json +1 -1
  234. package/examples/agents/copilot/coding-agent-mcp.json +1 -1
  235. package/examples/agents/cursor/.cursor/mcp.json +1 -1
  236. package/examples/agents/gemini/gemini-extension.json +2 -2
  237. package/examples/agents/gemini/settings.json +1 -1
  238. package/examples/agents/kilo/kilo.jsonc +1 -1
  239. package/examples/capabilities.json +24 -15
  240. package/package.json +10 -3
  241. package/registry/android.json +150 -0
  242. package/registry/ci-images.json +217 -0
  243. package/registry/container.json +707 -0
  244. package/registry/dart.json +364 -0
  245. package/registry/database.json +449 -0
  246. package/registry/dotnet.json +601 -0
  247. package/registry/go.json +334 -0
  248. package/registry/java.json +53 -0
  249. package/registry/kubernetes.json +3015 -0
  250. package/registry/nodejs.json +4421 -0
  251. package/registry/npm.json +926 -0
  252. package/registry/php.json +747 -1
  253. package/registry/python.json +4136 -0
  254. package/registry/ruby.json +595 -0
  255. package/registry/serverless.json +259 -0
  256. package/registry/shell.json +339 -0
  257. package/registry/swift.json +61 -0
  258. package/registry/terraform.json +369 -0
  259. package/schemas/doctor.v1.schema.json +18 -1
  260. package/schemas/finding.v1.schema.json +20 -2
  261. package/schemas/public-validation.v1.schema.json +25 -1
  262. package/schemas/registry.v2.schema.json +2 -2
  263. package/schemas/scan.v1.schema.json +25 -2
  264. package/skills/evergreen-deprecation/SKILL.md +7 -0
package/README.md CHANGED
@@ -8,14 +8,11 @@
8
8
  </picture>
9
9
  </p>
10
10
 
11
- [![CI](https://github.com/arminazimi/evergreen/actions/workflows/ci.yml/badge.svg)](https://github.com/arminazimi/evergreen/actions/workflows/ci.yml)
12
- [![Coverage](https://img.shields.io/endpoint?url=https%3A%2F%2Fraw.githubusercontent.com%2Farminazimi%2Fevergreen%2Fbadges%2Fcoverage.json)](https://github.com/arminazimi/evergreen/actions/workflows/ci.yml)
13
- [![npm](https://img.shields.io/npm/v/evergreen-deprecation.svg)](https://www.npmjs.com/package/evergreen-deprecation)
11
+ [![CI](https://img.shields.io/github/actions/workflow/status/arminazimi/evergreen/ci.yml?branch=main&label=CI&logo=github&logoColor=white&labelColor=0C1110&color=2F7D5B&style=flat)](https://github.com/arminazimi/evergreen/actions/workflows/ci.yml)
12
+ [![Coverage](https://img.shields.io/endpoint?url=https%3A%2F%2Fraw.githubusercontent.com%2Farminazimi%2Fevergreen%2Fbadges%2Fcoverage.json&labelColor=0C1110&style=flat)](https://github.com/arminazimi/evergreen/actions/workflows/ci.yml)
13
+ [![npm](https://img.shields.io/npm/v/evergreen-deprecation.svg?logo=npm&logoColor=white&labelColor=0C1110&color=2F7D5B&style=flat)](https://www.npmjs.com/package/evergreen-deprecation)
14
+ [![Evergreen](https://raw.githubusercontent.com/arminazimi/evergreen/badges/evergreen-badge.svg)](https://github.com/arminazimi/evergreen/actions/workflows/ci.yml)
14
15
  [![skills.sh](https://skills.sh/b/arminazimi/evergreen)](https://skills.sh/arminazimi/evergreen/evergreen-deprecation)
15
- [![Node.js](https://img.shields.io/badge/node-%3E%3D22-3c873a.svg)](docs/COMPATIBILITY.md)
16
- [![SARIF](https://img.shields.io/badge/SARIF-2.1.0-blue.svg)](docs/GITHUB_ACTION.md#code-scanning)
17
- [![MCP](https://img.shields.io/badge/MCP-server-8a2be2.svg)](docs/MCP.md)
18
- [![License](https://img.shields.io/badge/license-Apache--2.0-blue.svg)](LICENSE)
19
16
 
20
17
  Evergreen finds **end-of-life and deprecated** runtimes, packages, and GitHub Actions in your repository, shows the exact file and line, and backs every finding with an authoritative source, a replacement, and migration steps. It runs on your machine as a CLI, a local MCP server, a GitHub Action (with SARIF for code scanning), and an Agent Skill, so people and coding agents can find lifecycle risk before it breaks a build, and check a dependency before adding it. Scans are deterministic and offline, and need no account.
21
18
 
@@ -26,17 +23,28 @@ Read the [public documentation](https://arminazimi.github.io/evergreen/), run th
26
23
  | Ecosystem | What Evergreen reads | What it reports |
27
24
  | --- | --- | --- |
28
25
  | **Container base images** *(experimental)* | `Dockerfile`, `*.Dockerfile`, `Containerfile`, `compose.yaml`, `docker-compose.yml`: base images of official `node`, `python`, `postgres`, `mysql`, and `ruby` | Image release lines that are end of life. Variables, `latest`, and floating tags are listed as unclassified, never guessed. See [Container base images](docs/detectors/container.md) |
29
- | **.NET** *(experimental)* | `global.json`, `*.csproj`/`*.fsproj`/`*.vbproj`, `Directory.Build.props`, `Directory.Packages.props`, `packages.lock.json`: the pinned SDK, target frameworks, and direct NuGet packages | .NET release lines past end of support, and direct packages their publisher deprecated, with the C# files that use them. .NET Framework, `netstandard`, MSBuild properties, floating versions, and ranges are not judged. See [.NET](docs/detectors/dotnet.md) |
26
+ | **.NET** *(beta)* | `global.json`, `*.csproj`/`*.fsproj`/`*.vbproj`, `Directory.Build.props`, `Directory.Packages.props`, `packages.lock.json`: the pinned SDK, target frameworks, and direct NuGet packages | .NET release lines past end of support, and direct packages their publisher deprecated, with the C# files that use them. .NET Framework, `netstandard`, MSBuild properties, floating versions, and ranges are not judged. See [.NET](docs/detectors/dotnet.md) |
30
27
  | **Go** *(experimental)* | `go.mod` and `go.work`: `go` and `toolchain` directives, and direct `require` entries | Go release lines that no longer receive fixes, and direct modules with a lifecycle rule. Versions Evergreen cannot read are listed as unclassified. See [Go](docs/detectors/go.md) |
31
28
  | **GitHub Actions** | `.github/workflows/*.yml`: `uses:` references to actions, including full-SHA pins resolved through a trailing version comment or a bundled release map | Actions on retired runtimes (such as Node.js 20) and retired or deprecated majors, at the exact line |
32
- | **Java and Kotlin (JVM)** *(experimental)* | `pom.xml`, `build.gradle`, `build.gradle.kts`, `.java-version`, `.sdkmanrc`, `.tool-versions`: the JDK a project pins or targets, and direct Maven dependencies. See [Java and Kotlin](docs/detectors/java.md) | JDK feature releases that are out of support, and dependencies whose POM says they moved. Property references and expressions are listed as unclassified |
33
- | **Kubernetes APIs** *(experimental)* | `*.yaml`, `*.yml` manifests, Helm chart `templates/`, and `kustomization.yaml`: the literal `apiVersion` and `kind`, and kustomize patches. See [Kubernetes APIs](docs/detectors/kubernetes.md) | API versions the Kubernetes project says are no longer served. Helm values, cluster-guarded templates, and anything it cannot read literally are skipped |
29
+ | **C and C++** *(experimental)* | `CMakeLists.txt`, `conanfile.txt`, `conanfile.py`, and `vcpkg.json` | CMake policy compatibility removals and deprecations, at the exact declaration. Other declarations require a matching reviewed rule. See [C and C++](docs/COMPATIBILITY.md#c-and-c-detector) |
30
+ | **CI runner images** *(experimental)* | `.gitlab-ci.yml` `image` and `services`, `.circleci/config.yml` `docker.image`, `machine.image`, and orbs, and `azure-pipelines.yml` `pool.vmImage` | Azure hosted-image labels a reviewed rule covers, at the exact line. GitLab images and CircleCI orbs, variables, and floating aliases are unclassified. A literal CircleCI image is not judged. See [CI runner images](docs/COMPATIBILITY.md#ci-runner-images-detector) |
31
+ | **Java and Kotlin (JVM)** *(beta)* | `pom.xml`, `build.gradle`, `build.gradle.kts`, `.java-version`, `.sdkmanrc`, `.tool-versions`: the JDK a project pins or targets, and direct Maven dependencies. See [Java and Kotlin](docs/detectors/java.md) | JDK feature releases that are out of support, and dependencies whose POM says they moved. Property references and expressions are listed as unclassified |
32
+ | **Kubernetes APIs** *(beta)* | `*.yaml`, `*.yml` manifests, Helm chart `templates/`, and `kustomization.yaml`: the literal `apiVersion` and `kind`, and kustomize patches. See [Kubernetes APIs](docs/detectors/kubernetes.md) | API versions the Kubernetes project says are no longer served. Helm values, cluster-guarded templates, and anything it cannot read literally are skipped |
34
33
  | **Node.js** | `engines.node`, `volta`, `.nvmrc`, `.node-version` | Runtime versions that are end of life or out of support |
35
34
  | **npm** | `package.json` dependencies, `package-lock.json`, `npm-shrinkwrap.json`, `yarn.lock`, `pnpm-lock.yaml`, and the imports and calls that use each package | Deprecated or unmaintained packages, with the replacement and where the package is used |
36
35
  | **Python** | `pyproject.toml`, `requirements*.txt`, `.python-version`, `runtime.txt`, `.tool-versions`, `poetry.lock`, `uv.lock`, `Pipfile.lock` | Python versions that are end of life, and deprecated or obsolete packages |
36
+ | **Dart and Flutter** *(experimental)* | `pubspec.yaml`, `pubspec.lock`, `.fvmrc`, `.fvm/fvm_config.json`: SDK constraints, direct dependencies, resolved packages, and the pinned Flutter version | Dart SDK releases that no longer receive security updates when pinned exactly, and discontinued pub packages with the files that use them. Constraint ranges such as `>=3.8.0 <4.0.0` are not judged. See [Dart and Flutter](docs/detectors/dart.md) |
37
+ | **Database runtimes** *(experimental)* | `compose.yaml` / `docker-compose.yml` image tags (`postgres`, `mysql`, `mariadb`, `redis`, `mongo`) and `engine_version` on AWS managed database resources in `*.tf` | PostgreSQL 11–13 and MySQL 5.7 and 8.0 past end of life. Floating tags, variables, module blocks, and Compose files with YAML aliases are not judged. See [Database runtimes](docs/detectors/database.md) |
38
+ | **Shell and PowerShell** *(experimental)* | `#Requires -Version` in `*.ps1` / `*.psm1`, `PowerShellVersion` in `*.psd1`, and pinned `mcr.microsoft.com/powershell` image tags in `.github/workflows` | PowerShell 6.x and 7.0–7.3 past end of support. Windows PowerShell 5.1, shell names, Bash images, dynamic values, and directives with extra options are not judged. See [Shell and PowerShell](docs/detectors/shell.md) |
39
+ | **Terraform** *(experimental)* | `*.tf` (`required_version`, `required_providers`), `.terraform.lock.hcl`, `.terraform-version`, `.tool-versions`: constraints, locked providers, and the pinned Terraform CLI | Terraform CLI release lines that no longer receive support when pinned exactly or by a `~> X.Y.Z` constraint. Ranges such as `>= 1.5` are not judged. See [Terraform](docs/detectors/terraform.md) |
37
40
  | **Rust** *(experimental)* | `Cargo.toml`, `Cargo.lock`, `rust-toolchain(.toml)`: the pinned toolchain and direct crate dependencies | Toolchains older than the newest stable release, and direct dependencies on unmaintained crates with the files that use them. `edition`, `rust-version`, `stable`, and anything it cannot read literally are not judged. See [Rust](docs/detectors/rust.md) |
41
+ | **Swift** *(beta)* | `.swift-version`, `.xcode-version`, `Package.swift`, `Package.resolved`, and the application-target `IPHONEOS_DEPLOYMENT_TARGET` in `project.pbxproj` | Xcode and iOS releases App Store Connect no longer accepts, Swift toolchain lines with a lifecycle rule, and packages with a rule. Libraries and `platforms:` minimums are not judged. See [Swift](docs/detectors/swift.md) |
42
+ | **Serverless runtimes** *(beta)* | `Runtime` in AWS SAM and CloudFormation templates, `provider.runtime` and `runtime` in `serverless.yml`, and `runtime` in Terraform `aws_lambda_function`, Google Cloud Functions, and Azure function apps | Lambda and Cloud Functions runtimes their vendor lists as end of life. See [Serverless runtimes](docs/detectors/serverless.md) |
43
+ | **Ruby** *(experimental)* | `.ruby-version`, `.tool-versions`, `Gemfile`, `Gemfile.lock` | Ruby release lines past end of support and yanked gems, with the Ruby files that use a gem. See [Compatibility](docs/COMPATIBILITY.md#ruby-detector) |
44
+ | **PHP** *(experimental)* | `.php-version`, `.tool-versions`, `composer.json`, `composer.lock` | PHP release lines past end of support and abandoned Composer packages. See [Compatibility](docs/COMPATIBILITY.md#php-detector) |
45
+ | **Android** *(experimental)* | `build.gradle(.kts)`, `settings.gradle(.kts)`, `libs.versions.toml`: SDK levels, Android Gradle Plugin, Kotlin plugin, and Maven dependencies | Declarations that a reviewed rule names, such as Google Play Billing Library majors 5 through 9. See [Compatibility](docs/COMPATIBILITY.md#android-detector) |
38
46
 
39
- Each finding carries its rule's sources, review date, and migration steps; see [Lifecycle rules](docs/RULES.md). Other ecosystems are not guessed at: Evergreen reports a package it has no rule for as `no-data`, never as safe, and new ecosystems start from a [generated detector skeleton](docs/DETECTORS.md#start-a-new-detector-in-this-repository). The [compatibility matrix](docs/COMPATIBILITY.md) lists supported environments and hosts.
47
+ The level in parentheses is the detector's maturity; the full list with each level is the [ecosystem coverage matrix](docs/COMPATIBILITY.md#ecosystem-coverage), and earned precision and recall per detector are on the [accuracy dashboard](https://arminazimi.github.io/evergreen/dashboard/). Each finding carries its rule's sources, review date, and migration steps; see [Lifecycle rules](docs/RULES.md). Other ecosystems are not guessed at: Evergreen reports a package it has no rule for as `no-data`, never as safe, and new ecosystems start from a [generated detector skeleton](docs/DETECTORS.md#start-a-new-detector-in-this-repository). The [compatibility matrix](docs/COMPATIBILITY.md) lists supported environments and hosts.
40
48
 
41
49
  ## Product principles
42
50
 
@@ -54,6 +62,12 @@ Requirements: Node.js 22 or newer.
54
62
  npx evergreen-deprecation scan .
55
63
  ```
56
64
 
65
+ Give an agent a short answer instead of the full report: one line per finding with its id, location, severity, and replacement, most severe first, capped at 25 findings (the rest are counted) and under 8 KiB:
66
+
67
+ ```bash
68
+ npx evergreen-deprecation scan . --format compact
69
+ ```
70
+
57
71
  Verify that the CLI, local MCP server, Agent Skill, plugin foundations, and CI
58
72
  workspace are ready without changing configuration or uploading repository data:
59
73
 
@@ -120,6 +134,14 @@ npx evergreen-deprecation init --agents --dry-run # show the change
120
134
  npx evergreen-deprecation init --agents
121
135
  ```
122
136
 
137
+ To do this for every coding agent a repository is already set up for, run `setup`. It detects Claude Code, Codex, Cursor, Gemini CLI, GitHub Copilot, and Kilo Code configuration, shows the change for each host's instruction file, and writes only after you confirm (or pass `--yes`). It uses the same marked section as `init --agents`, so existing rules are never overwritten:
138
+
139
+ ```bash
140
+ npx evergreen-deprecation setup --dry-run # print the plan
141
+ npx evergreen-deprecation setup # ask, then write
142
+ npx evergreen-deprecation setup --yes # no prompt (CI, scripts)
143
+ ```
144
+
123
145
  Connect a coding agent through the local MCP server:
124
146
 
125
147
  ```bash
@@ -166,7 +188,7 @@ The initial detector reports unsupported major versions of five first-party acti
166
188
 
167
189
  Pinned commit SHAs and dynamic expressions are intentionally left unclassified until Evergreen can resolve them without guessing.
168
190
 
169
- The npm detector also reads `package.json`, npm/pnpm/Yarn lockfiles, Node.js runtime declarations, and a small evidence-backed registry of deprecated direct dependencies. Use `evergreen explain <finding-id>` to inspect a finding and its sources.
191
+ The npm detector also reads `package.json`, npm/pnpm/Yarn lockfiles, Node.js runtime declarations, and a small evidence-backed registry of deprecated direct dependencies. Use `evergreen explain <finding-id>` to inspect a finding and its sources. If a finding is wrong, `evergreen report-issue <finding-id>` prints a Markdown report with the rule, its evidence, and a few redacted lines of the declaring file, and never opens an issue or uses the network.
170
192
 
171
193
  The Python detector reads PEP 621 and Poetry metadata from `pyproject.toml`, `requirements*.txt`, common runtime-version files, and uv/Poetry/PDM/Pipenv lockfiles. It reports unsupported Python declarations and lifecycle risks in direct dependencies while ignoring transitive-only lockfile entries.
172
194
 
@@ -192,7 +214,7 @@ permissions:
192
214
 
193
215
  steps:
194
216
  - uses: actions/checkout@v7
195
- - uses: arminazimi/evergreen@v0.4.0
217
+ - uses: arminazimi/evergreen@v0.6.0
196
218
  with:
197
219
  baseline: .evergreen-baseline.json
198
220
  fail-on-severity: high
@@ -40,13 +40,18 @@ async function main() {
40
40
  const sarifPath = process.env["INPUT_UPLOAD-SARIF"] === "true"
41
41
  ? resolve(process.env.RUNNER_TEMP ?? workspace, "evergreen-results.sarif")
42
42
  : undefined;
43
+ const badgePath = process.env["INPUT_UPLOAD-BADGE"] === "true"
44
+ ? resolve(process.env.RUNNER_TEMP ?? workspace, "evergreen-badge.json")
45
+ : undefined;
43
46
  const outcome = await runGitHubAction({
44
47
  root,
45
48
  reportPath,
46
49
  ...(sarifPath ? { sarifPath } : {}),
50
+ ...(badgePath ? { badgePath } : {}),
47
51
  ...(process.env.INPUT_BASELINE ? { baselinePath: process.env.INPUT_BASELINE } : {}),
48
52
  ...(process.env["INPUT_BASELINE-WARN-DAYS"] ? { baselineWarnDays: Number(process.env["INPUT_BASELINE-WARN-DAYS"]) } : {}),
49
53
  ...(process.env["INPUT_ON-EXPIRED"] ? { onExpired: process.env["INPUT_ON-EXPIRED"] } : {}),
54
+ ...(process.env["INPUT_MIN-SUPPORT-DAYS"] ? { minSupportDays: Number(process.env["INPUT_MIN-SUPPORT-DAYS"]) } : {}),
50
55
  failOnSeverity: (process.env["INPUT_FAIL-ON-SEVERITY"] || "high"),
51
56
  });
52
57
  for (const annotation of outcome.annotations)
@@ -61,6 +66,10 @@ async function main() {
61
66
  await setOutput("report-path", outcome.reportPath);
62
67
  if (outcome.sarifPath)
63
68
  await setOutput("sarif-path", outcome.sarifPath);
69
+ if (outcome.badgePath)
70
+ await setOutput("badge-path", outcome.badgePath);
71
+ if (outcome.badgeSvgPath)
72
+ await setOutput("badge-svg-path", outcome.badgeSvgPath);
64
73
  await setOutput("finding-count", String(outcome.result.findings.length));
65
74
  await writeSummary(outcome.result.findings, outcome.gateFailed, outcome.gate, outcome.result.data, outcome.expiredFailure, outcome.result.suppressions);
66
75
  if (outcome.result.data?.stale)
@@ -1 +1 @@
1
- {"version":3,"file":"action.js","sourceRoot":"","sources":["../../src/action.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"action.js","sourceRoot":"","sources":["../../src/action.ts"],"names":[],"mappings":"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"}
@@ -1,9 +1,11 @@
1
1
  import { createHash } from "node:crypto";
2
2
  import { resolve } from "node:path";
3
3
  import { applyBaseline, findingFingerprint, readBaseline } from "./baseline.js";
4
+ import { bundledRules } from "./check-dependency.js";
4
5
  import { builtInDetectors } from "./detectors/index.js";
5
6
  import { scanRepository } from "./engine.js";
6
7
  import { createMigrationPacket } from "./migration-packet.js";
8
+ import { readPinnedRuntimes } from "./runtime-pin.js";
7
9
  export const repositoryKey = (root) => createHash("sha256").update(root).digest("hex").slice(0, 8);
8
10
  export class FindingNotObservedError extends Error {
9
11
  constructor(findingId) {
@@ -55,7 +57,7 @@ export class EvergreenAgentTools {
55
57
  }
56
58
  async context(findingId, repositoryPath = ".") {
57
59
  const result = await this.scan(repositoryPath);
58
- return createMigrationPacket(result, findingId);
60
+ return createMigrationPacket(result, findingId, await bundledRules(), await readPinnedRuntimes(result.root));
59
61
  }
60
62
  async verify(findingId, repositoryPath = ".") {
61
63
  const root = resolve(repositoryPath);
@@ -1 +1 @@
1
- {"version":3,"file":"agent-tools.js","sourceRoot":"","sources":["../../src/agent-tools.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"agent-tools.js","sourceRoot":"","sources":["../../src/agent-tools.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ import type { ScanResult } from "./domain.js";
2
+ import type { RegistryV2Rule } from "./registry.js";
3
+ /**
4
+ * Projects a scan onto a future day: each announced end of life whose deadline is on or before `asOf` is
5
+ * reported as the ended line it will be, at end-of-life severity. Finding identity never changes, so
6
+ * baselines still match. The scan itself stays clock-free; this is an explicit, deterministic step.
7
+ */
8
+ export declare function applyAsOf(result: ScanResult, asOf: string, rules?: readonly RegistryV2Rule[] | Promise<readonly RegistryV2Rule[]>): Promise<ScanResult>;
@@ -0,0 +1,21 @@
1
+ import { bundledRules } from "./check-dependency.js";
2
+ /** The severity a scheduled end of life returns to once its date has come (decision 0010). */
3
+ const REACHED_SEVERITY = "high";
4
+ /**
5
+ * Projects a scan onto a future day: each announced end of life whose deadline is on or before `asOf` is
6
+ * reported as the ended line it will be, at end-of-life severity. Finding identity never changes, so
7
+ * baselines still match. The scan itself stays clock-free; this is an explicit, deterministic step.
8
+ */
9
+ export async function applyAsOf(result, asOf, rules = bundledRules()) {
10
+ const reached = new Set((await rules)
11
+ .filter((rule) => rule.event === "scheduled-end-of-life" && rule.deadline !== undefined && rule.deadline <= asOf)
12
+ .map((rule) => rule.id));
13
+ return {
14
+ ...result,
15
+ asOf,
16
+ findings: result.findings.map((finding) => reached.has(finding.ruleId)
17
+ ? { ...finding, severity: REACHED_SEVERITY, summary: `As of ${asOf}, this has ended (deadline ${finding.deadline}). ${finding.summary}` }
18
+ : finding),
19
+ };
20
+ }
21
+ //# sourceMappingURL=as-of.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"as-of.js","sourceRoot":"","sources":["../../src/as-of.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAIrD,8FAA8F;AAC9F,MAAM,gBAAgB,GAAG,MAAe,CAAC;AAEzC;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,SAAS,CAC7B,MAAkB,EAClB,IAAY,EACZ,QAAwE,YAAY,EAAE;IAEtF,MAAM,OAAO,GAAG,IAAI,GAAG,CACrB,CAAC,MAAM,KAAK,CAAC;SACV,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,KAAK,uBAAuB,IAAI,IAAI,CAAC,QAAQ,KAAK,SAAS,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC;SAChH,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,CAC1B,CAAC;IACF,OAAO;QACL,GAAG,MAAM;QACT,IAAI;QACJ,QAAQ,EAAE,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CACxC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC;YACzB,CAAC,CAAC,EAAE,GAAG,OAAO,EAAE,QAAQ,EAAE,gBAAgB,EAAE,OAAO,EAAE,SAAS,IAAI,8BAA8B,OAAO,CAAC,QAAQ,MAAM,OAAO,CAAC,OAAO,EAAE,EAAE;YACzI,CAAC,CAAC,OAAO,CACZ;KACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,15 @@
1
+ import type { ScanResult } from "./domain.js";
2
+ export interface BadgeState {
3
+ message: string;
4
+ color: string;
5
+ }
6
+ /**
7
+ * What the README badge says. Counts findings after baseline comparison and names the highest
8
+ * remaining severity; `expired` and `stale` only ever add to that, they never hide a finding.
9
+ */
10
+ export declare function badgeState(result: Pick<ScanResult, "findings" | "data">, expiredFailure?: boolean): BadgeState;
11
+ /**
12
+ * A self-contained SVG badge in the Evergreen brand colors. Text widths are fixed with
13
+ * `textLength`, so the layout does not depend on which font the viewer has.
14
+ */
15
+ export declare function renderBadgeSvg(result: Pick<ScanResult, "findings" | "data">, expiredFailure?: boolean): string;
@@ -0,0 +1,81 @@
1
+ import { severityValues } from "./domain.js";
2
+ /** Brand palette (brand/tokens.css) plus muted severity colors that sit next to it. */
3
+ const colors = {
4
+ clean: "#2F7D5B",
5
+ quiet: "#4C7C6D",
6
+ low: "#B89B3C",
7
+ medium: "#C9822F",
8
+ high: "#B84A3E",
9
+ expired: "#8E3B34",
10
+ };
11
+ const severityColors = {
12
+ critical: colors.high,
13
+ high: colors.high,
14
+ medium: colors.medium,
15
+ low: colors.low,
16
+ info: colors.quiet,
17
+ };
18
+ /**
19
+ * What the README badge says. Counts findings after baseline comparison and names the highest
20
+ * remaining severity; `expired` and `stale` only ever add to that, they never hide a finding.
21
+ */
22
+ export function badgeState(result, expiredFailure = false) {
23
+ const count = result.findings.length;
24
+ const highest = [...severityValues].reverse().find((severity) => result.findings.some((finding) => finding.severity === severity));
25
+ const stale = result.data?.stale === true;
26
+ if (expiredFailure)
27
+ return { message: highest ? `${count} ${highest} · expired` : "expired", color: colors.expired };
28
+ if (highest)
29
+ return { message: `${count} ${highest}${stale ? " · stale" : ""}`, color: severityColors[highest] };
30
+ return stale ? { message: "stale", color: colors.quiet } : { message: "clean", color: colors.clean };
31
+ }
32
+ const LABEL = "evergreen";
33
+ const HEIGHT = 20;
34
+ const PAD = 7;
35
+ const ICON = 12;
36
+ const GAP = 4;
37
+ const LABEL_TEXT_WIDTH = 52;
38
+ const GLYPH_WIDTH = 6.4;
39
+ const FONT = "Verdana,Geneva,DejaVu Sans,sans-serif";
40
+ /** The Version Notches mark (brand/assets) in the badge's light-on-dark colors. */
41
+ function mark(x, y) {
42
+ const mask = (id, notch) => `<mask id="${id}"><rect width="256" height="256" fill="#fff"/><rect ${notch}/></mask>`;
43
+ return [
44
+ `<g transform="translate(${x} ${y}) scale(${ICON / 256})" fill="none" stroke-width="20">`,
45
+ mask("o", 'x="119" y="18" width="18" height="28"'),
46
+ mask("m", 'x="186" y="119" width="30" height="18"'),
47
+ mask("i", 'x="119" y="160" width="18" height="30"'),
48
+ '<circle cx="128" cy="128" r="96" stroke="#F3F6F4" mask="url(#o)"/>',
49
+ '<circle cx="128" cy="128" r="70" stroke="#9AC7B6" mask="url(#m)"/>',
50
+ '<circle cx="128" cy="128" r="44" stroke="#CFE8DD" mask="url(#i)"/>',
51
+ "</g>",
52
+ ].join("");
53
+ }
54
+ /**
55
+ * A self-contained SVG badge in the Evergreen brand colors. Text widths are fixed with
56
+ * `textLength`, so the layout does not depend on which font the viewer has.
57
+ */
58
+ export function renderBadgeSvg(result, expiredFailure = false) {
59
+ const { message, color } = badgeState(result, expiredFailure);
60
+ const labelWidth = PAD + ICON + GAP + LABEL_TEXT_WIDTH + PAD;
61
+ const messageText = Math.round(message.length * GLYPH_WIDTH);
62
+ const messageWidth = messageText + 2 * PAD;
63
+ const width = labelWidth + messageWidth;
64
+ const label = `${LABEL}: ${message}`;
65
+ return [
66
+ `<svg xmlns="http://www.w3.org/2000/svg" width="${width}" height="${HEIGHT}" viewBox="0 0 ${width} ${HEIGHT}" role="img" aria-label="${label}">`,
67
+ `<title>${label}</title>`,
68
+ `<clipPath id="r"><rect width="${width}" height="${HEIGHT}" rx="3"/></clipPath>`,
69
+ '<g clip-path="url(#r)">',
70
+ `<rect width="${labelWidth}" height="${HEIGHT}" fill="#0C1110"/>`,
71
+ `<rect x="${labelWidth}" width="${messageWidth}" height="${HEIGHT}" fill="${color}"/>`,
72
+ "</g>",
73
+ mark(PAD, 4),
74
+ `<g fill="#fff" font-family="${FONT}" font-size="11" font-weight="400" text-rendering="geometricPrecision">`,
75
+ `<text x="${PAD + ICON + GAP}" y="13.8" textLength="${LABEL_TEXT_WIDTH}" lengthAdjust="spacingAndGlyphs">${LABEL}</text>`,
76
+ `<text x="${labelWidth + PAD}" y="13.8" textLength="${messageText}" lengthAdjust="spacingAndGlyphs">${message}</text>`,
77
+ "</g>",
78
+ "</svg>",
79
+ ].join("");
80
+ }
81
+ //# sourceMappingURL=badge.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"badge.js","sourceRoot":"","sources":["../../src/badge.ts"],"names":[],"mappings":"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"}
@@ -18,19 +18,32 @@ export interface BaselineEntry extends Suppression {
18
18
  ruleId: string;
19
19
  path: string;
20
20
  }
21
+ /** One scan's summary: how many findings the baseline recorded at that time. */
22
+ export interface BaselineHistoryEntry {
23
+ at: string;
24
+ count: number;
25
+ }
21
26
  export interface Baseline {
22
27
  schemaVersion: "evergreen.baseline.v1";
23
28
  createdAt: string;
24
29
  findings: BaselineEntry[];
30
+ /** Finding counts of earlier baselines, oldest first and bounded. Optional, so older files stay valid. */
31
+ history?: BaselineHistoryEntry[];
25
32
  }
33
+ export declare const MAX_BASELINE_HISTORY = 100;
34
+ /** Adds one entry to a history, keeping it sorted by time and at most `MAX_BASELINE_HISTORY` long (newest kept). */
35
+ export declare function appendHistory(history: readonly BaselineHistoryEntry[] | undefined, entry: BaselineHistoryEntry): BaselineHistoryEntry[];
36
+ /** The line printed after a baseline is written: the change in findings since the last history entry. */
37
+ export declare function debtTrendLine(history: readonly BaselineHistoryEntry[]): string;
26
38
  export declare function findingFingerprint(finding: Finding): string;
27
39
  /** Checks the optional suppression fields of one baseline entry; returns what is wrong, if anything. */
28
40
  export declare function suppressionIssues(entry: Suppression): string[];
29
41
  /**
30
42
  * Builds a baseline from a scan. `suppression`, when given, is recorded on every entry; without it the file has
31
- * exactly the fields it always had.
43
+ * exactly the fields it always had. `previous`, the baseline being replaced, carries its history forward with this
44
+ * scan's count added; without it there is no history.
32
45
  */
33
- export declare function createBaseline(result: ScanResult, suppression?: Suppression): Baseline;
46
+ export declare function createBaseline(result: ScanResult, suppression?: Suppression, previous?: Baseline): Baseline;
34
47
  export declare function writeBaseline(path: string, baseline: Baseline): Promise<void>;
35
48
  export declare function readBaseline(path: string): Promise<Baseline>;
36
49
  export declare const DEFAULT_WARN_DAYS = 14;
@@ -1,6 +1,31 @@
1
1
  import { createHash } from "node:crypto";
2
2
  import { readFile, writeFile } from "node:fs/promises";
3
3
  import { isIsoDate } from "./registry.js";
4
+ export const MAX_BASELINE_HISTORY = 100;
5
+ function validHistory(history) {
6
+ if (!Array.isArray(history))
7
+ return [];
8
+ return history.filter((entry) => typeof entry?.at === "string" && !Number.isNaN(Date.parse(entry.at)) && Number.isInteger(entry.count) && entry.count >= 0);
9
+ }
10
+ /** Adds one entry to a history, keeping it sorted by time and at most `MAX_BASELINE_HISTORY` long (newest kept). */
11
+ export function appendHistory(history, entry) {
12
+ return [...validHistory(history), entry].sort((left, right) => Date.parse(left.at) - Date.parse(right.at)).slice(-MAX_BASELINE_HISTORY);
13
+ }
14
+ /** A baseline written before histories existed counts as the first entry. */
15
+ function seedHistory(baseline) {
16
+ return Number.isNaN(Date.parse(baseline.createdAt)) ? [] : [{ at: baseline.createdAt, count: baseline.findings.length }];
17
+ }
18
+ /** The line printed after a baseline is written: the change in findings since the last history entry. */
19
+ export function debtTrendLine(history) {
20
+ if (history.length < 2)
21
+ return "No earlier baseline to compare with.";
22
+ const previous = history[history.length - 2];
23
+ const current = history[history.length - 1];
24
+ const delta = current.count - previous.count;
25
+ if (delta === 0)
26
+ return `Debt is unchanged at ${current.count} since ${previous.at}.`;
27
+ return `Debt ${delta < 0 ? "fell" : "rose"} by ${Math.abs(delta)} (${previous.count} to ${current.count}) since ${previous.at}: ${delta < 0 ? "better" : "worse"}.`;
28
+ }
4
29
  export function findingFingerprint(finding) {
5
30
  const usages = finding.usages
6
31
  ?.map((usage) => [usage.kind, usage.location.path, usage.symbol])
@@ -35,22 +60,26 @@ export function suppressionIssues(entry) {
35
60
  }
36
61
  /**
37
62
  * Builds a baseline from a scan. `suppression`, when given, is recorded on every entry; without it the file has
38
- * exactly the fields it always had.
63
+ * exactly the fields it always had. `previous`, the baseline being replaced, carries its history forward with this
64
+ * scan's count added; without it there is no history.
39
65
  */
40
- export function createBaseline(result, suppression = {}) {
66
+ export function createBaseline(result, suppression = {}, previous) {
41
67
  const issues = suppressionIssues(suppression);
42
68
  if (issues.length > 0)
43
69
  throw new Error(`Invalid suppression: ${issues.join("; ")}.`);
44
70
  const extra = Object.fromEntries(Object.entries(suppression).filter(([, value]) => value !== undefined));
71
+ const createdAt = new Date().toISOString();
45
72
  return {
46
73
  schemaVersion: "evergreen.baseline.v1",
47
- createdAt: new Date().toISOString(),
74
+ createdAt,
48
75
  findings: result.findings.map((finding) => ({
49
76
  fingerprint: findingFingerprint(finding),
50
77
  ruleId: finding.ruleId,
51
78
  path: finding.location.path,
52
79
  ...extra,
53
80
  })),
81
+ // Only a baseline that already has a history, or that replaces an earlier one, starts or extends a history.
82
+ ...(previous ? { history: appendHistory(previous.history ?? seedHistory(previous), { at: createdAt, count: result.findings.length }) } : {}),
54
83
  };
55
84
  }
56
85
  export async function writeBaseline(path, baseline) {
@@ -1 +1 @@
1
- {"version":3,"file":"baseline.js","sourceRoot":"","sources":["../../src/baseline.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAGvD,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AA6B1C,MAAM,UAAU,kBAAkB,CAAC,OAAgB;IACjD,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM;QAC3B,EAAE,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;SAChE,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,aAAa,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IACpF,OAAO,UAAU,CAAC,QAAQ,CAAC;SACxB,MAAM,CACL,IAAI,CAAC,SAAS,CAAC;QACb,OAAO,CAAC,MAAM;QACd,OAAO,CAAC,QAAQ,CAAC,IAAI;QACrB,OAAO,CAAC,OAAO;QACf,GAAG,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;KACjD,CAAC,CACH;SACA,MAAM,CAAC,KAAK,CAAC,CAAC;AACnB,CAAC;AAED,wGAAwG;AACxG,MAAM,UAAU,iBAAiB,CAAC,KAAkB;IAClD,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,KAAK,MAAM,KAAK,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAU,EAAE,CAAC;QACjD,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC;QAC3B,IAAI,KAAK,KAAK,SAAS,IAAI,CAAC,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,IAAI,KAAK,CAAC,MAAM,GAAG,GAAG,CAAC,EAAE,CAAC;YAC1G,MAAM,CAAC,IAAI,CAAC,GAAG,KAAK,uDAAuD,CAAC,CAAC;QAC/E,CAAC;IACH,CAAC;IACD,KAAK,MAAM,KAAK,IAAI,CAAC,SAAS,EAAE,SAAS,CAAU,EAAE,CAAC;QACpD,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC;QAC3B,IAAI,KAAK,KAAK,SAAS,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC;YAAE,MAAM,CAAC,IAAI,CAAC,GAAG,KAAK,oCAAoC,CAAC,CAAC;IAC1G,CAAC;IACD,IAAI,SAAS,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,SAAS,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,KAAK,CAAC,OAAO,GAAG,KAAK,CAAC,OAAO,EAAE,CAAC;QAC1F,MAAM,CAAC,IAAI,CAAC,oCAAoC,CAAC,CAAC;IACpD,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,cAAc,CAAC,MAAkB,EAAE,cAA2B,EAAE;IAC9E,MAAM,MAAM,GAAG,iBAAiB,CAAC,WAAW,CAAC,CAAC;IAC9C,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,wBAAwB,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACrF,MAAM,KAAK,GAAG,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC;IACzG,OAAO;QACL,aAAa,EAAE,uBAAuB;QACtC,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;QACnC,QAAQ,EAAE,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;YAC1C,WAAW,EAAE,kBAAkB,CAAC,OAAO,CAAC;YACxC,MAAM,EAAE,OAAO,CAAC,MAAM;YACtB,IAAI,EAAE,OAAO,CAAC,QAAQ,CAAC,IAAI;YAC3B,GAAG,KAAK;SACT,CAAC,CAAC;KACJ,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,IAAY,EAAE,QAAkB;IAClE,MAAM,SAAS,CAAC,IAAI,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;AAC1E,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,IAAY;IAC7C,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,CAAa,CAAC;IACtE,IAAI,QAAQ,CAAC,aAAa,KAAK,uBAAuB,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC5F,MAAM,IAAI,KAAK,CAAC,mCAAmC,IAAI,EAAE,CAAC,CAAC;IAC7D,CAAC;IACD,uGAAuG;IACvG,KAAK,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,QAAQ,CAAC,QAAQ,CAAC,OAAO,EAAE,EAAE,CAAC;QACzD,MAAM,MAAM,GAAG,iBAAiB,CAAC,KAAK,CAAC,CAAC;QACxC,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,8BAA8B,IAAI,cAAc,KAAK,MAAM,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC1H,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,MAAM,CAAC,MAAM,iBAAiB,GAAG,EAAE,CAAC;AAiBpC,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,WAAW,EAAE,MAAM,CAAU,CAAC;AAa9D,MAAM,MAAM,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;AAEnC,sFAAsF;AACtF,MAAM,UAAU,WAAW,CAAC,IAAY,EAAE,EAAU;IAClD,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,YAAY,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,IAAI,YAAY,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC;AAChG,CAAC;AAED,wGAAwG;AACxG,MAAM,UAAU,oBAAoB,CAAC,OAAiC,EAAE,KAAa,EAAE,cAAsB;IAC3G,OAAO,OAAO;SACX,MAAM,CAAC,CAAC,KAAK,EAAgD,EAAE,CAAC,SAAS,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;SACzF,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,KAAK,EAAE,QAAQ,EAAE,WAAW,CAAC,KAAK,EAAE,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;SAC3E,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,QAAQ,IAAI,CAAC,IAAI,KAAK,CAAC,QAAQ,IAAI,cAAc,CAAC;SAC1E,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC,QAAQ,IAAI,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;AAC7I,CAAC;AAED,SAAS,UAAU,CAAC,KAA2C;IAC7D,MAAM,IAAI,GAAG,KAAK,CAAC,QAAQ,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,KAAK,CAAC,QAAQ,OAAO,KAAK,CAAC,QAAQ,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;IAC3G,MAAM,GAAG,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,UAAU,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,SAAS,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,WAAW,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC;IAC3J,OAAO,gCAAgC,IAAI,KAAK,KAAK,CAAC,OAAO,MAAM,KAAK,CAAC,MAAM,OAAO,KAAK,CAAC,IAAI,GAAG,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC;AACrJ,CAAC;AAED,SAAS,WAAW,CAAC,KAAyB;IAC5C,MAAM,GAAG,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,UAAU,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,SAAS,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,WAAW,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC;IAC3J,OAAO,gCAAgC,KAAK,CAAC,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,OAAO,OAAO,KAAK,CAAC,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,MAAM,KAAK,KAAK,CAAC,OAAO,sCAAsC,KAAK,CAAC,MAAM,OAAO,KAAK,CAAC,IAAI,GAAG,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC;AAC5Q,CAAC;AAED,gGAAgG;AAChG,SAAS,SAAS,CAAC,KAAoB,EAAE,KAAyB;IAChE,OAAO,KAAK,KAAK,SAAS,IAAI,SAAS,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,KAAK,CAAC,OAAO,GAAG,KAAK,CAAC;AAClF,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,gBAAgB,CAAC,MAAkB,EAAE,QAAkB,EAAE,UAAgC,EAAE;IACzG,MAAM,aAAa,GAAG,IAAI,GAAG,EAA2B,CAAC;IACzD,KAAK,MAAM,KAAK,IAAI,QAAQ,CAAC,QAAQ;QAAE,aAAa,CAAC,GAAG,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,GAAG,CAAC,aAAa,CAAC,GAAG,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC;IACtI,MAAM,OAAO,GAAoB,EAAE,CAAC;IACpC,MAAM,OAAO,GAAyB,EAAE,CAAC;IACzC,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,OAAO,EAAE,EAAE;QAClD,MAAM,OAAO,GAAG,aAAa,CAAC,GAAG,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC,CAAC;QAC/D,IAAI,CAAC,OAAO;YAAE,OAAO,IAAI,CAAC;QAC1B,0EAA0E;QAC1E,MAAM,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,SAAS,CAAC,KAAK,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC;QACzE,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACtB,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;gBAC5B,IAAI,SAAS,CAAC,KAAK,EAAE,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;oBACpC,OAAO,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,OAAO,EAAE,WAAW,CAAC,KAAK,CAAC,OAAO,EAAE,OAAO,CAAC,KAAM,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;gBAC3O,CAAC;YACH,CAAC;YACD,OAAO,IAAI,CAAC;QACd,CAAC;QACD,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC;QACtB,OAAO,KAAK,CAAC;IACf,CAAC,CAAC,CAAC;IACH,MAAM,MAAM,GAAG,MAAM,CAAC,QAAQ,CAAC,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC;IACxD,MAAM,aAAa,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,GAAG,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC,OAAO,EAAE,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;SAC3H,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;IACzI,MAAM,eAAe,GAAG,OAAO,CAAC,KAAK,KAAK,SAAS;QACjD,CAAC,CAAC,EAAE;QACJ,CAAC,CAAC,oBAAoB,CAAC,CAAC,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,GAAG,KAAK,CAAC,WAAW,IAAI,KAAK,CAAC,OAAO,EAAE,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC,cAAc,IAAI,iBAAiB,CAAC,CAAC;IACtL,MAAM,GAAG,GAAG,CAAC,KAA0C,EAAE,KAAa,EAAkB,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,KAAK,EAAE,CAAC,CAAC;IAC7Q,MAAM,YAAY,GAAqB;QACrC,UAAU,EAAE,MAAM;QAClB,GAAG,CAAC,OAAO,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,cAAc,EAAE,OAAO,CAAC,cAAc,IAAI,iBAAiB,EAAE,CAAC;QAC7H,QAAQ,EAAE,eAAe,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,GAAG,CAAC,KAA4C,EAAE,EAAE,QAAQ,EAAE,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC;QACzH,OAAO,EAAE,aAAa,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;KACvO,CAAC;IACF,OAAO;QACL,MAAM,EAAE;YACN,GAAG,MAAM;YACT,QAAQ;YACR,WAAW,EAAE;gBACX,GAAG,MAAM,CAAC,WAAW;gBACrB,cAAc,MAAM,WAAW,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,qBAAqB;gBAC3E,GAAG,aAAa,CAAC,GAAG,CAAC,WAAW,CAAC;gBACjC,GAAG,eAAe,CAAC,GAAG,CAAC,UAAU,CAAC;aACnC;YACD,YAAY;SACb;QACD,OAAO,EAAE,aAAa;KACvB,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,MAAkB,EAAE,QAAkB,EAAE,UAAgC,EAAE;IACtG,OAAO,gBAAgB,CAAC,MAAM,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC,MAAM,CAAC;AAC5D,CAAC;AAED,+EAA+E;AAC/E,MAAM,UAAU,uBAAuB,CAAC,MAAiC,EAAE,OAAsC;IAC/G,OAAO,MAAM,KAAK,MAAM,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC;AACjD,CAAC"}
1
+ {"version":3,"file":"baseline.js","sourceRoot":"","sources":["../../src/baseline.ts"],"names":[],"mappings":"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"}
@@ -57,7 +57,7 @@ const workflowCapabilityIds = [
57
57
  ];
58
58
  const manifest = {
59
59
  schemaVersion: "evergreen.capabilities.v1",
60
- manifestVersion: "1.2.0",
60
+ manifestVersion: "1.8.0",
61
61
  product: {
62
62
  name: "Evergreen",
63
63
  package: "evergreen-deprecation",
@@ -74,19 +74,28 @@ const manifest = {
74
74
  unknownSchemaMajor: "reject",
75
75
  },
76
76
  ecosystems: [
77
+ { id: "android", status: "experimental", maturity: "experimental", detectorIds: ["android"] },
77
78
  { id: "ci-images", status: "experimental", maturity: "experimental", detectorIds: ["ci-images"] },
78
79
  { id: "container", status: "experimental", maturity: "experimental", detectorIds: ["container"] },
79
- { id: "dotnet", status: "experimental", maturity: "experimental", detectorIds: ["dotnet"] },
80
+ { id: "cpp", status: "experimental", maturity: "experimental", detectorIds: ["cpp"] },
81
+ { id: "dart", status: "experimental", maturity: "experimental", detectorIds: ["dart"] },
82
+ { id: "dotnet", status: "supported", maturity: "beta", detectorIds: ["dotnet"] },
80
83
  { id: "github-actions", status: "supported", maturity: "stable", detectorIds: ["github-actions"] },
81
84
  { id: "go", status: "experimental", maturity: "experimental", detectorIds: ["go"] },
82
- { id: "java", status: "experimental", maturity: "experimental", detectorIds: ["java"] },
83
- { id: "kubernetes", status: "experimental", maturity: "experimental", detectorIds: ["kubernetes"] },
85
+ { id: "java", status: "supported", maturity: "beta", detectorIds: ["java"] },
86
+ { id: "kubernetes", status: "supported", maturity: "beta", detectorIds: ["kubernetes"] },
84
87
  // nodejs and npm share the npm detector, so both take its level.
85
88
  { id: "nodejs", status: "supported", maturity: "stable", detectorIds: ["npm"] },
86
89
  { id: "npm", status: "supported", maturity: "stable", detectorIds: ["npm"] },
90
+ { id: "php", status: "experimental", maturity: "experimental", detectorIds: ["php"] },
87
91
  { id: "python", status: "supported", maturity: "stable", detectorIds: ["python"] },
88
92
  { id: "ruby", status: "experimental", maturity: "experimental", detectorIds: ["ruby"] },
89
93
  { id: "rust", status: "experimental", maturity: "experimental", detectorIds: ["rust"] },
94
+ { id: "serverless", status: "supported", maturity: "beta", detectorIds: ["serverless"] },
95
+ { id: "swift", status: "supported", maturity: "beta", detectorIds: ["swift"] },
96
+ { id: "terraform", status: "experimental", maturity: "experimental", detectorIds: ["terraform"] },
97
+ { id: "database", status: "experimental", maturity: "experimental", detectorIds: ["database"] },
98
+ { id: "shell", status: "experimental", maturity: "experimental", detectorIds: ["shell"] },
90
99
  ],
91
100
  capabilities: [
92
101
  {
@@ -94,35 +103,35 @@ const manifest = {
94
103
  status: "supported",
95
104
  version: "1",
96
105
  description: "Scan a local repository with all built-in lifecycle detectors.",
97
- ecosystems: ["ci-images", "container", "dotnet", "github-actions", "go", "java", "kubernetes", "nodejs", "npm", "python", "ruby", "rust"],
106
+ ecosystems: ["android", "ci-images", "container", "cpp", "dart", "database", "dotnet", "github-actions", "go", "java", "kubernetes", "nodejs", "npm", "php", "python", "ruby", "rust", "serverless", "shell", "swift", "terraform"],
98
107
  },
99
108
  {
100
109
  id: "deprecation.list",
101
110
  status: "supported",
102
111
  version: "1",
103
112
  description: "List compact lifecycle findings from a fresh local scan.",
104
- ecosystems: ["ci-images", "container", "dotnet", "github-actions", "go", "java", "kubernetes", "nodejs", "npm", "python", "ruby", "rust"],
113
+ ecosystems: ["android", "ci-images", "container", "cpp", "dart", "database", "dotnet", "github-actions", "go", "java", "kubernetes", "nodejs", "npm", "php", "python", "ruby", "rust", "serverless", "shell", "swift", "terraform"],
105
114
  },
106
115
  {
107
116
  id: "deprecation.explain",
108
117
  status: "supported",
109
118
  version: "1",
110
119
  description: "Explain one evidence-backed finding by its exact identifier.",
111
- ecosystems: ["ci-images", "container", "dotnet", "github-actions", "go", "java", "kubernetes", "nodejs", "npm", "python", "ruby", "rust"],
120
+ ecosystems: ["android", "ci-images", "container", "cpp", "dart", "database", "dotnet", "github-actions", "go", "java", "kubernetes", "nodejs", "npm", "php", "python", "ruby", "rust", "serverless", "shell", "swift", "terraform"],
112
121
  },
113
122
  {
114
123
  id: "migration.context.create",
115
124
  status: "supported",
116
125
  version: "1",
117
126
  description: "Create a validated migration packet for one finding.",
118
- ecosystems: ["ci-images", "container", "dotnet", "github-actions", "go", "java", "kubernetes", "nodejs", "npm", "python", "ruby", "rust"],
127
+ ecosystems: ["android", "ci-images", "container", "cpp", "dart", "database", "dotnet", "github-actions", "go", "java", "kubernetes", "nodejs", "npm", "php", "python", "ruby", "rust", "serverless", "shell", "swift", "terraform"],
119
128
  },
120
129
  {
121
130
  id: "migration.verify",
122
131
  status: "supported",
123
132
  version: "1",
124
133
  description: "Re-scan and verify that an observed finding is absent.",
125
- ecosystems: ["ci-images", "container", "dotnet", "github-actions", "go", "java", "kubernetes", "nodejs", "npm", "python", "ruby", "rust"],
134
+ ecosystems: ["android", "ci-images", "container", "cpp", "dart", "database", "dotnet", "github-actions", "go", "java", "kubernetes", "nodejs", "npm", "php", "python", "ruby", "rust", "serverless", "shell", "swift", "terraform"],
126
135
  },
127
136
  {
128
137
  id: "environment.doctor",