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,79 @@
1
+ # require-pull-request-target-branches
2
+
3
+ > **Rule catalog ID:** R032
4
+
5
+ ## Targeted pattern scope
6
+
7
+ GitHub Actions workflow YAML files triggered by `pull_request_target`.
8
+
9
+ ## What this rule reports
10
+
11
+ This rule reports `pull_request_target` triggers that do not scope the target base branches with `branches` or `branches-ignore`.
12
+
13
+ ## Why this rule exists
14
+
15
+ `pull_request_target` runs in the base repository context and can access privileges that ordinary forked pull request workflows do not. Adding branch filters narrows where that privileged automation can run and reduces accidental exposure across every protected branch.
16
+
17
+ ## ❌ Incorrect
18
+
19
+ ```yaml
20
+ on:
21
+ pull_request_target:
22
+ types:
23
+ - opened
24
+
25
+ jobs:
26
+ comment:
27
+ runs-on: ubuntu-latest
28
+ steps:
29
+ - run: echo privileged automation
30
+ ```
31
+
32
+ ## ✅ Correct
33
+
34
+ ```yaml
35
+ on:
36
+ pull_request_target:
37
+ types:
38
+ - opened
39
+ branches:
40
+ - main
41
+ - releases/**
42
+
43
+ jobs:
44
+ comment:
45
+ runs-on: ubuntu-latest
46
+ steps:
47
+ - run: echo privileged automation
48
+ ```
49
+
50
+
51
+ ## Additional examples
52
+
53
+ 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.
54
+
55
+ ## ESLint flat config example
56
+
57
+ ```ts
58
+ import githubActions from "eslint-plugin-github-actions-2";
59
+
60
+ export default [
61
+ {
62
+ files: ["**/*.{yml,yaml}"],
63
+ plugins: {
64
+ "github-actions": githubActions,
65
+ },
66
+ rules: {
67
+ "github-actions/require-pull-request-target-branches": "error",
68
+ },
69
+ },
70
+ ];
71
+ ```
72
+
73
+ ## When not to use it
74
+
75
+ 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.
76
+ ## Further reading
77
+
78
+ - [https://docs.github.com/actions/reference/workflows-and-actions/events-that-trigger-workflows#pull_request_target](https://docs.github.com/actions/reference/workflows-and-actions/events-that-trigger-workflows#pull_request_target)
79
+ - [https://docs.github.com/actions/reference/security/secure-use](https://docs.github.com/actions/reference/security/secure-use)
@@ -0,0 +1,85 @@
1
+ # require-run-step-shell
2
+
3
+ > **Rule catalog ID:** R021
4
+
5
+ ## Targeted pattern scope
6
+
7
+ GitHub Actions workflow YAML files with `run` steps.
8
+
9
+ ## What this rule reports
10
+
11
+ This rule reports `run` steps that do not declare `shell` themselves and do not inherit one from `defaults.run.shell`. It also reports empty or non-string `shell` values when they are declared on a step or in defaults.
12
+
13
+ ## Why this rule exists
14
+
15
+ GitHub Actions uses different implicit shells depending on the runner and execution context. Making the shell explicit keeps inline scripts predictable, documents intent for reviewers, and avoids surprises such as `sh` behavior where authors expected `bash` or `pwsh`.
16
+
17
+ ## ❌ Incorrect
18
+
19
+ ```yaml
20
+ jobs:
21
+ test:
22
+ runs-on: ubuntu-latest
23
+ steps:
24
+ - name: Install
25
+ run: npm ci
26
+ ```
27
+
28
+ ## ✅ Correct
29
+
30
+ ```yaml
31
+ jobs:
32
+ test:
33
+ runs-on: ubuntu-latest
34
+ steps:
35
+ - name: Install
36
+ shell: bash
37
+ run: npm ci
38
+ ```
39
+
40
+ ## Additional examples
41
+
42
+ ```yaml
43
+ defaults:
44
+ run:
45
+ shell: bash
46
+
47
+ jobs:
48
+ test:
49
+ runs-on: ubuntu-latest
50
+ steps:
51
+ - name: Install
52
+ run: npm ci
53
+ ```
54
+
55
+ For larger repositories, this rule is often enabled together with one of the
56
+ published presets so violations are caught in pull requests before workflow
57
+ changes are merged.
58
+
59
+ ## ESLint flat config example
60
+
61
+ ```ts
62
+ import githubActions from "eslint-plugin-github-actions-2";
63
+
64
+ export default [
65
+ {
66
+ files: ["**/*.{yml,yaml}"],
67
+ plugins: {
68
+ "github-actions": githubActions,
69
+ },
70
+ rules: {
71
+ "github-actions/require-run-step-shell": "error",
72
+ },
73
+ },
74
+ ];
75
+ ```
76
+
77
+ ## When not to use it
78
+
79
+ 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.
80
+
81
+ ## Further reading
82
+
83
+ - [https://docs.github.com/actions/reference/workflows-and-actions/workflow-syntax#jobsjob_idstepsshell](https://docs.github.com/actions/reference/workflows-and-actions/workflow-syntax#jobsjob_idstepsshell)
84
+ - [https://docs.github.com/actions/reference/workflows-and-actions/workflow-syntax#defaultsrunshell](https://docs.github.com/actions/reference/workflows-and-actions/workflow-syntax#defaultsrunshell)
85
+ - [https://github.com/rhysd/actionlint/issues/374](https://github.com/rhysd/actionlint/issues/374)
@@ -0,0 +1,62 @@
1
+ # require-template-categories
2
+
3
+ > **Rule catalog ID:** R057
4
+
5
+ ## Targeted pattern scope
6
+
7
+ Workflow-template metadata `categories` property.
8
+
9
+ ## What this rule reports
10
+
11
+ Reports missing or empty `categories` arrays.
12
+
13
+ ## Why this rule exists
14
+
15
+ Categories improve filterability and ranking in the workflow template chooser.
16
+
17
+ ## ❌ Incorrect
18
+
19
+ ```json
20
+ { "name": "CI", "description": "Template", "iconName": "workflow" }
21
+ ```
22
+
23
+ ## ✅ Correct
24
+
25
+ ```json
26
+ {
27
+ "name": "CI",
28
+ "description": "Template",
29
+ "iconName": "workflow",
30
+ "categories": ["JavaScript"]
31
+ }
32
+ ```
33
+
34
+
35
+ ## Additional examples
36
+
37
+ 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.
38
+
39
+ ## ESLint flat config example
40
+
41
+ ```ts
42
+ import githubActions from "eslint-plugin-github-actions-2";
43
+
44
+ export default [
45
+ {
46
+ files: ["**/*.{yml,yaml}"],
47
+ plugins: {
48
+ "github-actions": githubActions,
49
+ },
50
+ rules: {
51
+ "github-actions/require-template-categories": "error",
52
+ },
53
+ },
54
+ ];
55
+ ```
56
+
57
+ ## When not to use it
58
+
59
+ 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.
60
+ ## Further reading
61
+
62
+ - [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,63 @@
1
+ # require-template-file-patterns
2
+
3
+ > **Rule catalog ID:** R058
4
+
5
+ ## Targeted pattern scope
6
+
7
+ Workflow-template metadata `filePatterns` property.
8
+
9
+ ## What this rule reports
10
+
11
+ Reports missing or empty `filePatterns` arrays.
12
+
13
+ ## Why this rule exists
14
+
15
+ File patterns help GitHub suggest relevant templates for repository contents.
16
+
17
+ ## ❌ Incorrect
18
+
19
+ ```json
20
+ { "name": "CI", "description": "Template", "iconName": "workflow" }
21
+ ```
22
+
23
+ ## ✅ Correct
24
+
25
+ ```json
26
+ {
27
+ "name": "CI",
28
+ "description": "Template",
29
+ "iconName": "workflow",
30
+ "categories": ["JavaScript"],
31
+ "filePatterns": ["package.json$"]
32
+ }
33
+ ```
34
+
35
+
36
+ ## Additional examples
37
+
38
+ 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.
39
+
40
+ ## ESLint flat config example
41
+
42
+ ```ts
43
+ import githubActions from "eslint-plugin-github-actions-2";
44
+
45
+ export default [
46
+ {
47
+ files: ["**/*.{yml,yaml}"],
48
+ plugins: {
49
+ "github-actions": githubActions,
50
+ },
51
+ rules: {
52
+ "github-actions/require-template-file-patterns": "error",
53
+ },
54
+ },
55
+ ];
56
+ ```
57
+
58
+ ## When not to use it
59
+
60
+ 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.
61
+ ## Further reading
62
+
63
+ - [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,61 @@
1
+ # require-template-icon-file-exists
2
+
3
+ > **Rule catalog ID:** R065
4
+
5
+ ## Targeted pattern scope
6
+
7
+ Workflow-template properties `iconName` values that refer to local SVG icons.
8
+
9
+ ## What this rule reports
10
+
11
+ Reports local `iconName` values that do not resolve to an existing `*.svg` file.
12
+
13
+ ## Why this rule exists
14
+
15
+ Broken icon references degrade workflow-template UX.
16
+
17
+ ## ❌ Incorrect
18
+
19
+ ```json
20
+ { "iconName": "workflow" }
21
+ ```
22
+
23
+ If `workflow.svg` does not exist next to the metadata file, this is reported.
24
+
25
+ ## ✅ Correct
26
+
27
+ ```json
28
+ { "iconName": "workflow" }
29
+ ```
30
+
31
+ With `workflow.svg` present in the same directory.
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/require-template-icon-file-exists": "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/reusing-workflow-configurations#metadata-file-requirements](https://docs.github.com/actions/reference/workflows-and-actions/reusing-workflow-configurations#metadata-file-requirements)
@@ -0,0 +1,57 @@
1
+ # require-template-icon-name
2
+
3
+ > **Rule catalog ID:** R056
4
+
5
+ ## Targeted pattern scope
6
+
7
+ Workflow-template metadata `iconName` property.
8
+
9
+ ## What this rule reports
10
+
11
+ Reports metadata files missing `iconName` or setting it to an empty value.
12
+
13
+ ## Why this rule exists
14
+
15
+ An icon improves template discoverability and chooser UX.
16
+
17
+ ## ❌ Incorrect
18
+
19
+ ```json
20
+ { "name": "CI", "description": "Template" }
21
+ ```
22
+
23
+ ## ✅ Correct
24
+
25
+ ```json
26
+ { "name": "CI", "description": "Template", "iconName": "workflow" }
27
+ ```
28
+
29
+
30
+ ## Additional examples
31
+
32
+ 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.
33
+
34
+ ## ESLint flat config example
35
+
36
+ ```ts
37
+ import githubActions from "eslint-plugin-github-actions-2";
38
+
39
+ export default [
40
+ {
41
+ files: ["**/*.{yml,yaml}"],
42
+ plugins: {
43
+ "github-actions": githubActions,
44
+ },
45
+ rules: {
46
+ "github-actions/require-template-icon-name": "error",
47
+ },
48
+ },
49
+ ];
50
+ ```
51
+
52
+ ## When not to use it
53
+
54
+ 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.
55
+ ## Further reading
56
+
57
+ - [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,60 @@
1
+ # require-template-workflow-name
2
+
3
+ > **Rule catalog ID:** R067
4
+
5
+ ## Targeted pattern scope
6
+
7
+ Workflow template YAML files under `workflow-templates/`.
8
+
9
+ ## What this rule reports
10
+
11
+ Reports missing or empty top-level `name` fields.
12
+
13
+ ## Why this rule exists
14
+
15
+ Template names are primary labels shown in workflow selection UI.
16
+
17
+ ## ❌ Incorrect
18
+
19
+ ```yaml
20
+ on:
21
+ push:
22
+ ```
23
+
24
+ ## ✅ Correct
25
+
26
+ ```yaml
27
+ name: Node.js CI
28
+ on:
29
+ push:
30
+ ```
31
+
32
+
33
+ ## Additional examples
34
+
35
+ 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.
36
+
37
+ ## ESLint flat config example
38
+
39
+ ```ts
40
+ import githubActions from "eslint-plugin-github-actions-2";
41
+
42
+ export default [
43
+ {
44
+ files: ["**/*.{yml,yaml}"],
45
+ plugins: {
46
+ "github-actions": githubActions,
47
+ },
48
+ rules: {
49
+ "github-actions/require-template-workflow-name": "error",
50
+ },
51
+ },
52
+ ];
53
+ ```
54
+
55
+ ## When not to use it
56
+
57
+ 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.
58
+ ## Further reading
59
+
60
+ - [https://docs.github.com/actions/reference/workflows-and-actions/reusing-workflow-configurations](https://docs.github.com/actions/reference/workflows-and-actions/reusing-workflow-configurations)
@@ -0,0 +1,76 @@
1
+ # require-trigger-types
2
+
3
+ > **Rule catalog ID:** R031
4
+
5
+ ## Targeted pattern scope
6
+
7
+ GitHub Actions workflow YAML files that use configurable multi-activity events without an explicit `types` filter.
8
+
9
+ ## What this rule reports
10
+
11
+ This rule reports selected workflow events such as `issue_comment`, `pull_request_review`, `repository_dispatch`, `workflow_run`, `merge_group`, and similar multi-activity triggers when they omit `types`.
12
+
13
+ ## Why this rule exists
14
+
15
+ GitHub documents that these events support multiple activity types and default to reacting to all supported activities when `types` is omitted. Requiring `types` keeps automation specific, easier to review, and less likely to run on unintended actions.
16
+
17
+ This rule intentionally targets event families where explicit activity scoping is especially useful, rather than requiring `types` for every possible trigger.
18
+
19
+ ## ❌ Incorrect
20
+
21
+ ```yaml
22
+ on:
23
+ issue_comment:
24
+
25
+ jobs:
26
+ triage:
27
+ runs-on: ubuntu-latest
28
+ steps:
29
+ - run: echo comment received
30
+ ```
31
+
32
+ ## ✅ Correct
33
+
34
+ ```yaml
35
+ on:
36
+ issue_comment:
37
+ types:
38
+ - created
39
+
40
+ jobs:
41
+ triage:
42
+ runs-on: ubuntu-latest
43
+ steps:
44
+ - run: echo comment received
45
+ ```
46
+
47
+
48
+ ## Additional examples
49
+
50
+ 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.
51
+
52
+ ## ESLint flat config example
53
+
54
+ ```ts
55
+ import githubActions from "eslint-plugin-github-actions-2";
56
+
57
+ export default [
58
+ {
59
+ files: ["**/*.{yml,yaml}"],
60
+ plugins: {
61
+ "github-actions": githubActions,
62
+ },
63
+ rules: {
64
+ "github-actions/require-trigger-types": "error",
65
+ },
66
+ },
67
+ ];
68
+ ```
69
+
70
+ ## When not to use it
71
+
72
+ 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.
73
+ ## Further reading
74
+
75
+ - [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)
76
+ - [https://docs.github.com/actions/reference/workflows-and-actions/workflow-syntax#onevent_nametypes](https://docs.github.com/actions/reference/workflows-and-actions/workflow-syntax#onevent_nametypes)
@@ -0,0 +1,70 @@
1
+ # require-workflow-call-input-type
2
+
3
+ > **Rule catalog ID:** R034
4
+
5
+ ## Targeted pattern scope
6
+
7
+ GitHub Actions workflow YAML files that define `on.workflow_call.inputs` for reusable workflows.
8
+
9
+ ## What this rule reports
10
+
11
+ This rule reports reusable workflow inputs that omit `type` or set `type` to a value outside GitHub's documented `string`, `number`, and `boolean` reusable-workflow input types.
12
+
13
+ ## Why this rule exists
14
+
15
+ Reusable workflows are interfaces consumed by other workflows. Explicitly typed inputs make those interfaces clearer for callers, help GitHub validate passed values consistently, and reduce ambiguity when workflows evolve.
16
+
17
+ ## ❌ Incorrect
18
+
19
+ ```yaml
20
+ on:
21
+ workflow_call:
22
+ inputs:
23
+ dry_run:
24
+ description: Run validation only
25
+ required: false
26
+ ```
27
+
28
+ ## ✅ Correct
29
+
30
+ ```yaml
31
+ on:
32
+ workflow_call:
33
+ inputs:
34
+ dry_run:
35
+ description: Run validation only
36
+ required: false
37
+ type: boolean
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-call-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/using-workflows/reusing-workflows](https://docs.github.com/actions/using-workflows/reusing-workflows)
69
+ - [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)
70
+ - [https://docs.github.com/actions/reference/workflows-and-actions/workflow-syntax#onworkflow_callinputsinput_idtype](https://docs.github.com/actions/reference/workflows-and-actions/workflow-syntax#onworkflow_callinputsinput_idtype)
@@ -0,0 +1,67 @@
1
+ # require-workflow-call-output-value
2
+
3
+ > **Rule catalog ID:** R039
4
+
5
+ ## Targeted pattern scope
6
+
7
+ GitHub Actions workflow YAML files that define reusable workflow outputs under `on.workflow_call.outputs`.
8
+
9
+ ## What this rule reports
10
+
11
+ This rule reports reusable workflow outputs that omit `value` or set it to an empty scalar.
12
+
13
+ ## Why this rule exists
14
+
15
+ Reusable workflow outputs are part of the public interface exposed to callers. GitHub documents each `workflow_call` output as having a `value`, and without that mapping the output cannot return anything meaningful to downstream jobs.
16
+
17
+ ## ❌ Incorrect
18
+
19
+ ```yaml
20
+ on:
21
+ workflow_call:
22
+ outputs:
23
+ deployment-url:
24
+ description: Published deployment URL
25
+ ```
26
+
27
+ ## ✅ Correct
28
+
29
+ ```yaml
30
+ on:
31
+ workflow_call:
32
+ outputs:
33
+ deployment-url:
34
+ description: Published deployment URL
35
+ value: ${{ jobs.deploy.outputs.url }}
36
+ ```
37
+
38
+
39
+ ## Additional examples
40
+
41
+ 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.
42
+
43
+ ## ESLint flat config example
44
+
45
+ ```ts
46
+ import githubActions from "eslint-plugin-github-actions-2";
47
+
48
+ export default [
49
+ {
50
+ files: ["**/*.{yml,yaml}"],
51
+ plugins: {
52
+ "github-actions": githubActions,
53
+ },
54
+ rules: {
55
+ "github-actions/require-workflow-call-output-value": "error",
56
+ },
57
+ },
58
+ ];
59
+ ```
60
+
61
+ ## When not to use it
62
+
63
+ 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.
64
+ ## Further reading
65
+
66
+ - [https://docs.github.com/actions/using-workflows/reusing-workflows](https://docs.github.com/actions/using-workflows/reusing-workflows)
67
+ - [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)