eslint-plugin-github-actions-2 1.0.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 (410) hide show
  1. package/CHANGELOG.md +7 -0
  2. package/LICENSE +21 -0
  3. package/README.md +164 -0
  4. package/dist/_internal/case-police-dictionary.d.ts +10 -0
  5. package/dist/_internal/case-police-dictionary.d.ts.map +1 -0
  6. package/dist/_internal/case-police-dictionary.js +486 -0
  7. package/dist/_internal/case-police-dictionary.js.map +1 -0
  8. package/dist/_internal/casing.d.ts +17 -0
  9. package/dist/_internal/casing.d.ts.map +1 -0
  10. package/dist/_internal/casing.js +197 -0
  11. package/dist/_internal/casing.js.map +1 -0
  12. package/dist/_internal/github-actions-config-references.d.ts +16 -0
  13. package/dist/_internal/github-actions-config-references.d.ts.map +1 -0
  14. package/dist/_internal/github-actions-config-references.js +76 -0
  15. package/dist/_internal/github-actions-config-references.js.map +1 -0
  16. package/dist/_internal/github-actions-trigger-events.d.ts +13 -0
  17. package/dist/_internal/github-actions-trigger-events.d.ts.map +1 -0
  18. package/dist/_internal/github-actions-trigger-events.js +47 -0
  19. package/dist/_internal/github-actions-trigger-events.js.map +1 -0
  20. package/dist/_internal/github-expressions.d.ts +9 -0
  21. package/dist/_internal/github-expressions.d.ts.map +1 -0
  22. package/dist/_internal/github-expressions.js +87 -0
  23. package/dist/_internal/github-expressions.js.map +1 -0
  24. package/dist/_internal/lint-targets.d.ts +21 -0
  25. package/dist/_internal/lint-targets.d.ts.map +1 -0
  26. package/dist/_internal/lint-targets.js +60 -0
  27. package/dist/_internal/lint-targets.js.map +1 -0
  28. package/dist/_internal/rule-docs.d.ts +16 -0
  29. package/dist/_internal/rule-docs.d.ts.map +1 -0
  30. package/dist/_internal/rule-docs.js +2 -0
  31. package/dist/_internal/rule-docs.js.map +1 -0
  32. package/dist/_internal/rules-registry.d.ts +145 -0
  33. package/dist/_internal/rules-registry.d.ts.map +1 -0
  34. package/dist/_internal/rules-registry.js +144 -0
  35. package/dist/_internal/rules-registry.js.map +1 -0
  36. package/dist/_internal/workflow-template-properties.d.ts +20 -0
  37. package/dist/_internal/workflow-template-properties.d.ts.map +1 -0
  38. package/dist/_internal/workflow-template-properties.js +44 -0
  39. package/dist/_internal/workflow-template-properties.js.map +1 -0
  40. package/dist/_internal/workflow-yaml.d.ts +47 -0
  41. package/dist/_internal/workflow-yaml.d.ts.map +1 -0
  42. package/dist/_internal/workflow-yaml.js +140 -0
  43. package/dist/_internal/workflow-yaml.js.map +1 -0
  44. package/dist/_internal/yaml-traversal.d.ts +10 -0
  45. package/dist/_internal/yaml-traversal.d.ts.map +1 -0
  46. package/dist/_internal/yaml-traversal.js +38 -0
  47. package/dist/_internal/yaml-traversal.js.map +1 -0
  48. package/dist/plugin.cjs +7107 -0
  49. package/dist/plugin.cjs.map +7 -0
  50. package/dist/plugin.d.cts +34 -0
  51. package/dist/plugin.d.ts +34 -0
  52. package/dist/plugin.d.ts.map +1 -0
  53. package/dist/plugin.js +122 -0
  54. package/dist/plugin.js.map +1 -0
  55. package/dist/rules/action-name-casing.d.ts +9 -0
  56. package/dist/rules/action-name-casing.d.ts.map +1 -0
  57. package/dist/rules/action-name-casing.js +141 -0
  58. package/dist/rules/action-name-casing.js.map +1 -0
  59. package/dist/rules/job-id-casing.d.ts +9 -0
  60. package/dist/rules/job-id-casing.d.ts.map +1 -0
  61. package/dist/rules/job-id-casing.js +123 -0
  62. package/dist/rules/job-id-casing.js.map +1 -0
  63. package/dist/rules/max-jobs-per-action.d.ts +9 -0
  64. package/dist/rules/max-jobs-per-action.d.ts.map +1 -0
  65. package/dist/rules/max-jobs-per-action.js +61 -0
  66. package/dist/rules/max-jobs-per-action.js.map +1 -0
  67. package/dist/rules/no-case-insensitive-input-id-collision.d.ts +9 -0
  68. package/dist/rules/no-case-insensitive-input-id-collision.d.ts.map +1 -0
  69. package/dist/rules/no-case-insensitive-input-id-collision.js +66 -0
  70. package/dist/rules/no-case-insensitive-input-id-collision.js.map +1 -0
  71. package/dist/rules/no-composite-input-env-access.d.ts +9 -0
  72. package/dist/rules/no-composite-input-env-access.d.ts.map +1 -0
  73. package/dist/rules/no-composite-input-env-access.js +62 -0
  74. package/dist/rules/no-composite-input-env-access.js.map +1 -0
  75. package/dist/rules/no-deprecated-node-runtime.d.ts +9 -0
  76. package/dist/rules/no-deprecated-node-runtime.d.ts.map +1 -0
  77. package/dist/rules/no-deprecated-node-runtime.js +59 -0
  78. package/dist/rules/no-deprecated-node-runtime.js.map +1 -0
  79. package/dist/rules/no-duplicate-composite-step-id.d.ts +9 -0
  80. package/dist/rules/no-duplicate-composite-step-id.d.ts.map +1 -0
  81. package/dist/rules/no-duplicate-composite-step-id.js +74 -0
  82. package/dist/rules/no-duplicate-composite-step-id.js.map +1 -0
  83. package/dist/rules/no-empty-template-file-pattern.d.ts +9 -0
  84. package/dist/rules/no-empty-template-file-pattern.d.ts.map +1 -0
  85. package/dist/rules/no-empty-template-file-pattern.js +49 -0
  86. package/dist/rules/no-empty-template-file-pattern.js.map +1 -0
  87. package/dist/rules/no-external-job.d.ts +9 -0
  88. package/dist/rules/no-external-job.d.ts.map +1 -0
  89. package/dist/rules/no-external-job.js +49 -0
  90. package/dist/rules/no-external-job.js.map +1 -0
  91. package/dist/rules/no-hardcoded-default-branch-in-template.d.ts +9 -0
  92. package/dist/rules/no-hardcoded-default-branch-in-template.d.ts.map +1 -0
  93. package/dist/rules/no-hardcoded-default-branch-in-template.js +54 -0
  94. package/dist/rules/no-hardcoded-default-branch-in-template.js.map +1 -0
  95. package/dist/rules/no-icon-file-extension-in-template-icon-name.d.ts +9 -0
  96. package/dist/rules/no-icon-file-extension-in-template-icon-name.d.ts.map +1 -0
  97. package/dist/rules/no-icon-file-extension-in-template-icon-name.js +54 -0
  98. package/dist/rules/no-icon-file-extension-in-template-icon-name.js.map +1 -0
  99. package/dist/rules/no-inherit-secrets.d.ts +9 -0
  100. package/dist/rules/no-inherit-secrets.d.ts.map +1 -0
  101. package/dist/rules/no-inherit-secrets.js +57 -0
  102. package/dist/rules/no-inherit-secrets.js.map +1 -0
  103. package/dist/rules/no-invalid-concurrency-context.d.ts +9 -0
  104. package/dist/rules/no-invalid-concurrency-context.d.ts.map +1 -0
  105. package/dist/rules/no-invalid-concurrency-context.js +141 -0
  106. package/dist/rules/no-invalid-concurrency-context.js.map +1 -0
  107. package/dist/rules/no-invalid-key.d.ts +9 -0
  108. package/dist/rules/no-invalid-key.d.ts.map +1 -0
  109. package/dist/rules/no-invalid-key.js +152 -0
  110. package/dist/rules/no-invalid-key.js.map +1 -0
  111. package/dist/rules/no-invalid-reusable-workflow-job-key.d.ts +9 -0
  112. package/dist/rules/no-invalid-reusable-workflow-job-key.d.ts.map +1 -0
  113. package/dist/rules/no-invalid-reusable-workflow-job-key.js +73 -0
  114. package/dist/rules/no-invalid-reusable-workflow-job-key.js.map +1 -0
  115. package/dist/rules/no-invalid-template-file-pattern-regex.d.ts +9 -0
  116. package/dist/rules/no-invalid-template-file-pattern-regex.d.ts.map +1 -0
  117. package/dist/rules/no-invalid-template-file-pattern-regex.js +58 -0
  118. package/dist/rules/no-invalid-template-file-pattern-regex.js.map +1 -0
  119. package/dist/rules/no-invalid-workflow-call-output-value.d.ts +9 -0
  120. package/dist/rules/no-invalid-workflow-call-output-value.d.ts.map +1 -0
  121. package/dist/rules/no-invalid-workflow-call-output-value.js +99 -0
  122. package/dist/rules/no-invalid-workflow-call-output-value.js.map +1 -0
  123. package/dist/rules/no-path-separators-in-template-icon-name.d.ts +9 -0
  124. package/dist/rules/no-path-separators-in-template-icon-name.d.ts.map +1 -0
  125. package/dist/rules/no-path-separators-in-template-icon-name.js +52 -0
  126. package/dist/rules/no-path-separators-in-template-icon-name.js.map +1 -0
  127. package/dist/rules/no-post-if-without-post.d.ts +9 -0
  128. package/dist/rules/no-post-if-without-post.d.ts.map +1 -0
  129. package/dist/rules/no-post-if-without-post.js +52 -0
  130. package/dist/rules/no-post-if-without-post.js.map +1 -0
  131. package/dist/rules/no-pr-head-checkout-in-pull-request-target.d.ts +12 -0
  132. package/dist/rules/no-pr-head-checkout-in-pull-request-target.d.ts.map +1 -0
  133. package/dist/rules/no-pr-head-checkout-in-pull-request-target.js +89 -0
  134. package/dist/rules/no-pr-head-checkout-in-pull-request-target.js.map +1 -0
  135. package/dist/rules/no-pre-if-without-pre.d.ts +9 -0
  136. package/dist/rules/no-pre-if-without-pre.d.ts.map +1 -0
  137. package/dist/rules/no-pre-if-without-pre.js +51 -0
  138. package/dist/rules/no-pre-if-without-pre.js.map +1 -0
  139. package/dist/rules/no-required-input-with-default.d.ts +9 -0
  140. package/dist/rules/no-required-input-with-default.d.ts.map +1 -0
  141. package/dist/rules/no-required-input-with-default.js +68 -0
  142. package/dist/rules/no-required-input-with-default.js.map +1 -0
  143. package/dist/rules/no-secrets-in-if.d.ts +9 -0
  144. package/dist/rules/no-secrets-in-if.d.ts.map +1 -0
  145. package/dist/rules/no-secrets-in-if.js +84 -0
  146. package/dist/rules/no-secrets-in-if.js.map +1 -0
  147. package/dist/rules/no-self-hosted-runner-on-fork-pr-events.d.ts +9 -0
  148. package/dist/rules/no-self-hosted-runner-on-fork-pr-events.d.ts.map +1 -0
  149. package/dist/rules/no-self-hosted-runner-on-fork-pr-events.js +93 -0
  150. package/dist/rules/no-self-hosted-runner-on-fork-pr-events.js.map +1 -0
  151. package/dist/rules/no-subdirectory-template-file-pattern.d.ts +9 -0
  152. package/dist/rules/no-subdirectory-template-file-pattern.d.ts.map +1 -0
  153. package/dist/rules/no-subdirectory-template-file-pattern.js +52 -0
  154. package/dist/rules/no-subdirectory-template-file-pattern.js.map +1 -0
  155. package/dist/rules/no-template-placeholder-in-non-template-workflow.d.ts +9 -0
  156. package/dist/rules/no-template-placeholder-in-non-template-workflow.d.ts.map +1 -0
  157. package/dist/rules/no-template-placeholder-in-non-template-workflow.js +55 -0
  158. package/dist/rules/no-template-placeholder-in-non-template-workflow.js.map +1 -0
  159. package/dist/rules/no-top-level-env.d.ts +9 -0
  160. package/dist/rules/no-top-level-env.d.ts.map +1 -0
  161. package/dist/rules/no-top-level-env.js +42 -0
  162. package/dist/rules/no-top-level-env.js.map +1 -0
  163. package/dist/rules/no-top-level-permissions.d.ts +9 -0
  164. package/dist/rules/no-top-level-permissions.d.ts.map +1 -0
  165. package/dist/rules/no-top-level-permissions.js +39 -0
  166. package/dist/rules/no-top-level-permissions.js.map +1 -0
  167. package/dist/rules/no-universal-template-file-pattern.d.ts +9 -0
  168. package/dist/rules/no-universal-template-file-pattern.d.ts.map +1 -0
  169. package/dist/rules/no-universal-template-file-pattern.js +60 -0
  170. package/dist/rules/no-universal-template-file-pattern.js.map +1 -0
  171. package/dist/rules/no-unknown-input-reference-in-composite.d.ts +9 -0
  172. package/dist/rules/no-unknown-input-reference-in-composite.d.ts.map +1 -0
  173. package/dist/rules/no-unknown-input-reference-in-composite.js +80 -0
  174. package/dist/rules/no-unknown-input-reference-in-composite.js.map +1 -0
  175. package/dist/rules/no-unknown-job-output-reference.d.ts +9 -0
  176. package/dist/rules/no-unknown-job-output-reference.d.ts.map +1 -0
  177. package/dist/rules/no-unknown-job-output-reference.js +229 -0
  178. package/dist/rules/no-unknown-job-output-reference.js.map +1 -0
  179. package/dist/rules/no-unknown-step-reference.d.ts +9 -0
  180. package/dist/rules/no-unknown-step-reference.d.ts.map +1 -0
  181. package/dist/rules/no-unknown-step-reference.js +133 -0
  182. package/dist/rules/no-unknown-step-reference.js.map +1 -0
  183. package/dist/rules/no-untrusted-input-in-run.d.ts +9 -0
  184. package/dist/rules/no-untrusted-input-in-run.d.ts.map +1 -0
  185. package/dist/rules/no-untrusted-input-in-run.js +115 -0
  186. package/dist/rules/no-untrusted-input-in-run.js.map +1 -0
  187. package/dist/rules/no-unused-input-in-composite.d.ts +9 -0
  188. package/dist/rules/no-unused-input-in-composite.d.ts.map +1 -0
  189. package/dist/rules/no-unused-input-in-composite.js +78 -0
  190. package/dist/rules/no-unused-input-in-composite.js.map +1 -0
  191. package/dist/rules/no-write-all-permissions.d.ts +9 -0
  192. package/dist/rules/no-write-all-permissions.d.ts.map +1 -0
  193. package/dist/rules/no-write-all-permissions.js +61 -0
  194. package/dist/rules/no-write-all-permissions.js.map +1 -0
  195. package/dist/rules/pin-action-shas.d.ts +12 -0
  196. package/dist/rules/pin-action-shas.d.ts.map +1 -0
  197. package/dist/rules/pin-action-shas.js +100 -0
  198. package/dist/rules/pin-action-shas.js.map +1 -0
  199. package/dist/rules/prefer-action-yml.d.ts +9 -0
  200. package/dist/rules/prefer-action-yml.d.ts.map +1 -0
  201. package/dist/rules/prefer-action-yml.js +37 -0
  202. package/dist/rules/prefer-action-yml.js.map +1 -0
  203. package/dist/rules/prefer-fail-fast.d.ts +9 -0
  204. package/dist/rules/prefer-fail-fast.d.ts.map +1 -0
  205. package/dist/rules/prefer-fail-fast.js +61 -0
  206. package/dist/rules/prefer-fail-fast.js.map +1 -0
  207. package/dist/rules/prefer-file-extension.d.ts +9 -0
  208. package/dist/rules/prefer-file-extension.d.ts.map +1 -0
  209. package/dist/rules/prefer-file-extension.js +104 -0
  210. package/dist/rules/prefer-file-extension.js.map +1 -0
  211. package/dist/rules/prefer-inputs-context.d.ts +9 -0
  212. package/dist/rules/prefer-inputs-context.d.ts.map +1 -0
  213. package/dist/rules/prefer-inputs-context.js +91 -0
  214. package/dist/rules/prefer-inputs-context.js.map +1 -0
  215. package/dist/rules/prefer-step-uses-style.d.ts +9 -0
  216. package/dist/rules/prefer-step-uses-style.d.ts.map +1 -0
  217. package/dist/rules/prefer-step-uses-style.js +209 -0
  218. package/dist/rules/prefer-step-uses-style.js.map +1 -0
  219. package/dist/rules/prefer-template-yml-extension.d.ts +9 -0
  220. package/dist/rules/prefer-template-yml-extension.d.ts.map +1 -0
  221. package/dist/rules/prefer-template-yml-extension.js +41 -0
  222. package/dist/rules/prefer-template-yml-extension.js.map +1 -0
  223. package/dist/rules/require-action-name.d.ts +9 -0
  224. package/dist/rules/require-action-name.d.ts.map +1 -0
  225. package/dist/rules/require-action-name.js +57 -0
  226. package/dist/rules/require-action-name.js.map +1 -0
  227. package/dist/rules/require-action-run-name.d.ts +9 -0
  228. package/dist/rules/require-action-run-name.d.ts.map +1 -0
  229. package/dist/rules/require-action-run-name.js +56 -0
  230. package/dist/rules/require-action-run-name.js.map +1 -0
  231. package/dist/rules/require-checkout-before-local-action.d.ts +9 -0
  232. package/dist/rules/require-checkout-before-local-action.d.ts.map +1 -0
  233. package/dist/rules/require-checkout-before-local-action.js +74 -0
  234. package/dist/rules/require-checkout-before-local-action.js.map +1 -0
  235. package/dist/rules/require-composite-step-name.d.ts +9 -0
  236. package/dist/rules/require-composite-step-name.d.ts.map +1 -0
  237. package/dist/rules/require-composite-step-name.js +67 -0
  238. package/dist/rules/require-composite-step-name.js.map +1 -0
  239. package/dist/rules/require-job-name.d.ts +9 -0
  240. package/dist/rules/require-job-name.d.ts.map +1 -0
  241. package/dist/rules/require-job-name.js +70 -0
  242. package/dist/rules/require-job-name.js.map +1 -0
  243. package/dist/rules/require-job-step-name.d.ts +9 -0
  244. package/dist/rules/require-job-step-name.d.ts.map +1 -0
  245. package/dist/rules/require-job-step-name.js +71 -0
  246. package/dist/rules/require-job-step-name.js.map +1 -0
  247. package/dist/rules/require-job-timeout-minutes.d.ts +9 -0
  248. package/dist/rules/require-job-timeout-minutes.d.ts.map +1 -0
  249. package/dist/rules/require-job-timeout-minutes.js +99 -0
  250. package/dist/rules/require-job-timeout-minutes.js.map +1 -0
  251. package/dist/rules/require-merge-group-trigger.d.ts +9 -0
  252. package/dist/rules/require-merge-group-trigger.d.ts.map +1 -0
  253. package/dist/rules/require-merge-group-trigger.js +65 -0
  254. package/dist/rules/require-merge-group-trigger.js.map +1 -0
  255. package/dist/rules/require-pull-request-target-branches.d.ts +9 -0
  256. package/dist/rules/require-pull-request-target-branches.d.ts.map +1 -0
  257. package/dist/rules/require-pull-request-target-branches.js +102 -0
  258. package/dist/rules/require-pull-request-target-branches.js.map +1 -0
  259. package/dist/rules/require-run-step-shell.d.ts +9 -0
  260. package/dist/rules/require-run-step-shell.d.ts.map +1 -0
  261. package/dist/rules/require-run-step-shell.js +114 -0
  262. package/dist/rules/require-run-step-shell.js.map +1 -0
  263. package/dist/rules/require-template-categories.d.ts +9 -0
  264. package/dist/rules/require-template-categories.d.ts.map +1 -0
  265. package/dist/rules/require-template-categories.js +55 -0
  266. package/dist/rules/require-template-categories.js.map +1 -0
  267. package/dist/rules/require-template-file-patterns.d.ts +9 -0
  268. package/dist/rules/require-template-file-patterns.d.ts.map +1 -0
  269. package/dist/rules/require-template-file-patterns.js +55 -0
  270. package/dist/rules/require-template-file-patterns.js.map +1 -0
  271. package/dist/rules/require-template-icon-file-exists.d.ts +9 -0
  272. package/dist/rules/require-template-icon-file-exists.d.ts.map +1 -0
  273. package/dist/rules/require-template-icon-file-exists.js +61 -0
  274. package/dist/rules/require-template-icon-file-exists.js.map +1 -0
  275. package/dist/rules/require-template-icon-name.d.ts +9 -0
  276. package/dist/rules/require-template-icon-name.d.ts.map +1 -0
  277. package/dist/rules/require-template-icon-name.js +48 -0
  278. package/dist/rules/require-template-icon-name.js.map +1 -0
  279. package/dist/rules/require-template-workflow-name.d.ts +9 -0
  280. package/dist/rules/require-template-workflow-name.d.ts.map +1 -0
  281. package/dist/rules/require-template-workflow-name.js +48 -0
  282. package/dist/rules/require-template-workflow-name.js.map +1 -0
  283. package/dist/rules/require-trigger-types.d.ts +9 -0
  284. package/dist/rules/require-trigger-types.d.ts.map +1 -0
  285. package/dist/rules/require-trigger-types.js +126 -0
  286. package/dist/rules/require-trigger-types.js.map +1 -0
  287. package/dist/rules/require-workflow-call-input-type.d.ts +9 -0
  288. package/dist/rules/require-workflow-call-input-type.d.ts.map +1 -0
  289. package/dist/rules/require-workflow-call-input-type.js +89 -0
  290. package/dist/rules/require-workflow-call-input-type.js.map +1 -0
  291. package/dist/rules/require-workflow-call-output-value.d.ts +9 -0
  292. package/dist/rules/require-workflow-call-output-value.d.ts.map +1 -0
  293. package/dist/rules/require-workflow-call-output-value.js +79 -0
  294. package/dist/rules/require-workflow-call-output-value.js.map +1 -0
  295. package/dist/rules/require-workflow-concurrency.d.ts +9 -0
  296. package/dist/rules/require-workflow-concurrency.d.ts.map +1 -0
  297. package/dist/rules/require-workflow-concurrency.js +157 -0
  298. package/dist/rules/require-workflow-concurrency.js.map +1 -0
  299. package/dist/rules/require-workflow-dispatch-input-type.d.ts +9 -0
  300. package/dist/rules/require-workflow-dispatch-input-type.d.ts.map +1 -0
  301. package/dist/rules/require-workflow-dispatch-input-type.js +80 -0
  302. package/dist/rules/require-workflow-dispatch-input-type.js.map +1 -0
  303. package/dist/rules/require-workflow-interface-description.d.ts +9 -0
  304. package/dist/rules/require-workflow-interface-description.d.ts.map +1 -0
  305. package/dist/rules/require-workflow-interface-description.js +98 -0
  306. package/dist/rules/require-workflow-interface-description.js.map +1 -0
  307. package/dist/rules/require-workflow-permissions.d.ts +9 -0
  308. package/dist/rules/require-workflow-permissions.d.ts.map +1 -0
  309. package/dist/rules/require-workflow-permissions.js +83 -0
  310. package/dist/rules/require-workflow-permissions.js.map +1 -0
  311. package/dist/rules/require-workflow-run-branches.d.ts +9 -0
  312. package/dist/rules/require-workflow-run-branches.d.ts.map +1 -0
  313. package/dist/rules/require-workflow-run-branches.js +84 -0
  314. package/dist/rules/require-workflow-run-branches.js.map +1 -0
  315. package/dist/rules/require-workflow-template-pair.d.ts +9 -0
  316. package/dist/rules/require-workflow-template-pair.d.ts.map +1 -0
  317. package/dist/rules/require-workflow-template-pair.js +47 -0
  318. package/dist/rules/require-workflow-template-pair.js.map +1 -0
  319. package/dist/rules/require-workflow-template-properties-pair.d.ts +9 -0
  320. package/dist/rules/require-workflow-template-properties-pair.d.ts.map +1 -0
  321. package/dist/rules/require-workflow-template-properties-pair.js +49 -0
  322. package/dist/rules/require-workflow-template-properties-pair.js.map +1 -0
  323. package/dist/rules/valid-timeout-minutes.d.ts +9 -0
  324. package/dist/rules/valid-timeout-minutes.d.ts.map +1 -0
  325. package/dist/rules/valid-timeout-minutes.js +255 -0
  326. package/dist/rules/valid-timeout-minutes.js.map +1 -0
  327. package/dist/rules/valid-trigger-events.d.ts +9 -0
  328. package/dist/rules/valid-trigger-events.d.ts.map +1 -0
  329. package/dist/rules/valid-trigger-events.js +100 -0
  330. package/dist/rules/valid-trigger-events.js.map +1 -0
  331. package/docs/rules/action-name-casing.md +64 -0
  332. package/docs/rules/getting-started.md +46 -0
  333. package/docs/rules/job-id-casing.md +73 -0
  334. package/docs/rules/max-jobs-per-action.md +79 -0
  335. package/docs/rules/no-case-insensitive-input-id-collision.md +63 -0
  336. package/docs/rules/no-composite-input-env-access.md +66 -0
  337. package/docs/rules/no-deprecated-node-runtime.md +61 -0
  338. package/docs/rules/no-duplicate-composite-step-id.md +73 -0
  339. package/docs/rules/no-empty-template-file-pattern.md +57 -0
  340. package/docs/rules/no-external-job.md +66 -0
  341. package/docs/rules/no-hardcoded-default-branch-in-template.md +63 -0
  342. package/docs/rules/no-icon-file-extension-in-template-icon-name.md +57 -0
  343. package/docs/rules/no-inherit-secrets.md +65 -0
  344. package/docs/rules/no-invalid-concurrency-context.md +101 -0
  345. package/docs/rules/no-invalid-key.md +86 -0
  346. package/docs/rules/no-invalid-reusable-workflow-job-key.md +74 -0
  347. package/docs/rules/no-invalid-template-file-pattern-regex.md +57 -0
  348. package/docs/rules/no-invalid-workflow-call-output-value.md +80 -0
  349. package/docs/rules/no-path-separators-in-template-icon-name.md +57 -0
  350. package/docs/rules/no-post-if-without-post.md +64 -0
  351. package/docs/rules/no-pr-head-checkout-in-pull-request-target.md +83 -0
  352. package/docs/rules/no-pre-if-without-pre.md +64 -0
  353. package/docs/rules/no-required-input-with-default.md +64 -0
  354. package/docs/rules/no-secrets-in-if.md +70 -0
  355. package/docs/rules/no-self-hosted-runner-on-fork-pr-events.md +75 -0
  356. package/docs/rules/no-subdirectory-template-file-pattern.md +57 -0
  357. package/docs/rules/no-template-placeholder-in-non-template-workflow.md +63 -0
  358. package/docs/rules/no-top-level-env.md +64 -0
  359. package/docs/rules/no-top-level-permissions.md +64 -0
  360. package/docs/rules/no-universal-template-file-pattern.md +57 -0
  361. package/docs/rules/no-unknown-input-reference-in-composite.md +71 -0
  362. package/docs/rules/no-unknown-job-output-reference.md +88 -0
  363. package/docs/rules/no-unknown-step-reference.md +73 -0
  364. package/docs/rules/no-untrusted-input-in-run.md +74 -0
  365. package/docs/rules/no-unused-input-in-composite.md +71 -0
  366. package/docs/rules/no-write-all-permissions.md +60 -0
  367. package/docs/rules/overview.md +91 -0
  368. package/docs/rules/pin-action-shas.md +65 -0
  369. package/docs/rules/prefer-action-yml.md +57 -0
  370. package/docs/rules/prefer-fail-fast.md +72 -0
  371. package/docs/rules/prefer-file-extension.md +77 -0
  372. package/docs/rules/prefer-inputs-context.md +84 -0
  373. package/docs/rules/prefer-step-uses-style.md +70 -0
  374. package/docs/rules/prefer-template-yml-extension.md +57 -0
  375. package/docs/rules/presets/action-metadata.md +18 -0
  376. package/docs/rules/presets/all.md +76 -0
  377. package/docs/rules/presets/index.md +100 -0
  378. package/docs/rules/presets/recommended.md +26 -0
  379. package/docs/rules/presets/security.md +16 -0
  380. package/docs/rules/presets/strict.md +48 -0
  381. package/docs/rules/presets/workflow-template-properties.md +18 -0
  382. package/docs/rules/presets/workflow-templates.md +22 -0
  383. package/docs/rules/require-action-name.md +61 -0
  384. package/docs/rules/require-action-run-name.md +63 -0
  385. package/docs/rules/require-checkout-before-local-action.md +66 -0
  386. package/docs/rules/require-composite-step-name.md +66 -0
  387. package/docs/rules/require-job-name.md +63 -0
  388. package/docs/rules/require-job-step-name.md +69 -0
  389. package/docs/rules/require-job-timeout-minutes.md +76 -0
  390. package/docs/rules/require-merge-group-trigger.md +67 -0
  391. package/docs/rules/require-pull-request-target-branches.md +79 -0
  392. package/docs/rules/require-run-step-shell.md +85 -0
  393. package/docs/rules/require-template-categories.md +62 -0
  394. package/docs/rules/require-template-file-patterns.md +63 -0
  395. package/docs/rules/require-template-icon-file-exists.md +61 -0
  396. package/docs/rules/require-template-icon-name.md +57 -0
  397. package/docs/rules/require-template-workflow-name.md +60 -0
  398. package/docs/rules/require-trigger-types.md +76 -0
  399. package/docs/rules/require-workflow-call-input-type.md +70 -0
  400. package/docs/rules/require-workflow-call-output-value.md +67 -0
  401. package/docs/rules/require-workflow-concurrency.md +73 -0
  402. package/docs/rules/require-workflow-dispatch-input-type.md +70 -0
  403. package/docs/rules/require-workflow-interface-description.md +96 -0
  404. package/docs/rules/require-workflow-permissions.md +75 -0
  405. package/docs/rules/require-workflow-run-branches.md +66 -0
  406. package/docs/rules/require-workflow-template-pair.md +58 -0
  407. package/docs/rules/require-workflow-template-properties-pair.md +58 -0
  408. package/docs/rules/valid-timeout-minutes.md +74 -0
  409. package/docs/rules/valid-trigger-events.md +62 -0
  410. package/package.json +497 -0
