matrix.yaml 8.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270
  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
  14. # check-matrix.sh to prove every provider compiled into the suite
  15. # (suites/provider/cases/import.go) is tested somewhere. Not read
  16. # by CI 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 phase 1 CI runs this leg now. Disabled areas still
  28. # count for coverage and document the target matrix; flip to true
  29. # to expand the fan-out.
  30. #
  31. # All legs are enabled. Set enabled: false on an area to skip it (e.g. while a
  32. # provider's e2e is being fixed) without deleting its definition.
  33. areas:
  34. # In-cluster only, no external credentials. The required floor: this leg runs
  35. # on every PR (including forks) and is the stable branch-protection gate.
  36. - name: core-smoke
  37. suite: provider
  38. labels: "(fake || kubernetes || template) && !managed"
  39. providers: [fake, kubernetes, template]
  40. secret_groups: []
  41. needs_secrets: false
  42. paths:
  43. - "apis/**"
  44. - "pkg/**"
  45. - "runtime/**"
  46. - "cmd/**"
  47. - "deploy/**"
  48. - "e2e/framework/**"
  49. - "e2e/suites/provider/cases/fake/**"
  50. - "e2e/suites/provider/cases/kubernetes/**"
  51. - "e2e/suites/provider/cases/template/**"
  52. - "e2e/suites/provider/cases/common/**"
  53. enabled: true
  54. # The CRD provider reads arbitrary custom resources from the local cluster
  55. # API, so it needs no credentials and no addon. It gets its own leg rather
  56. # than joining core-smoke because its specs install a cluster-scoped test CRD
  57. # and cluster-wide RBAC, heavier setup than the rest of that leg carries.
  58. # Like every enabled area it feeds e2e-required, so a failure here does turn
  59. # the gate red; the split buys attribution (the failing leg names the
  60. # provider) and keeps a crd break from also failing the fake, kubernetes, and
  61. # template specs.
  62. - name: crd
  63. suite: provider
  64. labels: "crd && !managed"
  65. providers: [crd]
  66. secret_groups: []
  67. needs_secrets: false
  68. paths:
  69. - "providers/v1/crd/**"
  70. - "e2e/suites/provider/cases/crd/**"
  71. enabled: true
  72. # The webhook provider talks to an HTTP backend the suite runs inside its own
  73. # test process (spec.url accepts any address), so it needs no credentials and
  74. # no addon. Its own leg for the same reason as crd: attribution, and so a
  75. # webhook break does not also fail the fake, kubernetes and template specs.
  76. - name: webhook
  77. suite: provider
  78. labels: "webhook && !managed"
  79. providers: [webhook]
  80. secret_groups: []
  81. needs_secrets: false
  82. paths:
  83. - "providers/v1/webhook/**"
  84. - "e2e/suites/provider/cases/webhook/**"
  85. enabled: true
  86. # Self-hosted secret backends, installed as in-cluster addons (no cloud
  87. # creds). One leg per provider so a broken addon (e.g. conjur) fails only its
  88. # own leg, not the others, and the leg name matches what it runs.
  89. - name: vault
  90. suite: provider
  91. labels: "vault && !managed"
  92. providers: [vault]
  93. secret_groups: []
  94. needs_secrets: false
  95. paths:
  96. - "providers/v1/vault/**"
  97. - "e2e/suites/provider/cases/vault/**"
  98. enabled: true
  99. - name: openbao
  100. suite: provider
  101. labels: "openbao && !managed"
  102. providers: [openbao]
  103. secret_groups: []
  104. needs_secrets: false
  105. paths:
  106. - "providers/v1/openbao/**"
  107. - "e2e/suites/provider/cases/openbao/**"
  108. enabled: true
  109. - name: conjur
  110. suite: provider
  111. labels: "conjur && !managed"
  112. providers: [conjur]
  113. secret_groups: []
  114. needs_secrets: false
  115. paths:
  116. - "providers/v1/conjur/**"
  117. - "e2e/suites/provider/cases/conjur/**"
  118. enabled: true
  119. # Cloud provider, non-managed specs. Needs AWS OIDC credentials.
  120. - name: aws
  121. suite: provider
  122. labels: "aws && !managed"
  123. providers: [aws]
  124. secret_groups: [aws]
  125. needs_secrets: true
  126. paths:
  127. - "providers/v1/aws/**"
  128. - "e2e/suites/provider/cases/aws/**"
  129. enabled: true
  130. # ---- Cloud / external-API providers (each scoped to its own secret group). ----
  131. - name: gcp
  132. suite: provider
  133. labels: "gcp && !managed"
  134. providers: [gcp]
  135. secret_groups: [gcp]
  136. needs_secrets: true
  137. paths:
  138. - "providers/v1/gcp/**"
  139. - "e2e/suites/provider/cases/gcp/**"
  140. enabled: true
  141. - name: azure
  142. suite: provider
  143. labels: "azure && !managed"
  144. providers: [azure]
  145. secret_groups: [azure]
  146. needs_secrets: true
  147. paths:
  148. - "providers/v1/azure/**"
  149. - "e2e/suites/provider/cases/azure/**"
  150. enabled: true
  151. - name: scaleway
  152. suite: provider
  153. labels: "scaleway && !managed"
  154. providers: [scaleway]
  155. secret_groups: [scaleway]
  156. needs_secrets: true
  157. paths:
  158. - "providers/v1/scaleway/**"
  159. - "e2e/suites/provider/cases/scaleway/**"
  160. enabled: true
  161. - name: delinea
  162. suite: provider
  163. labels: "delinea && !managed"
  164. providers: [delinea]
  165. secret_groups: [delinea]
  166. needs_secrets: true
  167. paths:
  168. - "providers/v1/delinea/**"
  169. - "e2e/suites/provider/cases/delinea/**"
  170. enabled: true
  171. - name: secretserver
  172. suite: provider
  173. labels: "secretserver && !managed"
  174. providers: [secretserver]
  175. secret_groups: [secretserver]
  176. needs_secrets: true
  177. paths:
  178. - "providers/v1/secretserver/**"
  179. - "e2e/suites/provider/cases/secretserver/**"
  180. enabled: true
  181. # Infisical runs against an in-cluster Infisical addon (addon.NewInfisical),
  182. # not an external tenant, so it needs no repo secrets despite being a SaaS.
  183. - name: infisical
  184. suite: provider
  185. labels: "infisical && !managed"
  186. providers: [infisical]
  187. secret_groups: []
  188. needs_secrets: false
  189. paths:
  190. - "providers/v1/infisical/**"
  191. - "e2e/suites/provider/cases/infisical/**"
  192. enabled: true
  193. # Non-provider suites. No provider labels, so providers is empty; they run the
  194. # whole non-managed suite. flux and argocd exercise ESO under GitOps tools and
  195. # need no creds.
  196. #
  197. # The generator suite is split in two: the grafana generator talks to a live
  198. # external Grafana Cloud instance (its own leg below), while every other
  199. # generator runs in-cluster. This leg runs all generators except grafana; the
  200. # ecr and sts generators mint tokens against real AWS, so it needs the aws
  201. # group.
  202. - name: generator
  203. suite: generator
  204. labels: "!managed && !grafana"
  205. providers: []
  206. secret_groups: [aws]
  207. needs_secrets: true
  208. paths:
  209. - "apis/**"
  210. - "pkg/**"
  211. - "runtime/**"
  212. - "generators/**"
  213. - "e2e/suites/generator/**"
  214. enabled: true
  215. # The grafana generator, isolated. It depends on a live external Grafana Cloud
  216. # instance (GRAFANA_URL / GRAFANA_TOKEN); the suite even wakes a sleepy
  217. # instance in BeforeEach. Kept as its own leg so its external flakiness is
  218. # attributable and never masks the other generators.
  219. - name: grafana
  220. suite: generator
  221. labels: "grafana && !managed"
  222. providers: []
  223. secret_groups: [grafana]
  224. needs_secrets: true
  225. paths:
  226. - "generators/v1/grafana/**"
  227. - "e2e/suites/generator/grafana.go"
  228. enabled: true
  229. - name: flux
  230. suite: flux
  231. labels: "!managed"
  232. providers: []
  233. secret_groups: []
  234. needs_secrets: false
  235. paths:
  236. - "apis/**"
  237. - "pkg/**"
  238. - "runtime/**"
  239. - "e2e/suites/flux/**"
  240. enabled: true
  241. - name: argocd
  242. suite: argocd
  243. labels: "!managed"
  244. providers: []
  245. secret_groups: []
  246. needs_secrets: false
  247. paths:
  248. - "apis/**"
  249. - "pkg/**"
  250. - "runtime/**"
  251. - "e2e/suites/argocd/**"
  252. enabled: true