matrix.yaml 8.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255
  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. # Self-hosted secret backends, installed as in-cluster addons (no cloud
  73. # creds). One leg per provider so a broken addon (e.g. conjur) fails only its
  74. # own leg, not the others, and the leg name matches what it runs.
  75. - name: vault
  76. suite: provider
  77. labels: "vault && !managed"
  78. providers: [vault]
  79. secret_groups: []
  80. needs_secrets: false
  81. paths:
  82. - "providers/v1/vault/**"
  83. - "e2e/suites/provider/cases/vault/**"
  84. enabled: true
  85. - name: openbao
  86. suite: provider
  87. labels: "openbao && !managed"
  88. providers: [openbao]
  89. secret_groups: []
  90. needs_secrets: false
  91. paths:
  92. - "providers/v1/openbao/**"
  93. - "e2e/suites/provider/cases/openbao/**"
  94. enabled: true
  95. - name: conjur
  96. suite: provider
  97. labels: "conjur && !managed"
  98. providers: [conjur]
  99. secret_groups: []
  100. needs_secrets: false
  101. paths:
  102. - "providers/v1/conjur/**"
  103. - "e2e/suites/provider/cases/conjur/**"
  104. enabled: true
  105. # Cloud provider, non-managed specs. Needs AWS OIDC credentials.
  106. - name: aws
  107. suite: provider
  108. labels: "aws && !managed"
  109. providers: [aws]
  110. secret_groups: [aws]
  111. needs_secrets: true
  112. paths:
  113. - "providers/v1/aws/**"
  114. - "e2e/suites/provider/cases/aws/**"
  115. enabled: true
  116. # ---- Cloud / external-API providers (each scoped to its own secret group). ----
  117. - name: gcp
  118. suite: provider
  119. labels: "gcp && !managed"
  120. providers: [gcp]
  121. secret_groups: [gcp]
  122. needs_secrets: true
  123. paths:
  124. - "providers/v1/gcp/**"
  125. - "e2e/suites/provider/cases/gcp/**"
  126. enabled: true
  127. - name: azure
  128. suite: provider
  129. labels: "azure && !managed"
  130. providers: [azure]
  131. secret_groups: [azure]
  132. needs_secrets: true
  133. paths:
  134. - "providers/v1/azure/**"
  135. - "e2e/suites/provider/cases/azure/**"
  136. enabled: true
  137. - name: scaleway
  138. suite: provider
  139. labels: "scaleway && !managed"
  140. providers: [scaleway]
  141. secret_groups: [scaleway]
  142. needs_secrets: true
  143. paths:
  144. - "providers/v1/scaleway/**"
  145. - "e2e/suites/provider/cases/scaleway/**"
  146. enabled: true
  147. - name: delinea
  148. suite: provider
  149. labels: "delinea && !managed"
  150. providers: [delinea]
  151. secret_groups: [delinea]
  152. needs_secrets: true
  153. paths:
  154. - "providers/v1/delinea/**"
  155. - "e2e/suites/provider/cases/delinea/**"
  156. enabled: true
  157. - name: secretserver
  158. suite: provider
  159. labels: "secretserver && !managed"
  160. providers: [secretserver]
  161. secret_groups: [secretserver]
  162. needs_secrets: true
  163. paths:
  164. - "providers/v1/secretserver/**"
  165. - "e2e/suites/provider/cases/secretserver/**"
  166. enabled: true
  167. # Infisical runs against an in-cluster Infisical addon (addon.NewInfisical),
  168. # not an external tenant, so it needs no repo secrets despite being a SaaS.
  169. - name: infisical
  170. suite: provider
  171. labels: "infisical && !managed"
  172. providers: [infisical]
  173. secret_groups: []
  174. needs_secrets: false
  175. paths:
  176. - "providers/v1/infisical/**"
  177. - "e2e/suites/provider/cases/infisical/**"
  178. enabled: true
  179. # Non-provider suites. No provider labels, so providers is empty; they run the
  180. # whole non-managed suite. flux and argocd exercise ESO under GitOps tools and
  181. # need no creds.
  182. #
  183. # The generator suite is split in two: the grafana generator talks to a live
  184. # external Grafana Cloud instance (its own leg below), while every other
  185. # generator runs in-cluster. This leg runs all generators except grafana; the
  186. # ecr and sts generators mint tokens against real AWS, so it needs the aws
  187. # group.
  188. - name: generator
  189. suite: generator
  190. labels: "!managed && !grafana"
  191. providers: []
  192. secret_groups: [aws]
  193. needs_secrets: true
  194. paths:
  195. - "apis/**"
  196. - "pkg/**"
  197. - "runtime/**"
  198. - "generators/**"
  199. - "e2e/suites/generator/**"
  200. enabled: true
  201. # The grafana generator, isolated. It depends on a live external Grafana Cloud
  202. # instance (GRAFANA_URL / GRAFANA_TOKEN); the suite even wakes a sleepy
  203. # instance in BeforeEach. Kept as its own leg so its external flakiness is
  204. # attributable and never masks the other generators.
  205. - name: grafana
  206. suite: generator
  207. labels: "grafana && !managed"
  208. providers: []
  209. secret_groups: [grafana]
  210. needs_secrets: true
  211. paths:
  212. - "generators/v1/grafana/**"
  213. - "e2e/suites/generator/grafana.go"
  214. enabled: true
  215. - name: flux
  216. suite: flux
  217. labels: "!managed"
  218. providers: []
  219. secret_groups: []
  220. needs_secrets: false
  221. paths:
  222. - "apis/**"
  223. - "pkg/**"
  224. - "runtime/**"
  225. - "e2e/suites/flux/**"
  226. enabled: true
  227. - name: argocd
  228. suite: argocd
  229. labels: "!managed"
  230. providers: []
  231. secret_groups: []
  232. needs_secrets: false
  233. paths:
  234. - "apis/**"
  235. - "pkg/**"
  236. - "runtime/**"
  237. - "e2e/suites/argocd/**"
  238. enabled: true