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,63 @@
1
+ # no-hardcoded-default-branch-in-template
2
+
3
+ > **Rule catalog ID:** R068
4
+
5
+ ## Targeted pattern scope
6
+
7
+ Workflow template YAML files under `workflow-templates/`.
8
+
9
+ ## What this rule reports
10
+
11
+ Reports hardcoded `main` and `master` branch literals.
12
+
13
+ ## Why this rule exists
14
+
15
+ Template workflows should use `$default-branch` so generated workflows match the target repository.
16
+
17
+ ## ❌ Incorrect
18
+
19
+ ```yaml
20
+ on:
21
+ push:
22
+ branches:
23
+ - main
24
+ ```
25
+
26
+ ## ✅ Correct
27
+
28
+ ```yaml
29
+ on:
30
+ push:
31
+ branches:
32
+ - $default-branch
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/no-hardcoded-default-branch-in-template": "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](https://docs.github.com/actions/reference/workflows-and-actions/reusing-workflow-configurations)
@@ -0,0 +1,57 @@
1
+ # no-icon-file-extension-in-template-icon-name
2
+
3
+ > **Rule catalog ID:** R063
4
+
5
+ ## Targeted pattern scope
6
+
7
+ `iconName` in workflow-template properties metadata.
8
+
9
+ ## What this rule reports
10
+
11
+ Reports `iconName` values ending in `.svg`.
12
+
13
+ ## Why this rule exists
14
+
15
+ Template icon names should be bare icon identifiers, not filenames with extensions.
16
+
17
+ ## ❌ Incorrect
18
+
19
+ ```json
20
+ { "iconName": "workflow.svg" }
21
+ ```
22
+
23
+ ## ✅ Correct
24
+
25
+ ```json
26
+ { "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/no-icon-file-extension-in-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,65 @@
1
+ # no-inherit-secrets
2
+
3
+ > **Rule catalog ID:** R026
4
+
5
+ ## Targeted pattern scope
6
+
7
+ GitHub Actions workflow YAML files that call reusable workflows with `jobs.<job_id>.uses`.
8
+
9
+ ## What this rule reports
10
+
11
+ This rule reports reusable-workflow jobs that use `secrets: inherit`.
12
+
13
+ ## Why this rule exists
14
+
15
+ GitHub allows `secrets: inherit` to pass every secret available to the calling workflow into a directly called reusable workflow. Requiring explicitly named secrets keeps reusable-workflow integrations least-privileged and easier to review.
16
+
17
+ ## ❌ Incorrect
18
+
19
+ ```yaml
20
+ jobs:
21
+ deploy:
22
+ uses: ./.github/workflows/deploy.yml
23
+ secrets: inherit
24
+ ```
25
+
26
+ ## ✅ Correct
27
+
28
+ ```yaml
29
+ jobs:
30
+ deploy:
31
+ uses: ./.github/workflows/deploy.yml
32
+ secrets:
33
+ token: ${{ secrets.DEPLOY_TOKEN }}
34
+ ```
35
+
36
+
37
+ ## Additional examples
38
+
39
+ 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.
40
+
41
+ ## ESLint flat config example
42
+
43
+ ```ts
44
+ import githubActions from "eslint-plugin-github-actions-2";
45
+
46
+ export default [
47
+ {
48
+ files: ["**/*.{yml,yaml}"],
49
+ plugins: {
50
+ "github-actions": githubActions,
51
+ },
52
+ rules: {
53
+ "github-actions/no-inherit-secrets": "error",
54
+ },
55
+ },
56
+ ];
57
+ ```
58
+
59
+ ## When not to use it
60
+
61
+ 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.
62
+ ## Further reading
63
+
64
+ - [https://docs.github.com/actions/reference/workflows-and-actions/workflow-syntax#jobsjob_idsecretsinherit](https://docs.github.com/actions/reference/workflows-and-actions/workflow-syntax#jobsjob_idsecretsinherit)
65
+ - [https://docs.github.com/actions/using-workflows/reusing-workflows#passing-inputs-and-secrets-to-a-reusable-workflow](https://docs.github.com/actions/using-workflows/reusing-workflows#passing-inputs-and-secrets-to-a-reusable-workflow)
@@ -0,0 +1,101 @@
1
+ # no-invalid-concurrency-context
2
+
3
+ > **Rule catalog ID:** R042
4
+
5
+ ## Targeted pattern scope
6
+
7
+ GitHub Actions workflow YAML files that define workflow-level `concurrency` or `jobs.<job_id>.concurrency` expressions.
8
+
9
+ ## What this rule reports
10
+
11
+ This rule reports concurrency expressions that reference contexts GitHub does not allow at that location.
12
+
13
+ - Top-level `concurrency` may only reference `github`, `inputs`, and `vars`
14
+ - Job-level `concurrency` may only reference `github`, `needs`, `strategy`, `matrix`, `inputs`, and `vars`
15
+
16
+ ## Why this rule exists
17
+
18
+ Concurrency is evaluated before steps run, so step-only and runner-time contexts such as `steps`, `secrets`, `env`, `job`, or `runner` are not available there. Using unsupported contexts makes concurrency groups invalid and can break workflow scheduling behavior.
19
+
20
+ ## ❌ Incorrect
21
+
22
+ ```yaml
23
+ concurrency:
24
+ group: deploy-${{ secrets.ENVIRONMENT }}
25
+ cancel-in-progress: true
26
+
27
+ jobs:
28
+ deploy:
29
+ runs-on: ubuntu-latest
30
+ concurrency:
31
+ group: deploy-${{ steps.meta.outputs.lock }}
32
+ steps:
33
+ - id: meta
34
+ run: echo "lock=prod" >> "$GITHUB_OUTPUT"
35
+ ```
36
+
37
+ ## ✅ Correct
38
+
39
+ ```yaml
40
+ on:
41
+ workflow_dispatch:
42
+ inputs:
43
+ environment:
44
+ description: Deployment target
45
+ required: true
46
+ type: string
47
+
48
+ concurrency:
49
+ group: deploy-${{ github.workflow }}-${{ inputs.environment }}
50
+ cancel-in-progress: true
51
+
52
+ jobs:
53
+ build:
54
+ runs-on: ubuntu-latest
55
+ outputs:
56
+ lock: ${{ steps.meta.outputs.lock }}
57
+ steps:
58
+ - id: meta
59
+ run: echo "lock=prod" >> "$GITHUB_OUTPUT"
60
+
61
+ deploy:
62
+ needs: build
63
+ runs-on: ubuntu-latest
64
+ concurrency:
65
+ group: deploy-${{ needs.build.outputs.lock }}
66
+ cancel-in-progress: ${{ inputs.environment == 'prod' }}
67
+ steps:
68
+ - run: echo "Deploying"
69
+ ```
70
+
71
+
72
+ ## Additional examples
73
+
74
+ 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.
75
+
76
+ ## ESLint flat config example
77
+
78
+ ```ts
79
+ import githubActions from "eslint-plugin-github-actions-2";
80
+
81
+ export default [
82
+ {
83
+ files: ["**/*.{yml,yaml}"],
84
+ plugins: {
85
+ "github-actions": githubActions,
86
+ },
87
+ rules: {
88
+ "github-actions/no-invalid-concurrency-context": "error",
89
+ },
90
+ },
91
+ ];
92
+ ```
93
+
94
+ ## When not to use it
95
+
96
+ 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.
97
+ ## Further reading
98
+
99
+ - [https://docs.github.com/actions/reference/workflows-and-actions/workflow-syntax#concurrency](https://docs.github.com/actions/reference/workflows-and-actions/workflow-syntax#concurrency)
100
+ - [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)
101
+ - [https://docs.github.com/actions/reference/workflows-and-actions/contexts#context-availability](https://docs.github.com/actions/reference/workflows-and-actions/contexts#context-availability)
@@ -0,0 +1,86 @@
1
+ # no-invalid-key
2
+
3
+ > **Rule catalog ID:** R019
4
+
5
+ ## Targeted pattern scope
6
+
7
+ GitHub Actions workflow YAML mappings at the top level and within common job substructures.
8
+
9
+ ## What this rule reports
10
+
11
+ This rule reports unsupported keys in workflow mappings such as the top-level workflow object, jobs, steps, strategy blocks, containers, and services.
12
+
13
+ ## Why this rule exists
14
+
15
+ Misspelled or misplaced workflow keys are easy to overlook in review and can silently break automation intent. Catching them early helps keep workflow files valid and easier to maintain.
16
+
17
+ This rule focuses on common GitHub Actions workflow structures, including top-level workflow keys, jobs, strategy blocks, containers, services, and individual steps.
18
+
19
+ ## ❌ Incorrect
20
+
21
+ ```yaml
22
+ name: CI
23
+ on:
24
+ push:
25
+ jobs:
26
+ build:
27
+ name: Build
28
+ runs-on: ubuntu-latest
29
+ strategy:
30
+ retry: 2
31
+ steps:
32
+ - name: Test
33
+ runs: npm test
34
+ ```
35
+
36
+ ## ✅ Correct
37
+
38
+ ```yaml
39
+ name: CI
40
+ on:
41
+ push:
42
+ jobs:
43
+ build:
44
+ name: Build
45
+ runs-on: ubuntu-latest
46
+ strategy:
47
+ fail-fast: true
48
+ steps:
49
+ - name: Test
50
+ run: npm test
51
+ ```
52
+
53
+ ## Behavior and migration notes
54
+
55
+ This rule validates keys in the most common workflow mappings where misspellings usually become hard-to-debug failures. It does not try to validate free-form maps such as `env`, `with`, `outputs`, or `secrets`, where user-defined keys are expected.
56
+
57
+
58
+ ## Additional examples
59
+
60
+ 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.
61
+
62
+ ## ESLint flat config example
63
+
64
+ ```ts
65
+ import githubActions from "eslint-plugin-github-actions-2";
66
+
67
+ export default [
68
+ {
69
+ files: ["**/*.{yml,yaml}"],
70
+ plugins: {
71
+ "github-actions": githubActions,
72
+ },
73
+ rules: {
74
+ "github-actions/no-invalid-key": "error",
75
+ },
76
+ },
77
+ ];
78
+ ```
79
+
80
+ ## When not to use it
81
+
82
+ 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.
83
+ ## Further reading
84
+
85
+ - [https://docs.github.com/actions/reference/workflows-and-actions/workflow-syntax](https://docs.github.com/actions/reference/workflows-and-actions/workflow-syntax)
86
+ - [https://docs.github.com/actions/using-jobs/using-jobs-in-a-workflow](https://docs.github.com/actions/using-jobs/using-jobs-in-a-workflow)
@@ -0,0 +1,74 @@
1
+ # no-invalid-reusable-workflow-job-key
2
+
3
+ > **Rule catalog ID:** R041
4
+
5
+ ## Targeted pattern scope
6
+
7
+ GitHub Actions workflow YAML jobs that call reusable workflows via `jobs.<job_id>.uses`.
8
+
9
+ ## What this rule reports
10
+
11
+ This rule reports unsupported keys on reusable-workflow caller jobs, such as `runs-on`, `steps`, `container`, `outputs`, `timeout-minutes`, or `environment`.
12
+
13
+ ## Why this rule exists
14
+
15
+ Jobs that call reusable workflows have a much narrower supported keyword set than normal inline jobs. GitHub only allows caller-job keys such as `name`, `uses`, `with`, `secrets`, `strategy`, `needs`, `if`, `concurrency`, and `permissions`. Adding inline-job keys beside `uses` creates invalid workflow structure and confuses reviewers about where the real job logic lives.
16
+
17
+ ## ❌ Incorrect
18
+
19
+ ```yaml
20
+ jobs:
21
+ deploy:
22
+ uses: ./.github/workflows/deploy.yml
23
+ runs-on: ubuntu-latest
24
+ steps:
25
+ - run: echo "This caller job is invalid"
26
+ ```
27
+
28
+ ## ✅ Correct
29
+
30
+ ```yaml
31
+ jobs:
32
+ deploy:
33
+ uses: ./.github/workflows/deploy.yml
34
+ with:
35
+ environment: production
36
+ secrets:
37
+ token: ${{ secrets.DEPLOY_TOKEN }}
38
+ permissions:
39
+ contents: read
40
+ concurrency:
41
+ group: deploy-${{ github.ref }}
42
+ cancel-in-progress: true
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/no-invalid-reusable-workflow-job-key": "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/reusable-workflows-reference#supported-keywords-for-jobs-that-call-a-reusable-workflow](https://docs.github.com/actions/reference/reusable-workflows-reference#supported-keywords-for-jobs-that-call-a-reusable-workflow)
74
+ - [https://docs.github.com/actions/using-workflows/reusing-workflows](https://docs.github.com/actions/using-workflows/reusing-workflows)
@@ -0,0 +1,57 @@
1
+ # no-invalid-template-file-pattern-regex
2
+
3
+ > **Rule catalog ID:** R059
4
+
5
+ ## Targeted pattern scope
6
+
7
+ `filePatterns` entries in workflow-template properties metadata.
8
+
9
+ ## What this rule reports
10
+
11
+ Reports regex strings that are syntactically invalid.
12
+
13
+ ## Why this rule exists
14
+
15
+ Invalid regex values break template recommendation matching.
16
+
17
+ ## ❌ Incorrect
18
+
19
+ ```json
20
+ { "filePatterns": ["(package.json$"] }
21
+ ```
22
+
23
+ ## ✅ Correct
24
+
25
+ ```json
26
+ { "filePatterns": ["package.json$", "^go\\.mod$"] }
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/no-invalid-template-file-pattern-regex": "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://www.schemastore.org/github-workflow-template-properties.json](https://www.schemastore.org/github-workflow-template-properties.json)
@@ -0,0 +1,80 @@
1
+ # no-invalid-workflow-call-output-value
2
+
3
+ > **Rule catalog ID:** R040
4
+
5
+ ## Targeted pattern scope
6
+
7
+ GitHub Actions workflow YAML files that define reusable workflow output values under `on.workflow_call.outputs.*.value`.
8
+
9
+ ## What this rule reports
10
+
11
+ This rule reports reusable workflow output values that:
12
+
13
+ - reference contexts that are not available in `on.workflow_call.outputs.*.value`
14
+ - fail to map from a job output such as `jobs.build.outputs.artifact`
15
+
16
+ ## Why this rule exists
17
+
18
+ GitHub only allows the `github`, `jobs`, `vars`, and `inputs` contexts when computing reusable workflow output values, and those values must ultimately come from a job output inside the called workflow. Direct `steps.*`, `needs.*`, `matrix.*`, or literal-only mappings are invalid and break the reusable workflow contract.
19
+
20
+ ## ❌ Incorrect
21
+
22
+ ```yaml
23
+ on:
24
+ workflow_call:
25
+ outputs:
26
+ deployment-url:
27
+ description: Published deployment URL
28
+ value: ${{ steps.publish.outputs.url }}
29
+ ```
30
+
31
+ ## ✅ Correct
32
+
33
+ ```yaml
34
+ on:
35
+ workflow_call:
36
+ outputs:
37
+ deployment-url:
38
+ description: Published deployment URL
39
+ value: ${{ jobs.deploy.outputs.deployment-url }}
40
+ jobs:
41
+ deploy:
42
+ runs-on: ubuntu-latest
43
+ outputs:
44
+ deployment-url: ${{ steps.publish.outputs.url }}
45
+ steps:
46
+ - id: publish
47
+ run: echo "url=https://example.com" >> "$GITHUB_OUTPUT"
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/no-invalid-workflow-call-output-value": "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/using-workflows/reusing-workflows](https://docs.github.com/actions/using-workflows/reusing-workflows)
79
+ - [https://docs.github.com/actions/reference/workflows-and-actions/contexts#context-availability](https://docs.github.com/actions/reference/workflows-and-actions/contexts#context-availability)
80
+ - [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,57 @@
1
+ # no-path-separators-in-template-icon-name
2
+
3
+ > **Rule catalog ID:** R064
4
+
5
+ ## Targeted pattern scope
6
+
7
+ `iconName` in workflow-template properties metadata.
8
+
9
+ ## What this rule reports
10
+
11
+ Reports `iconName` values containing `/` or `\\`.
12
+
13
+ ## Why this rule exists
14
+
15
+ `iconName` should be a token, not a filesystem path.
16
+
17
+ ## ❌ Incorrect
18
+
19
+ ```json
20
+ { "iconName": "icons/workflow" }
21
+ ```
22
+
23
+ ## ✅ Correct
24
+
25
+ ```json
26
+ { "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/no-path-separators-in-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://www.schemastore.org/github-workflow-template-properties.json](https://www.schemastore.org/github-workflow-template-properties.json)