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,73 @@
1
+ # require-workflow-concurrency
2
+
3
+ > **Rule catalog ID:** R004
4
+
5
+ ## Targeted pattern scope
6
+
7
+ Workflows that listen for `push`, `pull_request`, `pull_request_target`, `workflow_dispatch`, or `merge_group` by default.
8
+
9
+ ## What this rule reports
10
+
11
+ This rule reports workflows that should define top-level `concurrency` but do not, as well as concurrency blocks that omit `group` or `cancel-in-progress`.
12
+
13
+ ## Why this rule exists
14
+
15
+ Concurrency helps cancel superseded runs so repeated pushes and pull request updates do not create long backlogs of redundant workflow executions.
16
+
17
+ ## ❌ Incorrect
18
+
19
+ ```yaml
20
+ on:
21
+ pull_request:
22
+
23
+ jobs:
24
+ test:
25
+ runs-on: ubuntu-latest
26
+ ```
27
+
28
+ ```yaml
29
+ concurrency:
30
+ group: ci
31
+ ```
32
+
33
+ ## ✅ Correct
34
+
35
+ ```yaml
36
+ on:
37
+ pull_request:
38
+
39
+ concurrency:
40
+ group: ci-${{ github.ref }}
41
+ cancel-in-progress: true
42
+ ```
43
+
44
+
45
+ ## Additional examples
46
+
47
+ For larger repositories, this rule is often enabled together with one of the published presets so violations are caught in pull requests before workflow changes are merged.
48
+
49
+ ## ESLint flat config example
50
+
51
+ ```ts
52
+ import githubActions from "eslint-plugin-github-actions-2";
53
+
54
+ export default [
55
+ {
56
+ files: ["**/*.{yml,yaml}"],
57
+ plugins: {
58
+ "github-actions": githubActions,
59
+ },
60
+ rules: {
61
+ "github-actions/require-workflow-concurrency": "error",
62
+ },
63
+ },
64
+ ];
65
+ ```
66
+
67
+ ## When not to use it
68
+
69
+ You can disable this rule when its policy does not match your repository standards, or when equivalent enforcement is already handled by another policy tool.
70
+ ## Further reading
71
+
72
+ - [https://docs.github.com/actions/reference/workflows-and-actions/workflow-syntax#concurrency](https://docs.github.com/actions/reference/workflows-and-actions/workflow-syntax#concurrency)
73
+ - [https://docs.github.com/actions/reference/workflows-and-actions/workflow-syntax#jobsjob_idconcurrency](https://docs.github.com/actions/reference/workflows-and-actions/workflow-syntax#jobsjob_idconcurrency)
@@ -0,0 +1,70 @@
1
+ # require-workflow-dispatch-input-type
2
+
3
+ > **Rule catalog ID:** R022
4
+
5
+ ## Targeted pattern scope
6
+
7
+ GitHub Actions workflow YAML files that define `on.workflow_dispatch.inputs`.
8
+
9
+ ## What this rule reports
10
+
11
+ This rule reports manual-dispatch inputs that omit `type` or set `type` to an empty or non-string value.
12
+
13
+ ## Why this rule exists
14
+
15
+ Explicit input types make manual workflows easier to use in the GitHub UI, preserve boolean and number semantics more reliably, and keep workflow interfaces self-documenting as they evolve.
16
+
17
+ ## ❌ Incorrect
18
+
19
+ ```yaml
20
+ on:
21
+ workflow_dispatch:
22
+ inputs:
23
+ environment:
24
+ description: Deployment target
25
+ required: true
26
+ ```
27
+
28
+ ## ✅ Correct
29
+
30
+ ```yaml
31
+ on:
32
+ workflow_dispatch:
33
+ inputs:
34
+ environment:
35
+ description: Deployment target
36
+ required: true
37
+ type: environment
38
+ ```
39
+
40
+
41
+ ## Additional examples
42
+
43
+ For larger repositories, this rule is often enabled together with one of the published presets so violations are caught in pull requests before workflow changes are merged.
44
+
45
+ ## ESLint flat config example
46
+
47
+ ```ts
48
+ import githubActions from "eslint-plugin-github-actions-2";
49
+
50
+ export default [
51
+ {
52
+ files: ["**/*.{yml,yaml}"],
53
+ plugins: {
54
+ "github-actions": githubActions,
55
+ },
56
+ rules: {
57
+ "github-actions/require-workflow-dispatch-input-type": "error",
58
+ },
59
+ },
60
+ ];
61
+ ```
62
+
63
+ ## When not to use it
64
+
65
+ You can disable this rule when its policy does not match your repository standards, or when equivalent enforcement is already handled by another policy tool.
66
+ ## Further reading
67
+
68
+ - [https://docs.github.com/actions/reference/workflows-and-actions/workflow-syntax#onworkflow_dispatchinputs](https://docs.github.com/actions/reference/workflows-and-actions/workflow-syntax#onworkflow_dispatchinputs)
69
+ - [https://docs.github.com/actions/reference/workflows-and-actions/workflow-syntax#onworkflow_dispatchinputsinput_idtype](https://docs.github.com/actions/reference/workflows-and-actions/workflow-syntax#onworkflow_dispatchinputsinput_idtype)
70
+ - [https://docs.github.com/actions/reference/workflows-and-actions/contexts#inputs-context](https://docs.github.com/actions/reference/workflows-and-actions/contexts#inputs-context)
@@ -0,0 +1,96 @@
1
+ # require-workflow-interface-description
2
+
3
+ > **Rule catalog ID:** R024
4
+
5
+ ## Targeted pattern scope
6
+
7
+ GitHub Actions workflow YAML files that expose manual or reusable workflow interfaces.
8
+
9
+ ## What this rule reports
10
+
11
+ This rule reports missing or empty `description` fields for:
12
+
13
+ - `on.workflow_dispatch.inputs.*`
14
+ - `on.workflow_call.inputs.*`
15
+ - `on.workflow_call.secrets.*`
16
+ - `on.workflow_call.outputs.*`
17
+
18
+ ## Why this rule exists
19
+
20
+ Manual workflow forms and reusable workflows behave like public interfaces for your automation. Requiring descriptions keeps those interfaces self-documenting for operators, reviewers, and downstream workflow authors.
21
+
22
+ ## ❌ Incorrect
23
+
24
+ ```yaml
25
+ on:
26
+ workflow_dispatch:
27
+ inputs:
28
+ environment:
29
+ required: true
30
+ type: environment
31
+ ```
32
+
33
+ ## ✅ Correct
34
+
35
+ ```yaml
36
+ on:
37
+ workflow_dispatch:
38
+ inputs:
39
+ environment:
40
+ description: Deployment target environment
41
+ required: true
42
+ type: environment
43
+ ```
44
+
45
+ ## Additional examples
46
+
47
+ ```yaml
48
+ on:
49
+ workflow_call:
50
+ inputs:
51
+ config-path:
52
+ description: Path to the deployment config
53
+ required: true
54
+ type: string
55
+ secrets:
56
+ token:
57
+ description: Token used to publish deployment state
58
+ required: true
59
+ outputs:
60
+ deployment-url:
61
+ description: Final deployment URL
62
+ value: ${{ jobs.deploy.outputs.url }}
63
+ ```
64
+
65
+ For larger repositories, this rule is often enabled together with one of the
66
+ published presets so violations are caught in pull requests before workflow
67
+ changes are merged.
68
+
69
+ ## ESLint flat config example
70
+
71
+ ```ts
72
+ import githubActions from "eslint-plugin-github-actions-2";
73
+
74
+ export default [
75
+ {
76
+ files: ["**/*.{yml,yaml}"],
77
+ plugins: {
78
+ "github-actions": githubActions,
79
+ },
80
+ rules: {
81
+ "github-actions/require-workflow-interface-description": "error",
82
+ },
83
+ },
84
+ ];
85
+ ```
86
+
87
+ ## When not to use it
88
+
89
+ You can disable this rule when its policy does not match your repository standards, or when equivalent enforcement is already handled by another policy tool.
90
+
91
+ ## Further reading
92
+
93
+ - [https://docs.github.com/actions/reference/workflows-and-actions/workflow-syntax#onworkflow_dispatchinputs](https://docs.github.com/actions/reference/workflows-and-actions/workflow-syntax#onworkflow_dispatchinputs)
94
+ - [https://docs.github.com/actions/reference/workflows-and-actions/workflow-syntax#onworkflow_callinputs](https://docs.github.com/actions/reference/workflows-and-actions/workflow-syntax#onworkflow_callinputs)
95
+ - [https://docs.github.com/actions/reference/workflows-and-actions/workflow-syntax#onworkflow_callsecrets](https://docs.github.com/actions/reference/workflows-and-actions/workflow-syntax#onworkflow_callsecrets)
96
+ - [https://docs.github.com/actions/reference/workflows-and-actions/workflow-syntax#onworkflow_calloutputs](https://docs.github.com/actions/reference/workflows-and-actions/workflow-syntax#onworkflow_calloutputs)
@@ -0,0 +1,75 @@
1
+ # require-workflow-permissions
2
+
3
+ > **Rule catalog ID:** R001
4
+
5
+ ## Targeted pattern scope
6
+
7
+ GitHub Actions workflow YAML files that define one or more jobs.
8
+
9
+ ## What this rule reports
10
+
11
+ This rule reports workflows that omit explicit token `permissions` entirely, or jobs that omit `permissions` when the workflow does not define them globally.
12
+
13
+ ## Why this rule exists
14
+
15
+ GitHub recommends using least-privilege `GITHUB_TOKEN` permissions instead of relying on broader defaults. Declaring `permissions` explicitly makes token scope reviewable and repeatable.
16
+
17
+ ## ❌ Incorrect
18
+
19
+ ```yaml
20
+ jobs:
21
+ build:
22
+ runs-on: ubuntu-latest
23
+ steps:
24
+ - run: npm test
25
+ ```
26
+
27
+ ## ✅ Correct
28
+
29
+ ```yaml
30
+ permissions:
31
+ contents: read
32
+
33
+ jobs:
34
+ build:
35
+ runs-on: ubuntu-latest
36
+ ```
37
+
38
+ ```yaml
39
+ jobs:
40
+ build:
41
+ permissions:
42
+ contents: read
43
+ runs-on: ubuntu-latest
44
+ ```
45
+
46
+
47
+ ## Additional examples
48
+
49
+ For larger repositories, this rule is often enabled together with one of the published presets so violations are caught in pull requests before workflow changes are merged.
50
+
51
+ ## ESLint flat config example
52
+
53
+ ```ts
54
+ import githubActions from "eslint-plugin-github-actions-2";
55
+
56
+ export default [
57
+ {
58
+ files: ["**/*.{yml,yaml}"],
59
+ plugins: {
60
+ "github-actions": githubActions,
61
+ },
62
+ rules: {
63
+ "github-actions/require-workflow-permissions": "error",
64
+ },
65
+ },
66
+ ];
67
+ ```
68
+
69
+ ## When not to use it
70
+
71
+ You can disable this rule when its policy does not match your repository standards, or when equivalent enforcement is already handled by another policy tool.
72
+ ## Further reading
73
+
74
+ - [https://docs.github.com/actions/reference/workflows-and-actions/workflow-syntax#permissions](https://docs.github.com/actions/reference/workflows-and-actions/workflow-syntax#permissions)
75
+ - [https://docs.github.com/actions/security-for-github-actions/security-guides/automatic-token-authentication](https://docs.github.com/actions/security-for-github-actions/security-guides/automatic-token-authentication)
@@ -0,0 +1,66 @@
1
+ # require-workflow-run-branches
2
+
3
+ > **Rule catalog ID:** R028
4
+
5
+ ## Targeted pattern scope
6
+
7
+ GitHub Actions workflow YAML files that use the `workflow_run` trigger.
8
+
9
+ ## What this rule reports
10
+
11
+ This rule reports `on.workflow_run` triggers that do not declare a non-empty `branches` or `branches-ignore` filter.
12
+
13
+ ## Why this rule exists
14
+
15
+ `workflow_run` is often used for follow-up workflows that have more privileges than the upstream workflow that triggered them. Requiring branch scoping keeps these follow-up workflows from reacting to every upstream branch indiscriminately and matches GitHub's documented trigger-filtering capabilities.
16
+
17
+ ## ❌ Incorrect
18
+
19
+ ```yaml
20
+ on:
21
+ workflow_run:
22
+ workflows: [CI]
23
+ types: [completed]
24
+ ```
25
+
26
+ ## ✅ Correct
27
+
28
+ ```yaml
29
+ on:
30
+ workflow_run:
31
+ workflows: [CI]
32
+ types: [completed]
33
+ branches:
34
+ - main
35
+ ```
36
+
37
+
38
+ ## Additional examples
39
+
40
+ For larger repositories, this rule is often enabled together with one of the published presets so violations are caught in pull requests before workflow changes are merged.
41
+
42
+ ## ESLint flat config example
43
+
44
+ ```ts
45
+ import githubActions from "eslint-plugin-github-actions-2";
46
+
47
+ export default [
48
+ {
49
+ files: ["**/*.{yml,yaml}"],
50
+ plugins: {
51
+ "github-actions": githubActions,
52
+ },
53
+ rules: {
54
+ "github-actions/require-workflow-run-branches": "error",
55
+ },
56
+ },
57
+ ];
58
+ ```
59
+
60
+ ## When not to use it
61
+
62
+ You can disable this rule when its policy does not match your repository standards, or when equivalent enforcement is already handled by another policy tool.
63
+ ## Further reading
64
+
65
+ - [https://docs.github.com/actions/reference/workflows-and-actions/workflow-syntax#onworkflow_runbranchesbranches-ignore](https://docs.github.com/actions/reference/workflows-and-actions/workflow-syntax#onworkflow_runbranchesbranches-ignore)
66
+ - [https://wellarchitected.github.com/library/application-security/recommendations/actions-security/](https://wellarchitected.github.com/library/application-security/recommendations/actions-security/)
@@ -0,0 +1,58 @@
1
+ # require-workflow-template-pair
2
+
3
+ > **Rule catalog ID:** R054
4
+
5
+ ## Targeted pattern scope
6
+
7
+ Workflow template YAML files under `workflow-templates/`.
8
+
9
+ ## What this rule reports
10
+
11
+ Reports template YAML files without matching `.properties.json` metadata files.
12
+
13
+ ## Why this rule exists
14
+
15
+ Template metadata is required for correct template presentation in the workflow chooser.
16
+
17
+ ## ❌ Incorrect
18
+
19
+ ```text
20
+ workflow-templates/ci.yml
21
+ ```
22
+
23
+ ## ✅ Correct
24
+
25
+ ```text
26
+ workflow-templates/ci.yml
27
+ workflow-templates/ci.properties.json
28
+ ```
29
+
30
+
31
+ ## Additional examples
32
+
33
+ For larger repositories, this rule is often enabled together with one of the published presets so violations are caught in pull requests before workflow changes are merged.
34
+
35
+ ## ESLint flat config example
36
+
37
+ ```ts
38
+ import githubActions from "eslint-plugin-github-actions-2";
39
+
40
+ export default [
41
+ {
42
+ files: ["**/*.{yml,yaml}"],
43
+ plugins: {
44
+ "github-actions": githubActions,
45
+ },
46
+ rules: {
47
+ "github-actions/require-workflow-template-pair": "error",
48
+ },
49
+ },
50
+ ];
51
+ ```
52
+
53
+ ## When not to use it
54
+
55
+ You can disable this rule when its policy does not match your repository standards, or when equivalent enforcement is already handled by another policy tool.
56
+ ## Further reading
57
+
58
+ - [https://docs.github.com/actions/reference/workflows-and-actions/reusing-workflow-configurations#metadata-file-requirements](https://docs.github.com/actions/reference/workflows-and-actions/reusing-workflow-configurations#metadata-file-requirements)
@@ -0,0 +1,58 @@
1
+ # require-workflow-template-properties-pair
2
+
3
+ > **Rule catalog ID:** R055
4
+
5
+ ## Targeted pattern scope
6
+
7
+ Workflow-template metadata files ending with `.properties.json`.
8
+
9
+ ## What this rule reports
10
+
11
+ Reports metadata files that do not have matching `.yml`/`.yaml` template workflow files.
12
+
13
+ ## Why this rule exists
14
+
15
+ Orphan metadata files are dead configuration and mislead maintainers.
16
+
17
+ ## ❌ Incorrect
18
+
19
+ ```text
20
+ workflow-templates/ci.properties.json
21
+ ```
22
+
23
+ ## ✅ Correct
24
+
25
+ ```text
26
+ workflow-templates/ci.properties.json
27
+ workflow-templates/ci.yml
28
+ ```
29
+
30
+
31
+ ## Additional examples
32
+
33
+ For larger repositories, this rule is often enabled together with one of the published presets so violations are caught in pull requests before workflow changes are merged.
34
+
35
+ ## ESLint flat config example
36
+
37
+ ```ts
38
+ import githubActions from "eslint-plugin-github-actions-2";
39
+
40
+ export default [
41
+ {
42
+ files: ["**/*.{yml,yaml}"],
43
+ plugins: {
44
+ "github-actions": githubActions,
45
+ },
46
+ rules: {
47
+ "github-actions/require-workflow-template-properties-pair": "error",
48
+ },
49
+ },
50
+ ];
51
+ ```
52
+
53
+ ## When not to use it
54
+
55
+ You can disable this rule when its policy does not match your repository standards, or when equivalent enforcement is already handled by another policy tool.
56
+ ## Further reading
57
+
58
+ - [https://docs.github.com/actions/reference/workflows-and-actions/reusing-workflow-configurations#metadata-file-requirements](https://docs.github.com/actions/reference/workflows-and-actions/reusing-workflow-configurations#metadata-file-requirements)
@@ -0,0 +1,74 @@
1
+ # valid-timeout-minutes
2
+
3
+ > **Rule catalog ID:** R017
4
+
5
+ ## Targeted pattern scope
6
+
7
+ GitHub Actions workflow YAML files that set `timeout-minutes` on jobs or steps.
8
+
9
+ ## What this rule reports
10
+
11
+ This rule reports literal `timeout-minutes` values that are not positive integers or that fall outside the configured allowed range.
12
+
13
+ ## Why this rule exists
14
+
15
+ Timeout values are operational safety limits. Invalid or out-of-policy values can lead to stuck runners, wasted compute, or unexpectedly long execution windows.
16
+
17
+ ## ❌ Incorrect
18
+
19
+ ```yaml
20
+ jobs:
21
+ build:
22
+ name: Build
23
+ runs-on: ubuntu-latest
24
+ timeout-minutes: 0
25
+ ```
26
+
27
+ ## ✅ Correct
28
+
29
+ ```yaml
30
+ jobs:
31
+ build:
32
+ name: Build
33
+ runs-on: ubuntu-latest
34
+ timeout-minutes: 30
35
+ ```
36
+
37
+ ```yaml
38
+ jobs:
39
+ build:
40
+ name: Build
41
+ runs-on: ubuntu-latest
42
+ timeout-minutes: ${{ fromJSON(vars.JOB_TIMEOUT_MINUTES) }}
43
+ ```
44
+
45
+
46
+ ## Additional examples
47
+
48
+ For larger repositories, this rule is often enabled together with one of the published presets so violations are caught in pull requests before workflow changes are merged.
49
+
50
+ ## ESLint flat config example
51
+
52
+ ```ts
53
+ import githubActions from "eslint-plugin-github-actions-2";
54
+
55
+ export default [
56
+ {
57
+ files: ["**/*.{yml,yaml}"],
58
+ plugins: {
59
+ "github-actions": githubActions,
60
+ },
61
+ rules: {
62
+ "github-actions/valid-timeout-minutes": "error",
63
+ },
64
+ },
65
+ ];
66
+ ```
67
+
68
+ ## When not to use it
69
+
70
+ You can disable this rule when its policy does not match your repository standards, or when equivalent enforcement is already handled by another policy tool.
71
+ ## Further reading
72
+
73
+ - [https://docs.github.com/actions/reference/workflows-and-actions/workflow-syntax#jobsjob_idtimeout-minutes](https://docs.github.com/actions/reference/workflows-and-actions/workflow-syntax#jobsjob_idtimeout-minutes)
74
+ - [https://docs.github.com/actions/reference/workflows-and-actions/workflow-syntax#jobsjob_idstepscontinue-on-error](https://docs.github.com/actions/reference/workflows-and-actions/workflow-syntax#jobsjob_idstepscontinue-on-error)
@@ -0,0 +1,62 @@
1
+ # valid-trigger-events
2
+
3
+ > **Rule catalog ID:** R018
4
+
5
+ ## Targeted pattern scope
6
+
7
+ GitHub Actions workflow YAML files that declare trigger events under `on`.
8
+
9
+ ## What this rule reports
10
+
11
+ This rule reports trigger event names that are not documented GitHub Actions workflow events.
12
+
13
+ ## Why this rule exists
14
+
15
+ Mistyped trigger names silently break workflow intent. Validating events early prevents workflows from never running, or from running at the wrong time.
16
+
17
+ ## ❌ Incorrect
18
+
19
+ ```yaml
20
+ on:
21
+ foo_bar:
22
+ ```
23
+
24
+ ## ✅ Correct
25
+
26
+ ```yaml
27
+ on:
28
+ push:
29
+ branches:
30
+ - main
31
+ ```
32
+
33
+
34
+ ## Additional examples
35
+
36
+ For larger repositories, this rule is often enabled together with one of the published presets so violations are caught in pull requests before workflow changes are merged.
37
+
38
+ ## ESLint flat config example
39
+
40
+ ```ts
41
+ import githubActions from "eslint-plugin-github-actions-2";
42
+
43
+ export default [
44
+ {
45
+ files: ["**/*.{yml,yaml}"],
46
+ plugins: {
47
+ "github-actions": githubActions,
48
+ },
49
+ rules: {
50
+ "github-actions/valid-trigger-events": "error",
51
+ },
52
+ },
53
+ ];
54
+ ```
55
+
56
+ ## When not to use it
57
+
58
+ You can disable this rule when its policy does not match your repository standards, or when equivalent enforcement is already handled by another policy tool.
59
+ ## Further reading
60
+
61
+ - [https://docs.github.com/actions/reference/workflows-and-actions/events-that-trigger-workflows](https://docs.github.com/actions/reference/workflows-and-actions/events-that-trigger-workflows)
62
+ - [https://docs.github.com/actions/reference/workflows-and-actions/workflow-syntax#on](https://docs.github.com/actions/reference/workflows-and-actions/workflow-syntax#on)