@@ -0,0 +1,197 @@
1
+ /**
2
+ * @packageDocumentation
3
+ * Shared casing helpers for naming-oriented GitHub Actions rules.
4
+ */
5
+ import { casePoliceDictionary } from "./case-police-dictionary.js";
6
+ /** Supported naming conventions used by workflow naming rules. */
7
+ export const githubActionsCasingKinds = [
8
+ "camelCase",
9
+ "kebab-case",
10
+ "PascalCase",
11
+ "snake_case",
12
+ "Title Case",
13
+ "Train-Case",
14
+ "SCREAMING_SNAKE_CASE",
15
+ ];
16
+ /** Casing variants that exclude title-cased words with spaces. */
17
+ export const githubActionsNonTitleCasingKinds = [
18
+ "camelCase",
19
+ "kebab-case",
20
+ "PascalCase",
21
+ "snake_case",
22
+ "Train-Case",
23
+ "SCREAMING_SNAKE_CASE",
24
+ ];
25
+ /** Determine whether a character is an ASCII letter or digit. */
26
+ const isAlphaNumericCharacter = (character) => {
27
+ const codePoint = character.codePointAt(0) ?? -1;
28
+ return ((codePoint >= 48 && codePoint <= 57) ||
29
+ (codePoint >= 65 && codePoint <= 90) ||
30
+ (codePoint >= 97 && codePoint <= 122));
31
+ };
32
+ /** Determine whether a character is an ASCII uppercase letter. */
33
+ const isUppercaseCharacter = (character) => {
34
+ const codePoint = character.codePointAt(0) ?? -1;
35
+ return codePoint >= 65 && codePoint <= 90;
36
+ };
37
+ /** Determine whether a character is an ASCII lowercase letter. */
38
+ const isLowercaseCharacter = (character) => {
39
+ const codePoint = character.codePointAt(0) ?? -1;
40
+ return codePoint >= 97 && codePoint <= 122;
41
+ };
42
+ /** Normalize a free-form identifier or label into lowercase word tokens. */
43
+ const splitIntoWords = (value) => {
44
+ const words = [];
45
+ let currentWord = "";
46
+ for (let index = 0; index < value.length; index += 1) {
47
+ const character = value[index];
48
+ if (character === undefined) {
49
+ continue;
50
+ }
51
+ if (!isAlphaNumericCharacter(character)) {
52
+ if (currentWord.length > 0) {
53
+ words.push(currentWord.toLowerCase());
54
+ currentWord = "";
55
+ }
56
+ continue;
57
+ }
58
+ const previousCharacter = index > 0 ? value[index - 1] : undefined;
59
+ const nextCharacter = index + 1 < value.length ? value[index + 1] : undefined;
60
+ const startsNewWord = currentWord.length > 0 &&
61
+ previousCharacter !== undefined &&
62
+ ((isLowercaseCharacter(previousCharacter) &&
63
+ isUppercaseCharacter(character)) ||
64
+ (isUppercaseCharacter(previousCharacter) &&
65
+ isUppercaseCharacter(character) &&
66
+ nextCharacter !== undefined &&
67
+ isLowercaseCharacter(nextCharacter)));
68
+ if (startsNewWord) {
69
+ words.push(currentWord.toLowerCase());
70
+ currentWord = character;
71
+ continue;
72
+ }
73
+ currentWord += character;
74
+ }
75
+ if (currentWord.length > 0) {
76
+ words.push(currentWord.toLowerCase());
77
+ }
78
+ return words;
79
+ };
80
+ /** Uppercase the first character of a normalized word token. */
81
+ const capitalizeWord = (word) => word.length === 0
82
+ ? word
83
+ : `${word[0]?.toUpperCase() ?? ""}${word.slice(1)}`;
84
+ /** Index case-police entries by collapsed key and track longest token span. */
85
+ const buildCasePoliceDictionaryIndex = () => {
86
+ const matchesByCollapsedKey = new Map();
87
+ let maxTokenSpan = 1;
88
+ for (const [dictionaryKey, canonical] of Object.entries(casePoliceDictionary)) {
89
+ const keyWords = splitIntoWords(dictionaryKey);
90
+ if (keyWords.length === 0) {
91
+ continue;
92
+ }
93
+ const tokenCount = keyWords.length;
94
+ const collapsedKey = keyWords.join("");
95
+ const existingMatches = matchesByCollapsedKey.get(collapsedKey) ?? [];
96
+ const isDuplicateMatch = existingMatches.some((existingMatch) => existingMatch.canonical === canonical &&
97
+ existingMatch.tokenCount === tokenCount);
98
+ if (!isDuplicateMatch) {
99
+ existingMatches.push({
100
+ canonical,
101
+ tokenCount,
102
+ });
103
+ matchesByCollapsedKey.set(collapsedKey, existingMatches);
104
+ }
105
+ if (tokenCount > maxTokenSpan) {
106
+ maxTokenSpan = tokenCount;
107
+ }
108
+ }
109
+ return {
110
+ matchesByCollapsedKey,
111
+ maxTokenSpan,
112
+ };
113
+ };
114
+ /** Precomputed case-police dictionary index used by Title/Train conversions. */
115
+ const casePoliceDictionaryIndex = buildCasePoliceDictionaryIndex();
116
+ /**
117
+ * Resolve normalized words into title-style segments using the case-police
118
+ * dictionary. Falls back to naive capitalization for unknown tokens.
119
+ */
120
+ const resolveCasePoliceTitleSegments = (words) => {
121
+ const segments = [];
122
+ for (let index = 0; index < words.length;) {
123
+ const remainingWordCount = words.length - index;
124
+ const maxSpan = Math.min(casePoliceDictionaryIndex.maxTokenSpan, remainingWordCount);
125
+ let matched = false;
126
+ for (let span = maxSpan; span >= 1; span -= 1) {
127
+ const collapsedCandidate = words
128
+ .slice(index, index + span)
129
+ .join("");
130
+ const candidateMatches = casePoliceDictionaryIndex.matchesByCollapsedKey.get(collapsedCandidate);
131
+ if (candidateMatches === undefined) {
132
+ continue;
133
+ }
134
+ const exactTokenCountMatch = candidateMatches.find((candidateMatch) => candidateMatch.tokenCount === span);
135
+ const selectedMatch = exactTokenCountMatch ?? candidateMatches[0];
136
+ if (selectedMatch === undefined) {
137
+ continue;
138
+ }
139
+ segments.push(selectedMatch.canonical);
140
+ index += span;
141
+ matched = true;
142
+ break;
143
+ }
144
+ if (matched) {
145
+ continue;
146
+ }
147
+ const currentWord = words[index];
148
+ if (currentWord === undefined) {
149
+ index += 1;
150
+ continue;
151
+ }
152
+ segments.push(capitalizeWord(currentWord));
153
+ index += 1;
154
+ }
155
+ return segments;
156
+ };
157
+ /** Convert a value into the exact requested casing convention. */
158
+ export const convertToGithubActionsCasing = (value, casingKind) => {
159
+ const words = splitIntoWords(value);
160
+ const titleSegments = resolveCasePoliceTitleSegments(words);
161
+ if (words.length === 0) {
162
+ return value;
163
+ }
164
+ switch (casingKind) {
165
+ case "camelCase": {
166
+ const [firstWord = "", ...remainingWords] = words;
167
+ return `${firstWord}${remainingWords.map((word) => capitalizeWord(word)).join("")}`;
168
+ }
169
+ case "kebab-case": {
170
+ return words.join("-");
171
+ }
172
+ case "PascalCase": {
173
+ return words.map((word) => capitalizeWord(word)).join("");
174
+ }
175
+ case "SCREAMING_SNAKE_CASE": {
176
+ return words.map((word) => word.toUpperCase()).join("_");
177
+ }
178
+ case "snake_case": {
179
+ return words.join("_");
180
+ }
181
+ case "Title Case": {
182
+ return titleSegments.join(" ");
183
+ }
184
+ case "Train-Case": {
185
+ return titleSegments
186
+ .flatMap((segment) => segment.split(/\s+/u))
187
+ .filter((segment) => segment.length > 0)
188
+ .join("-");
189
+ }
190
+ default: {
191
+ return value;
192
+ }
193
+ }
194
+ };
195
+ /** Determine whether a value already satisfies a requested casing convention. */
196
+ export const matchesGithubActionsCasing = (value, casingKind) => convertToGithubActionsCasing(value, casingKind) === value;
197
+ //# sourceMappingURL=casing.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"casing.js","sourceRoot":"","sources":["../../src/_internal/casing.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ /** Ordered preset names exposed through `plugin.configs`. */
2
+ export declare const githubActionsConfigNames: readonly ["actionMetadata", "workflowTemplateProperties", "workflowTemplates", "recommended", "security", "strict", "all"];
3
+ /** Supported flat-config preset names exported by the plugin. */
4
+ export type GithubActionsConfigName = (typeof githubActionsConfigNames)[number];
5
+ /** String references used in rule docs metadata and generated docs tables. */
6
+ export declare const githubActionsConfigReferenceToName: Readonly<Record<string, GithubActionsConfigName>>;
7
+ /** Valid config reference strings accepted in rule metadata. */
8
+ export type GithubActionsConfigReference = keyof typeof githubActionsConfigReferenceToName;
9
+ /** Display metadata for each preset used in README and docs surfaces. */
10
+ export declare const githubActionsConfigMetadataByName: Readonly<Record<GithubActionsConfigName, {
11
+ description: string;
12
+ files: readonly string[];
13
+ icon: string;
14
+ presetName: string;
15
+ }>>;
16
+ //# sourceMappingURL=github-actions-config-references.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"github-actions-config-references.d.ts","sourceRoot":"","sources":["../../src/_internal/github-actions-config-references.ts"],"names":[],"mappings":"AAWA,6DAA6D;AAC7D,eAAO,MAAM,wBAAwB,4HAQ3B,CAAC;AAEX,iEAAiE;AACjE,MAAM,MAAM,uBAAuB,GAAG,CAAC,OAAO,wBAAwB,CAAC,CAAC,MAAM,CAAC,CAAC;AAEhF,8EAA8E;AAC9E,eAAO,MAAM,kCAAkC,EAAE,QAAQ,CACrD,MAAM,CAAC,MAAM,EAAE,uBAAuB,CAAC,CAUiB,CAAC;AAE7D,gEAAgE;AAChE,MAAM,MAAM,4BAA4B,GACpC,MAAM,OAAO,kCAAkC,CAAC;AAEpD,yEAAyE;AACzE,eAAO,MAAM,iCAAiC,EAAE,QAAQ,CACpD,MAAM,CACF,uBAAuB,EACvB;IACI,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,SAAS,MAAM,EAAE,CAAC;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;CACtB,CACJ,CAuDK,CAAC"}
@@ -0,0 +1,76 @@
1
+ /**
2
+ * @packageDocumentation
3
+ * Canonical preset names and docs references used by eslint-plugin-github-actions-2.
4
+ */
5
+ import { ACTION_METADATA_FILE_GLOBS, WORKFLOW_TEMPLATE_FILE_GLOBS, WORKFLOW_TEMPLATE_PROPERTIES_FILE_GLOBS, } from "./lint-targets.js";
6
+ import { WORKFLOW_FILE_GLOBS } from "./workflow-yaml.js";
7
+ /** Ordered preset names exposed through `plugin.configs`. */
8
+ export const githubActionsConfigNames = [
9
+ "actionMetadata",
10
+ "workflowTemplateProperties",
11
+ "workflowTemplates",
12
+ "recommended",
13
+ "security",
14
+ "strict",
15
+ "all",
16
+ ];
17
+ /** String references used in rule docs metadata and generated docs tables. */
18
+ export const githubActionsConfigReferenceToName = {
19
+ "github-actions.configs.actionMetadata": "actionMetadata",
20
+ "github-actions.configs.all": "all",
21
+ "github-actions.configs.recommended": "recommended",
22
+ "github-actions.configs.security": "security",
23
+ "github-actions.configs.strict": "strict",
24
+ "github-actions.configs.workflowTemplateProperties": "workflowTemplateProperties",
25
+ "github-actions.configs.workflowTemplates": "workflowTemplates",
26
+ };
27
+ /** Display metadata for each preset used in README and docs surfaces. */
28
+ export const githubActionsConfigMetadataByName = {
29
+ actionMetadata: {
30
+ description: "Linting defaults for GitHub Action metadata files (`action.yml` / `action.yaml`).",
31
+ files: ACTION_METADATA_FILE_GLOBS,
32
+ icon: "🧩",
33
+ presetName: "github-actions:action-metadata",
34
+ },
35
+ all: {
36
+ description: "Enables every available GitHub Actions workflow rule published by this plugin.",
37
+ files: [
38
+ ...WORKFLOW_FILE_GLOBS,
39
+ ...ACTION_METADATA_FILE_GLOBS,
40
+ ...WORKFLOW_TEMPLATE_FILE_GLOBS,
41
+ ],
42
+ icon: "🟣",
43
+ presetName: "github-actions:all",
44
+ },
45
+ recommended: {
46
+ description: "Balanced defaults for most repositories authoring GitHub Actions workflows.",
47
+ files: WORKFLOW_FILE_GLOBS,
48
+ icon: "🟡",
49
+ presetName: "github-actions:recommended",
50
+ },
51
+ security: {
52
+ description: "Security-focused workflow hardening checks for action usage and token scope.",
53
+ files: WORKFLOW_FILE_GLOBS,
54
+ icon: "🛡️",
55
+ presetName: "github-actions:security",
56
+ },
57
+ strict: {
58
+ description: "Opinionated operational guardrails for mature workflow estates.",
59
+ files: WORKFLOW_FILE_GLOBS,
60
+ icon: "🔴",
61
+ presetName: "github-actions:strict",
62
+ },
63
+ workflowTemplateProperties: {
64
+ description: "Linting defaults for workflow-template metadata files (`*.properties.json`).",
65
+ files: WORKFLOW_TEMPLATE_PROPERTIES_FILE_GLOBS,
66
+ icon: "🗂️",
67
+ presetName: "github-actions:workflow-template-properties",
68
+ },
69
+ workflowTemplates: {
70
+ description: "Workflow template package linting for both template YAML and metadata files.",
71
+ files: WORKFLOW_TEMPLATE_FILE_GLOBS,
72
+ icon: "🧱",
73
+ presetName: "github-actions:workflow-templates",
74
+ },
75
+ };
76
+ //# sourceMappingURL=github-actions-config-references.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"github-actions-config-references.js","sourceRoot":"","sources":["../../src/_internal/github-actions-config-references.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,EACH,0BAA0B,EAC1B,4BAA4B,EAC5B,uCAAuC,GAC1C,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAEzD,6DAA6D;AAC7D,MAAM,CAAC,MAAM,wBAAwB,GAAG;IACpC,gBAAgB;IAChB,4BAA4B;IAC5B,mBAAmB;IACnB,aAAa;IACb,UAAU;IACV,QAAQ;IACR,KAAK;CACC,CAAC;AAKX,8EAA8E;AAC9E,MAAM,CAAC,MAAM,kCAAkC,GAE3C;IACA,uCAAuC,EAAE,gBAAgB;IACzD,4BAA4B,EAAE,KAAK;IACnC,oCAAoC,EAAE,aAAa;IACnD,iCAAiC,EAAE,UAAU;IAC7C,+BAA+B,EAAE,QAAQ;IACzC,mDAAmD,EAC/C,4BAA4B;IAChC,0CAA0C,EAAE,mBAAmB;CACP,CAAC;AAM7D,yEAAyE;AACzE,MAAM,CAAC,MAAM,iCAAiC,GAU1C;IACA,cAAc,EAAE;QACZ,WAAW,EACP,mFAAmF;QACvF,KAAK,EAAE,0BAA0B;QACjC,IAAI,EAAE,IAAI;QACV,UAAU,EAAE,gCAAgC;KAC/C;IACD,GAAG,EAAE;QACD,WAAW,EACP,gFAAgF;QACpF,KAAK,EAAE;YACH,GAAG,mBAAmB;YACtB,GAAG,0BAA0B;YAC7B,GAAG,4BAA4B;SAClC;QACD,IAAI,EAAE,IAAI;QACV,UAAU,EAAE,oBAAoB;KACnC;IACD,WAAW,EAAE;QACT,WAAW,EACP,6EAA6E;QACjF,KAAK,EAAE,mBAAmB;QAC1B,IAAI,EAAE,IAAI;QACV,UAAU,EAAE,4BAA4B;KAC3C;IACD,QAAQ,EAAE;QACN,WAAW,EACP,8EAA8E;QAClF,KAAK,EAAE,mBAAmB;QAC1B,IAAI,EAAE,KAAK;QACX,UAAU,EAAE,yBAAyB;KACxC;IACD,MAAM,EAAE;QACJ,WAAW,EACP,iEAAiE;QACrE,KAAK,EAAE,mBAAmB;QAC1B,IAAI,EAAE,IAAI;QACV,UAAU,EAAE,uBAAuB;KACtC;IACD,0BAA0B,EAAE;QACxB,WAAW,EACP,8EAA8E;QAClF,KAAK,EAAE,uCAAuC;QAC9C,IAAI,EAAE,KAAK;QACX,UAAU,EAAE,6CAA6C;KAC5D;IACD,iBAAiB,EAAE;QACf,WAAW,EACP,8EAA8E;QAClF,KAAK,EAAE,4BAA4B;QACnC,IAAI,EAAE,IAAI;QACV,UAAU,EAAE,mCAAmC;KAClD;CACK,CAAC"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * @packageDocumentation
3
+ * Current GitHub Actions workflow trigger events from the public docs.
4
+ */
5
+ /**
6
+ * Valid workflow trigger events documented by GitHub.
7
+ *
8
+ * @see https://docs.github.com/en/actions/reference/events-that-trigger-workflows
9
+ */
10
+ export declare const githubActionsTriggerEvents: readonly ["branch_protection_rule", "check_run", "check_suite", "create", "delete", "deployment", "deployment_status", "discussion", "discussion_comment", "fork", "gollum", "image_version", "issue_comment", "issues", "label", "merge_group", "milestone", "page_build", "public", "pull_request", "pull_request_review", "pull_request_review_comment", "pull_request_target", "push", "registry_package", "release", "repository_dispatch", "schedule", "status", "watch", "workflow_call", "workflow_dispatch", "workflow_run"];
11
+ /** Constant-time lookup set for validating trigger-event names. */
12
+ export declare const githubActionsTriggerEventSet: ReadonlySet<string>;
13
+ //# sourceMappingURL=github-actions-trigger-events.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"github-actions-trigger-events.d.ts","sourceRoot":"","sources":["../../src/_internal/github-actions-trigger-events.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;;;GAIG;AACH,eAAO,MAAM,0BAA0B,ugBAkC7B,CAAC;AAEX,mEAAmE;AACnE,eAAO,MAAM,4BAA4B,EAAE,WAAW,CAAC,MAAM,CAE5D,CAAC"}
@@ -0,0 +1,47 @@
1
+ /**
2
+ * @packageDocumentation
3
+ * Current GitHub Actions workflow trigger events from the public docs.
4
+ */
5
+ /**
6
+ * Valid workflow trigger events documented by GitHub.
7
+ *
8
+ * @see https://docs.github.com/en/actions/reference/events-that-trigger-workflows
9
+ */
10
+ export const githubActionsTriggerEvents = [
11
+ "branch_protection_rule",
12
+ "check_run",
13
+ "check_suite",
14
+ "create",
15
+ "delete",
16
+ "deployment",
17
+ "deployment_status",
18
+ "discussion",
19
+ "discussion_comment",
20
+ "fork",
21
+ "gollum",
22
+ "image_version",
23
+ "issue_comment",
24
+ "issues",
25
+ "label",
26
+ "merge_group",
27
+ "milestone",
28
+ "page_build",
29
+ "public",
30
+ "pull_request",
31
+ "pull_request_review",
32
+ "pull_request_review_comment",
33
+ "pull_request_target",
34
+ "push",
35
+ "registry_package",
36
+ "release",
37
+ "repository_dispatch",
38
+ "schedule",
39
+ "status",
40
+ "watch",
41
+ "workflow_call",
42
+ "workflow_dispatch",
43
+ "workflow_run",
44
+ ];
45
+ /** Constant-time lookup set for validating trigger-event names. */
46
+ export const githubActionsTriggerEventSet = new Set(githubActionsTriggerEvents);
47
+ //# sourceMappingURL=github-actions-trigger-events.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"github-actions-trigger-events.js","sourceRoot":"","sources":["../../src/_internal/github-actions-trigger-events.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;;;GAIG;AACH,MAAM,CAAC,MAAM,0BAA0B,GAAG;IACtC,wBAAwB;IACxB,WAAW;IACX,aAAa;IACb,QAAQ;IACR,QAAQ;IACR,YAAY;IACZ,mBAAmB;IACnB,YAAY;IACZ,oBAAoB;IACpB,MAAM;IACN,QAAQ;IACR,eAAe;IACf,eAAe;IACf,QAAQ;IACR,OAAO;IACP,aAAa;IACb,WAAW;IACX,YAAY;IACZ,QAAQ;IACR,cAAc;IACd,qBAAqB;IACrB,6BAA6B;IAC7B,qBAAqB;IACrB,MAAM;IACN,kBAAkB;IAClB,SAAS;IACT,qBAAqB;IACrB,UAAU;IACV,QAAQ;IACR,OAAO;IACP,eAAe;IACf,mBAAmB;IACnB,cAAc;CACR,CAAC;AAEX,mEAAmE;AACnE,MAAM,CAAC,MAAM,4BAA4B,GAAwB,IAAI,GAAG,CACpE,0BAA0B,CAC7B,CAAC"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * @packageDocumentation
3
+ * Shared helpers for extracting GitHub Actions `${{ ... }}` expressions.
4
+ */
5
+ /** Extract every embedded GitHub expression body from a scalar value. */
6
+ export declare const getGithubExpressionBodies: (value: string) => readonly string[];
7
+ /** Collect referenced root contexts from embedded GitHub expressions. */
8
+ export declare const getReferencedContextRoots: (value: string) => readonly string[];
9
+ //# sourceMappingURL=github-expressions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"github-expressions.d.ts","sourceRoot":"","sources":["../../src/_internal/github-expressions.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAoCH,yEAAyE;AACzE,eAAO,MAAM,yBAAyB,GAAI,OAAO,MAAM,KAAG,SAAS,MAAM,EA2BxE,CAAC;AAEF,yEAAyE;AACzE,eAAO,MAAM,yBAAyB,GAAI,OAAO,MAAM,KAAG,SAAS,MAAM,EA6CxE,CAAC"}
@@ -0,0 +1,87 @@
1
+ /**
2
+ * @packageDocumentation
3
+ * Shared helpers for extracting GitHub Actions `${{ ... }}` expressions.
4
+ */
5
+ /** Determine whether a character can begin a GitHub expression identifier. */
6
+ const isIdentifierStart = (character) => {
7
+ if (character === undefined) {
8
+ return false;
9
+ }
10
+ return /[A-Z_a-z]/u.test(character);
11
+ };
12
+ /** Determine whether a character can continue a GitHub expression identifier. */
13
+ const isIdentifierContinue = (character) => {
14
+ if (character === undefined) {
15
+ return false;
16
+ }
17
+ return /[\w-]/u.test(character);
18
+ };
19
+ /** Known root context names available in GitHub Actions expressions. */
20
+ const knownContextRoots = new Set([
21
+ "env",
22
+ "github",
23
+ "inputs",
24
+ "job",
25
+ "jobs",
26
+ "matrix",
27
+ "needs",
28
+ "runner",
29
+ "secrets",
30
+ "steps",
31
+ "strategy",
32
+ "vars",
33
+ ]);
34
+ /** Extract every embedded GitHub expression body from a scalar value. */
35
+ export const getGithubExpressionBodies = (value) => {
36
+ const expressions = [];
37
+ let searchStart = 0;
38
+ while (searchStart < value.length) {
39
+ const startOffset = value.indexOf("${{", searchStart);
40
+ if (startOffset === -1) {
41
+ break;
42
+ }
43
+ const endOffset = value.indexOf("}}", startOffset + 3);
44
+ if (endOffset === -1) {
45
+ break;
46
+ }
47
+ const expression = value.slice(startOffset + 3, endOffset).trim();
48
+ if (expression.length > 0) {
49
+ expressions.push(expression);
50
+ }
51
+ searchStart = endOffset + 2;
52
+ }
53
+ return expressions;
54
+ };
55
+ /** Collect referenced root contexts from embedded GitHub expressions. */
56
+ export const getReferencedContextRoots = (value) => {
57
+ const roots = new Set();
58
+ for (const expression of getGithubExpressionBodies(value)) {
59
+ let index = 0;
60
+ while (index < expression.length) {
61
+ const character = expression[index];
62
+ const previousCharacter = expression[index - 1];
63
+ if (!isIdentifierStart(character) ||
64
+ isIdentifierContinue(previousCharacter)) {
65
+ index += 1;
66
+ continue;
67
+ }
68
+ let endOffset = index + 1;
69
+ while (isIdentifierContinue(expression[endOffset])) {
70
+ endOffset += 1;
71
+ }
72
+ const token = expression.slice(index, endOffset);
73
+ const nextChar = expression[endOffset];
74
+ if (nextChar !== "." && nextChar !== "[") {
75
+ index = endOffset;
76
+ continue;
77
+ }
78
+ const normalizedToken = token.toLowerCase();
79
+ if (knownContextRoots.has(normalizedToken)) {
80
+ roots.add(normalizedToken);
81
+ }
82
+ index = endOffset;
83
+ }
84
+ }
85
+ return [...roots];
86
+ };
87
+ //# sourceMappingURL=github-expressions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"github-expressions.js","sourceRoot":"","sources":["../../src/_internal/github-expressions.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ /** Action metadata file globs. */
2
+ export declare const ACTION_METADATA_FILE_GLOBS: readonly string[];
3
+ /** Workflow template metadata (`.properties.json`) file globs. */
4
+ export declare const WORKFLOW_TEMPLATE_PROPERTIES_FILE_GLOBS: readonly string[];
5
+ /** Workflow template YAML file globs. */
6
+ export declare const WORKFLOW_TEMPLATE_YAML_FILE_GLOBS: readonly string[];
7
+ /** Combined workflow template globs used by dedicated template presets. */
8
+ export declare const WORKFLOW_TEMPLATE_FILE_GLOBS: readonly string[];
9
+ /** Determine whether a filename is an action metadata file. */
10
+ export declare const isActionMetadataFile: (filePath: string) => boolean;
11
+ /** Determine whether a filename is a workflow template metadata file. */
12
+ export declare const isWorkflowTemplatePropertiesFile: (filePath: string) => boolean;
13
+ /** Determine whether a filename is a workflow template YAML file. */
14
+ export declare const isWorkflowTemplateYamlFile: (filePath: string) => boolean;
15
+ /** Determine whether a filename belongs to any workflow template surface. */
16
+ export declare const isWorkflowTemplateFile: (filePath: string) => boolean;
17
+ /** Determine whether the path uses `.yaml` (rather than `.yml`). */
18
+ export declare const usesYamlExtension: (filePath: string) => boolean;
19
+ /** Return the template basename without extension suffixes. */
20
+ export declare const getTemplateStem: (filePath: string) => string;
21
+ //# sourceMappingURL=lint-targets.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lint-targets.d.ts","sourceRoot":"","sources":["../../src/_internal/lint-targets.ts"],"names":[],"mappings":"AAMA,kCAAkC;AAClC,eAAO,MAAM,0BAA0B,EAAE,SAAS,MAAM,EAEvD,CAAC;AAEF,kEAAkE;AAClE,eAAO,MAAM,uCAAuC,EAAE,SAAS,MAAM,EAEpE,CAAC;AAEF,yCAAyC;AACzC,eAAO,MAAM,iCAAiC,EAAE,SAAS,MAAM,EAE9D,CAAC;AAEF,2EAA2E;AAC3E,eAAO,MAAM,4BAA4B,EAAE,SAAS,MAAM,EAGzD,CAAC;AAMF,+DAA+D;AAC/D,eAAO,MAAM,oBAAoB,GAAI,UAAU,MAAM,KAAG,OAOvD,CAAC;AAEF,yEAAyE;AACzE,eAAO,MAAM,gCAAgC,GAAI,UAAU,MAAM,KAAG,OAED,CAAC;AAEpE,qEAAqE;AACrE,eAAO,MAAM,0BAA0B,GAAI,UAAU,MAAM,KAAG,OAQ7D,CAAC;AAEF,6EAA6E;AAC7E,eAAO,MAAM,sBAAsB,GAAI,UAAU,MAAM,KAAG,OAElB,CAAC;AAEzC,oEAAoE;AACpE,eAAO,MAAM,iBAAiB,GAAI,UAAU,MAAM,KAAG,OACN,CAAC;AAEhD,+DAA+D;AAC/D,eAAO,MAAM,eAAe,GAAI,UAAU,MAAM,KAAG,MAgBlD,CAAC"}
@@ -0,0 +1,60 @@
1
+ /**
2
+ * @packageDocumentation
3
+ * Shared filename target helpers for action metadata and workflow templates.
4
+ */
5
+ import { basename, extname } from "node:path";
6
+ /** Action metadata file globs. */
7
+ export const ACTION_METADATA_FILE_GLOBS = [
8
+ "**/action.{yml,yaml}",
9
+ ];
10
+ /** Workflow template metadata (`.properties.json`) file globs. */
11
+ export const WORKFLOW_TEMPLATE_PROPERTIES_FILE_GLOBS = [
12
+ "**/workflow-templates/*.properties.json",
13
+ ];
14
+ /** Workflow template YAML file globs. */
15
+ export const WORKFLOW_TEMPLATE_YAML_FILE_GLOBS = [
16
+ "**/workflow-templates/*.{yml,yaml}",
17
+ ];
18
+ /** Combined workflow template globs used by dedicated template presets. */
19
+ export const WORKFLOW_TEMPLATE_FILE_GLOBS = [
20
+ ...WORKFLOW_TEMPLATE_YAML_FILE_GLOBS,
21
+ ...WORKFLOW_TEMPLATE_PROPERTIES_FILE_GLOBS,
22
+ ];
23
+ /** Normalize file paths for stable cross-platform path checks. */
24
+ const normalizePathForMatching = (filePath) => filePath.replaceAll("\\", "/").toLowerCase();
25
+ /** Determine whether a filename is an action metadata file. */
26
+ export const isActionMetadataFile = (filePath) => {
27
+ const normalizedFilePath = normalizePathForMatching(filePath);
28
+ return (normalizedFilePath.endsWith("/action.yml") ||
29
+ normalizedFilePath.endsWith("/action.yaml"));
30
+ };
31
+ /** Determine whether a filename is a workflow template metadata file. */
32
+ export const isWorkflowTemplatePropertiesFile = (filePath) => normalizePathForMatching(filePath).includes("/workflow-templates/") &&
33
+ normalizePathForMatching(filePath).endsWith(".properties.json");
34
+ /** Determine whether a filename is a workflow template YAML file. */
35
+ export const isWorkflowTemplateYamlFile = (filePath) => {
36
+ const normalizedFilePath = normalizePathForMatching(filePath);
37
+ return (normalizedFilePath.includes("/workflow-templates/") &&
38
+ (normalizedFilePath.endsWith(".yml") ||
39
+ normalizedFilePath.endsWith(".yaml")));
40
+ };
41
+ /** Determine whether a filename belongs to any workflow template surface. */
42
+ export const isWorkflowTemplateFile = (filePath) => isWorkflowTemplatePropertiesFile(filePath) ||
43
+ isWorkflowTemplateYamlFile(filePath);
44
+ /** Determine whether the path uses `.yaml` (rather than `.yml`). */
45
+ export const usesYamlExtension = (filePath) => extname(filePath).toLowerCase() === ".yaml";
46
+ /** Return the template basename without extension suffixes. */
47
+ export const getTemplateStem = (filePath) => {
48
+ const fileName = basename(filePath);
49
+ if (fileName.endsWith(".properties.json")) {
50
+ return fileName.slice(0, -".properties.json".length);
51
+ }
52
+ if (fileName.endsWith(".yaml")) {
53
+ return fileName.slice(0, -".yaml".length);
54
+ }
55
+ if (fileName.endsWith(".yml")) {
56
+ return fileName.slice(0, -".yml".length);
57
+ }
58
+ return fileName;
59
+ };
60
+ //# sourceMappingURL=lint-targets.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lint-targets.js","sourceRoot":"","sources":["../../src/_internal/lint-targets.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAE9C,kCAAkC;AAClC,MAAM,CAAC,MAAM,0BAA0B,GAAsB;IACzD,sBAAsB;CACzB,CAAC;AAEF,kEAAkE;AAClE,MAAM,CAAC,MAAM,uCAAuC,GAAsB;IACtE,yCAAyC;CAC5C,CAAC;AAEF,yCAAyC;AACzC,MAAM,CAAC,MAAM,iCAAiC,GAAsB;IAChE,oCAAoC;CACvC,CAAC;AAEF,2EAA2E;AAC3E,MAAM,CAAC,MAAM,4BAA4B,GAAsB;IAC3D,GAAG,iCAAiC;IACpC,GAAG,uCAAuC;CAC7C,CAAC;AAEF,kEAAkE;AAClE,MAAM,wBAAwB,GAAG,CAAC,QAAgB,EAAU,EAAE,CAC1D,QAAQ,CAAC,UAAU,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,WAAW,EAAE,CAAC;AAEjD,+DAA+D;AAC/D,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,QAAgB,EAAW,EAAE;IAC9D,MAAM,kBAAkB,GAAG,wBAAwB,CAAC,QAAQ,CAAC,CAAC;IAE9D,OAAO,CACH,kBAAkB,CAAC,QAAQ,CAAC,aAAa,CAAC;QAC1C,kBAAkB,CAAC,QAAQ,CAAC,cAAc,CAAC,CAC9C,CAAC;AACN,CAAC,CAAC;AAEF,yEAAyE;AACzE,MAAM,CAAC,MAAM,gCAAgC,GAAG,CAAC,QAAgB,EAAW,EAAE,CAC1E,wBAAwB,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,sBAAsB,CAAC;IACnE,wBAAwB,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,kBAAkB,CAAC,CAAC;AAEpE,qEAAqE;AACrE,MAAM,CAAC,MAAM,0BAA0B,GAAG,CAAC,QAAgB,EAAW,EAAE;IACpE,MAAM,kBAAkB,GAAG,wBAAwB,CAAC,QAAQ,CAAC,CAAC;IAE9D,OAAO,CACH,kBAAkB,CAAC,QAAQ,CAAC,sBAAsB,CAAC;QACnD,CAAC,kBAAkB,CAAC,QAAQ,CAAC,MAAM,CAAC;YAChC,kBAAkB,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAC5C,CAAC;AACN,CAAC,CAAC;AAEF,6EAA6E;AAC7E,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,QAAgB,EAAW,EAAE,CAChE,gCAAgC,CAAC,QAAQ,CAAC;IAC1C,0BAA0B,CAAC,QAAQ,CAAC,CAAC;AAEzC,oEAAoE;AACpE,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,QAAgB,EAAW,EAAE,CAC3D,OAAO,CAAC,QAAQ,CAAC,CAAC,WAAW,EAAE,KAAK,OAAO,CAAC;AAEhD,+DAA+D;AAC/D,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,QAAgB,EAAU,EAAE;IACxD,MAAM,QAAQ,GAAG,QAAQ,CAAC,QAAQ,CAAC,CAAC;IAEpC,IAAI,QAAQ,CAAC,QAAQ,CAAC,kBAAkB,CAAC,EAAE,CAAC;QACxC,OAAO,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC;IACzD,CAAC;IAED,IAAI,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;QAC7B,OAAO,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IAC9C,CAAC;IAED,IAAI,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;QAC5B,OAAO,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAC7C,CAAC;IAED,OAAO,QAAQ,CAAC;AACpB,CAAC,CAAC"}
@@ -0,0 +1,16 @@
1
+ /**
2
+ * @packageDocumentation
3
+ * Shared docs metadata shape carried by GitHub Actions rules.
4
+ */
5
+ import type { Rule } from "eslint";
6
+ import type { GithubActionsConfigReference } from "./github-actions-config-references.js";
7
+ /** Custom docs metadata stored alongside each ESLint rule definition. */
8
+ export type GithubActionsRuleDocs = Rule.RuleMetaData["docs"] & {
9
+ readonly configs: GithubActionsConfigReference | readonly GithubActionsConfigReference[];
10
+ readonly recommended: boolean;
11
+ readonly requiresTypeChecking: boolean;
12
+ readonly ruleId: `R${number}`;
13
+ readonly ruleNumber: number;
14
+ readonly url: string;
15
+ };
16
+ //# sourceMappingURL=rule-docs.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rule-docs.d.ts","sourceRoot":"","sources":["../../src/_internal/rule-docs.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAEnC,OAAO,KAAK,EAAE,4BAA4B,EAAE,MAAM,uCAAuC,CAAC;AAE1F,yEAAyE;AACzE,MAAM,MAAM,qBAAqB,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,GAAG;IAC5D,QAAQ,CAAC,OAAO,EACV,4BAA4B,GAC5B,SAAS,4BAA4B,EAAE,CAAC;IAC9C,QAAQ,CAAC,WAAW,EAAE,OAAO,CAAC;IAC9B,QAAQ,CAAC,oBAAoB,EAAE,OAAO,CAAC;IACvC,QAAQ,CAAC,MAAM,EAAE,IAAI,MAAM,EAAE,CAAC;IAC9B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;CACxB,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=rule-docs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rule-docs.js","sourceRoot":"","sources":["../../src/_internal/rule-docs.ts"],"names":[],"mappings":""}