matrix.yaml 9.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273
  1. # Source of truth for the non-managed e2e fan-out (e2e.yml). Each area is one CI
  2. # leg: a suite binary run under a Ginkgo label filter. The build job compiles
  3. # the images once; every enabled area runs as its own matrix leg on its own kind
  4. # cluster, so a flaky addon in one provider cannot fail the others.
  5. #
  6. # Fields:
  7. # name leg id, shown as "test (<name>)" in the checks list.
  8. # suite which suite binary to run (TEST_SUITES). One suite per leg so a
  9. # label filter never has to span binaries that lack the labels.
  10. # labels Ginkgo -label-filter (GINKGO_LABELS). This workflow is
  11. # non-managed only; the managed IRSA/workload-identity specs run
  12. # in e2e-managed.yml, so every filter ends with "&& !managed".
  13. # providers provider case names this leg covers. Used only by matrix.py
  14. # check, to prove every provider compiled into the suite
  15. # (suites/provider/cases/import.go) is classified: covered by an
  16. # enabled leg, or listed under local_only. Not read at run time.
  17. # secret_groups external credential groups this leg receives. The reusable
  18. # workflow injects a provider's secrets only when its group is
  19. # listed here, so a vault leg never sees AWS creds. Empty means
  20. # the leg runs against in-cluster addons only (fork-safe). Group
  21. # names map to secret sets in e2e-reusable.yml.
  22. # needs_secrets convenience mirror of "secret_groups is non-empty". Documents
  23. # intent; not read by CI.
  24. # paths globs whose change should trigger this leg. Seed for the
  25. # phase 2 affected-only resolver; ignored by the static phase 1
  26. # matrix, which runs every enabled area.
  27. # enabled whether CI runs this leg. A disabled area does NOT count as
  28. # coverage: an imported provider whose only area is disabled runs
  29. # nowhere, which matrix.py check now rejects. Use it to park a
  30. # leg briefly, not to record an intention.
  31. #
  32. # All legs are enabled. A second top-level key, local_only, lists providers that
  33. # are compiled in but deliberately have no leg; see the end of this file.
  34. areas:
  35. # In-cluster only, no external credentials. The required floor: this leg runs
  36. # on every PR (including forks) and is the stable branch-protection gate.
  37. - name: core-smoke
  38. suite: provider
  39. labels: "(fake || kubernetes || template) && !managed"
  40. providers: [fake, kubernetes, template]
  41. secret_groups: []
  42. needs_secrets: false
  43. paths:
  44. - "apis/**"
  45. - "pkg/**"
  46. - "runtime/**"
  47. - "cmd/**"
  48. - "deploy/**"
  49. - "e2e/framework/**"
  50. - "e2e/suites/provider/cases/fake/**"
  51. - "e2e/suites/provider/cases/kubernetes/**"
  52. - "e2e/suites/provider/cases/template/**"
  53. - "e2e/suites/provider/cases/common/**"
  54. enabled: true
  55. # The CRD provider reads arbitrary custom resources from the local cluster
  56. # API, so it needs no credentials and no addon. It gets its own leg rather
  57. # than joining core-smoke because its specs install a cluster-scoped test CRD
  58. # and cluster-wide RBAC, heavier setup than the rest of that leg carries.
  59. # Like every enabled area it feeds e2e-required, so a failure here does turn
  60. # the gate red; the split buys attribution (the failing leg names the
  61. # provider) and keeps a crd break from also failing the fake, kubernetes, and
  62. # template specs.
  63. - name: crd
  64. suite: provider
  65. labels: "crd && !managed"
  66. providers: [crd]
  67. secret_groups: []
  68. needs_secrets: false
  69. paths:
  70. - "providers/v1/crd/**"
  71. - "e2e/suites/provider/cases/crd/**"
  72. enabled: true
  73. # Self-hosted secret backends, installed as in-cluster addons (no cloud
  74. # creds). One leg per provider so a broken addon (e.g. conjur) fails only its
  75. # own leg, not the others, and the leg name matches what it runs.
  76. - name: vault
  77. suite: provider
  78. labels: "vault && !managed"
  79. providers: [vault]
  80. secret_groups: []
  81. needs_secrets: false
  82. paths:
  83. - "providers/v1/vault/**"
  84. - "e2e/suites/provider/cases/vault/**"
  85. enabled: true
  86. - name: openbao
  87. suite: provider
  88. labels: "openbao && !managed"
  89. providers: [openbao]
  90. secret_groups: []
  91. needs_secrets: false
  92. paths:
  93. - "providers/v1/openbao/**"
  94. - "e2e/suites/provider/cases/openbao/**"
  95. enabled: true
  96. - name: conjur
  97. suite: provider
  98. labels: "conjur && !managed"
  99. providers: [conjur]
  100. secret_groups: []
  101. needs_secrets: false
  102. paths:
  103. - "providers/v1/conjur/**"
  104. - "e2e/suites/provider/cases/conjur/**"
  105. enabled: true
  106. # Cloud provider, non-managed specs. Needs AWS OIDC credentials.
  107. - name: aws
  108. suite: provider
  109. labels: "aws && !managed"
  110. providers: [aws]
  111. secret_groups: [aws]
  112. needs_secrets: true
  113. paths:
  114. - "providers/v1/aws/**"
  115. - "e2e/suites/provider/cases/aws/**"
  116. enabled: true
  117. # ---- Cloud / external-API providers (each scoped to its own secret group). ----
  118. - name: gcp
  119. suite: provider
  120. labels: "gcp && !managed"
  121. providers: [gcp]
  122. secret_groups: [gcp]
  123. needs_secrets: true
  124. paths:
  125. - "providers/v1/gcp/**"
  126. - "e2e/suites/provider/cases/gcp/**"
  127. enabled: true
  128. - name: azure
  129. suite: provider
  130. labels: "azure && !managed"
  131. providers: [azure]
  132. secret_groups: [azure]
  133. needs_secrets: true
  134. paths:
  135. - "providers/v1/azure/**"
  136. - "e2e/suites/provider/cases/azure/**"
  137. enabled: true
  138. - name: scaleway
  139. suite: provider
  140. labels: "scaleway && !managed"
  141. providers: [scaleway]
  142. secret_groups: [scaleway]
  143. needs_secrets: true
  144. paths:
  145. - "providers/v1/scaleway/**"
  146. - "e2e/suites/provider/cases/scaleway/**"
  147. enabled: true
  148. - name: delinea
  149. suite: provider
  150. labels: "delinea && !managed"
  151. providers: [delinea]
  152. secret_groups: [delinea]
  153. needs_secrets: true
  154. paths:
  155. - "providers/v1/delinea/**"
  156. - "e2e/suites/provider/cases/delinea/**"
  157. enabled: true
  158. - name: secretserver
  159. suite: provider
  160. labels: "secretserver && !managed"
  161. providers: [secretserver]
  162. secret_groups: [secretserver]
  163. needs_secrets: true
  164. paths:
  165. - "providers/v1/secretserver/**"
  166. - "e2e/suites/provider/cases/secretserver/**"
  167. enabled: true
  168. # Infisical runs against an in-cluster Infisical addon (addon.NewInfisical),
  169. # not an external tenant, so it needs no repo secrets despite being a SaaS.
  170. - name: infisical
  171. suite: provider
  172. labels: "infisical && !managed"
  173. providers: [infisical]
  174. secret_groups: []
  175. needs_secrets: false
  176. paths:
  177. - "providers/v1/infisical/**"
  178. - "e2e/suites/provider/cases/infisical/**"
  179. enabled: true
  180. # Non-provider suites. No provider labels, so providers is empty; they run the
  181. # whole non-managed suite. flux and argocd exercise ESO under GitOps tools and
  182. # need no creds.
  183. #
  184. # The generator suite is split in two: the grafana generator talks to a live
  185. # external Grafana Cloud instance (its own leg below), while every other
  186. # generator runs in-cluster. This leg runs all generators except grafana; the
  187. # ecr and sts generators mint tokens against real AWS, so it needs the aws
  188. # group.
  189. - name: generator
  190. suite: generator
  191. labels: "!managed && !grafana"
  192. providers: []
  193. secret_groups: [aws]
  194. needs_secrets: true
  195. paths:
  196. - "apis/**"
  197. - "pkg/**"
  198. - "runtime/**"
  199. - "generators/**"
  200. - "e2e/suites/generator/**"
  201. enabled: true
  202. # The grafana generator, isolated. It depends on a live external Grafana Cloud
  203. # instance (GRAFANA_URL / GRAFANA_TOKEN); the suite even wakes a sleepy
  204. # instance in BeforeEach. Kept as its own leg so its external flakiness is
  205. # attributable and never masks the other generators.
  206. - name: grafana
  207. suite: generator
  208. labels: "grafana && !managed"
  209. providers: []
  210. secret_groups: [grafana]
  211. needs_secrets: true
  212. paths:
  213. - "generators/v1/grafana/**"
  214. - "e2e/suites/generator/grafana.go"
  215. enabled: true
  216. - name: flux
  217. suite: flux
  218. labels: "!managed"
  219. providers: []
  220. secret_groups: []
  221. needs_secrets: false
  222. paths:
  223. - "apis/**"
  224. - "pkg/**"
  225. - "runtime/**"
  226. - "e2e/suites/flux/**"
  227. enabled: true
  228. - name: argocd
  229. suite: argocd
  230. labels: "!managed"
  231. providers: []
  232. secret_groups: []
  233. needs_secrets: false
  234. paths:
  235. - "apis/**"
  236. - "pkg/**"
  237. - "runtime/**"
  238. - "e2e/suites/argocd/**"
  239. enabled: true
  240. # Suites that are compiled in but deliberately have no leg. They need an account
  241. # on an external service, and the project is not taking on further external
  242. # accounts: these providers are community maintained, and holding a leg green
  243. # against a third-party account (quotas, rate limits, credential rotation,
  244. # vendor-side breakage) is upkeep that falls on maintainers rather than on
  245. # whoever owns the provider. Existing external legs above predate this and stay.
  246. #
  247. # Whoever maintains one of these runs its suite locally with their own account;
  248. # see docs/contributing/e2e-credentials.md. They are still blank imported, so
  249. # they compile and a local GINKGO_LABELS selects them. matrix.py check requires
  250. # every imported provider to be covered by an enabled area or listed here, so a
  251. # new suite cannot end up running nowhere.
  252. local_only:
  253. - akeyless
  254. - gitlab
  255. - oracle