Compare commits

...

168 Commits

Author SHA1 Message Date
gcp-cherry-pick-bot[bot] 6d5444a027
chore: update release notes (#1578) (#1579)
Signed-off-by: Charles-Edouard Brétéché <charles.edouard@nirmata.com>
Co-authored-by: Charles-Edouard Brétéché <charles.edouard@nirmata.com>
2024-06-24 07:56:07 +00:00
gcp-cherry-pick-bot[bot] 216cd86837
feat: add test scenarios support (#1576) (#1577)
* feat: add test scenarios support



* fix



* scenario id



---------

Signed-off-by: Charles-Edouard Brétéché <charles.edouard@nirmata.com>
Co-authored-by: Charles-Edouard Brétéché <charles.edouard@nirmata.com>
2024-06-23 21:02:38 +00:00
gcp-cherry-pick-bot[bot] 82b2504e93
chore(deps): bump ko-build/setup-ko from 0.6 to 0.7 (#1572) (#1575)
Bumps [ko-build/setup-ko](https://github.com/ko-build/setup-ko) from 0.6 to 0.7.
- [Release notes](https://github.com/ko-build/setup-ko/releases)
- [Commits](ace48d7935...3aebd0597d)

---
updated-dependencies:
- dependency-name: ko-build/setup-ko
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-06-18 20:05:11 +00:00
gcp-cherry-pick-bot[bot] 813e10e9fd
chore(deps): bump aquasecurity/trivy-action from 0.22.0 to 0.23.0 (#1573) (#1574)
Bumps [aquasecurity/trivy-action](https://github.com/aquasecurity/trivy-action) from 0.22.0 to 0.23.0.
- [Release notes](https://github.com/aquasecurity/trivy-action/releases)
- [Commits](595be6a0f6...7c2007bcb5)

---
updated-dependencies:
- dependency-name: aquasecurity/trivy-action
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-06-18 15:18:50 +00:00
gcp-cherry-pick-bot[bot] 0805301f6a
refactor: v1alpha2 api (#1567) (#1570)
Signed-off-by: Charles-Edouard Brétéché <charles.edouard@nirmata.com>
Co-authored-by: Charles-Edouard Brétéché <charles.edouard@nirmata.com>
2024-06-17 11:06:42 +00:00
gcp-cherry-pick-bot[bot] 99373ca197
chore(deps): bump github.com/spf13/cobra from 1.8.0 to 1.8.1 (#1568) (#1569)
Bumps [github.com/spf13/cobra](https://github.com/spf13/cobra) from 1.8.0 to 1.8.1.
- [Release notes](https://github.com/spf13/cobra/releases)
- [Commits](https://github.com/spf13/cobra/compare/v1.8.0...v1.8.1)

---
updated-dependencies:
- dependency-name: github.com/spf13/cobra
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-06-17 10:08:28 +00:00
gcp-cherry-pick-bot[bot] 4b42a99474
chore(deps): bump zgosalvez/github-actions-ensure-sha-pinned-actions (#1565) (#1566)
Bumps [zgosalvez/github-actions-ensure-sha-pinned-actions](https://github.com/zgosalvez/github-actions-ensure-sha-pinned-actions) from 3.0.7 to 3.0.9.
- [Release notes](https://github.com/zgosalvez/github-actions-ensure-sha-pinned-actions/releases)
- [Commits](76d1d8e0b0...74606c3045)

---
updated-dependencies:
- dependency-name: zgosalvez/github-actions-ensure-sha-pinned-actions
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-06-17 09:59:15 +00:00
gcp-cherry-pick-bot[bot] 362749b645
chore(deps): bump github/codeql-action from 3.25.9 to 3.25.10 (#1563) (#1564)
Bumps [github/codeql-action](https://github.com/github/codeql-action) from 3.25.9 to 3.25.10.
- [Release notes](https://github.com/github/codeql-action/releases)
- [Changelog](https://github.com/github/codeql-action/blob/main/CHANGELOG.md)
- [Commits](530d4feaa9...23acc5c183)

---
updated-dependencies:
- dependency-name: github/codeql-action
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-06-14 14:51:21 +02:00
gcp-cherry-pick-bot[bot] f6d484ed83
chore(deps): bump actions/checkout from 4.1.6 to 4.1.7 (#1551) (#1562)
Bumps [actions/checkout](https://github.com/actions/checkout) from 4.1.6 to 4.1.7.
- [Release notes](https://github.com/actions/checkout/releases)
- [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md)
- [Commits](a5ac7e51b4...692973e3d9)

---
updated-dependencies:
- dependency-name: actions/checkout
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-06-14 07:05:15 +00:00
gcp-cherry-pick-bot[bot] 60545e5b54
chore(deps): bump codecov/codecov-action from 4.4.1 to 4.5.0 (#1552) (#1561)
Bumps [codecov/codecov-action](https://github.com/codecov/codecov-action) from 4.4.1 to 4.5.0.
- [Release notes](https://github.com/codecov/codecov-action/releases)
- [Changelog](https://github.com/codecov/codecov-action/blob/main/CHANGELOG.md)
- [Commits](125fc84a9a...e28ff129e5)

---
updated-dependencies:
- dependency-name: codecov/codecov-action
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-06-13 12:24:26 +00:00
gcp-cherry-pick-bot[bot] 55d5bb8ace
chore(deps): bump github/codeql-action from 3.25.8 to 3.25.9 (#1553) (#1560)
Bumps [github/codeql-action](https://github.com/github/codeql-action) from 3.25.8 to 3.25.9.
- [Release notes](https://github.com/github/codeql-action/releases)
- [Changelog](https://github.com/github/codeql-action/blob/main/CHANGELOG.md)
- [Commits](2e230e8fe0...530d4feaa9)

---
updated-dependencies:
- dependency-name: github/codeql-action
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-06-13 10:34:13 +00:00
gcp-cherry-pick-bot[bot] 2c097c4087
chore(deps): bump k8s.io/client-go from 0.30.1 to 0.30.2 (#1555) (#1559)
Bumps [k8s.io/client-go](https://github.com/kubernetes/client-go) from 0.30.1 to 0.30.2.
- [Changelog](https://github.com/kubernetes/client-go/blob/master/CHANGELOG.md)
- [Commits](https://github.com/kubernetes/client-go/compare/v0.30.1...v0.30.2)

---
updated-dependencies:
- dependency-name: k8s.io/client-go
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-06-13 10:25:44 +00:00
gcp-cherry-pick-bot[bot] 05ba99f6e6
chore(deps): bump k8s.io/apimachinery from 0.30.1 to 0.30.2 (#1556) (#1558)
Bumps [k8s.io/apimachinery](https://github.com/kubernetes/apimachinery) from 0.30.1 to 0.30.2.
- [Commits](https://github.com/kubernetes/apimachinery/compare/v0.30.1...v0.30.2)

---
updated-dependencies:
- dependency-name: k8s.io/apimachinery
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-06-13 10:16:52 +00:00
gcp-cherry-pick-bot[bot] ee6520bf95
feat: more test v1alpha2 changes (#1533) (#1550)
* feat: more test v1alpha2 changes



* action types



* operation



* catch



---------

Signed-off-by: Charles-Edouard Brétéché <charles.edouard@nirmata.com>
Co-authored-by: Charles-Edouard Brétéché <charles.edouard@nirmata.com>
2024-06-13 12:06:40 +02:00
gcp-cherry-pick-bot[bot] 0fdf5cddd9
refactor: action api structs (#1548) (#1549)
Signed-off-by: Charles-Edouard Brétéché <charles.edouard@nirmata.com>
Co-authored-by: Charles-Edouard Brétéché <charles.edouard@nirmata.com>
2024-06-12 14:48:23 +00:00
gcp-cherry-pick-bot[bot] 423692c22d
refactor: action api structs (#1546) (#1547)
Signed-off-by: Charles-Edouard Brétéché <charles.edouard@nirmata.com>
Co-authored-by: Charles-Edouard Brétéché <charles.edouard@nirmata.com>
2024-06-12 09:33:32 +00:00
gcp-cherry-pick-bot[bot] 013ec08958
fix: use python virtual env (#1544) (#1545)
Signed-off-by: Charles-Edouard Brétéché <charles.edouard@nirmata.com>
Co-authored-by: Charles-Edouard Brétéché <charles.edouard@nirmata.com>
2024-06-10 19:51:16 +00:00
gcp-cherry-pick-bot[bot] ee8e1f1825
chore(deps): bump github.com/kudobuilder/kuttl from 0.16.0 to 0.17.0 (#1542) (#1543)
Bumps [github.com/kudobuilder/kuttl](https://github.com/kudobuilder/kuttl) from 0.16.0 to 0.17.0.
- [Release notes](https://github.com/kudobuilder/kuttl/releases)
- [Changelog](https://github.com/kudobuilder/kuttl/blob/main/RELEASE.md)
- [Commits](https://github.com/kudobuilder/kuttl/compare/v0.16.0...v0.17.0)

---
updated-dependencies:
- dependency-name: github.com/kudobuilder/kuttl
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-06-10 10:25:31 +00:00
gcp-cherry-pick-bot[bot] 7a241ad029
chore(deps): bump zgosalvez/github-actions-ensure-sha-pinned-actions (#1540) (#1541)
Bumps [zgosalvez/github-actions-ensure-sha-pinned-actions](https://github.com/zgosalvez/github-actions-ensure-sha-pinned-actions) from 3.0.6 to 3.0.7.
- [Release notes](https://github.com/zgosalvez/github-actions-ensure-sha-pinned-actions/releases)
- [Commits](2f2ebc6d91...76d1d8e0b0)

---
updated-dependencies:
- dependency-name: zgosalvez/github-actions-ensure-sha-pinned-actions
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-06-10 09:31:11 +00:00
gcp-cherry-pick-bot[bot] 4a82481aab
chore(deps): bump aquasecurity/trivy-action from 0.21.0 to 0.22.0 (#1534) (#1536)
Bumps [aquasecurity/trivy-action](https://github.com/aquasecurity/trivy-action) from 0.21.0 to 0.22.0.
- [Release notes](https://github.com/aquasecurity/trivy-action/releases)
- [Commits](fd25fed697...595be6a0f6)

---
updated-dependencies:
- dependency-name: aquasecurity/trivy-action
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-06-07 11:57:57 +00:00
gcp-cherry-pick-bot[bot] b305f4f348
chore(deps): bump goreleaser/goreleaser-action from 5.1.0 to 6.0.0 (#1518) (#1532)
Bumps [goreleaser/goreleaser-action](https://github.com/goreleaser/goreleaser-action) from 5.1.0 to 6.0.0.
- [Release notes](https://github.com/goreleaser/goreleaser-action/releases)
- [Commits](5742e2a039...286f3b13b1)

---
updated-dependencies:
- dependency-name: goreleaser/goreleaser-action
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Charles-Edouard Brétéché <charles.edouard@nirmata.com>
2024-06-06 20:33:48 +00:00
gcp-cherry-pick-bot[bot] f1e9450194
fix: default values in api (#1530) (#1531)
Signed-off-by: Charles-Edouard Brétéché <charles.edouard@nirmata.com>
Co-authored-by: Charles-Edouard Brétéché <charles.edouard@nirmata.com>
2024-06-06 20:03:59 +00:00
gcp-cherry-pick-bot[bot] aed1f4307b
chore: fix release notes (#1527) (#1529)
Signed-off-by: Charles-Edouard Brétéché <charles.edouard@nirmata.com>
Co-authored-by: Charles-Edouard Brétéché <charles.edouard@nirmata.com>
2024-06-06 13:31:03 +00:00
gcp-cherry-pick-bot[bot] 56f7b12c31
release: v0.2.4 (#1523) (#1524)
Signed-off-by: Charles-Edouard Brétéché <charles.edouard@nirmata.com>
Co-authored-by: Charles-Edouard Brétéché <charles.edouard@nirmata.com>
2024-06-06 14:18:53 +02:00
dependabot[bot] 558ab42ade chore(deps): bump github/codeql-action from 3.25.7 to 3.25.8 (#1517)
Bumps [github/codeql-action](https://github.com/github/codeql-action) from 3.25.7 to 3.25.8.
- [Release notes](https://github.com/github/codeql-action/releases)
- [Changelog](https://github.com/github/codeql-action/blob/main/CHANGELOG.md)
- [Commits](f079b84933...2e230e8fe0)

---
updated-dependencies:
- dependency-name: github/codeql-action
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Signed-off-by: Charles-Edouard Brétéché <charles.edouard@nirmata.com>
2024-06-06 13:57:47 +02:00
gcp-cherry-pick-bot[bot] 60623e67fc
chore: update release notes (#1521) (#1522)
Signed-off-by: Charles-Edouard Brétéché <charles.edouard@nirmata.com>
Co-authored-by: Charles-Edouard Brétéché <charles.edouard@nirmata.com>
2024-06-06 11:51:34 +00:00
gcp-cherry-pick-bot[bot] 093c9e37b0
chore(deps): bump sigs.k8s.io/controller-runtime from 0.18.3 to 0.18.4 (#1519) (#1520)
Bumps [sigs.k8s.io/controller-runtime](https://github.com/kubernetes-sigs/controller-runtime) from 0.18.3 to 0.18.4.
- [Release notes](https://github.com/kubernetes-sigs/controller-runtime/releases)
- [Changelog](https://github.com/kubernetes-sigs/controller-runtime/blob/main/RELEASE.md)
- [Commits](https://github.com/kubernetes-sigs/controller-runtime/compare/v0.18.3...v0.18.4)

---
updated-dependencies:
- dependency-name: sigs.k8s.io/controller-runtime
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-06-06 11:27:22 +00:00
gcp-cherry-pick-bot[bot] 18d99b5e9f
feat: introduce test v1alpha2 (#1493) (#1516)
* feat: introduce test v1alpha2



* fix merge



* test options



---------

Signed-off-by: Charles-Edouard Brétéché <charles.edouard@nirmata.com>
Co-authored-by: Charles-Edouard Brétéché <charles.edouard@nirmata.com>
2024-06-04 10:00:08 +02:00
gcp-cherry-pick-bot[bot] fa19a76cf7
refactor: merge catch and finally structs (#1514) (#1515)
Signed-off-by: Charles-Edouard Brétéché <charles.edouard@nirmata.com>
Co-authored-by: Charles-Edouard Brétéché <charles.edouard@nirmata.com>
2024-06-04 01:36:50 +02:00
gcp-cherry-pick-bot[bot] 9b05a247d5
feat: add missing operations (#1510) (#1513)
Signed-off-by: Charles-Edouard Brétéché <charles.edouard@nirmata.com>
Co-authored-by: Charles-Edouard Brétéché <charles.edouard@nirmata.com>
2024-06-04 00:30:04 +02:00
gcp-cherry-pick-bot[bot] a27c25512a
fix: patch validation incorrect field (#1511) (#1512)
Signed-off-by: Charles-Edouard Brétéché <charles.edouard@nirmata.com>
Co-authored-by: Charles-Edouard Brétéché <charles.edouard@nirmata.com>
2024-06-03 23:59:15 +02:00
gcp-cherry-pick-bot[bot] a99022371b
fix: templating options defaulting in v1alpha2 (#1508) (#1509)
* fix: templating options defaulting in v1alpha2



* fix tests



---------

Signed-off-by: Charles-Edouard Brétéché <charles.edouard@nirmata.com>
Co-authored-by: Charles-Edouard Brétéché <charles.edouard@nirmata.com>
2024-06-03 17:49:42 +00:00
gcp-cherry-pick-bot[bot] e337ce6c77
chore(deps): bump zgosalvez/github-actions-ensure-sha-pinned-actions (#1506) (#1507)
Bumps [zgosalvez/github-actions-ensure-sha-pinned-actions](https://github.com/zgosalvez/github-actions-ensure-sha-pinned-actions) from 3.0.5 to 3.0.6.
- [Release notes](https://github.com/zgosalvez/github-actions-ensure-sha-pinned-actions/releases)
- [Commits](40e45e738b...2f2ebc6d91)

---
updated-dependencies:
- dependency-name: zgosalvez/github-actions-ensure-sha-pinned-actions
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-06-03 13:54:53 +00:00
gcp-cherry-pick-bot[bot] a215bb2ef4
chore: bump a couple of deps (#1503) (#1504)
Signed-off-by: Charles-Edouard Brétéché <charles.edouard@nirmata.com>
Co-authored-by: Charles-Edouard Brétéché <charles.edouard@nirmata.com>
2024-06-01 23:56:38 +00:00
gcp-cherry-pick-bot[bot] 6f81e73441
chore: bump kyverno-json (#1501) (#1502)
Signed-off-by: Charles-Edouard Brétéché <charles.edouard@nirmata.com>
Co-authored-by: Charles-Edouard Brétéché <charles.edouard@nirmata.com>
2024-06-01 09:07:04 +00:00
gcp-cherry-pick-bot[bot] be87640044
chore: remove old config file (#1498) (#1499)
Signed-off-by: Charles-Edouard Brétéché <charles.edouard@nirmata.com>
Co-authored-by: Charles-Edouard Brétéché <charles.edouard@nirmata.com>
2024-05-31 02:10:10 +02:00
gcp-cherry-pick-bot[bot] 05aefe91df
feat: add file support to delete operation (#1496) (#1497)
Signed-off-by: Charles-Edouard Brétéché <charles.edouard@nirmata.com>
Co-authored-by: Charles-Edouard Brétéché <charles.edouard@nirmata.com>
2024-05-30 22:30:55 +00:00
gcp-cherry-pick-bot[bot] a301cb7c9c
refactor: delete operation reference (#1494) (#1495)
Signed-off-by: Charles-Edouard Brétéché <charles.edouard@nirmata.com>
Co-authored-by: Charles-Edouard Brétéché <charles.edouard@nirmata.com>
2024-05-30 13:20:48 +00:00
gcp-cherry-pick-bot[bot] dc507c2315
chore: bump kubectl-validate (#1490) (#1491)
Signed-off-by: Charles-Edouard Brétéché <charles.edouard@nirmata.com>
Co-authored-by: Charles-Edouard Brétéché <charles.edouard@nirmata.com>
2024-05-30 10:30:41 +00:00
gcp-cherry-pick-bot[bot] bac32f71fd
fix: yaml anchors processing (#1487) (#1489)
* fix: yaml anchors processing



* feature flag



* fix test



---------

Signed-off-by: Charles-Edouard Brétéché <charles.edouard@nirmata.com>
Co-authored-by: Charles-Edouard Brétéché <charles.edouard@nirmata.com>
2024-05-30 09:51:00 +00:00
gcp-cherry-pick-bot[bot] bcbff46a1e
fix: remove deprecated direct resource support (#1479) (#1486)
* fix: remove deprecated direct resource support



* fix



* rm dead code



* fix tests



* fix tests



* clean



---------

Signed-off-by: Charles-Edouard Brétéché <charles.edouard@nirmata.com>
Co-authored-by: Charles-Edouard Brétéché <charles.edouard@nirmata.com>
2024-05-29 21:18:40 +00:00
gcp-cherry-pick-bot[bot] 94d92efe85
feat: add test metadata binding (#1484) (#1485)
Signed-off-by: Charles-Edouard Brétéché <charles.edouard@nirmata.com>
Co-authored-by: Charles-Edouard Brétéché <charles.edouard@nirmata.com>
2024-05-29 14:56:38 +00:00
gcp-cherry-pick-bot[bot] ea600f38a7
refactor: introduce api clusters type (#1482) (#1483)
Signed-off-by: Charles-Edouard Brétéché <charles.edouard@nirmata.com>
Co-authored-by: Charles-Edouard Brétéché <charles.edouard@nirmata.com>
2024-05-29 11:39:52 +00:00
gcp-cherry-pick-bot[bot] fd4609ddc6
docs: remove code markers on titles in api reference documentation (#1480) (#1481)
Signed-off-by: Charles-Edouard Brétéché <charles.edouard@nirmata.com>
Co-authored-by: Charles-Edouard Brétéché <charles.edouard@nirmata.com>
2024-05-29 08:44:17 +00:00
gcp-cherry-pick-bot[bot] b70ab1e301
release: v0.2.3 (#1473) (#1476)
Signed-off-by: Charles-Edouard Brétéché <charles.edouard@nirmata.com>
Co-authored-by: Charles-Edouard Brétéché <charles.edouard@nirmata.com>
2024-05-29 07:02:49 +00:00
gcp-cherry-pick-bot[bot] 27971133cb
fix: deletion propagation flag (#1474) (#1475)
Signed-off-by: Charles-Edouard Brétéché <charles.edouard@nirmata.com>
Co-authored-by: Charles-Edouard Brétéché <charles.edouard@nirmata.com>
2024-05-28 23:50:02 +00:00
gcp-cherry-pick-bot[bot] 26589f3206
chore: proof read docs (#1470) (#1472)
Signed-off-by: Charles-Edouard Brétéché <charles.edouard@nirmata.com>
Co-authored-by: Charles-Edouard Brétéché <charles.edouard@nirmata.com>
2024-05-28 21:36:57 +00:00
gcp-cherry-pick-bot[bot] de919e9612
chore: update v0.2.3 release notes (#1468) (#1469)
Signed-off-by: Charles-Edouard Brétéché <charles.edouard@nirmata.com>
Co-authored-by: Charles-Edouard Brétéché <charles.edouard@nirmata.com>
2024-05-27 19:49:17 +00:00
gcp-cherry-pick-bot[bot] 07eb449842
chore: add positive/negative testing to home (#1466) (#1467)
Signed-off-by: Charles-Edouard Brétéché <charles.edouard@nirmata.com>
Co-authored-by: Charles-Edouard Brétéché <charles.edouard@nirmata.com>
2024-05-27 18:57:11 +00:00
gcp-cherry-pick-bot[bot] cf2c77e95c
chore: update home (#1463) (#1465)
Signed-off-by: Charles-Edouard Brétéché <charles.edouard@nirmata.com>
Co-authored-by: Charles-Edouard Brétéché <charles.edouard@nirmata.com>
2024-05-27 17:38:00 +00:00
gcp-cherry-pick-bot[bot] 20e426e34f
refactor: introduce operation base (#1462) (#1464)
Signed-off-by: Charles-Edouard Brétéché <charles.edouard@nirmata.com>
Co-authored-by: Charles-Edouard Brétéché <charles.edouard@nirmata.com>
2024-05-27 16:14:11 +00:00
gcp-cherry-pick-bot[bot] 9ba295143d
docs: restructure test docs (#1460) (#1461)
Signed-off-by: Charles-Edouard Brétéché <charles.edouard@nirmata.com>
Co-authored-by: Charles-Edouard Brétéché <charles.edouard@nirmata.com>
2024-05-27 15:46:31 +00:00
gcp-cherry-pick-bot[bot] 64bd2fe1b7
docs: restructure test docs (#1458) (#1459)
* docs: restructure test docs



* docs: restructure test docs



---------

Signed-off-by: Charles-Edouard Brétéché <charles.edouard@nirmata.com>
Co-authored-by: Charles-Edouard Brétéché <charles.edouard@nirmata.com>
2024-05-27 13:10:24 +00:00
gcp-cherry-pick-bot[bot] 0514dc2d38
docs: restructure test docs (#1454) (#1457)
* docs: restructure test docs



* save



---------

Signed-off-by: Charles-Edouard Brétéché <charles.edouard@nirmata.com>
Co-authored-by: Charles-Edouard Brétéché <charles.edouard@nirmata.com>
2024-05-27 11:07:15 +00:00
gcp-cherry-pick-bot[bot] 693c0d9c16
fix: linter error (#1455) (#1456)
Signed-off-by: Charles-Edouard Brétéché <charles.edouard@nirmata.com>
Co-authored-by: Charles-Edouard Brétéché <charles.edouard@nirmata.com>
2024-05-27 12:58:42 +02:00
gcp-cherry-pick-bot[bot] 5e45e98ab0
docs: restructure test docs (#1450) (#1451)
Signed-off-by: Charles-Edouard Brétéché <charles.edouard@nirmata.com>
Co-authored-by: Charles-Edouard Brétéché <charles.edouard@nirmata.com>
2024-05-23 23:57:43 +00:00
gcp-cherry-pick-bot[bot] a5a8d5c53e
docs: restructure test docs (#1448) (#1449)
Signed-off-by: Charles-Edouard Brétéché <charles.edouard@nirmata.com>
Co-authored-by: Charles-Edouard Brétéché <charles.edouard@nirmata.com>
2024-05-23 23:30:43 +02:00
gcp-cherry-pick-bot[bot] e0abec8381
docs: restructure test docs (#1446) (#1447)
* chore: reorganise reference docs storage (#1443)



* docs: restructure test docs



---------

Signed-off-by: Charles-Edouard Brétéché <charles.edouard@nirmata.com>
Co-authored-by: Charles-Edouard Brétéché <charles.edouard@nirmata.com>
2024-05-23 17:23:26 +00:00
gcp-cherry-pick-bot[bot] 46d6e5e105
chore: reorganise reference docs storage (#1443) (#1444)
Signed-off-by: Charles-Edouard Brétéché <charles.edouard@nirmata.com>
Co-authored-by: Charles-Edouard Brétéché <charles.edouard@nirmata.com>
2024-05-23 15:09:46 +00:00
gcp-cherry-pick-bot[bot] bd0bba7ef5
docs: restructure test docs (#1441) (#1442)
Signed-off-by: Charles-Edouard Brétéché <charles.edouard@nirmata.com>
Co-authored-by: Charles-Edouard Brétéché <charles.edouard@nirmata.com>
2024-05-23 14:39:26 +00:00
gcp-cherry-pick-bot[bot] 31c043659a
fix: social cards (#1439) (#1440)
* chore: reference docs nits



* fix: social cards



---------

Signed-off-by: Charles-Edouard Brétéché <charles.edouard@nirmata.com>
Co-authored-by: Charles-Edouard Brétéché <charles.edouard@nirmata.com>
2024-05-23 11:05:34 +00:00
gcp-cherry-pick-bot[bot] 8fa8726974
chore: enable social cards (#1433) (#1438)
Signed-off-by: Charles-Edouard Brétéché <charles.edouard@nirmata.com>
Co-authored-by: Charles-Edouard Brétéché <charles.edouard@nirmata.com>
2024-05-23 10:57:32 +00:00
gcp-cherry-pick-bot[bot] b53fbef960
fix: docs typos (#1436) (#1437)
* chore: reference docs nits



* fix: docs typos



---------

Signed-off-by: Charles-Edouard Brétéché <charles.edouard@nirmata.com>
Co-authored-by: Charles-Edouard Brétéché <charles.edouard@nirmata.com>
2024-05-23 10:35:44 +00:00
gcp-cherry-pick-bot[bot] 79749433c4
chore: reference docs nits (#1434) (#1435)
Signed-off-by: Charles-Edouard Brétéché <charles.edouard@nirmata.com>
Co-authored-by: Charles-Edouard Brétéché <charles.edouard@nirmata.com>
2024-05-23 10:20:19 +00:00
gcp-cherry-pick-bot[bot] 082e83eb41
chore(deps): bump aquasecurity/trivy-action from 0.20.0 to 0.21.0 (#1431) (#1432)
Bumps [aquasecurity/trivy-action](https://github.com/aquasecurity/trivy-action) from 0.20.0 to 0.21.0.
- [Release notes](https://github.com/aquasecurity/trivy-action/releases)
- [Commits](b2933f565d...fd25fed697)

---
updated-dependencies:
- dependency-name: aquasecurity/trivy-action
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-05-23 09:49:46 +00:00
gcp-cherry-pick-bot[bot] a26c3f3cea
feat: update default config to v1alpha2 (part 3) (#1429) (#1430)
Signed-off-by: Charles-Edouard Brétéché <charles.edouard@nirmata.com>
Co-authored-by: Charles-Edouard Brétéché <charles.edouard@nirmata.com>
2024-05-23 09:41:09 +00:00
gcp-cherry-pick-bot[bot] f17e00fd68
feat: update default config to v1alpha2 (part 2) (#1422) (#1427)
* feat: update default config to v1alpha2 (part 2)



* updates



---------

Signed-off-by: Charles-Edouard Brétéché <charles.edouard@nirmata.com>
Co-authored-by: Charles-Edouard Brétéché <charles.edouard@nirmata.com>
2024-05-23 09:26:19 +00:00
gcp-cherry-pick-bot[bot] 231ea9a79c
refactor: v1alpha2 configuration api (#1425) (#1426)
Signed-off-by: Charles-Edouard Brétéché <charles.edouard@nirmata.com>
Co-authored-by: Charles-Edouard Brétéché <charles.edouard@nirmata.com>
2024-05-23 07:10:59 +00:00
gcp-cherry-pick-bot[bot] fe176c0000
feat: add arrows to navigate home sections (#1423) (#1424)
Signed-off-by: Charles-Edouard Brétéché <charles.edouard@nirmata.com>
Co-authored-by: Charles-Edouard Brétéché <charles.edouard@nirmata.com>
2024-05-23 00:30:49 +00:00
gcp-cherry-pick-bot[bot] f5eec08361
docs: update config to v1alpha2 (#1418) (#1421)
Signed-off-by: Charles-Edouard Brétéché <charles.edouard@nirmata.com>
Co-authored-by: Charles-Edouard Brétéché <charles.edouard@nirmata.com>
2024-05-22 22:47:04 +00:00
gcp-cherry-pick-bot[bot] 13a0cf9082
feat: update default config to v1alpha2 (#1419) (#1420)
Signed-off-by: Charles-Edouard Brétéché <charles.edouard@nirmata.com>
Co-authored-by: Charles-Edouard Brétéché <charles.edouard@nirmata.com>
2024-05-22 20:55:46 +00:00
gcp-cherry-pick-bot[bot] 08787c49df
docs: improve docs pages (#1415) (#1416)
Signed-off-by: Charles-Edouard Brétéché <charles.edouard@nirmata.com>
Co-authored-by: Charles-Edouard Brétéché <charles.edouard@nirmata.com>
2024-05-22 15:46:34 +00:00
gcp-cherry-pick-bot[bot] 6a0605684f
docs: add bindings reference docs (#1413) (#1414)
* docs: rework configuration docs



* docs: add bindings reference docs



---------

Signed-off-by: Charles-Edouard Brétéché <charles.edouard@nirmata.com>
Co-authored-by: Charles-Edouard Brétéché <charles.edouard@nirmata.com>
2024-05-22 14:52:26 +00:00
gcp-cherry-pick-bot[bot] 0c62ea7eb1
feat: allow the configuration of the deletion propagation policy (#1325) (#1412)
* feat: allow the configuration of the deletion propagation policy



* chore: fix unit tests



* chore: fix codegen



* chore: fix codegen



---------

Signed-off-by: Mariam Fahmy <mariam.fahmy@nirmata.com>
Co-authored-by: Mariam Fahmy <mariamfahmy66@gmail.com>
2024-05-22 14:06:22 +00:00
gcp-cherry-pick-bot[bot] 68c3faaaa7
docs: rework configuration docs (#1410) (#1411)
Signed-off-by: Charles-Edouard Brétéché <charles.edouard@nirmata.com>
Co-authored-by: Charles-Edouard Brétéché <charles.edouard@nirmata.com>
2024-05-22 15:49:59 +02:00
gcp-cherry-pick-bot[bot] 7431f1c37b
--- (#1408) (#1409)
updated-dependencies:
- dependency-name: github.com/go-logr/logr
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-05-22 11:09:25 +00:00
gcp-cherry-pick-bot[bot] ce155eeae5
docs: multi cluster guide (#1406) (#1407)
Signed-off-by: Charles-Edouard Brétéché <charles.edouard@nirmata.com>
Co-authored-by: Charles-Edouard Brétéché <charles.edouard@nirmata.com>
2024-05-22 09:07:13 +00:00
gcp-cherry-pick-bot[bot] 42ee5aaa77
docs: remove examples (#1404) (#1405)
Signed-off-by: Charles-Edouard Brétéché <charles.edouard@nirmata.com>
Co-authored-by: Charles-Edouard Brétéché <charles.edouard@nirmata.com>
2024-05-22 08:36:32 +00:00
gcp-cherry-pick-bot[bot] 8bd9b98394
docs: improve assertion guide (#1402) (#1403)
Signed-off-by: Charles-Edouard Brétéché <charles.edouard@nirmata.com>
Co-authored-by: Charles-Edouard Brétéché <charles.edouard@nirmata.com>
2024-05-22 07:57:23 +00:00
gcp-cherry-pick-bot[bot] afcb015385
docs: fixed broken link in README (#1400) (#1401)
Signed-off-by: free6om <free6om.c@gmail.com>
Co-authored-by: free6om <free6om.c@gmail.com>
2024-05-22 09:36:17 +02:00
gcp-cherry-pick-bot[bot] bcfd85a2f0
docs: label selectors guide (#1398) (#1399)
Signed-off-by: Charles-Edouard Brétéché <charles.edouard@nirmata.com>
Co-authored-by: Charles-Edouard Brétéché <charles.edouard@nirmata.com>
2024-05-22 00:01:42 +00:00
gcp-cherry-pick-bot[bot] a5732f01bc
docs: negative testing guide (#1396) (#1397)
Signed-off-by: Charles-Edouard Brétéché <charles.edouard@nirmata.com>
Co-authored-by: Charles-Edouard Brétéché <charles.edouard@nirmata.com>
2024-05-21 23:32:13 +00:00
gcp-cherry-pick-bot[bot] 44b22d0e36
fix: css min-height (#1394) (#1395)
Signed-off-by: Charles-Edouard Brétéché <charles.edouard@nirmata.com>
Co-authored-by: Charles-Edouard Brétéché <charles.edouard@nirmata.com>
2024-05-21 23:15:54 +00:00
gcp-cherry-pick-bot[bot] 6773dc8cd3
docs: add more advanced guides (#1392) (#1393)
Signed-off-by: Charles-Edouard Brétéché <charles.edouard@nirmata.com>
Co-authored-by: Charles-Edouard Brétéché <charles.edouard@nirmata.com>
2024-05-21 22:06:19 +00:00
gcp-cherry-pick-bot[bot] 8bed4698ac
docs: add non resource assertion guide (#1389) (#1391)
Signed-off-by: Charles-Edouard Brétéché <charles.edouard@nirmata.com>
Co-authored-by: Charles-Edouard Brétéché <charles.edouard@nirmata.com>
2024-05-21 21:20:01 +00:00
gcp-cherry-pick-bot[bot] 1c5e38e88d
docs: advanced check kube version docs (#1386) (#1390)
Signed-off-by: Charles-Edouard Brétéché <charles.edouard@nirmata.com>
Co-authored-by: Charles-Edouard Brétéché <charles.edouard@nirmata.com>
2024-05-21 21:05:59 +00:00
gcp-cherry-pick-bot[bot] 180ae170ee
feat: add cleanup support to tests catalog (#1384) (#1388)
Signed-off-by: Charles-Edouard Brétéché <charles.edouard@nirmata.com>
Co-authored-by: Charles-Edouard Brétéché <charles.edouard@nirmata.com>
2024-05-21 20:51:52 +00:00
gcp-cherry-pick-bot[bot] eefb4482df
feat: add cleanup validation logic (#1385) (#1387)
Signed-off-by: Charles-Edouard Brétéché <charles.edouard@nirmata.com>
Co-authored-by: Charles-Edouard Brétéché <charles.edouard@nirmata.com>
2024-05-21 20:35:29 +00:00
gcp-cherry-pick-bot[bot] 384132c04d
docs: add reference docs tab (#1375) (#1383)
Signed-off-by: Charles-Edouard Brétéché <charles.edouard@nirmata.com>
Co-authored-by: Charles-Edouard Brétéché <charles.edouard@nirmata.com>
2024-05-21 19:41:54 +00:00
gcp-cherry-pick-bot[bot] 63c0b6a5d7
docs: move configuration in its own tab (#1374) (#1382)
Signed-off-by: Charles-Edouard Brétéché <charles.edouard@nirmata.com>
Co-authored-by: Charles-Edouard Brétéché <charles.edouard@nirmata.com>
2024-05-21 19:28:02 +00:00
gcp-cherry-pick-bot[bot] 78b71a0eef
docs: crds use case docs (#1370) (#1380)
Signed-off-by: Charles-Edouard Brétéché <charles.edouard@nirmata.com>
Co-authored-by: Charles-Edouard Brétéché <charles.edouard@nirmata.com>
2024-05-21 19:10:54 +00:00
gcp-cherry-pick-bot[bot] e80ebb20a4
release: v0.2.2 (#1376) (#1377)
Signed-off-by: Charles-Edouard Brétéché <charles.edouard@nirmata.com>
Co-authored-by: Charles-Edouard Brétéché <charles.edouard@nirmata.com>
2024-05-21 19:25:14 +02:00
gcp-cherry-pick-bot[bot] feb61e03fa
docs: add cleanup docs (#1368) (#1371)
Signed-off-by: Charles-Edouard Brétéché <charles.edouard@nirmata.com>
Co-authored-by: Charles-Edouard Brétéché <charles.edouard@nirmata.com>
2024-05-21 18:03:36 +02:00
gcp-cherry-pick-bot[bot] 38dc40a360
chore: update release notes (#1369) (#1372)
Signed-off-by: Charles-Edouard Brétéché <charles.edouard@nirmata.com>
Co-authored-by: Charles-Edouard Brétéché <charles.edouard@nirmata.com>
2024-05-21 15:52:29 +00:00
gcp-cherry-pick-bot[bot] 1d4741a01c
feat: add cleanup handler (#1364) (#1367)
Signed-off-by: Charles-Edouard Brétéché <charles.edouard@nirmata.com>
Co-authored-by: Charles-Edouard Brétéché <charles.edouard@nirmata.com>
2024-05-21 13:43:11 +00:00
gcp-cherry-pick-bot[bot] 35e0abe471
fix: catch/finally execution order (#1351) (#1362)
* fix: catch/finally execution order



* fix tests



* skip bad test



---------

Signed-off-by: Charles-Edouard Brétéché <charles.edouard@nirmata.com>
Co-authored-by: Charles-Edouard Brétéché <charles.edouard@nirmata.com>
2024-05-21 13:34:02 +02:00
gcp-cherry-pick-bot[bot] 56bf5af759
docs: add placeholder for advanced use cases (#1361) (#1363)
Signed-off-by: Charles-Edouard Brétéché <charles.edouard@nirmata.com>
Co-authored-by: Charles-Edouard Brétéché <charles.edouard@nirmata.com>
2024-05-21 11:27:18 +00:00
gcp-cherry-pick-bot[bot] fa6ba2e721
docs: operation outputs page (#1358) (#1360)
Signed-off-by: Charles-Edouard Brétéché <charles.edouard@nirmata.com>
Co-authored-by: Charles-Edouard Brétéché <charles.edouard@nirmata.com>
2024-05-21 10:45:52 +00:00
gcp-cherry-pick-bot[bot] 99f37cadd2
--- (#1349) (#1359)
updated-dependencies:
- dependency-name: anchore/sbom-action
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-05-21 10:37:18 +00:00
gcp-cherry-pick-bot[bot] 3679a1dd43
docs: resource templating docs (#1354) (#1357)
Signed-off-by: Charles-Edouard Brétéché <charles.edouard@nirmata.com>
Co-authored-by: Charles-Edouard Brétéché <charles.edouard@nirmata.com>
2024-05-21 10:20:23 +00:00
gcp-cherry-pick-bot[bot] 02ec44faf9
--- (#1348) (#1356)
updated-dependencies:
- dependency-name: codecov/codecov-action
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-05-21 10:06:08 +00:00
gcp-cherry-pick-bot[bot] f3fd620429
--- (#1350) (#1353)
updated-dependencies:
- dependency-name: github/codeql-action
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-05-21 09:52:17 +00:00
gcp-cherry-pick-bot[bot] 78a1d00f05
chore(deps): Bump github/codeql-action from 2.13.4 to 3.25.5 (#1342) (#1344)
Bumps [github/codeql-action](https://github.com/github/codeql-action) from 2.13.4 to 3.25.5.
- [Release notes](https://github.com/github/codeql-action/releases)
- [Changelog](https://github.com/github/codeql-action/blob/main/CHANGELOG.md)
- [Commits](cdcdbb5797...b7cec75265)

---
updated-dependencies:
- dependency-name: github/codeql-action
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-05-20 22:24:39 +00:00
gcp-cherry-pick-bot[bot] f27c7756de
fix: linter issues (#1345) (#1346)
* fix: linter issues



* fix: linter issues



---------

Signed-off-by: Charles-Edouard Brétéché <charles.edouard@nirmata.com>
Co-authored-by: Charles-Edouard Brétéché <charles.edouard@nirmata.com>
2024-05-20 21:42:24 +00:00
gcp-cherry-pick-bot[bot] 955eabef77
chore: improve try catch finally page (#1338) (#1339)
Signed-off-by: Charles-Edouard Brétéché <charles.edouard@nirmata.com>
Co-authored-by: Charles-Edouard Brétéché <charles.edouard@nirmata.com>
2024-05-18 00:11:35 +00:00
gcp-cherry-pick-bot[bot] 9fabf9c33f
chore: improve bindings page (#1336) (#1337)
Signed-off-by: Charles-Edouard Brétéché <charles.edouard@nirmata.com>
Co-authored-by: Charles-Edouard Brétéché <charles.edouard@nirmata.com>
2024-05-18 00:02:14 +00:00
gcp-cherry-pick-bot[bot] 4fe68214e4
chore: improve timeouts quick start (#1334) (#1335)
Signed-off-by: Charles-Edouard Brétéché <charles.edouard@nirmata.com>
Co-authored-by: Charles-Edouard Brétéché <charles.edouard@nirmata.com>
2024-05-17 21:35:00 +00:00
gcp-cherry-pick-bot[bot] f91cb71a43
chore: improve next steps page (#1332) (#1333)
Signed-off-by: Charles-Edouard Brétéché <charles.edouard@nirmata.com>
Co-authored-by: Charles-Edouard Brétéché <charles.edouard@nirmata.com>
2024-05-17 20:21:41 +00:00
gcp-cherry-pick-bot[bot] 0b235f4851
chore: restructure the getting started guide (#1330) (#1331)
Signed-off-by: Charles-Edouard Brétéché <charles.edouard@nirmata.com>
Co-authored-by: Charles-Edouard Brétéché <charles.edouard@nirmata.com>
2024-05-17 18:30:38 +00:00
gcp-cherry-pick-bot[bot] 77ae277e86
chore: improve assertions quick start (#1326) (#1329)
Signed-off-by: Charles-Edouard Brétéché <charles.edouard@nirmata.com>
Co-authored-by: Charles-Edouard Brétéché <charles.edouard@nirmata.com>
2024-05-17 17:49:57 +00:00
gcp-cherry-pick-bot[bot] 50e5a45b85
chore: add resource templating into (#1323) (#1324)
Signed-off-by: Charles-Edouard Brétéché <charles.edouard@nirmata.com>
Co-authored-by: Charles-Edouard Brétéché <charles.edouard@nirmata.com>
2024-05-17 19:42:33 +02:00
gcp-cherry-pick-bot[bot] 90176eb538
chore: rework introduction (#1321) (#1322)
Signed-off-by: Charles-Edouard Brétéché <charles.edouard@nirmata.com>
Co-authored-by: Charles-Edouard Brétéché <charles.edouard@nirmata.com>
2024-05-17 14:48:55 +00:00
gcp-cherry-pick-bot[bot] da759b6b2b
chore: add missing adopters to the home page (#1319) (#1320)
Signed-off-by: Charles-Edouard Brétéché <charles.edouard@nirmata.com>
Co-authored-by: Charles-Edouard Brétéché <charles.edouard@nirmata.com>
2024-05-17 10:17:21 +00:00
gcp-cherry-pick-bot[bot] 7771f24a27
chore(deps): Bump actions/checkout from 4.1.5 to 4.1.6 (#1316) (#1318)
Bumps [actions/checkout](https://github.com/actions/checkout) from 4.1.5 to 4.1.6.
- [Release notes](https://github.com/actions/checkout/releases)
- [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md)
- [Commits](44c2b7a8a4...a5ac7e51b4)

---
updated-dependencies:
- dependency-name: actions/checkout
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-05-17 09:41:53 +00:00
gcp-cherry-pick-bot[bot] 649f593f0a
chore: improve install page (#1315) (#1317)
Signed-off-by: Charles-Edouard Brétéché <charles.edouard@nirmata.com>
Co-authored-by: Charles-Edouard Brétéché <charles.edouard@nirmata.com>
2024-05-17 09:32:59 +00:00
gcp-cherry-pick-bot[bot] 119d34696b
chore: move community page to its own tab (#1312) (#1313)
Signed-off-by: Charles-Edouard Brétéché <charles.edouard@nirmata.com>
Co-authored-by: Charles-Edouard Brétéché <charles.edouard@nirmata.com>
2024-05-17 08:29:12 +00:00
gcp-cherry-pick-bot[bot] 9585468a14
chore: remove blog (#1310) (#1311)
Signed-off-by: Charles-Edouard Brétéché <charles.edouard@nirmata.com>
Co-authored-by: Charles-Edouard Brétéché <charles.edouard@nirmata.com>
2024-05-17 07:26:22 +00:00
gcp-cherry-pick-bot[bot] e968e662ba
fix: improve home (#1303) (#1305)
Signed-off-by: Charles-Edouard Brétéché <charles.edouard@nirmata.com>
Co-authored-by: Charles-Edouard Brétéché <charles.edouard@nirmata.com>
2024-05-16 16:39:50 +00:00
gcp-cherry-pick-bot[bot] ed0bdae4bc
fix: mike (#1302) (#1304)
Signed-off-by: Charles-Edouard Brétéché <charles.edouard@nirmata.com>
Co-authored-by: Charles-Edouard Brétéché <charles.edouard@nirmata.com>
2024-05-16 16:32:18 +00:00
gcp-cherry-pick-bot[bot] 0bae442d66
fix: improve home page (#1300) (#1301)
Signed-off-by: Charles-Edouard Brétéché <charles.edouard@nirmata.com>
Co-authored-by: Charles-Edouard Brétéché <charles.edouard@nirmata.com>
2024-05-16 18:11:21 +02:00
gcp-cherry-pick-bot[bot] 7613418576
fix: disable instant nav (#1298) (#1299)
Signed-off-by: Charles-Edouard Brétéché <charles.edouard@nirmata.com>
Co-authored-by: Charles-Edouard Brétéché <charles.edouard@nirmata.com>
2024-05-16 14:09:54 +00:00
gcp-cherry-pick-bot[bot] 010db9c13b
feat: improve home page (#1292) (#1297)
Signed-off-by: Charles-Edouard Brétéché <charles.edouard@nirmata.com>
Co-authored-by: Charles-Edouard Brétéché <charles.edouard@nirmata.com>
2024-05-16 12:07:55 +00:00
gcp-cherry-pick-bot[bot] 29ebd16a57
fix: Use config file namespaceTemplate if set (#1279) (#1293)
Signed-off-by: Mike Bryant <mike@mikebryant.me.uk>
Co-authored-by: Mike Bryant <mike@mikebryant.me.uk>
2024-05-16 13:48:13 +02:00
gcp-cherry-pick-bot[bot] f9065d761f
release: v0.2.1 (#1287) (#1289)
Signed-off-by: Charles-Edouard Brétéché <charles.edouard@nirmata.com>
Co-authored-by: Charles-Edouard Brétéché <charles.edouard@nirmata.com>
2024-05-15 22:37:14 +00:00
gcp-cherry-pick-bot[bot] 6db661cf41
chore: add v0.2.1 in bug reports template (#1285) (#1288)
Signed-off-by: Charles-Edouard Brétéché <charles.edouard@nirmata.com>
Co-authored-by: Charles-Edouard Brétéché <charles.edouard@nirmata.com>
2024-05-15 22:29:10 +00:00
gcp-cherry-pick-bot[bot] 218e978bd4
release: v0.2.1 (#1284) (#1286)
Signed-off-by: Charles-Edouard Brétéché <charles.edouard@nirmata.com>
Co-authored-by: Charles-Edouard Brétéché <charles.edouard@nirmata.com>
2024-05-15 22:21:01 +00:00
gcp-cherry-pick-bot[bot] 23a5913303
chore: update docs (#1282) (#1283)
Signed-off-by: Charles-Edouard Brétéché <charles.edouard@nirmata.com>
Co-authored-by: Charles-Edouard Brétéché <charles.edouard@nirmata.com>
2024-05-15 19:54:40 +00:00
gcp-cherry-pick-bot[bot] efb3eb4ec0
chore: update release notes (#1280) (#1281)
Signed-off-by: Charles-Edouard Brétéché <charles.edouard@nirmata.com>
Co-authored-by: Charles-Edouard Brétéché <charles.edouard@nirmata.com>
2024-05-15 19:10:53 +00:00
gcp-cherry-pick-bot[bot] 5449554481
fix: make sure we resolve cluster only once (#1276) (#1277)
Signed-off-by: Charles-Edouard Brétéché <charles.edouard@nirmata.com>
Co-authored-by: Charles-Edouard Brétéché <charles.edouard@nirmata.com>
2024-05-15 08:21:51 +00:00
gcp-cherry-pick-bot[bot] 4915642163
chore(deps): Bump github.com/fatih/color from 1.16.0 to 1.17.0 (#1272) (#1274)
Bumps [github.com/fatih/color](https://github.com/fatih/color) from 1.16.0 to 1.17.0.
- [Release notes](https://github.com/fatih/color/releases)
- [Commits](https://github.com/fatih/color/compare/v1.16.0...v1.17.0)

---
updated-dependencies:
- dependency-name: github.com/fatih/color
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-05-14 21:34:11 +00:00
gcp-cherry-pick-bot[bot] 39adbf6274
chore(deps): Bump codecov/codecov-action from 4.3.1 to 4.4.0 (#1271) (#1273)
Bumps [codecov/codecov-action](https://github.com/codecov/codecov-action) from 4.3.1 to 4.4.0.
- [Release notes](https://github.com/codecov/codecov-action/releases)
- [Changelog](https://github.com/codecov/codecov-action/blob/main/CHANGELOG.md)
- [Commits](5ecb98a3c6...6d798873df)

---
updated-dependencies:
- dependency-name: codecov/codecov-action
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-05-14 21:13:26 +00:00
gcp-cherry-pick-bot[bot] c8fad0663b
feat: add direct cluster config support (#1207) (#1270)
* feat: add direct cluster config support



* refactor: clusters bank



* add note about cleanup changes



* cleanup



* tests



* tests



* tests



* tests



* tests



* dummy



* tests



* tests



---------

Signed-off-by: Charles-Edouard Brétéché <charles.edouard@nirmata.com>
Co-authored-by: Charles-Edouard Brétéché <charles.edouard@nirmata.com>
2024-05-13 22:30:36 +00:00
gcp-cherry-pick-bot[bot] 57d9440577
feat: force background propagation deletion (#1267) (#1269)
Signed-off-by: Charles-Edouard Brétéché <charles.edouard@nirmata.com>
Co-authored-by: Charles-Edouard Brétéché <charles.edouard@nirmata.com>
2024-05-13 14:45:26 +00:00
gcp-cherry-pick-bot[bot] 6be49603ec
chore(deps): Bump goreleaser/goreleaser-action from 5.0.0 to 5.1.0 (#1266) (#1268)
Bumps [goreleaser/goreleaser-action](https://github.com/goreleaser/goreleaser-action) from 5.0.0 to 5.1.0.
- [Release notes](https://github.com/goreleaser/goreleaser-action/releases)
- [Commits](7ec5c2b0c6...5742e2a039)

---
updated-dependencies:
- dependency-name: goreleaser/goreleaser-action
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-05-13 12:08:45 +00:00
gcp-cherry-pick-bot[bot] 534afdaf90
feat: enable templating by default (#1264) (#1265)
Signed-off-by: Charles-Edouard Brétéché <charles.edouard@nirmata.com>
Co-authored-by: Charles-Edouard Brétéché <charles.edouard@nirmata.com>
2024-05-12 21:52:29 +02:00
gcp-cherry-pick-bot[bot] b70a6ce0c1
chore(deps): Bump aquasecurity/trivy-action from 0.19.0 to 0.20.0 (#1258) (#1261)
Bumps [aquasecurity/trivy-action](https://github.com/aquasecurity/trivy-action) from 0.19.0 to 0.20.0.
- [Release notes](https://github.com/aquasecurity/trivy-action/releases)
- [Commits](d710430a67...b2933f565d)

---
updated-dependencies:
- dependency-name: aquasecurity/trivy-action
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-05-08 09:57:33 +00:00
gcp-cherry-pick-bot[bot] fd0339b146
chore(deps): Bump golangci/golangci-lint-action from 5.3.0 to 6.0.1 (#1257) (#1260)
Bumps [golangci/golangci-lint-action](https://github.com/golangci/golangci-lint-action) from 5.3.0 to 6.0.1.
- [Release notes](https://github.com/golangci/golangci-lint-action/releases)
- [Commits](38e1018663...a4f60bb28d)

---
updated-dependencies:
- dependency-name: golangci/golangci-lint-action
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-05-08 09:49:15 +00:00
gcp-cherry-pick-bot[bot] 584ecf7f7b
chore(deps): Bump actions/checkout from 4.1.4 to 4.1.5 (#1254) (#1259)
Bumps [actions/checkout](https://github.com/actions/checkout) from 4.1.4 to 4.1.5.
- [Release notes](https://github.com/actions/checkout/releases)
- [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md)
- [Commits](0ad4b8fada...44c2b7a8a4)

---
updated-dependencies:
- dependency-name: actions/checkout
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-05-08 09:40:16 +00:00
gcp-cherry-pick-bot[bot] 6b8c3bd757
chore(deps): Bump zgosalvez/github-actions-ensure-sha-pinned-actions (#1249) (#1252)
Bumps [zgosalvez/github-actions-ensure-sha-pinned-actions](https://github.com/zgosalvez/github-actions-ensure-sha-pinned-actions) from 3.0.4 to 3.0.5.
- [Release notes](https://github.com/zgosalvez/github-actions-ensure-sha-pinned-actions/releases)
- [Commits](19ebcb0bab...40e45e738b)

---
updated-dependencies:
- dependency-name: zgosalvez/github-actions-ensure-sha-pinned-actions
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Charles-Edouard Brétéché <charles.edouard@nirmata.com>
2024-05-06 12:24:24 +00:00
gcp-cherry-pick-bot[bot] 661554179e
chore(deps): Bump golangci/golangci-lint-action from 5.1.0 to 5.3.0 (#1250) (#1251)
Bumps [golangci/golangci-lint-action](https://github.com/golangci/golangci-lint-action) from 5.1.0 to 5.3.0.
- [Release notes](https://github.com/golangci/golangci-lint-action/releases)
- [Commits](9d1e0624a7...38e1018663)

---
updated-dependencies:
- dependency-name: golangci/golangci-lint-action
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-05-06 14:15:23 +02:00
gcp-cherry-pick-bot[bot] 6bb2b2e6e1
feat: add pause on failure option (#1247) (#1248)
Signed-off-by: Charles-Edouard Brétéché <charles.edouard@nirmata.com>
Co-authored-by: Charles-Edouard Brétéché <charles.edouard@nirmata.com>
2024-05-05 10:43:00 +00:00
gcp-cherry-pick-bot[bot] c7a4964904
chore(deps): Bump actions/setup-go from 5.0.0 to 5.0.1 (#1245) (#1246)
Bumps [actions/setup-go](https://github.com/actions/setup-go) from 5.0.0 to 5.0.1.
- [Release notes](https://github.com/actions/setup-go/releases)
- [Commits](0c52d547c9...cdcb360436)

---
updated-dependencies:
- dependency-name: actions/setup-go
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-05-03 09:35:52 +00:00
gcp-cherry-pick-bot[bot] 596041226a
chore(deps): Bump golangci/golangci-lint-action from 5.0.0 to 5.1.0 (#1230) (#1243)
Bumps [golangci/golangci-lint-action](https://github.com/golangci/golangci-lint-action) from 5.0.0 to 5.1.0.
- [Release notes](https://github.com/golangci/golangci-lint-action/releases)
- [Commits](82d40c283a...9d1e0624a7)

---
updated-dependencies:
- dependency-name: golangci/golangci-lint-action
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-05-02 14:59:31 +00:00
gcp-cherry-pick-bot[bot] 0734d549f5
chore(deps): Bump codecov/codecov-action from 4.3.0 to 4.3.1 (#1233) (#1241)
Bumps [codecov/codecov-action](https://github.com/codecov/codecov-action) from 4.3.0 to 4.3.1.
- [Release notes](https://github.com/codecov/codecov-action/releases)
- [Changelog](https://github.com/codecov/codecov-action/blob/main/CHANGELOG.md)
- [Commits](84508663e9...5ecb98a3c6)

---
updated-dependencies:
- dependency-name: codecov/codecov-action
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-05-02 14:24:47 +00:00
gcp-cherry-pick-bot[bot] 09792c70de
chore(deps): Bump anchore/sbom-action from 0.15.10 to 0.15.11 (#1229) (#1240)
Bumps [anchore/sbom-action](https://github.com/anchore/sbom-action) from 0.15.10 to 0.15.11.
- [Release notes](https://github.com/anchore/sbom-action/releases)
- [Commits](ab5d7b5f48...7ccf588e3c)

---
updated-dependencies:
- dependency-name: anchore/sbom-action
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-05-02 12:44:59 +00:00
gcp-cherry-pick-bot[bot] 967bf17146
chore: update issue templates (#1238) (#1239)
Signed-off-by: Charles-Edouard Brétéché <charles.edouard@nirmata.com>
Co-authored-by: Charles-Edouard Brétéché <charles.edouard@nirmata.com>
2024-05-02 12:28:57 +00:00
Charles-Edouard Brétéché 8fb7732137
release: v0.2.0 (#1234)
Signed-off-by: Charles-Edouard Brétéché <charles.edouard@nirmata.com>
2024-05-02 13:30:35 +02:00
gcp-cherry-pick-bot[bot] f073726899
chore: use upstream kubectl-validate (#1226) (#1227)
Signed-off-by: Charles-Edouard Brétéché <charles.edouard@nirmata.com>
Co-authored-by: Charles-Edouard Brétéché <charles.edouard@nirmata.com>
2024-04-27 11:48:00 +00:00
gcp-cherry-pick-bot[bot] 6c60e5a3d9
chore(deps): Bump slsa-framework/slsa-github-generator (#1196) (#1225)
Bumps [slsa-framework/slsa-github-generator](https://github.com/slsa-framework/slsa-github-generator) from 1.10.0 to 2.0.0.
- [Release notes](https://github.com/slsa-framework/slsa-github-generator/releases)
- [Changelog](https://github.com/slsa-framework/slsa-github-generator/blob/main/CHANGELOG.md)
- [Commits](https://github.com/slsa-framework/slsa-github-generator/compare/v1.10.0...v2.0.0)

---
updated-dependencies:
- dependency-name: slsa-framework/slsa-github-generator
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Charles-Edouard Brétéché <charles.edouard@nirmata.com>
2024-04-25 18:40:10 +00:00
gcp-cherry-pick-bot[bot] 3c6932648d
chore: update release notes (#1223) (#1224)
Signed-off-by: Charles-Edouard Brétéché <charles.edouard@nirmata.com>
Co-authored-by: Charles-Edouard Brétéché <charles.edouard@nirmata.com>
2024-04-25 17:51:34 +00:00
Charles-Edouard Brétéché 7ff7ea7488
cherry-pick: release 0.2 (#1222)
* chore(deps): Bump amannn/action-semantic-pull-request (#1204)

Bumps [amannn/action-semantic-pull-request](https://github.com/amannn/action-semantic-pull-request) from 5.4.0 to 5.5.0.
- [Release notes](https://github.com/amannn/action-semantic-pull-request/releases)
- [Changelog](https://github.com/amannn/action-semantic-pull-request/blob/main/CHANGELOG.md)
- [Commits](e9fabac35e...c24d6dd07c)

---
updated-dependencies:
- dependency-name: amannn/action-semantic-pull-request
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Signed-off-by: Charles-Edouard Brétéché <charles.edouard@nirmata.com>

* chore(deps): Bump amannn/action-semantic-pull-request (#1211)

Bumps [amannn/action-semantic-pull-request](https://github.com/amannn/action-semantic-pull-request) from 5.5.0 to 5.5.2.
- [Release notes](https://github.com/amannn/action-semantic-pull-request/releases)
- [Changelog](https://github.com/amannn/action-semantic-pull-request/blob/main/CHANGELOG.md)
- [Commits](c24d6dd07c...cfb60706e1)

---
updated-dependencies:
- dependency-name: amannn/action-semantic-pull-request
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Charles-Edouard Brétéché <charles.edouard@nirmata.com>
Signed-off-by: Charles-Edouard Brétéché <charles.edouard@nirmata.com>

---------

Signed-off-by: dependabot[bot] <support@github.com>
Signed-off-by: Charles-Edouard Brétéché <charles.edouard@nirmata.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-04-25 19:31:48 +02:00
gcp-cherry-pick-bot[bot] ed0cc751fb
chore: bump a couple of deps (#1220) (#1221)
Signed-off-by: Charles-Edouard Brétéché <charles.edouard@nirmata.com>
Co-authored-by: Charles-Edouard Brétéché <charles.edouard@nirmata.com>
2024-04-25 16:04:23 +00:00
gcp-cherry-pick-bot[bot] 363b246e91
chore(deps): Bump golangci/golangci-lint-action from 4.0.0 to 5.0.0 (#1210) (#1219)
Bumps [golangci/golangci-lint-action](https://github.com/golangci/golangci-lint-action) from 4.0.0 to 5.0.0.
- [Release notes](https://github.com/golangci/golangci-lint-action/releases)
- [Commits](3cfe3a4abb...82d40c283a)

---
updated-dependencies:
- dependency-name: golangci/golangci-lint-action
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-04-25 17:38:21 +02:00
gcp-cherry-pick-bot[bot] 48b069b499
chore(deps): Bump actions/download-artifact from 4.1.6 to 4.1.7 (#1213) (#1218)
Bumps [actions/download-artifact](https://github.com/actions/download-artifact) from 4.1.6 to 4.1.7.
- [Release notes](https://github.com/actions/download-artifact/releases)
- [Commits](9c19ed7fe5...65a9edc588)

---
updated-dependencies:
- dependency-name: actions/download-artifact
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-04-25 15:19:04 +00:00
gcp-cherry-pick-bot[bot] 0ae5dd936f
chore(deps): Bump actions/checkout from 4.1.3 to 4.1.4 (#1212) (#1217)
Bumps [actions/checkout](https://github.com/actions/checkout) from 4.1.3 to 4.1.4.
- [Release notes](https://github.com/actions/checkout/releases)
- [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md)
- [Commits](1d96c772d1...0ad4b8fada)

---
updated-dependencies:
- dependency-name: actions/checkout
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-04-25 15:11:40 +00:00
gcp-cherry-pick-bot[bot] dcc6d45e50
docs: add Linode COSI to ADOPTERS.md (#1215) (#1216)
Signed-off-by: Richard Kovacs <kovacsricsi@gmail.com>
Co-authored-by: Richard Kovacs <kovacsricsi@gmail.com>
2024-04-25 14:54:25 +00:00
gcp-cherry-pick-bot[bot] 97a925baf9
docs: document command args quote behavior (#1208) (#1209)
Signed-off-by: Richard Kovacs <kovacsricsi@gmail.com>
Co-authored-by: Richard Kovacs <kovacsricsi@gmail.com>
2024-04-24 23:43:04 +00:00
gcp-cherry-pick-bot[bot] 037f62bdd8
fix: windows issue (#1201) (#1202)
Signed-off-by: Charles-Edouard Brétéché <charles.edouard@nirmata.com>
Co-authored-by: Charles-Edouard Brétéché <charles.edouard@nirmata.com>
2024-04-23 18:51:28 +00:00
gcp-cherry-pick-bot[bot] a6082dbe7d
chore(deps): Bump github.com/kudobuilder/kuttl from 0.15.0 to 0.16.0 (#1193) (#1200)
Bumps [github.com/kudobuilder/kuttl](https://github.com/kudobuilder/kuttl) from 0.15.0 to 0.16.0.
- [Release notes](https://github.com/kudobuilder/kuttl/releases)
- [Changelog](https://github.com/kudobuilder/kuttl/blob/main/RELEASE.md)
- [Commits](https://github.com/kudobuilder/kuttl/compare/v0.15.0...v0.16.0)

---
updated-dependencies:
- dependency-name: github.com/kudobuilder/kuttl
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Charles-Edouard Brétéché <charles.edouard@nirmata.com>
2024-04-23 17:55:42 +00:00
gcp-cherry-pick-bot[bot] fa8ddf5369
chore(deps): Bump actions/download-artifact from 4.1.5 to 4.1.6 (#1195) (#1199)
Bumps [actions/download-artifact](https://github.com/actions/download-artifact) from 4.1.5 to 4.1.6.
- [Release notes](https://github.com/actions/download-artifact/releases)
- [Commits](8caf195ad4...9c19ed7fe5)

---
updated-dependencies:
- dependency-name: actions/download-artifact
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-04-23 17:40:22 +00:00
gcp-cherry-pick-bot[bot] 1bf3caf7df
chore(deps): Bump actions/upload-artifact from 4.3.2 to 4.3.3 (#1197) (#1198)
Bumps [actions/upload-artifact](https://github.com/actions/upload-artifact) from 4.3.2 to 4.3.3.
- [Release notes](https://github.com/actions/upload-artifact/releases)
- [Commits](1746f4ab65...65462800fd)

---
updated-dependencies:
- dependency-name: actions/upload-artifact
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-04-23 17:24:53 +00:00
gcp-cherry-pick-bot[bot] bd765c8fa9
chore(deps): Bump actions/checkout from 4.1.2 to 4.1.3 (#1192) (#1194)
Bumps [actions/checkout](https://github.com/actions/checkout) from 4.1.2 to 4.1.3.
- [Release notes](https://github.com/actions/checkout/releases)
- [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md)
- [Commits](9bb56186c3...1d96c772d1)

---
updated-dependencies:
- dependency-name: actions/checkout
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-04-22 16:33:40 +00:00
gcp-cherry-pick-bot[bot] a38de0f688
fix: junit reports (#1190) (#1191)
Signed-off-by: Charles-Edouard Brétéché <charles.edouard@nirmata.com>
Co-authored-by: Charles-Edouard Brétéché <charles.edouard@nirmata.com>
2024-04-19 22:55:02 +02:00
gcp-cherry-pick-bot[bot] c4efea83f1
chore: fix ci jobs (#1188) (#1189)
Signed-off-by: Charles-Edouard Brétéché <charles.edouard@nirmata.com>
Co-authored-by: Charles-Edouard Brétéché <charles.edouard@nirmata.com>
2024-04-19 12:59:32 +02:00
gcp-cherry-pick-bot[bot] 382d7c6beb
chore: disable semantics pr check for cherry pick bot (#1186) (#1187)
Signed-off-by: Charles-Edouard Brétéché <charles.edouard@nirmata.com>
Co-authored-by: Charles-Edouard Brétéché <charles.edouard@nirmata.com>
2024-04-19 12:52:04 +02:00
gcp-cherry-pick-bot[bot] 931fd161d9
chore(deps): Bump actions/download-artifact from 4.1.4 to 4.1.5 (#1181) (#1185)
Bumps [actions/download-artifact](https://github.com/actions/download-artifact) from 4.1.4 to 4.1.5.
- [Release notes](https://github.com/actions/download-artifact/releases)
- [Commits](c850b930e6...8caf195ad4)

---
updated-dependencies:
- dependency-name: actions/download-artifact
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-04-19 12:24:02 +02:00
gcp-cherry-pick-bot[bot] 453007813e
chore: update jobs to work on release branches (#1180) (#1184)
Signed-off-by: Charles-Edouard Brétéché <charles.edouard@nirmata.com>
Co-authored-by: Charles-Edouard Brétéché <charles.edouard@nirmata.com>
2024-04-19 11:58:55 +02:00
gcp-cherry-pick-bot[bot] 5a17bd4e96
chore(deps): Bump actions/upload-artifact from 4.3.1 to 4.3.2 (#1182) (#1183)
Bumps [actions/upload-artifact](https://github.com/actions/upload-artifact) from 4.3.1 to 4.3.2.
- [Release notes](https://github.com/actions/upload-artifact/releases)
- [Commits](5d5d22a312...1746f4ab65)

---
updated-dependencies:
- dependency-name: actions/upload-artifact
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-04-19 11:39:10 +02:00
417 changed files with 49319 additions and 14147 deletions

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -7,25 +7,28 @@ labels: ["bug", "triage"]
body:
- type: markdown
attributes:
value: |
Please tell us about the bug.
value: Please tell us about the bug.
- type: dropdown
id: chainsaw-version
attributes:
label: chainsaw version Version
description: >-
What version of the chainsaw are you running?
description: What version of chainsaw are you running?
options:
- v0.1.0
- v0.1.1
- v0.1.2
- v0.1.3
- v0.1.4
- v0.1.5
- v0.1.6
- v0.1.7
- v0.1.8
- v0.1.9
- v0.2.4
- v0.2.3
- v0.2.2
- v0.2.1
- v0.2.0
- v0.1.9
- v0.1.8
- v0.1.7
- v0.1.6
- v0.1.5
- v0.1.4
- v0.1.3
- v0.1.2
- v0.1.1
- v0.1.0
validations:
required: true
- type: textarea

View File

@ -2,48 +2,49 @@
name: General Question
description: Ask a question or need support
title: "[Question] "
labels: ["question"]
title: '[Question] '
labels:
- question
body:
- type: markdown
attributes:
value: "Please answer these questions before submitting your issue. Thanks!"
value: Please answer these questions before submitting your issue. Thanks!
- type: textarea
id: describe-your-question
attributes:
label: Describe your question
description: "Provide details about your question or the support needed."
placeholder: "Type your question here..."
description: Provide details about your question or the support needed.
placeholder: Type your question here...
validations:
required: true
- type: dropdown
id: chainsaw-version
attributes:
label: chainsaw version Version
description: >-
What version of the chainsaw are you running?
description: What version of chainsaw are you running?
options:
- v0.1.0
- v0.1.1
- v0.1.2
- v0.1.3
- v0.1.4
- v0.1.5
- v0.1.6
- v0.1.7
- v0.1.8
- v0.1.9
- v0.2.4
- v0.2.3
- v0.2.2
- v0.2.1
- v0.2.0
- v0.1.9
- v0.1.8
- v0.1.7
- v0.1.6
- v0.1.5
- v0.1.4
- v0.1.3
- v0.1.2
- v0.1.1
- v0.1.0
validations:
required: true
- type: textarea
id: additional-context
attributes:
label: Additional context
description: "Add any other context or screenshots about the question here."
placeholder: "Additional details..."
description: Add any other context or screenshots about the question here.
placeholder: Additional details...
validations:
required: false

View File

@ -8,22 +8,24 @@ on:
pull_request:
branches:
- main
- release-*
push:
branches:
- main
- release-*
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
jobs:
required:
check-actions:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@9bb56186c3b09b4f86b1c65136769dd318469633 # v4.1.2
uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7
- name: Ensure SHA pinned actions
uses: zgosalvez/github-actions-ensure-sha-pinned-actions@19ebcb0babbd282ae1822a0b9c28f3f1f25cea45 # v3.0.4
uses: zgosalvez/github-actions-ensure-sha-pinned-actions@74606c30450304eee8660aae751818321754feb1 # v3.0.9
with:
# slsa-github-generator requires using a semver tag for reusable workflows.
# See: https://github.com/slsa-framework/slsa-github-generator#referencing-slsa-builders-and-generators

View File

@ -7,7 +7,14 @@ permissions: {}
on:
pull_request:
branches:
- 'main'
- main
- release-*
types:
- opened
- demilestoned
- milestoned
- edited
- synchronize
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}

View File

@ -8,22 +8,24 @@ on:
pull_request:
branches:
- main
- release-*
push:
branches:
- main
- release-*
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
jobs:
required:
codegen-verify:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@9bb56186c3b09b4f86b1c65136769dd318469633 # v4.1.2
uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7
- name: Setup Go
uses: actions/setup-go@0c52d547c9bc32b1aa3301fd7a9cb496313a4491 # v5.0.0
uses: actions/setup-go@cdcb36043654635271a94b9a6d1392de5bb323a7 # v5.0.1
with:
go-version-file: go.mod
cache-dependency-path: go.sum

View File

@ -8,26 +8,28 @@ on:
pull_request:
branches:
- main
- release-*
push:
branches:
- main
- release-*
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
jobs:
required:
scan-trivy:
runs-on: ubuntu-latest
permissions:
security-events: write
steps:
- name: Checkout
uses: actions/checkout@9bb56186c3b09b4f86b1c65136769dd318469633 # v4.1.2
uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7
with:
fetch-depth: 0
- name: Run Trivy vulnerability scanner in repo mode
uses: aquasecurity/trivy-action@d710430a6722f083d3b36b8339ff66b32f22ee55 # v0.19.0
uses: aquasecurity/trivy-action@7c2007bcb556501da015201bcba5aa14069b74e2 # v0.23.0
with:
scan-type: fs
ignore-unfixed: false
@ -38,7 +40,7 @@ jobs:
exit-code: '0'
vuln-type: os,library
- name: Upload Trivy scan results to GitHub Security tab
uses: github/codeql-action/upload-sarif@cdcdbb579706841c47f7063dda365e292e5cad7a # v2.13.4
uses: github/codeql-action/upload-sarif@23acc5c183826b7a8a97bce3cecc52db901f8251 # v3.25.10
with:
sarif_file: trivy-results.sarif
category: code

View File

@ -14,15 +14,15 @@ concurrency:
cancel-in-progress: true
jobs:
docs:
docs-main:
runs-on: ubuntu-latest
permissions:
contents: write
steps:
- name: Checkout
uses: actions/checkout@9bb56186c3b09b4f86b1c65136769dd318469633 # v4.1.2
uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7
- name: Setup Go
uses: actions/setup-go@0c52d547c9bc32b1aa3301fd7a9cb496313a4491 # v5.0.0
uses: actions/setup-go@cdcb36043654635271a94b9a6d1392de5bb323a7 # v5.0.1
with:
go-version-file: go.mod
cache-dependency-path: go.sum

View File

@ -7,10 +7,10 @@ permissions: {}
on:
push:
tags:
- 'docs-v*'
- docs-v*
jobs:
docs:
docs-release:
runs-on: ubuntu-latest
permissions:
contents: write
@ -23,9 +23,9 @@ jobs:
version_extractor_regex: '^docs-v(.*)$'
- name: Checkout
if: ${{ steps.semver.outputs.prerelease == '' }}
uses: actions/checkout@9bb56186c3b09b4f86b1c65136769dd318469633 # v4.1.2
uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7
- name: Setup Go
uses: actions/setup-go@0c52d547c9bc32b1aa3301fd7a9cb496313a4491 # v5.0.0
uses: actions/setup-go@cdcb36043654635271a94b9a6d1392de5bb323a7 # v5.0.1
if: ${{ steps.semver.outputs.prerelease == '' }}
with:
go-version-file: go.mod

View File

@ -8,26 +8,28 @@ on:
pull_request:
branches:
- main
- release-*
push:
branches:
- main
- release-*
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
jobs:
required:
golangci-lint:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@9bb56186c3b09b4f86b1c65136769dd318469633 # v4.1.2
uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7
- name: Setup Go
uses: actions/setup-go@0c52d547c9bc32b1aa3301fd7a9cb496313a4491 # v5.0.0
uses: actions/setup-go@cdcb36043654635271a94b9a6d1392de5bb323a7 # v5.0.1
with:
go-version-file: go.mod
cache-dependency-path: go.sum
- name: golangci-lint
uses: golangci/golangci-lint-action@3cfe3a4abbb849e10058ce4af15d205b6da42804 # v3.7.1
uses: golangci/golangci-lint-action@a4f60bb28d35aeee14e6880718e0c85ff1882e64 # v3.7.1
with:
skip-cache: true

View File

@ -1,3 +1,5 @@
# yaml-language-server: $schema=https://json.schemastore.org/github-workflow.json
# feat: (new feature for the user, not a new feature for build script)
# fix: (bug fix for the user, not a fix to a build script)
# build: (changes that affect the build system or external dependencies)
@ -18,73 +20,85 @@
# | |_______ Scope
# |____________ Type
name: Semantic PR Validation
name: Semantic pull request
permissions: {}
on:
pull_request_target:
pull_request:
branches:
- main
- release-*
types:
- opened
- edited
- synchronize
defaults:
run:
shell: bash
- opened
- reopened
- labeled
- unlabeled
- edited
- synchronize
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
jobs:
validate:
check-semantic-pr:
runs-on: ubuntu-latest
if: ${{ github.actor != 'gcp-cherry-pick-bot' }}
steps:
- name: Validate Pull Request
uses: amannn/action-semantic-pull-request@e9fabac35e210fea40ca5b14c0da95a099eff26f
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
# Configure which types are allowed.
# Default: https://github.com/commitizen/conventional-commit-types
types: |
feat
fix
build
chore
ci
docs
perf
refactor
revert
style
test
revert
release
# Configure which scopes are allowed.
scopes: |
api
client
commands
config
data
deps
discovery
internal
report
resource
runner
operations
processors
test
utils
validation
version
docs
release
testdata
ignoreLabels: |
bot
ignore-semantic-pull-request
# Configure that a scope must always be provided.
requireScope: false
# When using "Squash and merge" on a PR with only one commit, GitHub
# will suggest using that commit message instead of the PR title for the
# merge commit, and it's easy to commit this by mistake. Enable this option
# to also validate the commit message for one commit PRs.
validateSingleCommit: true
# Related to `validateSingleCommit` you can opt-in to validate that the PR
# title matches a single commit to avoid confusion.
validateSingleCommitMatchesPrTitle: true
- name: Validate Pull Request
uses: amannn/action-semantic-pull-request@cfb60706e18bc85e8aec535e3c577abe8f70378e
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
# Configure which types are allowed.
# Default: https://github.com/commitizen/conventional-commit-types
types: |
feat
fix
build
chore
ci
docs
perf
refactor
revert
style
test
revert
release
# Configure which scopes are allowed.
scopes: |
api
client
commands
config
data
deps
discovery
internal
report
resource
runner
operations
processors
test
utils
validation
version
docs
release
testdata
ignoreLabels: |
bot
ignore-semantic-pull-request
# Configure that a scope must always be provided.
requireScope: false
# When using "Squash and merge" on a PR with only one commit, GitHub
# will suggest using that commit message instead of the PR title for the
# merge commit, and it's easy to commit this by mistake. Enable this option
# to also validate the commit message for one commit PRs.
validateSingleCommit: true
# Related to `validateSingleCommit` you can opt-in to validate that the PR
# title matches a single commit to avoid confusion.
validateSingleCommitMatchesPrTitle: true

View File

@ -7,7 +7,7 @@ permissions: {}
on:
push:
tags:
- 'v*'
- v*
jobs:
goreleaser:
@ -33,7 +33,7 @@ jobs:
docker-images: true
swap-storage: false
- name: Checkout
uses: actions/checkout@9bb56186c3b09b4f86b1c65136769dd318469633 # v4.1.2
uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7
with:
fetch-depth: 0
- name: Fetch all tags
@ -41,19 +41,19 @@ jobs:
set -e
git fetch --force --tags
- name: Setup Go
uses: actions/setup-go@0c52d547c9bc32b1aa3301fd7a9cb496313a4491 # v5.0.0
uses: actions/setup-go@cdcb36043654635271a94b9a6d1392de5bb323a7 # v5.0.1
with:
go-version-file: go.mod
cache-dependency-path: go.sum
- name: Install Cosign
uses: sigstore/cosign-installer@59acb6260d9c0ba8f4a2f9d9b48431a222b68e20 # v3.5.0
- name: Install Syft
uses: anchore/sbom-action/download-syft@ab5d7b5f48981941c4c5d6bf33aeb98fe3bae38c # v0.15.10
uses: anchore/sbom-action/download-syft@e8d2a6937ecead383dfe75190d104edd1f9c5751 # v0.16.0
- name: Install Ko
uses: ko-build/setup-ko@ace48d793556083a76f1e3e6068850c1f4a369aa # v0.6
uses: ko-build/setup-ko@3aebd0597dc1e9d1a26bcfdb7cbeb19c131d3037 # v0.7
- name: Run GoReleaser
id: goreleaser
uses: goreleaser/goreleaser-action@7ec5c2b0c6cdda6e8bbb49444bc797dd33d74dd8 # v5.0.0
uses: goreleaser/goreleaser-action@286f3b13b1b49da4ac219696163fb8c1c93e1200 # v6.0.0
with:
distribution: goreleaser
version: latest
@ -102,7 +102,7 @@ jobs:
actions: read
id-token: write
contents: write
uses: slsa-framework/slsa-github-generator/.github/workflows/generator_generic_slsa3.yml@v1.10.0
uses: slsa-framework/slsa-github-generator/.github/workflows/generator_generic_slsa3.yml@v2.0.0
with:
base64-subjects: "${{ needs.goreleaser.outputs.hashes }}"
upload-assets: true
@ -114,7 +114,7 @@ jobs:
actions: read
id-token: write
packages: write
uses: slsa-framework/slsa-github-generator/.github/workflows/generator_container_slsa3.yml@v1.10.0
uses: slsa-framework/slsa-github-generator/.github/workflows/generator_container_slsa3.yml@v2.0.0
with:
image: ${{ needs.goreleaser.outputs.image }}
digest: ${{ needs.goreleaser.outputs.digest }}

View File

@ -8,9 +8,11 @@ on:
pull_request:
branches:
- main
- release-*
push:
branches:
- main
- release-*
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
@ -21,9 +23,9 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@9bb56186c3b09b4f86b1c65136769dd318469633 # v4.1.2
uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7
- name: Setup Go
uses: actions/setup-go@0c52d547c9bc32b1aa3301fd7a9cb496313a4491 # v5.0.0
uses: actions/setup-go@cdcb36043654635271a94b9a6d1392de5bb323a7 # v5.0.1
with:
go-version-file: go.mod
cache-dependency-path: go.sum
@ -36,7 +38,7 @@ jobs:
set -e
make tests
- name: Upload coverage
uses: actions/upload-artifact@5d5d22a31266ced268874388b861e4b58bb5c2f3 # v4.3.1
uses: actions/upload-artifact@65462800fd760344b1a7b4382951275a0abb4808 # v4.3.3
with:
name: coverage.out
path: coverage.out
@ -49,13 +51,13 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@9bb56186c3b09b4f86b1c65136769dd318469633 # v4.1.2
uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7
- name: Download coverage
uses: actions/download-artifact@c850b930e6ba138125429b7e5c93fc707a7f8427 # v4.1.4
uses: actions/download-artifact@65a9edc5881444af0b9093a5e628f2fe47ea3b2e # v4.1.7
with:
name: coverage.out
- name: Upload Report to Codecov
uses: codecov/codecov-action@84508663e988701840491b86de86b666e8a86bed # v4.3.0
uses: codecov/codecov-action@e28ff129e5465c2c0dcc6f003fc735cb6ae0c673 # v4.5.0
with:
files: ./coverage.out
fail_ci_if_error: true
@ -67,9 +69,9 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@9bb56186c3b09b4f86b1c65136769dd318469633 # v4.1.2
uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7
- name: Setup Go
uses: actions/setup-go@0c52d547c9bc32b1aa3301fd7a9cb496313a4491 # v5.0.0
uses: actions/setup-go@cdcb36043654635271a94b9a6d1392de5bb323a7 # v5.0.1
with:
go-version-file: go.mod
cache-dependency-path: go.sum
@ -86,14 +88,14 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@9bb56186c3b09b4f86b1c65136769dd318469633 # v4.1.2
uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7
- name: Setup Go
uses: actions/setup-go@0c52d547c9bc32b1aa3301fd7a9cb496313a4491 # v5.0.0
uses: actions/setup-go@cdcb36043654635271a94b9a6d1392de5bb323a7 # v5.0.1
with:
go-version-file: go.mod
cache-dependency-path: go.sum
- name: Install ko
uses: ko-build/setup-ko@ace48d793556083a76f1e3e6068850c1f4a369aa #v0.6
uses: ko-build/setup-ko@3aebd0597dc1e9d1a26bcfdb7cbeb19c131d3037 #v0.7
- name: Create test cluster
run: |
set -e
@ -102,12 +104,3 @@ jobs:
run: |
set -e
make e2e-tests-ko
required:
needs:
- unit-tests
- e2e-tests
- e2e-test-ko
runs-on: ubuntu-latest
steps:
- run: echo "Required jobs success!"

2
.gitignore vendored
View File

@ -1,6 +1,8 @@
.cache/
.gopath/
.temp/
.tools/
.venv/
chainsaw
coverage.out
website/site

View File

@ -41,8 +41,10 @@ linters:
run:
timeout: 15m
skip-files:
output:
sort-results: true
issues:
exclude-files:
- ".+\\.generated.go"
output:
format: colored-line-number
sort-results: true

View File

@ -3,30 +3,27 @@
Release notes for `TODO`.
<!--
## ‼️ Breaking changes ‼️
## ✨ UI changes ✨
## ⭐ Examples ⭐
## ⛵ Tutorials ⛵
## 🎸 Misc 🎸
## 📚 Docs 📚
-->
## ‼️ Breaking changes ‼️
- Deprecated `TestStep` resource support was removed as well as the related command `chainsaw migrate tests`
## 💫 New features 💫
- Added support to wait with `jsonpath` conditions
- Add test scenarios support
## 🔧 Fixes 🔧
- Fixed issue with `update` operation failing because resource version not set correctly
- Fixed `wait` operation timeout passing the timeout value to the underlying `kubectl` command
- Fixed `wait` operation condition incorrectly formatted with quotes
- Fixed issue reading files from embedded file systems on windows
- Fixed a potential issue with configuration defaults and marshaling
## 📚 Docs 📚
## 🎸 Misc 🎸
- Added missing cluster doc
- Improved all Python-based build operations

29
.release-notes/v0.2.0.md Normal file
View File

@ -0,0 +1,29 @@
# Release notes
Release notes for `v0.2.0`.
## ‼️ Breaking changes ‼️
- Deprecated `TestStep` resource support was removed as well as the related command `chainsaw migrate tests`
## 💫 New features 💫
- Added support to wait with `jsonpath` conditions
- Introduced `v1alpha2` version for configuration, both `v1alpha1` and `v1alpha2` are supported with a conversion system
- Rewrote quick-start guide leveraging chainsaw capabilities using relevant usecases
## 🔧 Fixes 🔧
- Fixed issue with `update` operation failing because resource version not set correctly
- Fixed `wait` operation timeout passing the timeout value to the underlying `kubectl` command
- Fixed `wait` operation condition incorrectly formatted with quotes
- Fixed issue reading files from embedded file systems on Windows
- Fixed incorrect JUnit report format
## 🎸 Misc 🎸
- Switched a release branch worflow
## 📚 Docs 📚
- Added missing cluster doc

18
.release-notes/v0.2.1.md Normal file
View File

@ -0,0 +1,18 @@
# Release notes
Release notes for `v0.2.1`.
## ‼️ Breaking changes ‼️
- Resource templating is now enabled by default
## 💫 New features 💫
- Added `--pause-on-failure` flag to pause when a test failure happens (to ease troubleshooting)
- Improved cleanup management logic, alternating `catch`, `finally` and `@cleanup` per step
- Added support for registering clusters dynamically, useful when a cluster is created in a test step
## 🔧 Fixes 🔧
- Fixed issue with cluster incorrectly registered
- Force background deletion propagation policy (useful when testing unmanaged `Job`)

25
.release-notes/v0.2.2.md Normal file
View File

@ -0,0 +1,25 @@
# Release notes
Release notes for `v0.2.2`.
## ‼️ Breaking changes ‼️
- `finally` block now executes when the step terminates. It was supposed to work like this from the beginning but was not properly working. The `cleanup` block was introduced to execute operations when a test terminates instead.
## 💫 New features 💫
- Added cleanup handlers support to register custom cleanup operations to run when a test terminates
## 🔧 Fixes 🔧
- Use `namespaceTemplate` from configuration if provided
## 📚 Docs 📚
- Improved home page
- Added scroll to top button
- Improved navigation bar
- Fixed dark/light color schemes and added system preference support
- Added links to Slack and X/Twitter links in the footer
- Removed the blog
- Rewrote most of the Getting Started pages

28
.release-notes/v0.2.3.md Normal file
View File

@ -0,0 +1,28 @@
# Release notes
Release notes for `v0.2.3`.
## ‼️ Breaking changes ‼️
- `catch` block in v1alpha2 configuration was moved in `error.catch`
## 💫 New features 💫
- Added `cleanup` validation logic
- Added deletion propagation policy support at the configuration, test and step levels
## 🔧 Fixes 🔧
- Added `cleanup` support to generated test catalog
## 📚 Docs 📚
- Documentation sections have been completely restructured for better clarity and maintenance
- Tons of documentation improvements
- Configuration examples in the documentation were updated to `v1alpha2`
- Added built-in bindings reference documentation
- Links to easily navigate from one section to another were added to the home page
## 🎸 Misc 🎸
- Social cards are now enabled and configured for all social networks/apps

27
.release-notes/v0.2.4.md Normal file
View File

@ -0,0 +1,27 @@
# Release notes
Release notes for `v0.2.4`.
## ‼️ Breaking changes ‼️
- Directly specifying resource name was dropped, only `apiVersion` / `kind` is supported now
## 💫 New features 💫
- Added test metadata built-in binding
- Added file support to `delete` operation
- Added `--remarshal` flag to improve anchors support in test resources
- Added support for `describe`, `events`, `get` and `podLogs` operations in try blocks
## 🔧 Fixes 🔧
- Fixed incorrect path reported when validation failed for a patch operation
- Improved the way default values for configuration options are managed in configuration v1alpha2
## 📚 Docs 📚
- Removed code markers on titles in API reference documentation
## 🎸 Misc 🎸
- Bumped kyverno-json to v0.0.3

View File

@ -277,13 +277,13 @@
],
"properties": {
"catch": {
"description": "Catch defines what the tests steps will execute when an error happens. This will be combined with catch handlers defined at the test and step levels.",
"description": "Catch defines what the tests steps will execute when an error happens.\nThis will be combined with catch handlers defined at the test and step levels.",
"type": [
"array",
"null"
],
"items": {
"description": "Catch defines actions to be executed on failure.",
"description": "CatchFinally defines actions to be executed in catch, finally and cleanup blocks.",
"type": [
"object",
"null"
@ -352,6 +352,36 @@
"null"
]
},
"clusters": {
"description": "Clusters holds a registry to clusters to support multi-cluster tests.",
"type": [
"object",
"null"
],
"additionalProperties": {
"description": "Cluster defines cluster config and context.",
"type": [
"object",
"null"
],
"required": [
"kubeconfig"
],
"properties": {
"context": {
"description": "Context is the name of the context to use.",
"type": [
"string",
"null"
]
},
"kubeconfig": {
"description": "Kubeconfig is the path to the referenced file.",
"type": "string"
}
}
}
},
"entrypoint": {
"description": "Entrypoint is the command entry point to run.",
"type": "string"
@ -440,9 +470,6 @@
"object",
"null"
],
"required": [
"ref"
],
"properties": {
"bindings": {
"description": "Bindings defines additional binding key/values.",
@ -480,6 +507,48 @@
"null"
]
},
"clusters": {
"description": "Clusters holds a registry to clusters to support multi-cluster tests.",
"type": [
"object",
"null"
],
"additionalProperties": {
"description": "Cluster defines cluster config and context.",
"type": [
"object",
"null"
],
"required": [
"kubeconfig"
],
"properties": {
"context": {
"description": "Context is the name of the context to use.",
"type": [
"string",
"null"
]
},
"kubeconfig": {
"description": "Kubeconfig is the path to the referenced file.",
"type": "string"
}
}
}
},
"deletionPropagationPolicy": {
"description": "DeletionPropagationPolicy decides if a deletion will propagate to the dependents of\nthe object, and how the garbage collector will handle the propagation.\nOverrides the deletion propagation policy set in the Configuration, the Test and the TestStep.",
"type": [
"string",
"null"
],
"enum": [
"Orphan",
"Background",
"Foreground"
]
},
"expect": {
"description": "Expect defines a list of matched checks to validate the operation outcome.",
"type": [
@ -487,7 +556,7 @@
"null"
],
"items": {
"description": "Expectation represents a check to be applied on the result of an operation with a match filter to determine if the verification should be considered.",
"description": "Expectation represents a check to be applied on the result of an operation\nwith a match filter to determine if the verification should be considered.",
"type": [
"object",
"null"
@ -507,9 +576,19 @@
}
}
},
"file": {
"description": "File is the path to the referenced file. This can be a direct path to a file\nor an expression that matches multiple files, such as \"manifest/*.yaml\" for all YAML\nfiles within the \"manifest\" directory.",
"type": [
"string",
"null"
]
},
"ref": {
"description": "ObjectReference determines objects to be deleted.",
"type": "object",
"description": "Ref determines objects to be deleted.",
"type": [
"object",
"null"
],
"required": [
"apiVersion",
"kind"
@ -520,7 +599,7 @@
"type": "string"
},
"kind": {
"description": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds",
"description": "Kind of the referent.\nMore info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds",
"type": "string"
},
"labels": {
@ -537,14 +616,14 @@
}
},
"name": {
"description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names",
"description": "Name of the referent.\nMore info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names",
"type": [
"string",
"null"
]
},
"namespace": {
"description": "Namespace of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/",
"description": "Namespace of the referent.\nMore info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/",
"type": [
"string",
"null"
@ -574,13 +653,14 @@
"object",
"null"
],
"required": [
"apiVersion",
"kind"
],
"properties": {
"apiVersion": {
"description": "API version of the referent.",
"type": [
"string",
"null"
]
"type": "string"
},
"cluster": {
"description": "Cluster defines the target cluster (default cluster will be used if not specified and/or overridden).",
@ -589,29 +669,49 @@
"null"
]
},
"kind": {
"description": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds",
"clusters": {
"description": "Clusters holds a registry to clusters to support multi-cluster tests.",
"type": [
"string",
"object",
"null"
]
],
"additionalProperties": {
"description": "Cluster defines cluster config and context.",
"type": [
"object",
"null"
],
"required": [
"kubeconfig"
],
"properties": {
"context": {
"description": "Context is the name of the context to use.",
"type": [
"string",
"null"
]
},
"kubeconfig": {
"description": "Kubeconfig is the path to the referenced file.",
"type": "string"
}
}
}
},
"kind": {
"description": "Kind of the referent.\nMore info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds",
"type": "string"
},
"name": {
"description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names",
"description": "Name of the referent.\nMore info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names",
"type": [
"string",
"null"
]
},
"namespace": {
"description": "Namespace of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/",
"type": [
"string",
"null"
]
},
"resource": {
"description": "Resource name of the referent.",
"description": "Namespace of the referent.\nMore info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/",
"type": [
"string",
"null"
@ -661,6 +761,36 @@
"null"
]
},
"clusters": {
"description": "Clusters holds a registry to clusters to support multi-cluster tests.",
"type": [
"object",
"null"
],
"additionalProperties": {
"description": "Cluster defines cluster config and context.",
"type": [
"object",
"null"
],
"required": [
"kubeconfig"
],
"properties": {
"context": {
"description": "Context is the name of the context to use.",
"type": [
"string",
"null"
]
},
"kubeconfig": {
"description": "Kubeconfig is the path to the referenced file.",
"type": "string"
}
}
}
},
"format": {
"description": "Format determines the output format (json or yaml).",
"type": [
@ -670,14 +800,14 @@
"pattern": "^(?:json|yaml|\\(.+\\))$"
},
"name": {
"description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names",
"description": "Name of the referent.\nMore info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names",
"type": [
"string",
"null"
]
},
"namespace": {
"description": "Namespace of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/",
"description": "Namespace of the referent.\nMore info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/",
"type": [
"string",
"null"
@ -705,13 +835,14 @@
"object",
"null"
],
"required": [
"apiVersion",
"kind"
],
"properties": {
"apiVersion": {
"description": "API version of the referent.",
"type": [
"string",
"null"
]
"type": "string"
},
"cluster": {
"description": "Cluster defines the target cluster (default cluster will be used if not specified and/or overridden).",
@ -720,6 +851,36 @@
"null"
]
},
"clusters": {
"description": "Clusters holds a registry to clusters to support multi-cluster tests.",
"type": [
"object",
"null"
],
"additionalProperties": {
"description": "Cluster defines cluster config and context.",
"type": [
"object",
"null"
],
"required": [
"kubeconfig"
],
"properties": {
"context": {
"description": "Context is the name of the context to use.",
"type": [
"string",
"null"
]
},
"kubeconfig": {
"description": "Kubeconfig is the path to the referenced file.",
"type": "string"
}
}
}
},
"format": {
"description": "Format determines the output format (json or yaml).",
"type": [
@ -729,28 +890,18 @@
"pattern": "^(?:json|yaml|\\(.+\\))$"
},
"kind": {
"description": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds",
"type": [
"string",
"null"
]
"description": "Kind of the referent.\nMore info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds",
"type": "string"
},
"name": {
"description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names",
"description": "Name of the referent.\nMore info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names",
"type": [
"string",
"null"
]
},
"namespace": {
"description": "Namespace of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/",
"type": [
"string",
"null"
]
},
"resource": {
"description": "Resource name of the referent.",
"description": "Namespace of the referent.\nMore info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/",
"type": [
"string",
"null"
@ -786,6 +937,36 @@
"null"
]
},
"clusters": {
"description": "Clusters holds a registry to clusters to support multi-cluster tests.",
"type": [
"object",
"null"
],
"additionalProperties": {
"description": "Cluster defines cluster config and context.",
"type": [
"object",
"null"
],
"required": [
"kubeconfig"
],
"properties": {
"context": {
"description": "Context is the name of the context to use.",
"type": [
"string",
"null"
]
},
"kubeconfig": {
"description": "Kubeconfig is the path to the referenced file.",
"type": "string"
}
}
}
},
"container": {
"description": "Container in pod to get logs from else --all-containers is used.",
"type": [
@ -794,14 +975,14 @@
]
},
"name": {
"description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names",
"description": "Name of the referent.\nMore info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names",
"type": [
"string",
"null"
]
},
"namespace": {
"description": "Namespace of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/",
"description": "Namespace of the referent.\nMore info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/",
"type": [
"string",
"null"
@ -815,7 +996,7 @@
]
},
"tail": {
"description": "Tail is the number of last lines to collect from pods. If omitted or zero, then the default is 10 if you use a selector, or -1 (all) if you use a pod name. This matches default behavior of `kubectl logs`.",
"description": "Tail is the number of last lines to collect from pods. If omitted or zero,\nthen the default is 10 if you use a selector, or -1 (all) if you use a pod name.\nThis matches default behavior of `kubectl logs`.",
"type": [
"integer",
"null"
@ -877,6 +1058,36 @@
"null"
]
},
"clusters": {
"description": "Clusters holds a registry to clusters to support multi-cluster tests.",
"type": [
"object",
"null"
],
"additionalProperties": {
"description": "Cluster defines cluster config and context.",
"type": [
"object",
"null"
],
"required": [
"kubeconfig"
],
"properties": {
"context": {
"description": "Context is the name of the context to use.",
"type": [
"string",
"null"
]
},
"kubeconfig": {
"description": "Kubeconfig is the path to the referenced file.",
"type": "string"
}
}
}
},
"content": {
"description": "Content defines a shell script (run with \"sh -c ...\").",
"type": [
@ -985,25 +1196,54 @@
"null"
],
"required": [
"for"
"apiVersion",
"for",
"kind"
],
"properties": {
"apiVersion": {
"description": "API version of the referent.",
"type": [
"string",
"null"
]
"type": "string"
},
"cluster": {
"description": "Cluster defines the target cluster where the wait operation will be performed (default cluster will be used if not specified).",
"description": "Cluster defines the target cluster (default cluster will be used if not specified and/or overridden).",
"type": [
"string",
"null"
]
},
"clusters": {
"description": "Clusters holds a registry to clusters to support multi-cluster tests.",
"type": [
"object",
"null"
],
"additionalProperties": {
"description": "Cluster defines cluster config and context.",
"type": [
"object",
"null"
],
"required": [
"kubeconfig"
],
"properties": {
"context": {
"description": "Context is the name of the context to use.",
"type": [
"string",
"null"
]
},
"kubeconfig": {
"description": "Kubeconfig is the path to the referenced file.",
"type": "string"
}
}
}
},
"for": {
"description": "For specifies the condition to wait for.",
"description": "WaitFor specifies the condition to wait for.",
"type": "object",
"properties": {
"condition": {
@ -1068,28 +1308,18 @@
"pattern": "^(?:json|yaml|\\(.+\\))$"
},
"kind": {
"description": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds",
"type": [
"string",
"null"
]
"description": "Kind of the referent.\nMore info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds",
"type": "string"
},
"name": {
"description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names",
"description": "Name of the referent.\nMore info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names",
"type": [
"string",
"null"
]
},
"namespace": {
"description": "Namespace of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/",
"type": [
"string",
"null"
]
},
"resource": {
"description": "Resource name of the referent.",
"description": "Namespace of the referent.\nMore info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/",
"type": [
"string",
"null"
@ -1103,7 +1333,7 @@
]
},
"timeout": {
"description": "Timeout for the operation. Specifies how long to wait for the condition to be met before timing out.",
"description": "Timeout for the operation. Overrides the global timeout set in the Configuration.",
"type": [
"string",
"null"
@ -1151,6 +1381,18 @@
"null"
]
},
"deletionPropagationPolicy": {
"description": "DeletionPropagationPolicy decides if a deletion will propagate to the dependents of\nthe object, and how the garbage collector will handle the propagation.",
"type": [
"string",
"null"
],
"enum": [
"Orphan",
"Background",
"Foreground"
]
},
"excludeTestRegex": {
"description": "ExcludeTestRegex is used to exclude tests based on a regular expression.",
"type": [
@ -1187,7 +1429,7 @@
]
},
"namespace": {
"description": "Namespace defines the namespace to use for tests. If not specified, every test will execute in a random ephemeral namespace unless the namespace is overridden in a the test spec.",
"description": "Namespace defines the namespace to use for tests.\nIf not specified, every test will execute in a random ephemeral namespace\nunless the namespace is overridden in a the test spec.",
"type": [
"string",
"null"
@ -1216,7 +1458,7 @@
"minimum": 1
},
"reportFormat": {
"description": "ReportFormat determines test report format (JSON|XML|nil) nil == no report. maps to report.Type, however we don't want generated.deepcopy to have reference to it.",
"description": "ReportFormat determines test report format (JSON|XML|nil) nil == no report.\nmaps to report.Type, however we don't want generated.deepcopy to have reference to it.",
"type": [
"string",
"null"
@ -1255,7 +1497,7 @@
]
},
"testFile": {
"description": "TestFile is the name of the file containing the test to run. If no extension is provided, chainsaw will try with .yaml first and .yml if needed.",
"description": "TestFile is the name of the file containing the test to run.\nIf no extension is provided, chainsaw will try with .yaml first and .yml if needed.",
"type": [
"string",
"null"

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -17,8 +17,9 @@ The list of organizations that have publicly shared the usage of Chainsaw:
| [Grafana-operator](https://github.com/grafana/grafana-operator) | Chainsaw enabled easier e2e testing and CI debugging after replacing kuttl |
| [Opentelemetry-operator](https://github.com/open-telemetry/opentelemetry-operator) | Chainsaw cut down on hacks, improved code-reuse and enhanced test debugging |
| [Tempo-operator](https://github.com/grafana/tempo-operator) | Chainsaw cranked up the tempo, making our e2e tests dance to a rhythm of reliability and efficiency |
| [Provider-ceph](https://github.com/linode/provider-ceph) | Chainsaw replaced Kuttl and made our e2e tests much more readable and easier to debug. |
| [Provider-ceph](https://github.com/linode/provider-ceph) | Chainsaw replaced Kuttl and made our e2e tests much more readable and easier to debug |
| [Linode CAPI provider](https://github.com/linode/cluster-api-provider-linode) | Chainsaw replaced Kuttl and made our e2e tests much more readable and easier to debug. 🙏 @eddycharly |
| [Linode COSI driver](https://github.com/linode/linode-cosi-driver) | Running all end to end tests for object store driver |
<!-- append the line below to the table

View File

@ -29,7 +29,7 @@ KIND_IMAGE ?= kindest/node:v1.29.2
TOOLS_DIR := $(PWD)/.tools
CONTROLLER_GEN := $(TOOLS_DIR)/controller-gen
CONTROLLER_GEN_VERSION := v0.12.0
CONTROLLER_GEN_VERSION := v0.15.0
REGISTER_GEN := $(TOOLS_DIR)/register-gen
DEEPCOPY_GEN := $(TOOLS_DIR)/deepcopy-gen
CONVERSION_GEN := $(TOOLS_DIR)/conversion-gen
@ -131,9 +131,12 @@ codegen-conversion: $(CONVERSION_GEN)
.PHONY: codegen-crds
codegen-crds: ## Generate CRDs
codegen-crds: $(CONTROLLER_GEN)
codegen-crds: codegen-deepcopy
codegen-crds: codegen-register
codegen-crds: codegen-conversion
@echo Generate crds... >&2
@rm -rf $(CRDS_PATH)
@$(CONTROLLER_GEN) crd paths=./pkg/apis/... crd:crdVersions=v1 output:dir=$(CRDS_PATH)
@$(CONTROLLER_GEN) paths=./pkg/apis/... crd:crdVersions=v1 output:dir=$(CRDS_PATH)
@echo Copy generated CRDs to embed in the CLI... >&2
@rm -rf pkg/data/crds && mkdir -p pkg/data/crds
@cp $(CRDS_PATH)/* pkg/data/crds
@ -142,24 +145,25 @@ codegen-crds: $(CONTROLLER_GEN)
codegen-cli-docs: ## Generate CLI docs
codegen-cli-docs: build
@echo Generate cli docs... >&2
@rm -rf website/docs/commands && mkdir -p website/docs/commands
@rm -rf website/docs/reference/commands && mkdir -p website/reference/docs/commands
@rm -rf docs/user/commands && mkdir -p docs/user/commands
@./$(CLI_BIN) docs -o website/docs/commands --autogenTag=false
@./$(CLI_BIN) docs -o website/docs/reference/commands --autogenTag=false
.PHONY: codegen-api-docs
codegen-api-docs: ## Generate markdown API docs
codegen-api-docs: $(REFERENCE_DOCS)
codegen-api-docs: codegen-deepcopy
codegen-api-docs: codegen-register
codegen-api-docs: codegen-conversion
@echo Generate api docs... >&2
@rm -rf ./website/docs/apis
@cd ./website/apis && $(REFERENCE_DOCS) -c config.yaml -f markdown -o ../docs/apis
@rm -rf ./website/docs/reference/apis
@cd ./website/apis && $(REFERENCE_DOCS) -c config.yaml -f markdown -o ../docs/reference/apis
.PHONY: codegen-jp-docs
codegen-jp-docs: ## Generate JP docs
@echo Generate jp docs... >&2
@rm -rf ./website/docs/jp && mkdir -p ./website/docs/jp
@go run ./website/jp/main.go > ./website/docs/jp/functions.md
@rm -rf ./website/docs/reference/jp && mkdir -p ./website/docs/reference/jp
@go run ./website/jp/main.go > ./website/docs/reference/jp/functions.md
.PHONY: codegen-mkdocs
codegen-mkdocs: ## Generate mkdocs website
@ -167,9 +171,7 @@ codegen-mkdocs: codegen-cli-docs
codegen-mkdocs: codegen-api-docs
codegen-mkdocs: codegen-jp-docs
@echo Generate mkdocs website... >&2
@$(PIP) install mkdocs
@$(PIP) install --upgrade pip
@$(PIP) install -U mkdocs-material mkdocs-redirects mkdocs-minify-plugin mkdocs-include-markdown-plugin lunr mkdocs-rss-plugin mike
@$(PIP) install -r requirements.txt
@mkdocs build -f ./website/mkdocs.yaml
.PHONY: codegen-schemas-openapi
@ -194,7 +196,7 @@ codegen-schemas-openapi: $(KIND)
codegen-schemas-json: ## Generate json schemas
codegen-schemas-json: codegen-schemas-openapi
@echo Generate json schema... >&2
@$(PIP) install openapi2jsonschema --no-build-isolation
@$(PIP) install -r requirements.txt
@rm -rf ./.temp/.schemas/json
@rm -rf ./.schemas/json
@openapi2jsonschema ./.temp/.schemas/openapi/v2/schema.json --kubernetes --stand-alone --expanded -o ./.temp/.schemas/json
@ -239,9 +241,7 @@ verify-codegen: codegen
.PHONY: mkdocs-serve
mkdocs-serve: ## Generate and serve mkdocs website
@echo Generate and servemkdocs website... >&2
@$(PIP) install mkdocs
@$(PIP) install --upgrade pip
@$(PIP) install -U mkdocs-material mkdocs-redirects mkdocs-minify-plugin mkdocs-include-markdown-plugin lunr mkdocs-rss-plugin mike
@$(PIP) install -r requirements.txt
@mkdocs serve -f ./website/mkdocs.yaml
#########
@ -297,7 +297,7 @@ tests: $(CLI_BIN)
e2e-tests: ## Run e2e tests
e2e-tests: $(CLI_BIN)
@echo Running e2e tests... >&2
@./$(CLI_BIN) test --test-dir ./testdata/e2e --config ./testdata/e2e/config-v1alpha2.yaml --values ./testdata/e2e/values.yaml
@./$(CLI_BIN) test --test-dir ./testdata/e2e --remarshal --config ./testdata/e2e/config.yaml --values ./testdata/e2e/values.yaml
.PHONY: e2e-tests-ko
e2e-tests-ko: ## Run e2e tests from a docker container
@ -311,7 +311,7 @@ e2e-tests-ko: build-ko
--user $(id -u):$(id -g) \
--name chainsaw \
--rm \
ko.local/github.com/kyverno/chainsaw:$(KO_TAGS) test /chainsaw --config /chainsaw/config-v1alpha2.yaml --values /chainsaw/values.yaml
ko.local/github.com/kyverno/chainsaw:$(KO_TAGS) test /chainsaw --remarshal --config /chainsaw/config.yaml --values /chainsaw/values.yaml --selector !no-ko-test
########
# KIND #

View File

@ -39,7 +39,7 @@ Built under the Kyverno umbrella, you can use the Kyverno Chainsaw **Slack chann
## Getting Started
Please refer to the [Getting Started](https://kyverno.github.io/chainsaw/latest/intro/) documentation.
Please refer to the [Getting Started](https://kyverno.github.io/chainsaw/latest/quick-start/) documentation.
## RoadMap

124
go.mod
View File

@ -1,40 +1,42 @@
module github.com/kyverno/chainsaw
go 1.21.4
go 1.22.2
require (
github.com/Masterminds/sprig v2.22.0+incompatible
github.com/dustinkirkland/golang-petname v0.0.0-20231002161417-6a283f1aaaf2
github.com/fatih/color v1.16.0
github.com/go-logr/logr v1.4.1
github.com/dustinkirkland/golang-petname v0.0.0-20240428194347-eebcea082ee0
github.com/fatih/color v1.17.0
github.com/go-logr/logr v1.4.2
github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510
github.com/hashicorp/go-getter v1.7.4
github.com/jmespath-community/go-jmespath v1.1.2-0.20240117150817-e430401a2172
github.com/kudobuilder/kuttl v0.15.0
github.com/kyverno/kyverno-json v0.0.3-alpha.2.0.20240418134117-384bc5db5ad7
github.com/kudobuilder/kuttl v0.17.0
github.com/kyverno/kyverno-json v0.0.3
github.com/kyverno/pkg/ext v0.0.0-20240418121121-df8add26c55c
github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2
github.com/spf13/cobra v1.8.0
github.com/spf13/cobra v1.8.1
github.com/spf13/pflag v1.0.5
github.com/stretchr/testify v1.9.0
github.com/xeipuuv/gojsonschema v1.2.0
go.uber.org/multierr v1.11.0
golang.org/x/exp v0.0.0-20240222234643-814bf88cf225
k8s.io/api v0.29.4
k8s.io/apimachinery v0.29.4
k8s.io/client-go v0.29.4
k8s.io/utils v0.0.0-20240102154912-e7106e64919e
sigs.k8s.io/controller-runtime v0.17.3
sigs.k8s.io/kubectl-validate v0.0.3
golang.org/x/exp v0.0.0-20240531132922-fd00a4e0eefc
gopkg.in/yaml.v3 v3.0.1
k8s.io/api v0.30.2
k8s.io/apimachinery v0.30.2
k8s.io/client-go v0.30.2
k8s.io/utils v0.0.0-20240502163921-fe8a2dddb1d0
sigs.k8s.io/controller-runtime v0.18.4
sigs.k8s.io/kubectl-validate v0.0.4
sigs.k8s.io/yaml v1.4.0
)
require (
cloud.google.com/go v0.112.0 // indirect
cloud.google.com/go/compute v1.24.0 // indirect
cloud.google.com/go/compute/metadata v0.2.3 // indirect
cloud.google.com/go/iam v1.1.6 // indirect
cloud.google.com/go/storage v1.38.0 // indirect
cloud.google.com/go v0.114.0 // indirect
cloud.google.com/go/auth v0.5.1 // indirect
cloud.google.com/go/auth/oauth2adapt v0.2.2 // indirect
cloud.google.com/go/compute/metadata v0.3.0 // indirect
cloud.google.com/go/iam v1.1.8 // indirect
cloud.google.com/go/storage v1.41.0 // indirect
github.com/IGLOU-EU/go-wildcard v1.0.3 // indirect
github.com/Masterminds/goutils v1.1.1 // indirect
github.com/Masterminds/semver v1.5.0 // indirect
@ -42,42 +44,42 @@ require (
github.com/antlr/antlr4/runtime/Go/antlr/v4 v4.0.0-20230305170008-8188dc5388df // indirect
github.com/aquilax/truncate v1.0.0 // indirect
github.com/asaskevich/govalidator v0.0.0-20230301143203-a9d515a09cc2 // indirect
github.com/aws/aws-sdk-go v1.50.20 // indirect
github.com/aws/aws-sdk-go v1.53.14 // indirect
github.com/beorn7/perks v1.0.1 // indirect
github.com/bgentry/go-netrc v0.0.0-20140422174119-9fd32a8b3d3d // indirect
github.com/blang/semver/v4 v4.0.0 // indirect
github.com/cenkalti/backoff/v4 v4.2.1 // indirect
github.com/cespare/xxhash/v2 v2.2.0 // indirect
github.com/cenkalti/backoff/v4 v4.3.0 // indirect
github.com/cespare/xxhash/v2 v2.3.0 // indirect
github.com/coreos/go-semver v0.3.1 // indirect
github.com/coreos/go-systemd/v22 v22.5.0 // indirect
github.com/cpuguy83/go-md2man/v2 v2.0.3 // indirect
github.com/cpuguy83/go-md2man/v2 v2.0.4 // indirect
github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect
github.com/emicklei/go-restful/v3 v3.11.2 // indirect
github.com/emicklei/go-restful/v3 v3.12.1 // indirect
github.com/evanphx/json-patch v5.9.0+incompatible // indirect
github.com/evanphx/json-patch/v5 v5.9.0 // indirect
github.com/felixge/httpsnoop v1.0.4 // indirect
github.com/fsnotify/fsnotify v1.7.0 // indirect
github.com/go-logr/stdr v1.2.2 // indirect
github.com/go-openapi/jsonpointer v0.20.2 // indirect
github.com/go-openapi/jsonreference v0.20.4 // indirect
github.com/go-openapi/swag v0.22.9 // indirect
github.com/go-openapi/jsonpointer v0.21.0 // indirect
github.com/go-openapi/jsonreference v0.21.0 // indirect
github.com/go-openapi/swag v0.23.0 // indirect
github.com/gogo/protobuf v1.3.2 // indirect
github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect
github.com/golang/protobuf v1.5.4 // indirect
github.com/google/cel-go v0.17.7 // indirect
github.com/google/cel-go v0.17.8 // indirect
github.com/google/gnostic-models v0.6.9-0.20230804172637-c7be7c783f49 // indirect
github.com/google/go-cmp v0.6.0 // indirect
github.com/google/gofuzz v1.2.0 // indirect
github.com/google/s2a-go v0.1.7 // indirect
github.com/google/uuid v1.6.0 // indirect
github.com/googleapis/enterprise-certificate-proxy v0.3.2 // indirect
github.com/googleapis/gax-go/v2 v2.12.1 // indirect
github.com/googleapis/gax-go/v2 v2.12.4 // indirect
github.com/gopherjs/gopherjs v1.17.2 // indirect
github.com/grpc-ecosystem/go-grpc-prometheus v1.2.1-0.20210315223345-82c243799c99 // indirect
github.com/grpc-ecosystem/grpc-gateway/v2 v2.19.1 // indirect
github.com/grpc-ecosystem/grpc-gateway/v2 v2.20.0 // indirect
github.com/hashicorp/go-cleanhttp v0.5.2 // indirect
github.com/hashicorp/go-safetemp v1.0.0 // indirect
github.com/hashicorp/go-version v1.6.0 // indirect
github.com/hashicorp/go-version v1.7.0 // indirect
github.com/huandu/xstrings v1.4.0 // indirect
github.com/imdario/mergo v0.3.16 // indirect
github.com/inconshreveable/mousetrap v1.1.0 // indirect
@ -86,7 +88,7 @@ require (
github.com/josharian/intern v1.0.0 // indirect
github.com/json-iterator/go v1.1.12 // indirect
github.com/jtolds/gls v4.20.0+incompatible // indirect
github.com/klauspost/compress v1.17.6 // indirect
github.com/klauspost/compress v1.17.8 // indirect
github.com/mailru/easyjson v0.7.7 // indirect
github.com/mattn/go-colorable v0.1.13 // indirect
github.com/mattn/go-isatty v0.0.20 // indirect
@ -104,48 +106,46 @@ require (
github.com/prometheus/procfs v0.12.0 // indirect
github.com/russross/blackfriday/v2 v2.1.0 // indirect
github.com/stoewer/go-strcase v1.3.0 // indirect
github.com/ulikunitz/xz v0.5.11 // indirect
github.com/ulikunitz/xz v0.5.12 // indirect
github.com/xeipuuv/gojsonpointer v0.0.0-20190905194746-02993c407bfb // indirect
github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415 // indirect
github.com/zach-klippenstein/goregen v0.0.0-20160303162051-795b5e3961ea // indirect
go.etcd.io/etcd/api/v3 v3.5.11 // indirect
go.etcd.io/etcd/client/pkg/v3 v3.5.11 // indirect
go.etcd.io/etcd/client/v3 v3.5.11 // indirect
go.etcd.io/etcd/api/v3 v3.5.14 // indirect
go.etcd.io/etcd/client/pkg/v3 v3.5.14 // indirect
go.etcd.io/etcd/client/v3 v3.5.14 // indirect
go.opencensus.io v0.24.0 // indirect
go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.48.0 // indirect
go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.48.0 // indirect
go.opentelemetry.io/otel v1.23.1 // indirect
go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.49.0 // indirect
go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.49.0 // indirect
go.opentelemetry.io/otel v1.24.0 // indirect
go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.23.1 // indirect
go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.23.1 // indirect
go.opentelemetry.io/otel/metric v1.23.1 // indirect
go.opentelemetry.io/otel/sdk v1.23.1 // indirect
go.opentelemetry.io/otel/trace v1.23.1 // indirect
go.opentelemetry.io/otel/metric v1.24.0 // indirect
go.opentelemetry.io/otel/sdk v1.24.0 // indirect
go.opentelemetry.io/otel/trace v1.24.0 // indirect
go.opentelemetry.io/proto/otlp v1.1.0 // indirect
go.uber.org/zap v1.27.0 // indirect
golang.org/x/crypto v0.21.0 // indirect
golang.org/x/net v0.23.0 // indirect
golang.org/x/oauth2 v0.17.0 // indirect
golang.org/x/sync v0.6.0 // indirect
golang.org/x/sys v0.18.0 // indirect
golang.org/x/term v0.18.0 // indirect
golang.org/x/text v0.14.0 // indirect
golang.org/x/crypto v0.23.0 // indirect
golang.org/x/net v0.25.0 // indirect
golang.org/x/oauth2 v0.20.0 // indirect
golang.org/x/sync v0.7.0 // indirect
golang.org/x/sys v0.20.0 // indirect
golang.org/x/term v0.20.0 // indirect
golang.org/x/text v0.15.0 // indirect
golang.org/x/time v0.5.0 // indirect
google.golang.org/api v0.165.0 // indirect
google.golang.org/appengine v1.6.8 // indirect
google.golang.org/genproto v0.0.0-20240213162025-012b6fc9bca9 // indirect
google.golang.org/genproto/googleapis/api v0.0.0-20240213162025-012b6fc9bca9 // indirect
google.golang.org/genproto/googleapis/rpc v0.0.0-20240213162025-012b6fc9bca9 // indirect
google.golang.org/grpc v1.61.1 // indirect
google.golang.org/protobuf v1.33.0 // indirect
google.golang.org/api v0.182.0 // indirect
google.golang.org/genproto v0.0.0-20240528184218-531527333157 // indirect
google.golang.org/genproto/googleapis/api v0.0.0-20240528184218-531527333157 // indirect
google.golang.org/genproto/googleapis/rpc v0.0.0-20240528184218-531527333157 // indirect
google.golang.org/grpc v1.64.0 // indirect
google.golang.org/protobuf v1.34.1 // indirect
gopkg.in/inf.v0 v0.9.1 // indirect
gopkg.in/yaml.v2 v2.4.0 // indirect
gopkg.in/yaml.v3 v3.0.1 // indirect
k8s.io/apiextensions-apiserver v0.29.2 // indirect
k8s.io/apiserver v0.29.2 // indirect
k8s.io/component-base v0.29.2 // indirect
k8s.io/apiextensions-apiserver v0.30.1 // indirect
k8s.io/apiserver v0.30.1 // indirect
k8s.io/component-base v0.30.1 // indirect
k8s.io/klog/v2 v2.120.1 // indirect
k8s.io/kube-openapi v0.0.0-20240221221325-2ac9dc51f3f1 // indirect
sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.29.0 // indirect
k8s.io/kube-openapi v0.0.0-20240521193020-835d969ad83a // indirect
sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.30.3 // indirect
sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd // indirect
sigs.k8s.io/structured-merge-diff/v4 v4.4.1 // indirect
)

271
go.sum
View File

@ -30,8 +30,8 @@ cloud.google.com/go v0.100.2/go.mod h1:4Xra9TjzAeYHrl5+oeLlzbM2k3mjVhZh4UqTZ//w9
cloud.google.com/go v0.102.0/go.mod h1:oWcCzKlqJ5zgHQt9YsaeTY9KzIvjyy0ArmiBUgpQ+nc=
cloud.google.com/go v0.102.1/go.mod h1:XZ77E9qnTEnrgEOvr4xzfdX5TRo7fB4T2F4O6+34hIU=
cloud.google.com/go v0.104.0/go.mod h1:OO6xxXdJyvuJPcEPBLN9BJPD+jep5G1+2U5B5gkRYtA=
cloud.google.com/go v0.112.0 h1:tpFCD7hpHFlQ8yPwT3x+QeXqc2T6+n6T+hmABHfDUSM=
cloud.google.com/go v0.112.0/go.mod h1:3jEEVwZ/MHU4djK5t5RHuKOA/GbLddgTdVubX1qnPD4=
cloud.google.com/go v0.114.0 h1:OIPFAdfrFDFO2ve2U7r/H5SwSbBzEdrBdE7xkgwc+kY=
cloud.google.com/go v0.114.0/go.mod h1:ZV9La5YYxctro1HTPug5lXH/GefROyW8PPD4T8n9J8E=
cloud.google.com/go/aiplatform v1.22.0/go.mod h1:ig5Nct50bZlzV6NvKaTwmplLLddFx0YReh9WfTO5jKw=
cloud.google.com/go/aiplatform v1.24.0/go.mod h1:67UUvRBKG6GTayHKV8DBv2RtR1t93YRu5B1P3x99mYY=
cloud.google.com/go/analytics v0.11.0/go.mod h1:DjEWCu41bVbYcKyvlws9Er60YE4a//bK6mnhWvQeFNI=
@ -46,6 +46,10 @@ cloud.google.com/go/asset v1.8.0/go.mod h1:mUNGKhiqIdbr8X7KNayoYvyc4HbbFO9URsjby
cloud.google.com/go/assuredworkloads v1.5.0/go.mod h1:n8HOZ6pff6re5KYfBXcFvSViQjDwxFkAkmUFffJRbbY=
cloud.google.com/go/assuredworkloads v1.6.0/go.mod h1:yo2YOk37Yc89Rsd5QMVECvjaMKymF9OP+QXWlKXUkXw=
cloud.google.com/go/assuredworkloads v1.7.0/go.mod h1:z/736/oNmtGAyU47reJgGN+KVoYoxeLBoj4XkKYscNI=
cloud.google.com/go/auth v0.5.1 h1:0QNO7VThG54LUzKiQxv8C6x1YX7lUrzlAa1nVLF8CIw=
cloud.google.com/go/auth v0.5.1/go.mod h1:vbZT8GjzDf3AVqCcQmqeeM32U9HBFc32vVVAbwDsa6s=
cloud.google.com/go/auth/oauth2adapt v0.2.2 h1:+TTV8aXpjeChS9M+aTtN/TjdQnzJvmzKFt//oWu7HX4=
cloud.google.com/go/auth/oauth2adapt v0.2.2/go.mod h1:wcYjgpZI9+Yu7LyYBg4pqSiaRkfEK3GQcpb7C/uyF1Q=
cloud.google.com/go/automl v1.5.0/go.mod h1:34EjfoFGMZ5sgJ9EoLsRtdPSNZLcfflJR39VbVNS2M0=
cloud.google.com/go/automl v1.6.0/go.mod h1:ugf8a6Fx+zP0D59WLhqgTDsQI9w07o64uf/Is3Nh5p8=
cloud.google.com/go/bigquery v1.0.1/go.mod h1:i/xbL2UlR5RvWAURpBYZTtm/cXjCha9lbfbpx4poX+o=
@ -68,10 +72,8 @@ cloud.google.com/go/compute v1.6.0/go.mod h1:T29tfhtVbq1wvAPo0E3+7vhgmkOYeXjhFvz
cloud.google.com/go/compute v1.6.1/go.mod h1:g85FgpzFvNULZ+S8AYq87axRKuf2Kh7deLqV/jJ3thU=
cloud.google.com/go/compute v1.7.0/go.mod h1:435lt8av5oL9P3fv1OEzSbSUe+ybHXGMPQHHZWZxy9U=
cloud.google.com/go/compute v1.10.0/go.mod h1:ER5CLbMxl90o2jtNbGSbtfOpQKR0t15FOtRsugnLrlU=
cloud.google.com/go/compute v1.24.0 h1:phWcR2eWzRJaL/kOiJwfFsPs4BaKq1j6vnpZrc1YlVg=
cloud.google.com/go/compute v1.24.0/go.mod h1:kw1/T+h/+tK2LJK0wiPPx1intgdAM3j/g3hFDlscY40=
cloud.google.com/go/compute/metadata v0.2.3 h1:mg4jlk7mCAj6xXp9UJ4fjI9VUI5rubuGBW5aJ7UnBMY=
cloud.google.com/go/compute/metadata v0.2.3/go.mod h1:VAV5nSsACxMJvgaAuX6Pk2AawlZn8kiOGuCv6gTkwuA=
cloud.google.com/go/compute/metadata v0.3.0 h1:Tz+eQXMEqDIKRsmY3cHTL6FVaynIjX2QxYC4trgAKZc=
cloud.google.com/go/compute/metadata v0.3.0/go.mod h1:zFmK7XCadkQkj6TtorcaGlCW1hT1fIilQDwofLpJ20k=
cloud.google.com/go/containeranalysis v0.5.1/go.mod h1:1D92jd8gRR/c0fGMlymRgxWD3Qw9C1ff6/T7mLgVL8I=
cloud.google.com/go/containeranalysis v0.6.0/go.mod h1:HEJoiEIu+lEXM+k7+qLCci0h33lX3ZqoYFdmPcoO7s4=
cloud.google.com/go/datacatalog v1.3.0/go.mod h1:g9svFY6tuR+j+hrTw3J2dNcmI0dzmSiyOzm8kpLq0a0=
@ -109,8 +111,8 @@ cloud.google.com/go/gkehub v0.10.0/go.mod h1:UIPwxI0DsrpsVoWpLB0stwKCP+WFVG9+y97
cloud.google.com/go/grafeas v0.2.0/go.mod h1:KhxgtF2hb0P191HlY5besjYm6MqTSTj3LSI+M+ByZHc=
cloud.google.com/go/iam v0.3.0/go.mod h1:XzJPvDayI+9zsASAFO68Hk07u3z+f+JrT2xXNdp4bnY=
cloud.google.com/go/iam v0.5.0/go.mod h1:wPU9Vt0P4UmCux7mqtRu6jcpPAb74cP1fh50J3QpkUc=
cloud.google.com/go/iam v1.1.6 h1:bEa06k05IO4f4uJonbB5iAgKTPpABy1ayxaIZV/GHVc=
cloud.google.com/go/iam v1.1.6/go.mod h1:O0zxdPeGBoFdWW3HWmBxJsk0pfvNM/p/qa82rWOGTwI=
cloud.google.com/go/iam v1.1.8 h1:r7umDwhj+BQyz0ScZMp4QrGXjSTI3ZINnpgU2nlB/K0=
cloud.google.com/go/iam v1.1.8/go.mod h1:GvE6lyMmfxXauzNq8NbgJbeVQNspG+tcdL/W8QO1+zE=
cloud.google.com/go/language v1.4.0/go.mod h1:F9dRpNFQmJbkaop6g0JhSBXCNlO90e1KWx5iDdxbWic=
cloud.google.com/go/language v1.6.0/go.mod h1:6dJ8t3B+lUYfStgls25GusK04NLh3eDLQnWM3mdEbhI=
cloud.google.com/go/lifesciences v0.5.0/go.mod h1:3oIKy8ycWGPUyZDR/8RNnTOYevhaMLqh5vLUXs9zvT8=
@ -171,8 +173,8 @@ cloud.google.com/go/storage v1.10.0/go.mod h1:FLPqc6j+Ki4BU591ie1oL6qBQGu2Bl/tZ9
cloud.google.com/go/storage v1.22.1/go.mod h1:S8N1cAStu7BOeFfE8KAQzmyyLkK8p/vmRq6kuBTW58Y=
cloud.google.com/go/storage v1.23.0/go.mod h1:vOEEDNFnciUMhBeT6hsJIn3ieU5cFRmzeLgDvXzfIXc=
cloud.google.com/go/storage v1.27.0/go.mod h1:x9DOL8TK/ygDUMieqwfhdpQryTeEkhGKMi80i/iqR2s=
cloud.google.com/go/storage v1.38.0 h1:Az68ZRGlnNTpIBbLjSMIV2BDcwwXYlRlQzis0llkpJg=
cloud.google.com/go/storage v1.38.0/go.mod h1:tlUADB0mAb9BgYls9lq+8MGkfzOXuLrnHXlpHmvFJoY=
cloud.google.com/go/storage v1.41.0 h1:RusiwatSu6lHeEXe3kglxakAmAbfV+rhtPqA6i8RBx0=
cloud.google.com/go/storage v1.41.0/go.mod h1:J1WCa/Z2FcgdEDuPUY8DxT5I+d9mFKsCepp5vR6Sq80=
cloud.google.com/go/talent v1.1.0/go.mod h1:Vl4pt9jiHKvOgF9KoZo6Kob9oV4lwd/ZD5Cto54zDRw=
cloud.google.com/go/talent v1.2.0/go.mod h1:MoNF9bhFQbiJ6eFD3uSsg0uBALw4n4gaCaEjBw9zo8g=
cloud.google.com/go/videointelligence v1.6.0/go.mod h1:w0DIDlVRKtwPCn/C4iwZIJdvC69yInhW0cfi+p546uU=
@ -206,8 +208,8 @@ github.com/aquilax/truncate v1.0.0/go.mod h1:BeMESIDMlvlS3bmg4BVvBbbZUNwWtS8uzYP
github.com/asaskevich/govalidator v0.0.0-20230301143203-a9d515a09cc2 h1:DklsrG3dyBCFEj5IhUbnKptjxatkF07cF2ak3yi77so=
github.com/asaskevich/govalidator v0.0.0-20230301143203-a9d515a09cc2/go.mod h1:WaHUgvxTVq04UNunO+XhnAqY/wQc+bxr74GqbsZ/Jqw=
github.com/aws/aws-sdk-go v1.44.122/go.mod h1:y4AeaBuwd2Lk+GepC1E9v0qOiTws0MIWAX4oIKwKHZo=
github.com/aws/aws-sdk-go v1.50.20 h1:xfAnSDVf/azIWTVQXQODp89bubvCS85r70O3nuQ4dnE=
github.com/aws/aws-sdk-go v1.50.20/go.mod h1:LF8svs817+Nz+DmiMQKTO3ubZ/6IaTpq3TjupRn3Eqk=
github.com/aws/aws-sdk-go v1.53.14 h1:SzhkC2Pzag0iRW8WBb80RzKdGXDydJR9LAMs2GyKJ2M=
github.com/aws/aws-sdk-go v1.53.14/go.mod h1:LF8svs817+Nz+DmiMQKTO3ubZ/6IaTpq3TjupRn3Eqk=
github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q=
github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM=
github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw=
@ -215,13 +217,13 @@ github.com/bgentry/go-netrc v0.0.0-20140422174119-9fd32a8b3d3d h1:xDfNPAt8lFiC1U
github.com/bgentry/go-netrc v0.0.0-20140422174119-9fd32a8b3d3d/go.mod h1:6QX/PXZ00z/TKoufEY6K/a0k6AhaJrQKdFe6OfVXsa4=
github.com/blang/semver/v4 v4.0.0 h1:1PFHFE6yCCTv8C1TeyNNarDzntLi7wMI5i/pzqYIsAM=
github.com/blang/semver/v4 v4.0.0/go.mod h1:IbckMUScFkM3pff0VJDNKRiT6TG/YpiHIM2yvyW5YoQ=
github.com/cenkalti/backoff/v4 v4.2.1 h1:y4OZtCnogmCPw98Zjyt5a6+QwPLGkiQsYW5oUqylYbM=
github.com/cenkalti/backoff/v4 v4.2.1/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE=
github.com/cenkalti/backoff/v4 v4.3.0 h1:MyRJ/UdXutAwSAT+s3wNd7MfTIcy71VQueUuFK343L8=
github.com/cenkalti/backoff/v4 v4.3.0/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE=
github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU=
github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc=
github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
github.com/cespare/xxhash/v2 v2.2.0 h1:DC2CZ1Ep5Y4k3ZQ899DldepgrayRUGE6BBZ/cd9Cj44=
github.com/cespare/xxhash/v2 v2.2.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
github.com/cespare/xxhash/v2 v2.3.0 h1:UL815xU9SqsFlibzuggzjXhog7bL6oX9BbNZnL2UFvs=
github.com/cespare/xxhash/v2 v2.3.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
github.com/cheggaaa/pb v1.0.27/go.mod h1:pQciLPpbU0oxA0h+VJYYLxO+XeDQb5pZijXscXHm81s=
github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI=
github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI=
@ -236,24 +238,22 @@ github.com/cncf/xds/go v0.0.0-20210805033703-aa0b78936158/go.mod h1:eXthEFrGJvWH
github.com/cncf/xds/go v0.0.0-20210922020428-25de7278fc84/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs=
github.com/cncf/xds/go v0.0.0-20211001041855-01bcc9b48dfe/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs=
github.com/cncf/xds/go v0.0.0-20211011173535-cb28da3451f1/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs=
github.com/cncf/xds/go v0.0.0-20231109132714-523115ebc101 h1:7To3pQ+pZo0i3dsWEbinPNFs5gPSBOsJtx3wTT94VBY=
github.com/cncf/xds/go v0.0.0-20231109132714-523115ebc101/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs=
github.com/coreos/go-semver v0.3.1 h1:yi21YpKnrx1gt5R+la8n5WgS0kCrsPp33dmEyHReZr4=
github.com/coreos/go-semver v0.3.1/go.mod h1:irMmmIw/7yzSRPWryHsK7EYSg09caPQL03VsM8rvUec=
github.com/coreos/go-systemd/v22 v22.5.0 h1:RrqgGjYQKalulkV8NGVIfkXQf6YYmOyiJKk8iXXhfZs=
github.com/coreos/go-systemd/v22 v22.5.0/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc=
github.com/cpuguy83/go-md2man/v2 v2.0.3 h1:qMCsGGgs+MAzDFyp9LpAe1Lqy/fY/qCovCm0qnXZOBM=
github.com/cpuguy83/go-md2man/v2 v2.0.3/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o=
github.com/cpuguy83/go-md2man/v2 v2.0.4 h1:wfIWP927BUkWJb2NmU/kNDYIBTh/ziUX91+lVfRxZq4=
github.com/cpuguy83/go-md2man/v2 v2.0.4/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o=
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM=
github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/dustin/go-humanize v1.0.1 h1:GzkhY7T5VNhEkwH0PVJgjz+fX1rhBrR7pRT3mDkpeCY=
github.com/dustin/go-humanize v1.0.1/go.mod h1:Mu1zIs6XwVuF/gI1OepvI0qD18qycQx+mFykh5fBlto=
github.com/dustinkirkland/golang-petname v0.0.0-20231002161417-6a283f1aaaf2 h1:S6Dco8FtAhEI/qkg/00H6RdEGC+MCy5GPiQ+xweNRFE=
github.com/dustinkirkland/golang-petname v0.0.0-20231002161417-6a283f1aaaf2/go.mod h1:8AuBTZBRSFqEYBPYULd+NN474/zZBLP+6WeT5S9xlAc=
github.com/emicklei/go-restful/v3 v3.11.2 h1:1onLa9DcsMYO9P+CXaL0dStDqQ2EHHXLiz+BtnqkLAU=
github.com/emicklei/go-restful/v3 v3.11.2/go.mod h1:6n3XBCmQQb25CM2LCACGz8ukIrRry+4bhvbpWn3mrbc=
github.com/dustinkirkland/golang-petname v0.0.0-20240428194347-eebcea082ee0 h1:aYo8nnk3ojoQkP5iErif5Xxv0Mo0Ga/FR5+ffl/7+Nk=
github.com/dustinkirkland/golang-petname v0.0.0-20240428194347-eebcea082ee0/go.mod h1:8AuBTZBRSFqEYBPYULd+NN474/zZBLP+6WeT5S9xlAc=
github.com/emicklei/go-restful/v3 v3.12.1 h1:PJMDIM/ak7btuL8Ex0iYET9hxM3CI2sjZtzpL63nKAU=
github.com/emicklei/go-restful/v3 v3.12.1/go.mod h1:6n3XBCmQQb25CM2LCACGz8ukIrRry+4bhvbpWn3mrbc=
github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98=
@ -264,15 +264,13 @@ github.com/envoyproxy/go-control-plane v0.9.9-0.20210512163311-63b5d3c536b0/go.m
github.com/envoyproxy/go-control-plane v0.9.10-0.20210907150352-cf90f659a021/go.mod h1:AFq3mo9L8Lqqiid3OhADV3RfLJnjiw63cSpi+fDTRC0=
github.com/envoyproxy/go-control-plane v0.10.2-0.20220325020618-49ff273808a1/go.mod h1:KJwIaB5Mv44NWtYuAOFCVOjcI94vtpEz2JU/D2v6IjE=
github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c=
github.com/envoyproxy/protoc-gen-validate v1.0.2 h1:QkIBuU5k+x7/QXPvPPnWXWlCdaBFApVqftFV6k087DA=
github.com/envoyproxy/protoc-gen-validate v1.0.2/go.mod h1:GpiZQP3dDbg4JouG/NNS7QWXpgx6x8QiMKdmN72jogE=
github.com/evanphx/json-patch v5.9.0+incompatible h1:fBXyNpNMuTTDdquAq/uisOr2lShz4oaXpDTX2bLe7ls=
github.com/evanphx/json-patch v5.9.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk=
github.com/evanphx/json-patch/v5 v5.9.0 h1:kcBlZQbplgElYIlo/n1hJbls2z/1awpXxpRi0/FOJfg=
github.com/evanphx/json-patch/v5 v5.9.0/go.mod h1:VNkHZ/282BpEyt/tObQO8s5CMPmYYq14uClGH4abBuQ=
github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4=
github.com/fatih/color v1.16.0 h1:zmkK9Ngbjj+K0yRhTVONQh1p/HknKYSlNT+vZCzyokM=
github.com/fatih/color v1.16.0/go.mod h1:fL2Sau1YI5c0pdGEVCbKQbLXB6edEj1ZgiY4NijnWvE=
github.com/fatih/color v1.17.0 h1:GlRw1BRJxkpqUCBKzKOw098ed57fEsKeNjpTe3cSjK4=
github.com/fatih/color v1.17.0/go.mod h1:YZ7TlrGPkiz6ku9fK3TLD/pl3CpsiFyu8N92HLgmosI=
github.com/felixge/httpsnoop v1.0.4 h1:NFTV2Zj1bL4mc9sqWACXbQFVBBg2W3GPvqp8/ESS2Wg=
github.com/felixge/httpsnoop v1.0.4/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U=
github.com/fsnotify/fsnotify v1.7.0 h1:8JEhPFa5W2WU7YfeZzPNqzMP6Lwt7L2715Ggo0nosvA=
@ -282,20 +280,21 @@ github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9
github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8=
github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8=
github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A=
github.com/go-logr/logr v1.4.1 h1:pKouT5E8xu9zeFC39JXRDukb6JFQPXM5p5I91188VAQ=
github.com/go-logr/logr v1.4.1/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY=
github.com/go-logr/logr v1.4.2 h1:6pFjapn8bFcIbiKo3XT4j/BhANplGihG6tvd+8rYgrY=
github.com/go-logr/logr v1.4.2/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY=
github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag=
github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE=
github.com/go-logr/zapr v1.3.0 h1:XGdV8XW8zdwFiwOA2Dryh1gj2KRQyOOoNmBy4EplIcQ=
github.com/go-logr/zapr v1.3.0/go.mod h1:YKepepNBd1u/oyhd/yQmtjVXmm9uML4IXUgMOwR8/Gg=
github.com/go-openapi/jsonpointer v0.20.2 h1:mQc3nmndL8ZBzStEo3JYF8wzmeWffDH4VbXz58sAx6Q=
github.com/go-openapi/jsonpointer v0.20.2/go.mod h1:bHen+N0u1KEO3YlmqOjTT9Adn1RfD91Ar825/PuiRVs=
github.com/go-openapi/jsonreference v0.20.4 h1:bKlDxQxQJgwpUSgOENiMPzCTBVuc7vTdXSSgNeAhojU=
github.com/go-openapi/jsonreference v0.20.4/go.mod h1:5pZJyJP2MnYCpoeoMAql78cCHauHj0V9Lhc506VOpw4=
github.com/go-openapi/swag v0.22.9 h1:XX2DssF+mQKM2DHsbgZK74y/zj4mo9I99+89xUmuZCE=
github.com/go-openapi/swag v0.22.9/go.mod h1:3/OXnFfnMAwBD099SwYRk7GD3xOrr1iL7d/XNLXVVwE=
github.com/go-openapi/jsonpointer v0.21.0 h1:YgdVicSA9vH5RiHs9TZW5oyafXZFc6+2Vc1rr/O9oNQ=
github.com/go-openapi/jsonpointer v0.21.0/go.mod h1:IUyH9l/+uyhIYQ/PXVA41Rexl+kOkAPDdXEYns6fzUY=
github.com/go-openapi/jsonreference v0.21.0 h1:Rs+Y7hSXT83Jacb7kFyjn4ijOuVGSvOdF2+tg1TRrwQ=
github.com/go-openapi/jsonreference v0.21.0/go.mod h1:LmZmgsrTkVg9LG4EaHeY8cBDslNPMo06cago5JNLkm4=
github.com/go-openapi/swag v0.23.0 h1:vsEVJDUo2hPJ2tu0/Xc+4noaxyEffXNIs3cOULZ+GrE=
github.com/go-openapi/swag v0.23.0/go.mod h1:esZ8ITTYEsH1V2trKHjAN8Ai7xHb8RV+YSZ577vPjgQ=
github.com/go-task/slim-sprig v0.0.0-20230315185526-52ccab3ef572 h1:tfuBGBXKqDEevZMzYi5KSi8KkcZtzBcTgAUUtapy0OI=
github.com/go-task/slim-sprig v0.0.0-20230315185526-52ccab3ef572/go.mod h1:9Pwr4B2jHnOSGXyyzV8ROjYa2ojvAY6HCGYYfMoC3Ls=
github.com/go-task/slim-sprig/v3 v3.0.0 h1:sUs3vkvUymDpBKi3qH1YSqBQk9+9D/8M2mN1vB6EwHI=
github.com/go-task/slim-sprig/v3 v3.0.0/go.mod h1:W848ghGpv3Qj3dhTPRyJypKRiqCdHZiAzKg9hl15HA8=
github.com/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA=
github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q=
github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q=
@ -340,8 +339,8 @@ github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Z
github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ=
github.com/google/btree v1.1.2 h1:xf4v41cLI2Z6FxbKm+8Bu+m8ifhj15JuZ9sa0jZCMUU=
github.com/google/btree v1.1.2/go.mod h1:qOPhT0dTNdNzV6Z/lhRX0YXUafgPLFUh+gZMl761Gm4=
github.com/google/cel-go v0.17.7 h1:6ebJFzu1xO2n7TLtN+UBqShGBhlD85bhvglh5DpcfqQ=
github.com/google/cel-go v0.17.7/go.mod h1:HXZKzB0LXqer5lHHgfWAnlYwJaQBDKMjxjulNQzhwhY=
github.com/google/cel-go v0.17.8 h1:j9m730pMZt1Fc4oKhCLUHfjj6527LuhYcYw0Rl8gqto=
github.com/google/cel-go v0.17.8/go.mod h1:HXZKzB0LXqer5lHHgfWAnlYwJaQBDKMjxjulNQzhwhY=
github.com/google/gnostic-models v0.6.9-0.20230804172637-c7be7c783f49 h1:0VpGH+cDhbDtdcweoyCVsF3fhN8kejK6rFe/2FFX2nU=
github.com/google/gnostic-models v0.6.9-0.20230804172637-c7be7c783f49/go.mod h1:BkkQ4L1KS1xMt2aWSPStnn55ChGC0DPOn2FQYj+f25M=
github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M=
@ -371,8 +370,8 @@ github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXi
github.com/google/martian/v3 v3.0.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0=
github.com/google/martian/v3 v3.1.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0=
github.com/google/martian/v3 v3.2.1/go.mod h1:oBOf6HBosgwRXnUGWUB05QECsc6uvmMiJ3+6W4l/CUk=
github.com/google/martian/v3 v3.3.2 h1:IqNFLAmvJOgVlpdEBiQbDc2EwKW77amAycfTuWKdfvw=
github.com/google/martian/v3 v3.3.2/go.mod h1:oBOf6HBosgwRXnUGWUB05QECsc6uvmMiJ3+6W4l/CUk=
github.com/google/martian/v3 v3.3.3 h1:DIhPTQrbPkgs2yJYdXU/eNACCG5DVQjySNRNlflZ9Fc=
github.com/google/martian/v3 v3.3.3/go.mod h1:iEPrYcgCF7jA9OtScMFQyAlZZ4YXTKEtJ1E6RWzmBA0=
github.com/google/pprof v0.0.0-20181206194817-3ea8567a2e57/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc=
github.com/google/pprof v0.0.0-20190515194954-54271f7e092f/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc=
github.com/google/pprof v0.0.0-20191218002539-d4f498aebedc/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM=
@ -387,8 +386,8 @@ github.com/google/pprof v0.0.0-20210226084205-cbba55b83ad5/go.mod h1:kpwsk12EmLe
github.com/google/pprof v0.0.0-20210601050228-01bbb1931b22/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE=
github.com/google/pprof v0.0.0-20210609004039-a478d1d731e9/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE=
github.com/google/pprof v0.0.0-20210720184732-4bb14d4b1be1/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE=
github.com/google/pprof v0.0.0-20240207164012-fb44976bdcd5 h1:E/LAvt58di64hlYjx7AsNS6C/ysHWYo+2qPCZKTQhRo=
github.com/google/pprof v0.0.0-20240207164012-fb44976bdcd5/go.mod h1:czg5+yv1E0ZGTi6S6vVK1mke0fV+FaUhNGcd6VRS9Ik=
github.com/google/pprof v0.0.0-20240424215950-a892ee059fd6 h1:k7nVchz72niMH6YLQNvHSdIE7iqsQxK1P41mySCvssg=
github.com/google/pprof v0.0.0-20240424215950-a892ee059fd6/go.mod h1:kf6iHlnVGwgKolg33glAes7Yg/8iWP8ukqeldJSO7jw=
github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI=
github.com/google/s2a-go v0.1.7 h1:60BLSyTrOV4/haCDW4zb1guZItoSq8foHCXrAnjBo/o=
github.com/google/s2a-go v0.1.7/go.mod h1:50CgR4k1jNlWBu4UfS4AcfhVe1r6pdZPygJ3R8F0Qdw=
@ -412,8 +411,8 @@ github.com/googleapis/gax-go/v2 v2.3.0/go.mod h1:b8LNqSzNabLiUpXKkY7HAR5jr6bIT99
github.com/googleapis/gax-go/v2 v2.4.0/go.mod h1:XOTVJ59hdnfJLIP/dh8n5CGryZR2LxK9wbMD5+iXC6c=
github.com/googleapis/gax-go/v2 v2.5.1/go.mod h1:h6B0KMMFNtI2ddbGJn3T3ZbwkeT6yqEF02fYlzkUCyo=
github.com/googleapis/gax-go/v2 v2.6.0/go.mod h1:1mjbznJAPHFpesgE5ucqfYEscaz5kMdcIDwU/6+DDoY=
github.com/googleapis/gax-go/v2 v2.12.1 h1:9F8GV9r9ztXyAi00gsMQHNoF51xPZm8uj1dpYt2ZETM=
github.com/googleapis/gax-go/v2 v2.12.1/go.mod h1:61M8vcyyXR2kqKFxKrfA22jaA8JGF7Dc8App1U3H6jc=
github.com/googleapis/gax-go/v2 v2.12.4 h1:9gWcmF85Wvq4ryPFvGFaOgPIs1AQX0d0bcbGw4Z96qg=
github.com/googleapis/gax-go/v2 v2.12.4/go.mod h1:KYEYLorsnIGDi/rPC8b5TdlB9kbKoFubselGIoBMCwI=
github.com/googleapis/go-type-adapters v1.0.0/go.mod h1:zHW75FOG2aur7gAO2B+MLby+cLsWGBF62rFAi7WjWO4=
github.com/gopherjs/gopherjs v1.17.2 h1:fQnZVsXk8uxXIStYb0N4bGk7jeyTalG/wsZjQ25dO0g=
github.com/gopherjs/gopherjs v1.17.2/go.mod h1:pRRIvn/QzFLrKfvEz3qUuEhtE/zLCWfreZ6J5gM2i+k=
@ -425,16 +424,17 @@ github.com/grpc-ecosystem/go-grpc-prometheus v1.2.1-0.20210315223345-82c243799c9
github.com/grpc-ecosystem/go-grpc-prometheus v1.2.1-0.20210315223345-82c243799c99/go.mod h1:3bDW6wMZJB7tiONtC/1Xpicra6Wp5GgbTbQWCbI5fkc=
github.com/grpc-ecosystem/grpc-gateway v1.16.0 h1:gmcG1KaJ57LophUzW0Hy8NmPhnMZb4M0+kPpLofRdBo=
github.com/grpc-ecosystem/grpc-gateway v1.16.0/go.mod h1:BDjrQk3hbvj6Nolgz8mAMFbcEtjT1g+wF4CSlocrBnw=
github.com/grpc-ecosystem/grpc-gateway/v2 v2.19.1 h1:/c3QmbOGMGTOumP2iT/rCwB7b0QDGLKzqOmktBjT+Is=
github.com/grpc-ecosystem/grpc-gateway/v2 v2.19.1/go.mod h1:5SN9VR2LTsRFsrEC6FHgRbTWrTHu6tqPeKxEQv15giM=
github.com/grpc-ecosystem/grpc-gateway/v2 v2.20.0 h1:bkypFPDjIYGfCYD5mRBvpqxfYX1YCS1PXdKYWi8FsN0=
github.com/grpc-ecosystem/grpc-gateway/v2 v2.20.0/go.mod h1:P+Lt/0by1T8bfcF3z737NnSbmxQAppXMRziHUxPOC8k=
github.com/hashicorp/go-cleanhttp v0.5.2 h1:035FKYIWjmULyFRBKPs8TBQoi0x6d9G4xc9neXJWAZQ=
github.com/hashicorp/go-cleanhttp v0.5.2/go.mod h1:kO/YDlP8L1346E6Sodw+PrpBSV4/SoxCXGY6BqNFT48=
github.com/hashicorp/go-getter v1.7.4 h1:3yQjWuxICvSpYwqSayAdKRFcvBl1y/vogCxczWSmix0=
github.com/hashicorp/go-getter v1.7.4/go.mod h1:W7TalhMmbPmsSMdNjD0ZskARur/9GJ17cfHTRtXV744=
github.com/hashicorp/go-safetemp v1.0.0 h1:2HR189eFNrjHQyENnQMMpCiBAsRxzbTMIgBhEyExpmo=
github.com/hashicorp/go-safetemp v1.0.0/go.mod h1:oaerMy3BhqiTbVye6QuFhFtIceqFoDHxNAB65b+Rj1I=
github.com/hashicorp/go-version v1.6.0 h1:feTTfFNnjP967rlCxM/I9g701jU+RN74YKx2mOkIeek=
github.com/hashicorp/go-version v1.6.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA=
github.com/hashicorp/go-version v1.7.0 h1:5tqGy27NaOTB8yJKUZELlFAS/LTKJkrmONwQKeRZfjY=
github.com/hashicorp/go-version v1.7.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA=
github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8=
github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8=
github.com/huandu/xstrings v1.4.0 h1:D17IlohoQq4UcpqD7fDk80P7l+lwAmlFaBHgOipl2FU=
@ -466,8 +466,8 @@ github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfV
github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8=
github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck=
github.com/klauspost/compress v1.15.11/go.mod h1:QPwzmACJjUTFsnSHH934V6woptycfrDDJnH7hvFVbGM=
github.com/klauspost/compress v1.17.6 h1:60eq2E/jlfwQXtvZEeBUYADs+BwKBWURIY+Gj2eRGjI=
github.com/klauspost/compress v1.17.6/go.mod h1:/dCuZOvVtNoHsyb+cuJD3itjs3NbnF6KH9zAO4BDxPM=
github.com/klauspost/compress v1.17.8 h1:YcnTYrq7MikUT7k0Yb5eceMmALQPYBW/Xltxn0NAMnU=
github.com/klauspost/compress v1.17.8/go.mod h1:Di0epgTjJY877eYKx5yC51cX2A2Vl2ibi7bDH9ttBbw=
github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo=
github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE=
github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk=
@ -475,10 +475,10 @@ github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=
github.com/kudobuilder/kuttl v0.15.0 h1:OmCbpY3ebn+myJaatD+IT1AL1OTz34+Cv6ettiXd/hI=
github.com/kudobuilder/kuttl v0.15.0/go.mod h1:UtAOt+GE8HQZFveEN8p1fk3j+H1Cp5Fk1eMdQkXPqH0=
github.com/kyverno/kyverno-json v0.0.3-alpha.2.0.20240418134117-384bc5db5ad7 h1:09UL+pBN0LHYrv22dBmRKAQ0xBKCdkFMTJc0enyTj1o=
github.com/kyverno/kyverno-json v0.0.3-alpha.2.0.20240418134117-384bc5db5ad7/go.mod h1:RwCdE0qkkKmMTgcci23U0Ffntfdbo5tOS7Ht6YLtxlY=
github.com/kudobuilder/kuttl v0.17.0 h1:KkY5xs4RAiEI7XT1kj6XI3OYKVoAMu3PCVT/H/HZnnI=
github.com/kudobuilder/kuttl v0.17.0/go.mod h1:2vrehDY2g27qKmV2hAxIsxcm7ZXkesVnNP43gWj2pQg=
github.com/kyverno/kyverno-json v0.0.3 h1:EImI/YV41dG4hDQer/W0qMZHfxqul1yiHrBEXxFrkGM=
github.com/kyverno/kyverno-json v0.0.3/go.mod h1:KUgXPXwUh0Sm/UgtHPomZAfEX8v79I3B5RZbUlzNihg=
github.com/kyverno/pkg/ext v0.0.0-20240418121121-df8add26c55c h1:lAolpR9H8BwM5lRRvgCQ8JowswyxZRH+fgtIQzHFVCk=
github.com/kyverno/pkg/ext v0.0.0-20240418121121-df8add26c55c/go.mod h1:02vxM0GNXz9+B/i6+rMfWAIwibUuAH+qFsd73IFskgQ=
github.com/mailru/easyjson v0.7.7 h1:UGYAvKxe3sBsEDzO8ZeWOSlIQfWFlxbzLZe7hwFURr0=
@ -507,10 +507,10 @@ github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9G
github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk=
github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 h1:C3w9PqII01/Oq1c1nUAm88MOHcQC9l5mIlSMApZMrHA=
github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ=
github.com/onsi/ginkgo/v2 v2.15.0 h1:79HwNRBAZHOEwrczrgSOPy+eFTTlIGELKy5as+ClttY=
github.com/onsi/ginkgo/v2 v2.15.0/go.mod h1:HlxMHtYF57y6Dpf+mc5529KKmSq9h2FpCF+/ZkwUxKM=
github.com/onsi/gomega v1.31.1 h1:KYppCUK+bUgAZwHOu7EXVBKyQA6ILvOESHkn/tgoqvo=
github.com/onsi/gomega v1.31.1/go.mod h1:y40C95dwAD1Nz36SsEnxvfFe8FFfNxzI5eJ0EYGyAy0=
github.com/onsi/ginkgo/v2 v2.17.2 h1:7eMhcy3GimbsA3hEnVKdw/PQM9XN9krpKVXsZdph0/g=
github.com/onsi/ginkgo/v2 v2.17.2/go.mod h1:nP2DPOQoNsQmsVyv5rDA8JkXQoCs6goXIvr/PRJ1eCc=
github.com/onsi/gomega v1.33.1 h1:dsYjIxxSR755MDmKVsaFQTE22ChNBcuuTWgkUDSubOk=
github.com/onsi/gomega v1.33.1/go.mod h1:U4R44UsT+9eLIaYRB2a5qajjtQYn0hauxvRm16AVYg0=
github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4=
github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
@ -545,8 +545,8 @@ github.com/smartystreets/goconvey v1.8.1/go.mod h1:+/u4qLyY6x1jReYOp7GOM2FSt8aP9
github.com/soheilhy/cmux v0.1.5 h1:jjzc5WVemNEDTLwv9tlmemhC73tI08BNOIGwBOo10Js=
github.com/soheilhy/cmux v0.1.5/go.mod h1:T7TcVDs9LWfQgPlPsdngu6I6QIoyIFZDDC6sNE1GqG0=
github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA=
github.com/spf13/cobra v1.8.0 h1:7aJaZx1B85qltLMc546zn58BxxfZdR/W22ej9CFoEf0=
github.com/spf13/cobra v1.8.0/go.mod h1:WXLWApfZ71AjXPya3WOlMsY9yMs7YeiHhFVlvLyhcho=
github.com/spf13/cobra v1.8.1 h1:e5/vxKd/rZsfSJMUX1agtjeTDf+qv1/JdBF8gg5k9ZM=
github.com/spf13/cobra v1.8.1/go.mod h1:wHxEcudfqmLYa8iTfL+OuZPbBZkmvliBWKIezN3kD9Y=
github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA=
github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg=
github.com/stoewer/go-strcase v1.3.0 h1:g0eASXYtp+yvN9fK8sH94oCIk0fau9uV1/ZdJ0AVEzs=
@ -567,8 +567,8 @@ github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8
github.com/tmc/grpc-websocket-proxy v0.0.0-20220101234140-673ab2c3ae75 h1:6fotK7otjonDflCTK0BCfls4SPy3NcCVb5dqqmbRknE=
github.com/tmc/grpc-websocket-proxy v0.0.0-20220101234140-673ab2c3ae75/go.mod h1:KO6IkyS8Y3j8OdNO85qEYBsRPuteD+YciPomcXdrMnk=
github.com/ulikunitz/xz v0.5.10/go.mod h1:nbz6k7qbPmH4IRqmfOplQw/tblSgqTqBwxkY0oWt/14=
github.com/ulikunitz/xz v0.5.11 h1:kpFauv27b6ynzBNT/Xy+1k+fK4WswhN/6PN5WhFAGw8=
github.com/ulikunitz/xz v0.5.11/go.mod h1:nbz6k7qbPmH4IRqmfOplQw/tblSgqTqBwxkY0oWt/14=
github.com/ulikunitz/xz v0.5.12 h1:37Nm15o69RwBkXM0J6A5OlE67RZTfzUxTj8fB3dfcsc=
github.com/ulikunitz/xz v0.5.12/go.mod h1:nbz6k7qbPmH4IRqmfOplQw/tblSgqTqBwxkY0oWt/14=
github.com/xeipuuv/gojsonpointer v0.0.0-20180127040702-4e3ac2762d5f/go.mod h1:N2zxlSyiKSe5eX1tZViRH5QA0qijqEDrYZiPEAiq3wU=
github.com/xeipuuv/gojsonpointer v0.0.0-20190905194746-02993c407bfb h1:zGWFAtiMcyryUHoUjUJX0/lt1H2+i2Ka2n+D3DImSNo=
github.com/xeipuuv/gojsonpointer v0.0.0-20190905194746-02993c407bfb/go.mod h1:N2zxlSyiKSe5eX1tZViRH5QA0qijqEDrYZiPEAiq3wU=
@ -588,14 +588,14 @@ github.com/zach-klippenstein/goregen v0.0.0-20160303162051-795b5e3961ea h1:Cyhwe
github.com/zach-klippenstein/goregen v0.0.0-20160303162051-795b5e3961ea/go.mod h1:eNr558nEUjP8acGw8FFjTeWvSgU1stO7FAO6eknhHe4=
go.etcd.io/bbolt v1.3.8 h1:xs88BrvEv273UsB79e0hcVrlUWmS0a8upikMFhSyAtA=
go.etcd.io/bbolt v1.3.8/go.mod h1:N9Mkw9X8x5fupy0IKsmuqVtoGDyxsaDlbk4Rd05IAQw=
go.etcd.io/etcd/api/v3 v3.5.11 h1:B54KwXbWDHyD3XYAwprxNzTe7vlhR69LuBgZnMVvS7E=
go.etcd.io/etcd/api/v3 v3.5.11/go.mod h1:Ot+o0SWSyT6uHhA56al1oCED0JImsRiU9Dc26+C2a+4=
go.etcd.io/etcd/client/pkg/v3 v3.5.11 h1:bT2xVspdiCj2910T0V+/KHcVKjkUrCZVtk8J2JF2z1A=
go.etcd.io/etcd/client/pkg/v3 v3.5.11/go.mod h1:seTzl2d9APP8R5Y2hFL3NVlD6qC/dOT+3kvrqPyTas4=
go.etcd.io/etcd/api/v3 v3.5.14 h1:vHObSCxyB9zlF60w7qzAdTcGaglbJOpSj1Xj9+WGxq0=
go.etcd.io/etcd/api/v3 v3.5.14/go.mod h1:BmtWcRlQvwa1h3G2jvKYwIQy4PkHlDej5t7uLMUdJUU=
go.etcd.io/etcd/client/pkg/v3 v3.5.14 h1:SaNH6Y+rVEdxfpA2Jr5wkEvN6Zykme5+YnbCkxvuWxQ=
go.etcd.io/etcd/client/pkg/v3 v3.5.14/go.mod h1:8uMgAokyG1czCtIdsq+AGyYQMvpIKnSvPjFMunkgeZI=
go.etcd.io/etcd/client/v2 v2.305.10 h1:MrmRktzv/XF8CvtQt+P6wLUlURaNpSDJHFZhe//2QE4=
go.etcd.io/etcd/client/v2 v2.305.10/go.mod h1:m3CKZi69HzilhVqtPDcjhSGp+kA1OmbNn0qamH80xjA=
go.etcd.io/etcd/client/v3 v3.5.11 h1:ajWtgoNSZJ1gmS8k+icvPtqsqEav+iUorF7b0qozgUU=
go.etcd.io/etcd/client/v3 v3.5.11/go.mod h1:a6xQUEqFJ8vztO1agJh/KQKOMfFI8og52ZconzcDJwE=
go.etcd.io/etcd/client/v3 v3.5.14 h1:CWfRs4FDaDoSz81giL7zPpZH2Z35tbOrAJkkjMqOupg=
go.etcd.io/etcd/client/v3 v3.5.14/go.mod h1:k3XfdV/VIHy/97rqWjoUzrj9tk7GgJGH9J8L4dNXmAk=
go.etcd.io/etcd/pkg/v3 v3.5.10 h1:WPR8K0e9kWl1gAhB5A7gEa5ZBTNkT9NdNWrR8Qpo1CM=
go.etcd.io/etcd/pkg/v3 v3.5.10/go.mod h1:TKTuCKKcF1zxmfKWDkfz5qqYaE3JncKKZPFf8c1nFUs=
go.etcd.io/etcd/raft/v3 v3.5.10 h1:cgNAYe7xrsrn/5kXMSaH8kM/Ky8mAdMqGOxyYwpP0LA=
@ -611,22 +611,22 @@ go.opencensus.io v0.22.5/go.mod h1:5pWMHQbX5EPX2/62yrJeAkowc+lfs/XD7Uxpq3pI6kk=
go.opencensus.io v0.23.0/go.mod h1:XItmlyltB5F7CS4xOC1DcqMoFqwtC6OG2xF7mCv7P7E=
go.opencensus.io v0.24.0 h1:y73uSU6J157QMP2kn2r30vwW1A2W2WFwSCGnAVxeaD0=
go.opencensus.io v0.24.0/go.mod h1:vNK8G9p7aAivkbmorf4v+7Hgx+Zs0yY+0fOtgBfjQKo=
go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.48.0 h1:P+/g8GpuJGYbOp2tAdKrIPUX9JO02q8Q0YNlHolpibA=
go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.48.0/go.mod h1:tIKj3DbO8N9Y2xo52og3irLsPI4GW02DSMtrVgNMgxg=
go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.48.0 h1:doUP+ExOpH3spVTLS0FcWGLnQrPct/hD/bCPbDRUEAU=
go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.48.0/go.mod h1:rdENBZMT2OE6Ne/KLwpiXudnAsbdrdBaqBvTN8M8BgA=
go.opentelemetry.io/otel v1.23.1 h1:Za4UzOqJYS+MUczKI320AtqZHZb7EqxO00jAHE0jmQY=
go.opentelemetry.io/otel v1.23.1/go.mod h1:Td0134eafDLcTS4y+zQ26GE8u3dEuRBiBCTUIRHaikA=
go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.49.0 h1:4Pp6oUg3+e/6M4C0A/3kJ2VYa++dsWVTtGgLVj5xtHg=
go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.49.0/go.mod h1:Mjt1i1INqiaoZOMGR1RIUJN+i3ChKoFRqzrRQhlkbs0=
go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.49.0 h1:jq9TW8u3so/bN+JPT166wjOI6/vQPF6Xe7nMNIltagk=
go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.49.0/go.mod h1:p8pYQP+m5XfbZm9fxtSKAbM6oIllS7s2AfxrChvc7iw=
go.opentelemetry.io/otel v1.24.0 h1:0LAOdjNmQeSTzGBzduGe/rU4tZhMwL5rWgtp9Ku5Jfo=
go.opentelemetry.io/otel v1.24.0/go.mod h1:W7b9Ozg4nkF5tWI5zsXkaKKDjdVjpD4oAt9Qi/MArHo=
go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.23.1 h1:o8iWeVFa1BcLtVEV0LzrCxV2/55tB3xLxADr6Kyoey4=
go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.23.1/go.mod h1:SEVfdK4IoBnbT2FXNM/k8yC08MrfbhWk3U4ljM8B3HE=
go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.23.1 h1:p3A5+f5l9e/kuEBwLOrnpkIDHQFlHmbiVxMURWRK6gQ=
go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.23.1/go.mod h1:OClrnXUjBqQbInvjJFjYSnMxBSCXBF8r3b34WqjiIrQ=
go.opentelemetry.io/otel/metric v1.23.1 h1:PQJmqJ9u2QaJLBOELl1cxIdPcpbwzbkjfEyelTl2rlo=
go.opentelemetry.io/otel/metric v1.23.1/go.mod h1:mpG2QPlAfnK8yNhNJAxDZruU9Y1/HubbC+KyH8FaCWI=
go.opentelemetry.io/otel/sdk v1.23.1 h1:O7JmZw0h76if63LQdsBMKQDWNb5oEcOThG9IrxscV+E=
go.opentelemetry.io/otel/sdk v1.23.1/go.mod h1:LzdEVR5am1uKOOwfBWFef2DCi1nu3SA8XQxx2IerWFk=
go.opentelemetry.io/otel/trace v1.23.1 h1:4LrmmEd8AU2rFvU1zegmvqW7+kWarxtNOPyeL6HmYY8=
go.opentelemetry.io/otel/trace v1.23.1/go.mod h1:4IpnpJFwr1mo/6HL8XIPJaE9y0+u1KcVmuW7dwFSVrI=
go.opentelemetry.io/otel/metric v1.24.0 h1:6EhoGWWK28x1fbpA4tYTOWBkPefTDQnb8WSGXlc88kI=
go.opentelemetry.io/otel/metric v1.24.0/go.mod h1:VYhLe1rFfxuTXLgj4CBiyz+9WYBA8pNGJgDcSFRKBco=
go.opentelemetry.io/otel/sdk v1.24.0 h1:YMPPDNymmQN3ZgczicBY3B6sf9n62Dlj9pWD3ucgoDw=
go.opentelemetry.io/otel/sdk v1.24.0/go.mod h1:KVrIYw6tEubO9E96HQpcmpTKDVn9gdv35HoYiQWGDFg=
go.opentelemetry.io/otel/trace v1.24.0 h1:CsKnnL4dUAr/0llH9FKuc698G04IrpWV0MQA/Y1YELI=
go.opentelemetry.io/otel/trace v1.24.0/go.mod h1:HPc3Xr/cOApsBI154IU0OI0HJexz+aw5uPdbs3UCjNU=
go.opentelemetry.io/proto/otlp v0.7.0/go.mod h1:PqfVotwruBrMGOCsRd/89rSnXhoiJIqeYNgFYFoEGnI=
go.opentelemetry.io/proto/otlp v1.1.0 h1:2Di21piLrCqJ3U3eXGCTPHE9R8Nh+0uglSnOyxikMeI=
go.opentelemetry.io/proto/otlp v1.1.0/go.mod h1:GpBHCBWiqvVLDqmHZsoMM3C5ySeKTC7ej/RNTae6MdY=
@ -642,8 +642,8 @@ golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8U
golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
golang.org/x/crypto v0.21.0 h1:X31++rzVUdKhX5sWmSOFZxx8UW/ldWx55cbf08iNAMA=
golang.org/x/crypto v0.21.0/go.mod h1:0BP7YvVV9gBbVKyeTG0Gyn+gZm94bibOW5BjDEYAOMs=
golang.org/x/crypto v0.23.0 h1:dIJU/v2J8Mdglj/8rJ6UUOM3Zc9zLZxVZwwxMooUSAI=
golang.org/x/crypto v0.23.0/go.mod h1:CKFgDieR+mRhux2Lsu27y0fO304Db0wZe70UKqHu0v8=
golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8=
@ -654,8 +654,8 @@ golang.org/x/exp v0.0.0-20191227195350-da58074b4299/go.mod h1:2RIsYlXP63K8oxa1u0
golang.org/x/exp v0.0.0-20200119233911-0405dc783f0a/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4=
golang.org/x/exp v0.0.0-20200207192155-f17229e696bd/go.mod h1:J/WKrq2StrnmMY6+EHIKF9dgMWnmCNThgcyBT1FY9mM=
golang.org/x/exp v0.0.0-20200224162631-6cc2880d07d6/go.mod h1:3jZMyOhIsHpP37uCMkUooju7aAi5cS1Q23tOzKc+0MU=
golang.org/x/exp v0.0.0-20240222234643-814bf88cf225 h1:LfspQV/FYTatPTr/3HzIcmiUFH7PGP+OQ6mgDYo3yuQ=
golang.org/x/exp v0.0.0-20240222234643-814bf88cf225/go.mod h1:CxmFvTBINI24O/j8iY7H1xHzx2i4OsyguNBmN/uPtqc=
golang.org/x/exp v0.0.0-20240531132922-fd00a4e0eefc h1:O9NuF4s+E/PvMIy+9IUZB9znFwUIXEWSstNjek6VpVg=
golang.org/x/exp v0.0.0-20240531132922-fd00a4e0eefc/go.mod h1:XtvwrStGgqGPLc4cjQfWqZHG1YFdYs6swckp8vpsjnc=
golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js=
golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0=
golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
@ -730,8 +730,8 @@ golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug
golang.org/x/net v0.0.0-20220909164309-bea034e7d591/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk=
golang.org/x/net v0.0.0-20221014081412-f15817d10f9b/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk=
golang.org/x/net v0.1.0/go.mod h1:Cx3nUiGt4eDBEyega/BKRp+/AlGL8hYe7U9odMt2Cco=
golang.org/x/net v0.23.0 h1:7EYJ93RZ9vYSZAIb2x3lnuvqO5zneoD6IvWjuhfxjTs=
golang.org/x/net v0.23.0/go.mod h1:JKghWKKOSdJwpW2GEx0Ja7fmaKnMsbu+MWVZTokSYmg=
golang.org/x/net v0.25.0 h1:d/OCCoBEUq33pjydKrGQhw7IlUPI2Oylr+8qLx49kac=
golang.org/x/net v0.25.0/go.mod h1:JkAGAh7GEvH74S6FOH42FLoXpXbE/aqXSrIQjXgsiwM=
golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
@ -757,8 +757,8 @@ golang.org/x/oauth2 v0.0.0-20220822191816-0ebed06d0094/go.mod h1:h4gKUeWbJ4rQPri
golang.org/x/oauth2 v0.0.0-20220909003341-f21342109be1/go.mod h1:h4gKUeWbJ4rQPri7E0u6Gs4e9Ri2zaLxzw5DI5XGrYg=
golang.org/x/oauth2 v0.0.0-20221014153046-6fdb5e3db783/go.mod h1:h4gKUeWbJ4rQPri7E0u6Gs4e9Ri2zaLxzw5DI5XGrYg=
golang.org/x/oauth2 v0.1.0/go.mod h1:G9FE4dLTsbXUu90h/Pf85g4w1D+SSAgR+q46nJZ8M4A=
golang.org/x/oauth2 v0.17.0 h1:6m3ZPmLEFdVxKKWnKq4VqZ60gutO35zm+zrAHVmHyDQ=
golang.org/x/oauth2 v0.17.0/go.mod h1:OzPDGQiuQMguemayvdylqddI7qcD9lnSDb+1FiwQ5HA=
golang.org/x/oauth2 v0.20.0 h1:4mQdhULixXKP1rwYBW0vAijoXnkTG0BLCDRzfe1idMo=
golang.org/x/oauth2 v0.20.0/go.mod h1:XYTD2NtWslqkgxebSiOHnXEap4TF09sJSc7H1sXbhtI=
golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
@ -773,8 +773,8 @@ golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJ
golang.org/x/sync v0.0.0-20220601150217-0de741cfad7f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20220929204114-8fcdb60fdcc0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.6.0 h1:5BMeUDZ7vkXGfEr1x9B4bRcTH4lpkTkpdh0T/J+qjbQ=
golang.org/x/sync v0.6.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk=
golang.org/x/sync v0.7.0 h1:YsImfSBoP9QPYL0xyKJPq0gcaJdG3rInoqxTWbfQu9M=
golang.org/x/sync v0.7.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk=
golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
@ -840,13 +840,13 @@ golang.org/x/sys v0.0.0-20220728004956-3c1f35247d10/go.mod h1:oPkhp1MJrh7nUepCBc
golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.18.0 h1:DBdB3niSjOA/O0blCZBqDefyWNYveAYMNF1Wum0DYQ4=
golang.org/x/sys v0.18.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
golang.org/x/sys v0.20.0 h1:Od9JTbYCk261bKm4M/mw7AklTlFYIa0bIp9BgSm1S8Y=
golang.org/x/sys v0.20.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
golang.org/x/term v0.1.0/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
golang.org/x/term v0.18.0 h1:FcHjZXDMxI8mM3nwhX9HlKop4C0YQvCVCdwYl2wOtE8=
golang.org/x/term v0.18.0/go.mod h1:ILwASektA3OnRv7amZ1xhE/KTR+u50pbXfZ03+6Nx58=
golang.org/x/term v0.20.0 h1:VnkxpohqXaOBYJtBmEppKUG6mXpi+4O6purfc2+sMhw=
golang.org/x/term v0.20.0/go.mod h1:8UkIAJTvZgivsXaD6/pH6U9ecQzZ45awqEOzuCvwpFY=
golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
@ -856,10 +856,9 @@ golang.org/x/text v0.3.4/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
golang.org/x/text v0.3.5/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ=
golang.org/x/text v0.3.8/go.mod h1:E6s5w1FMmriuDzIBO73fBruAKo1PCIq6d2Q6DHfQ8WQ=
golang.org/x/text v0.4.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8=
golang.org/x/text v0.14.0 h1:ScX5w1eTa3QqT8oi6+ziP7dTV1S2+ALU0bI+0zXKWiQ=
golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU=
golang.org/x/text v0.15.0 h1:h1V/4gjBv8v9cjcR6+AR5+/cIYK5N/WAgiv4xlsEtAk=
golang.org/x/text v0.15.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU=
golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
@ -920,8 +919,8 @@ golang.org/x/tools v0.1.3/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk=
golang.org/x/tools v0.1.4/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk=
golang.org/x/tools v0.1.5/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk=
golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc=
golang.org/x/tools v0.18.0 h1:k8NLag8AGHnn+PHbl7g43CtqZAwG60vZkLqgyZgIHgQ=
golang.org/x/tools v0.18.0/go.mod h1:GL7B4CwcLLeo59yx/9UWWuNOW1n3VZ4f5axWfML7Lcg=
golang.org/x/tools v0.21.0 h1:qc0xYgIbsSDt9EyWz05J5wfa7LOVW0YTLOXrqdLAWIw=
golang.org/x/tools v0.21.0/go.mod h1:aiJjzUbINMkxbQROHiO6hDPo2LHcIPhhQsa9DLh0yGk=
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
@ -980,8 +979,8 @@ google.golang.org/api v0.96.0/go.mod h1:w7wJQLTM+wvQpNf5JyEcBoxK0RH7EDrh/L4qfsuJ
google.golang.org/api v0.97.0/go.mod h1:w7wJQLTM+wvQpNf5JyEcBoxK0RH7EDrh/L4qfsuJ13s=
google.golang.org/api v0.98.0/go.mod h1:w7wJQLTM+wvQpNf5JyEcBoxK0RH7EDrh/L4qfsuJ13s=
google.golang.org/api v0.100.0/go.mod h1:ZE3Z2+ZOr87Rx7dqFsdRQkRBk36kDtp/h+QpHbB7a70=
google.golang.org/api v0.165.0 h1:zd5d4JIIIaYYsfVy1HzoXYZ9rWCSBxxAglbczzo7Bgc=
google.golang.org/api v0.165.0/go.mod h1:2OatzO7ZDQsoS7IFf3rvsE17/TldiU3F/zxFHeqUB5o=
google.golang.org/api v0.182.0 h1:if5fPvudRQ78GeRx3RayIoiuV7modtErPIZC/T2bIvE=
google.golang.org/api v0.182.0/go.mod h1:cGhjy4caqA5yXRzEhkHI8Y9mfyC2VLTlER2l08xaqtM=
google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM=
google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
@ -989,8 +988,6 @@ google.golang.org/appengine v1.6.1/go.mod h1:i06prIuMbXzDqacNJfV5OdTW448YApPu5ww
google.golang.org/appengine v1.6.5/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc=
google.golang.org/appengine v1.6.6/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc=
google.golang.org/appengine v1.6.7/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc=
google.golang.org/appengine v1.6.8 h1:IhEN5q69dyKagZPYMSdIjS2HqprW324FRQZJcGqPAsM=
google.golang.org/appengine v1.6.8/go.mod h1:1jJ3jBArFh5pcgW8gCtRJnepW8FzD1V44FJffLiz/Ds=
google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc=
google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE=
google.golang.org/genproto v0.0.0-20190418145605-e7d98fc518a7/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE=
@ -1092,12 +1089,12 @@ google.golang.org/genproto v0.0.0-20221010155953-15ba04fc1c0e/go.mod h1:3526vdqw
google.golang.org/genproto v0.0.0-20221014173430-6e2ab493f96b/go.mod h1:1vXfmgAz9N9Jx0QA82PqRVauvCz1SGSz739p0f183jM=
google.golang.org/genproto v0.0.0-20221014213838-99cd37c6964a/go.mod h1:1vXfmgAz9N9Jx0QA82PqRVauvCz1SGSz739p0f183jM=
google.golang.org/genproto v0.0.0-20221025140454-527a21cfbd71/go.mod h1:9qHF0xnpdSfF6knlcsnpzUu5y+rpwgbvsyGAZPBMg4s=
google.golang.org/genproto v0.0.0-20240213162025-012b6fc9bca9 h1:9+tzLLstTlPTRyJTh+ah5wIMsBW5c4tQwGTN3thOW9Y=
google.golang.org/genproto v0.0.0-20240213162025-012b6fc9bca9/go.mod h1:mqHbVIp48Muh7Ywss/AD6I5kNVKZMmAa/QEW58Gxp2s=
google.golang.org/genproto/googleapis/api v0.0.0-20240213162025-012b6fc9bca9 h1:4++qSzdWBUy9/2x8L5KZgwZw+mjJZ2yDSCGMVM0YzRs=
google.golang.org/genproto/googleapis/api v0.0.0-20240213162025-012b6fc9bca9/go.mod h1:PVreiBMirk8ypES6aw9d4p6iiBNSIfZEBqr3UGoAi2E=
google.golang.org/genproto/googleapis/rpc v0.0.0-20240213162025-012b6fc9bca9 h1:hZB7eLIaYlW9qXRfCq/qDaPdbeY3757uARz5Vvfv+cY=
google.golang.org/genproto/googleapis/rpc v0.0.0-20240213162025-012b6fc9bca9/go.mod h1:YUWgXUFRPfoYK1IHMuxH5K6nPEXSCzIMljnQ59lLRCk=
google.golang.org/genproto v0.0.0-20240528184218-531527333157 h1:u7WMYrIrVvs0TF5yaKwKNbcJyySYf+HAIFXxWltJOXE=
google.golang.org/genproto v0.0.0-20240528184218-531527333157/go.mod h1:ubQlAQnzejB8uZzszhrTCU2Fyp6Vi7ZE5nn0c3W8+qQ=
google.golang.org/genproto/googleapis/api v0.0.0-20240528184218-531527333157 h1:7whR9kGa5LUwFtpLm2ArCEejtnxlGeLbAyjFY8sGNFw=
google.golang.org/genproto/googleapis/api v0.0.0-20240528184218-531527333157/go.mod h1:99sLkeliLXfdj2J75X3Ho+rrVCaJze0uwN7zDDkjPVU=
google.golang.org/genproto/googleapis/rpc v0.0.0-20240528184218-531527333157 h1:Zy9XzmMEflZ/MAaA7vNcoebnRAld7FsPW1EeBB7V0m8=
google.golang.org/genproto/googleapis/rpc v0.0.0-20240528184218-531527333157/go.mod h1:EfXuqaE1J41VCDicxHzUDm+8rk+7ZdXzHV0IhO/I6s0=
google.golang.org/grpc v1.18.0/go.mod h1:6QZJwpn2B+Zp71q/5VxRsJ6NXXVCE5NRUHRo+f3cWCs=
google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c=
google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38=
@ -1134,8 +1131,8 @@ google.golang.org/grpc v1.48.0/go.mod h1:vN9eftEi1UMyUsIF80+uQXhHjbXYbm0uXoFCACu
google.golang.org/grpc v1.49.0/go.mod h1:ZgQEeidpAuNRZ8iRrlBKXZQP1ghovWIVhdJRyCDK+GI=
google.golang.org/grpc v1.50.0/go.mod h1:ZgQEeidpAuNRZ8iRrlBKXZQP1ghovWIVhdJRyCDK+GI=
google.golang.org/grpc v1.50.1/go.mod h1:ZgQEeidpAuNRZ8iRrlBKXZQP1ghovWIVhdJRyCDK+GI=
google.golang.org/grpc v1.61.1 h1:kLAiWrZs7YeDM6MumDe7m3y4aM6wacLzM1Y/wiLP9XY=
google.golang.org/grpc v1.61.1/go.mod h1:VUbo7IFqmF1QtCAstipjG0GIoq49KvMe9+h1jFLBNJs=
google.golang.org/grpc v1.64.0 h1:KH3VH9y/MgNQg1dE7b3XfVK0GsPSIzJwdF617gUSbvY=
google.golang.org/grpc v1.64.0/go.mod h1:oxjF8E3FBnjp+/gVFYdWacaLDx9na1aqy9oovLpxQYg=
google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.1.0/go.mod h1:6Kw0yEErY5E/yWrBtf03jp27GLLJujG4z/JK95pnjjw=
google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8=
google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0=
@ -1152,8 +1149,8 @@ google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQ
google.golang.org/protobuf v1.27.1/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc=
google.golang.org/protobuf v1.28.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I=
google.golang.org/protobuf v1.28.1/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I=
google.golang.org/protobuf v1.33.0 h1:uNO2rsAINq/JlFpSdYEKIZ0uKD/R9cpdv0T+yoGwGmI=
google.golang.org/protobuf v1.33.0/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos=
google.golang.org/protobuf v1.34.1 h1:9ddQBjfCyZPOHPUiPxpYESBLc+T8P3E+Vo4IbKZgFWg=
google.golang.org/protobuf v1.34.1/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk=
@ -1182,37 +1179,37 @@ honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWh
honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg=
honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k=
honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k=
k8s.io/api v0.29.4 h1:WEnF/XdxuCxdG3ayHNRR8yH3cI1B/llkWBma6bq4R3w=
k8s.io/api v0.29.4/go.mod h1:DetSv0t4FBTcEpfA84NJV3g9a7+rSzlUHk5ADAYHUv0=
k8s.io/apiextensions-apiserver v0.29.2 h1:UK3xB5lOWSnhaCk0RFZ0LUacPZz9RY4wi/yt2Iu+btg=
k8s.io/apiextensions-apiserver v0.29.2/go.mod h1:aLfYjpA5p3OwtqNXQFkhJ56TB+spV8Gc4wfMhUA3/b8=
k8s.io/apimachinery v0.29.4 h1:RaFdJiDmuKs/8cm1M6Dh1Kvyh59YQFDcFuFTSmXes6Q=
k8s.io/apimachinery v0.29.4/go.mod h1:i3FJVwhvSp/6n8Fl4K97PJEP8C+MM+aoDq4+ZJBf70Y=
k8s.io/apiserver v0.29.2 h1:+Z9S0dSNr+CjnVXQePG8TcBWHr3Q7BmAr7NraHvsMiQ=
k8s.io/apiserver v0.29.2/go.mod h1:B0LieKVoyU7ykQvPFm7XSdIHaCHSzCzQWPFa5bqbeMQ=
k8s.io/client-go v0.29.4 h1:79ytIedxVfyXV8rpH3jCBW0u+un0fxHDwX5F9K8dPR8=
k8s.io/client-go v0.29.4/go.mod h1:kC1thZQ4zQWYwldsfI088BbK6RkxK+aF5ebV8y9Q4tk=
k8s.io/component-base v0.29.2 h1:lpiLyuvPA9yV1aQwGLENYyK7n/8t6l3nn3zAtFTJYe8=
k8s.io/component-base v0.29.2/go.mod h1:BfB3SLrefbZXiBfbM+2H1dlat21Uewg/5qtKOl8degM=
k8s.io/api v0.30.2 h1:+ZhRj+28QT4UOH+BKznu4CBgPWgkXO7XAvMcMl0qKvI=
k8s.io/api v0.30.2/go.mod h1:ULg5g9JvOev2dG0u2hig4Z7tQ2hHIuS+m8MNZ+X6EmI=
k8s.io/apiextensions-apiserver v0.30.1 h1:4fAJZ9985BmpJG6PkoxVRpXv9vmPUOVzl614xarePws=
k8s.io/apiextensions-apiserver v0.30.1/go.mod h1:R4GuSrlhgq43oRY9sF2IToFh7PVlF1JjfWdoG3pixk4=
k8s.io/apimachinery v0.30.2 h1:fEMcnBj6qkzzPGSVsAZtQThU62SmQ4ZymlXRC5yFSCg=
k8s.io/apimachinery v0.30.2/go.mod h1:iexa2somDaxdnj7bha06bhb43Zpa6eWH8N8dbqVjTUc=
k8s.io/apiserver v0.30.1 h1:BEWEe8bzS12nMtDKXzCF5Q5ovp6LjjYkSp8qOPk8LZ8=
k8s.io/apiserver v0.30.1/go.mod h1:i87ZnQ+/PGAmSbD/iEKM68bm1D5reX8fO4Ito4B01mo=
k8s.io/client-go v0.30.2 h1:sBIVJdojUNPDU/jObC+18tXWcTJVcwyqS9diGdWHk50=
k8s.io/client-go v0.30.2/go.mod h1:JglKSWULm9xlJLx4KCkfLLQ7XwtlbflV6uFFSHTMgVs=
k8s.io/component-base v0.30.1 h1:bvAtlPh1UrdaZL20D9+sWxsJljMi0QZ3Lmw+kmZAaxQ=
k8s.io/component-base v0.30.1/go.mod h1:e/X9kDiOebwlI41AvBHuWdqFriSRrX50CdwA9TFaHLI=
k8s.io/klog/v2 v2.120.1 h1:QXU6cPEOIslTGvZaXvFWiP9VKyeet3sawzTOvdXb4Vw=
k8s.io/klog/v2 v2.120.1/go.mod h1:3Jpz1GvMt720eyJH1ckRHK1EDfpxISzJ7I9OYgaDtPE=
k8s.io/kms v0.29.2 h1:MDsbp98gSlEQs7K7dqLKNNTwKFQRYYvO4UOlBOjNy6Y=
k8s.io/kms v0.29.2/go.mod h1:s/9RC4sYRZ/6Tn6yhNjbfJuZdb8LzlXhdlBnKizeFDo=
k8s.io/kube-openapi v0.0.0-20240221221325-2ac9dc51f3f1 h1:rtdnaWfP40MTKv7izH81gkWpZB45pZrwIxyZdPSn1mI=
k8s.io/kube-openapi v0.0.0-20240221221325-2ac9dc51f3f1/go.mod h1:Pa1PvrP7ACSkuX6I7KYomY6cmMA0Tx86waBhDUgoKPw=
k8s.io/utils v0.0.0-20240102154912-e7106e64919e h1:eQ/4ljkx21sObifjzXwlPKpdGLrCfRziVtos3ofG/sQ=
k8s.io/utils v0.0.0-20240102154912-e7106e64919e/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0=
k8s.io/kms v0.30.1 h1:gEIbEeCbFiaN2tNfp/EUhFdGr5/CSj8Eyq6Mkr7cCiY=
k8s.io/kms v0.30.1/go.mod h1:GrMurD0qk3G4yNgGcsCEmepqf9KyyIrTXYR2lyUOJC4=
k8s.io/kube-openapi v0.0.0-20240521193020-835d969ad83a h1:zD1uj3Jf+mD4zmA7W+goE5TxDkI7OGJjBNBzq5fJtLA=
k8s.io/kube-openapi v0.0.0-20240521193020-835d969ad83a/go.mod h1:UxDHUPsUwTOOxSU+oXURfFBcAS6JwiRXTYqYwfuGowc=
k8s.io/utils v0.0.0-20240502163921-fe8a2dddb1d0 h1:jgGTlFYnhF1PM1Ax/lAlxUPE+KfCIXHaathvJg1C3ak=
k8s.io/utils v0.0.0-20240502163921-fe8a2dddb1d0/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0=
rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8=
rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0=
rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA=
sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.29.0 h1:/U5vjBbQn3RChhv7P11uhYvCSm5G2GaIi5AIGBS6r4c=
sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.29.0/go.mod h1:z7+wmGM2dfIiLRfrC6jb5kV2Mq/sK1ZP303cxzkV5Y4=
sigs.k8s.io/controller-runtime v0.17.3 h1:65QmN7r3FWgTxDMz9fvGnO1kbf2nu+acg9p2R9oYYYk=
sigs.k8s.io/controller-runtime v0.17.3/go.mod h1:N0jpP5Lo7lMTF9aL56Z/B2oWBJjey6StQM0jRbKQXtY=
sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.30.3 h1:2770sDpzrjjsAtVhSeUFseziht227YAWYHLGNM8QPwY=
sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.30.3/go.mod h1:Ve9uj1L+deCXFrPOk1LpFXqTg7LCFzFso6PA48q/XZw=
sigs.k8s.io/controller-runtime v0.18.4 h1:87+guW1zhvuPLh1PHybKdYFLU0YJp4FhJRmiHvm5BZw=
sigs.k8s.io/controller-runtime v0.18.4/go.mod h1:TVoGrfdpbA9VRFaRnKgk9P5/atA0pMwq+f+msb9M8Sg=
sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd h1:EDPBXCAspyGV4jQlpZSudPeMmr1bNJefnuqLsRAsHZo=
sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd/go.mod h1:B8JuhiUyNFVKdsE8h686QcCxMaH6HrOAZj4vswFpcB0=
sigs.k8s.io/kubectl-validate v0.0.3 h1:wcbx6dPXF7BWoWSyih295mEOLBbzZA6CaEHoCufutUo=
sigs.k8s.io/kubectl-validate v0.0.3/go.mod h1:Y67xSi06L5XSl+jSGFamNoa117yq6SnN4yXIzWHWxU8=
sigs.k8s.io/kubectl-validate v0.0.4 h1:tGKuv0awYHn11Cb6KPsZKxUmHgavF46K3NvVH0Nse9U=
sigs.k8s.io/kubectl-validate v0.0.4/go.mod h1:JTm3G+JZLPISqABh73uV7s/sW28q2zZqnTghOzahEKA=
sigs.k8s.io/structured-merge-diff/v4 v4.4.1 h1:150L+0vs/8DA78h1u02ooW1/fFq/Lwr+sGiqlzvrtq4=
sigs.k8s.io/structured-merge-diff/v4 v4.4.1/go.mod h1:N8hJocpFajUSSeSJ9bOZ77VzejKZaXsTtZo4/u7Io08=
sigs.k8s.io/yaml v1.4.0 h1:Mk1wCc2gy/F0THH0TAp1QYyJNzRm2KCLy3o5ASXVI5E=

360
pkg/apis/v1alpha1/action.go Normal file
View File

@ -0,0 +1,360 @@
package v1alpha1
import (
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
)
// ActionBindings contains bindings options for an action.
type ActionBindings struct {
// Bindings defines additional binding key/values.
// +optional
Bindings []Binding `json:"bindings,omitempty"`
}
// ActionCheck contains check for an action.
type ActionCheck struct {
// Check is an assertion tree to validate the operation outcome.
// +optional
Check *Check `json:"check,omitempty"`
}
// ActionCheckRef contains check reference options for an action.
type ActionCheckRef struct {
FileRef `json:",inline"`
// Check provides a check used in assertions.
// +optional
Check *Check `json:"resource,omitempty"`
// Template determines whether resources should be considered for templating.
// +optional
Template *bool `json:"template,omitempty"`
}
// ActionClusters contains clusters options for an action.
type ActionClusters struct {
// Cluster defines the target cluster (default cluster will be used if not specified and/or overridden).
// +optional
Cluster string `json:"cluster,omitempty"`
// Clusters holds a registry to clusters to support multi-cluster tests.
// +optional
Clusters Clusters `json:"clusters,omitempty"`
}
// ActionDryRun contains dry run options for an action.
type ActionDryRun struct {
// DryRun determines whether the file should be applied in dry run mode.
// +optional
DryRun *bool `json:"dryRun,omitempty"`
}
// ActionEnv contains environment options for an action.
type ActionEnv struct {
// Env defines additional environment variables.
// +optional
Env []Binding `json:"env,omitempty"`
// SkipLogOutput removes the output from the command. Useful for sensitive logs or to reduce noise.
// +optional
SkipLogOutput bool `json:"skipLogOutput,omitempty"`
}
// ActionExpectations contains expectations for an action.
type ActionExpectations struct {
// Expect defines a list of matched checks to validate the operation outcome.
// +optional
Expect []Expectation `json:"expect,omitempty"`
}
// ActionFormat contains format for an action.
type ActionFormat struct {
// Format determines the output format (json or yaml).
// +optional
Format Format `json:"format,omitempty"`
}
type ActionInlineResource struct {
// Resource provides a resource to be applied.
// +kubebuilder:validation:XEmbeddedResource
// +kubebuilder:pruning:PreserveUnknownFields
// +optional
Resource *unstructured.Unstructured `json:"resource,omitempty"`
}
// ActionObject contains object selector options for an action.
type ActionObject struct {
ObjectType `json:",inline"`
ActionObjectSelector `json:",inline"`
}
// ActionObjectSelector contains object selector options for an action.
type ActionObjectSelector struct {
ObjectName `json:",inline"`
// Selector defines labels selector.
// +optional
Selector string `json:"selector,omitempty"`
}
// ActionOutputs contains outputs options for an action.
type ActionOutputs struct {
// Outputs defines output bindings.
// +optional
Outputs []Output `json:"outputs,omitempty"`
}
// FileRef represents a file reference.
type FileRef struct {
// File is the path to the referenced file. This can be a direct path to a file
// or an expression that matches multiple files, such as "manifest/*.yaml" for all YAML
// files within the "manifest" directory.
File string `json:"file,omitempty"`
}
// ActionResourceRef contains resource reference options for an action.
type ActionResourceRef struct {
FileRef `json:",inline"`
// Resource provides a resource to be applied.
// +kubebuilder:validation:XEmbeddedResource
// +kubebuilder:pruning:PreserveUnknownFields
// +optional
Resource *unstructured.Unstructured `json:"resource,omitempty"`
// ActionInlineResource `json:",inline"`
// Template determines whether resources should be considered for templating.
// +optional
Template *bool `json:"template,omitempty"`
}
// ActionTimeout contains timeout options for an action.
type ActionTimeout struct {
// Timeout for the operation. Overrides the global timeout set in the Configuration.
// +optional
Timeout *metav1.Duration `json:"timeout,omitempty"`
}
// Apply represents a set of configurations or resources that
// should be applied during testing.
type Apply struct {
ActionBindings `json:",inline"`
ActionClusters `json:",inline"`
ActionDryRun `json:",inline"`
ActionExpectations `json:",inline"`
ActionOutputs `json:",inline"`
ActionResourceRef `json:",inline"`
ActionTimeout `json:",inline"`
}
// Assert represents a test condition that is expected to hold true
// during the testing process.
type Assert struct {
ActionBindings `json:",inline"`
ActionCheckRef `json:",inline"`
ActionClusters `json:",inline"`
ActionTimeout `json:",inline"`
}
// Command describes a command to run as a part of a test step.
type Command struct {
ActionBindings `json:",inline"`
ActionCheck `json:",inline"`
ActionClusters `json:",inline"`
ActionEnv `json:",inline"`
ActionOutputs `json:",inline"`
ActionTimeout `json:",inline"`
// Entrypoint is the command entry point to run.
Entrypoint string `json:"entrypoint"`
// Args is the command arguments.
// +optional
Args []string `json:"args,omitempty"`
}
// Create represents a set of resources that should be created.
// If a resource already exists in the cluster it will fail.
type Create struct {
ActionBindings `json:",inline"`
ActionClusters `json:",inline"`
ActionDryRun `json:",inline"`
ActionExpectations `json:",inline"`
ActionOutputs `json:",inline"`
ActionResourceRef `json:",inline"`
ActionTimeout `json:",inline"`
}
// Delete is a reference to an object that should be deleted
type Delete struct {
ActionBindings `json:",inline"`
ActionClusters `json:",inline"`
ActionExpectations `json:",inline"`
ActionTimeout `json:",inline"`
// Template determines whether resources should be considered for templating.
// +optional
Template *bool `json:"template,omitempty"`
// File is the path to the referenced file. This can be a direct path to a file
// or an expression that matches multiple files, such as "manifest/*.yaml" for all YAML
// files within the "manifest" directory.
// +optional
File string `json:"file,omitempty"`
// Ref determines objects to be deleted.
// +optional
Ref *ObjectReference `json:"ref,omitempty"`
// DeletionPropagationPolicy decides if a deletion will propagate to the dependents of
// the object, and how the garbage collector will handle the propagation.
// Overrides the deletion propagation policy set in the Configuration, the Test and the TestStep.
// +optional
// +kubebuilder:validation:Enum:=Orphan;Background;Foreground
DeletionPropagationPolicy *metav1.DeletionPropagation `json:"deletionPropagationPolicy,omitempty"`
}
// Describe defines how to describe resources.
type Describe struct {
ActionClusters `json:",inline"`
ActionObject `json:",inline"`
ActionTimeout `json:",inline"`
// Show Events indicates whether to include related events.
// +optional
ShowEvents *bool `json:"showEvents,omitempty"`
}
// Error represents an anticipated error condition that may arise during testing.
// Instead of treating such an error as a test failure, it acknowledges it as expected.
type Error struct {
ActionBindings `json:",inline"`
ActionCheckRef `json:",inline"`
ActionClusters `json:",inline"`
ActionTimeout `json:",inline"`
}
// Events defines how to collect events.
type Events struct {
ActionClusters `json:",inline"`
ActionFormat `json:",inline"`
ActionObjectSelector `json:",inline"`
ActionTimeout `json:",inline"`
}
// Get defines how to get resources.
type Get struct {
ActionClusters `json:",inline"`
ActionFormat `json:",inline"`
ActionObject `json:",inline"`
ActionTimeout `json:",inline"`
}
// Patch represents a set of resources that should be patched.
// If a resource doesn't exist yet in the cluster it will fail.
type Patch struct {
ActionBindings `json:",inline"`
ActionClusters `json:",inline"`
ActionDryRun `json:",inline"`
ActionExpectations `json:",inline"`
ActionOutputs `json:",inline"`
ActionResourceRef `json:",inline"`
ActionTimeout `json:",inline"`
}
// PodLogs defines how to collect pod logs.
type PodLogs struct {
ActionClusters `json:",inline"`
ActionObjectSelector `json:",inline"`
ActionTimeout `json:",inline"`
// Container in pod to get logs from else --all-containers is used.
// +optional
Container string `json:"container,omitempty"`
// Tail is the number of last lines to collect from pods. If omitted or zero,
// then the default is 10 if you use a selector, or -1 (all) if you use a pod name.
// This matches default behavior of `kubectl logs`.
// +optional
Tail *int `json:"tail,omitempty"`
}
// Script describes a script to run as a part of a test step.
type Script struct {
ActionBindings `json:",inline"`
ActionCheck `json:",inline"`
ActionClusters `json:",inline"`
ActionEnv `json:",inline"`
ActionOutputs `json:",inline"`
ActionTimeout `json:",inline"`
// Content defines a shell script (run with "sh -c ...").
// +optional
Content string `json:"content,omitempty"`
}
// Sleep represents a duration while nothing happens.
type Sleep struct {
// Duration is the delay used for sleeping.
Duration metav1.Duration `json:"duration"`
}
// Update represents a set of resources that should be updated.
// If a resource does not exist in the cluster it will fail.
type Update struct {
ActionBindings `json:",inline"`
ActionClusters `json:",inline"`
ActionDryRun `json:",inline"`
ActionExpectations `json:",inline"`
ActionOutputs `json:",inline"`
ActionResourceRef `json:",inline"`
ActionTimeout `json:",inline"`
}
// Wait specifies how to perform wait operations on resources.
type Wait struct {
ActionTimeout `json:",inline"`
ActionFormat `json:",inline"`
ActionClusters `json:",inline"`
ActionObject `json:",inline"`
// WaitFor specifies the condition to wait for.
WaitFor `json:"for"`
}
// WaitFor specifies the condition to wait for.
type WaitFor struct {
// Deletion specifies parameters for waiting on a resource's deletion.
// +optional
Deletion *WaitForDeletion `json:"deletion,omitempty"`
// Condition specifies the condition to wait for.
// +optional
Condition *WaitForCondition `json:"condition,omitempty"`
// JsonPath specifies the json path condition to wait for.
// +optional
JsonPath *WaitForJsonPath `json:"jsonPath,omitempty"`
}
// WaitForCondition represents parameters for waiting on a specific condition of a resource.
type WaitForCondition struct {
// Name defines the specific condition to wait for, e.g., "Available", "Ready".
Name string `json:"name"`
// Value defines the specific condition status to wait for, e.g., "True", "False".
// +optional
Value *string `json:"value,omitempty"`
}
// WaitForDeletion represents parameters for waiting on a resource's deletion.
type WaitForDeletion struct{}
// WaitForJsonPath represents parameters for waiting on a json path of a resource.
type WaitForJsonPath struct {
// Path defines the json path to wait for, e.g. '{.status.phase}'.
Path string `json:"path"`
// Value defines the expected value to wait for, e.g., "Running".
Value string `json:"value"`
}

View File

@ -1,8 +0,0 @@
package v1alpha1
import (
"github.com/kyverno/kyverno-json/pkg/apis/policy/v1alpha1"
)
// Any represents any type.
type Any = v1alpha1.Any

View File

@ -1,40 +0,0 @@
package v1alpha1
import (
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
)
// Apply represents a set of configurations or resources that
// should be applied during testing.
type Apply struct {
// Timeout for the operation. Overrides the global timeout set in the Configuration.
// +optional
Timeout *metav1.Duration `json:"timeout,omitempty"`
// Bindings defines additional binding key/values.
// +optional
Bindings []Binding `json:"bindings,omitempty"`
// Outputs defines output bindings.
// +optional
Outputs []Output `json:"outputs,omitempty"`
// Cluster defines the target cluster (default cluster will be used if not specified and/or overridden).
// +optional
Cluster string `json:"cluster,omitempty"`
// FileRefOrResource provides a reference to the resources to be applied.
FileRefOrResource `json:",inline"`
// Template determines whether resources should be considered for templating.
// +optional
Template *bool `json:"template,omitempty"`
// DryRun determines whether the file should be applied in dry run mode.
// +optional
DryRun *bool `json:"dryRun,omitempty"`
// Expect defines a list of matched checks to validate the operation outcome.
// +optional
Expect []Expectation `json:"expect,omitempty"`
}

View File

@ -1,28 +0,0 @@
package v1alpha1
import (
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
)
// Assert represents a test condition that is expected to hold true
// during the testing process.
type Assert struct {
// Timeout for the operation. Overrides the global timeout set in the Configuration.
// +optional
Timeout *metav1.Duration `json:"timeout,omitempty"`
// Bindings defines additional binding key/values.
// +optional
Bindings []Binding `json:"bindings,omitempty"`
// Cluster defines the target cluster (default cluster will be used if not specified and/or overridden).
// +optional
Cluster string `json:"cluster,omitempty"`
// FileRefOrAssert provides a reference to the assertion.
FileRefOrCheck `json:",inline"`
// Template determines whether resources should be considered for templating.
// +optional
Template *bool `json:"template,omitempty"`
}

View File

@ -1,27 +0,0 @@
package v1alpha1
import (
"fmt"
"regexp"
)
var identifier = regexp.MustCompile(`^(?:\w+|\(.+\))$`)
// Binding represents a key/value set as a binding in an executing test.
type Binding struct {
// Name the name of the binding.
// +kubebuilder:validation:Pattern=`^(?:\w+|\(.+\))$`
Name string `json:"name"`
// Value value of the binding.
// +kubebuilder:validation:Schemaless
// +kubebuilder:pruning:PreserveUnknownFields
Value Any `json:"value"`
}
func (b Binding) CheckName() error {
if !identifier.MatchString(b.Name) {
return fmt.Errorf("invalid name %s", b.Name)
}
return nil
}

View File

@ -1,57 +0,0 @@
package v1alpha1
import (
"testing"
"github.com/stretchr/testify/assert"
)
func TestBinding_CheckName(t *testing.T) {
tests := []struct {
name string
bindingName string
bindingValue Any
wantErr bool
}{{
name: "empty",
wantErr: true,
}, {
name: "simple",
bindingName: "simple",
wantErr: false,
}, {
name: "with dollar",
bindingName: "$simple",
wantErr: true,
}, {
name: "with space",
bindingName: "simple one",
wantErr: true,
}, {
name: "with dot",
bindingName: "simple.one",
wantErr: true,
}, {
name: "good expression",
bindingName: "('test')",
wantErr: false,
}, {
name: "bad expression",
bindingName: "('test'",
wantErr: true,
}}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
b := Binding{
Name: tt.bindingName,
Value: tt.bindingValue,
}
err := b.CheckName()
if tt.wantErr {
assert.Error(t, err)
} else {
assert.NoError(t, err)
}
})
}
}

View File

@ -1,92 +0,0 @@
package v1alpha1
// Catch defines actions to be executed on failure.
type Catch struct {
// Description contains a description of the operation.
// +optional
Description string `json:"description,omitempty"`
// PodLogs determines the pod logs collector to execute.
// +optional
PodLogs *PodLogs `json:"podLogs,omitempty"`
// Events determines the events collector to execute.
// +optional
Events *Events `json:"events,omitempty"`
// Describe determines the resource describe collector to execute.
// +optional
Describe *Describe `json:"describe,omitempty"`
// Wait determines the resource wait collector to execute.
// +optional
Wait *Wait `json:"wait,omitempty"`
// Get determines the resource get collector to execute.
// +optional
Get *Get `json:"get,omitempty"`
// Delete represents a deletion operation.
// +optional
Delete *Delete `json:"delete,omitempty"`
// Command defines a command to run.
// +optional
Command *Command `json:"command,omitempty"`
// Script defines a script to run.
// +optional
Script *Script `json:"script,omitempty"`
// Sleep defines zzzz.
// +optional
Sleep *Sleep `json:"sleep,omitempty"`
}
func (c *Catch) Bindings() []Binding {
switch {
case c.Command != nil:
return c.Command.Bindings
case c.Delete != nil:
return c.Delete.Bindings
case c.Describe != nil:
return nil
case c.Events != nil:
return nil
case c.Get != nil:
return nil
case c.PodLogs != nil:
return nil
case c.Script != nil:
return c.Script.Bindings
case c.Sleep != nil:
return nil
case c.Wait != nil:
return nil
}
panic("missing binding operation type handler")
}
func (c *Catch) Outputs() []Output {
switch {
case c.Command != nil:
return c.Command.Outputs
case c.Delete != nil:
return nil
case c.Describe != nil:
return nil
case c.Events != nil:
return nil
case c.Get != nil:
return nil
case c.PodLogs != nil:
return nil
case c.Script != nil:
return c.Script.Outputs
case c.Sleep != nil:
return nil
case c.Wait != nil:
return nil
}
panic("missing output operation type handler")
}

View File

@ -1,7 +1,7 @@
package v1alpha1
// Finally defines actions to be executed at the end of a test.
type Finally struct {
// CatchFinally defines actions to be executed in catch, finally and cleanup blocks.
type CatchFinally struct {
// Description contains a description of the operation.
// +optional
Description string `json:"description,omitempty"`
@ -43,7 +43,7 @@ type Finally struct {
Sleep *Sleep `json:"sleep,omitempty"`
}
func (f *Finally) Bindings() []Binding {
func (f *CatchFinally) Bindings() []Binding {
switch {
case f.Command != nil:
return f.Command.Bindings
@ -67,7 +67,7 @@ func (f *Finally) Bindings() []Binding {
panic("missing binding operation type handler")
}
func (f *Finally) Outputs() []Output {
func (f *CatchFinally) Outputs() []Output {
switch {
case f.Command != nil:
return f.Command.Outputs

View File

@ -25,14 +25,14 @@ func TestFinally_Bindings(t *testing.T) {
}{{
fields: fields{
Command: &Command{
Bindings: []Binding{{"foo", Any{Value: "bar"}}},
ActionBindings: ActionBindings{Bindings: []Binding{{"foo", Any{Value: "bar"}}}},
},
},
want: 1,
}, {
fields: fields{
Delete: &Delete{
Bindings: []Binding{{"foo", Any{Value: "bar"}}},
ActionBindings: ActionBindings{Bindings: []Binding{{"foo", Any{Value: "bar"}}}},
},
},
want: 1,
@ -55,7 +55,7 @@ func TestFinally_Bindings(t *testing.T) {
}, {
fields: fields{
Script: &Script{
Bindings: []Binding{{"foo", Any{Value: "bar"}}},
ActionBindings: ActionBindings{Bindings: []Binding{{"foo", Any{Value: "bar"}}}},
},
},
want: 1,
@ -70,7 +70,7 @@ func TestFinally_Bindings(t *testing.T) {
}}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
c := &Finally{
c := &CatchFinally{
PodLogs: tt.fields.PodLogs,
Events: tt.fields.Events,
Describe: tt.fields.Describe,
@ -85,7 +85,7 @@ func TestFinally_Bindings(t *testing.T) {
assert.Equal(t, tt.want, len(got))
})
}
assert.Panics(t, func() { (&Finally{}).Bindings() })
assert.Panics(t, func() { (&CatchFinally{}).Bindings() })
}
func TestFinally_Outputs(t *testing.T) {
@ -107,7 +107,7 @@ func TestFinally_Outputs(t *testing.T) {
}{{
fields: fields{
Command: &Command{
Outputs: []Output{{Binding: Binding{"foo", Any{Value: "bar"}}}},
ActionOutputs: ActionOutputs{Outputs: []Output{{Binding: Binding{"foo", Any{Value: "bar"}}}}},
},
},
want: 1,
@ -134,7 +134,7 @@ func TestFinally_Outputs(t *testing.T) {
}, {
fields: fields{
Script: &Script{
Outputs: []Output{{Binding: Binding{"foo", Any{Value: "bar"}}}},
ActionOutputs: ActionOutputs{Outputs: []Output{{Binding: Binding{"foo", Any{Value: "bar"}}}}},
},
},
want: 1,
@ -149,7 +149,7 @@ func TestFinally_Outputs(t *testing.T) {
}}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
c := &Finally{
c := &CatchFinally{
PodLogs: tt.fields.PodLogs,
Events: tt.fields.Events,
Describe: tt.fields.Describe,
@ -164,5 +164,5 @@ func TestFinally_Outputs(t *testing.T) {
assert.Equal(t, tt.want, len(got))
})
}
assert.Panics(t, func() { (&Finally{}).Outputs() })
assert.Panics(t, func() { (&CatchFinally{}).Outputs() })
}

View File

@ -1,168 +0,0 @@
package v1alpha1
import (
"testing"
"github.com/stretchr/testify/assert"
)
func TestCatch_Bindings(t *testing.T) {
type fields struct {
PodLogs *PodLogs
Events *Events
Describe *Describe
Wait *Wait
Get *Get
Delete *Delete
Command *Command
Script *Script
Sleep *Sleep
}
tests := []struct {
name string
fields fields
want int
}{{
fields: fields{
Command: &Command{
Bindings: []Binding{{"foo", Any{Value: "bar"}}},
},
},
want: 1,
}, {
fields: fields{
Delete: &Delete{
Bindings: []Binding{{"foo", Any{Value: "bar"}}},
},
},
want: 1,
}, {
fields: fields{
Describe: &Describe{},
},
}, {
fields: fields{
Events: &Events{},
},
}, {
fields: fields{
Get: &Get{},
},
}, {
fields: fields{
PodLogs: &PodLogs{},
},
}, {
fields: fields{
Script: &Script{
Bindings: []Binding{{"foo", Any{Value: "bar"}}},
},
},
want: 1,
}, {
fields: fields{
Sleep: &Sleep{},
},
}, {
fields: fields{
Wait: &Wait{},
},
}}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
c := &Catch{
PodLogs: tt.fields.PodLogs,
Events: tt.fields.Events,
Describe: tt.fields.Describe,
Wait: tt.fields.Wait,
Get: tt.fields.Get,
Delete: tt.fields.Delete,
Command: tt.fields.Command,
Script: tt.fields.Script,
Sleep: tt.fields.Sleep,
}
got := c.Bindings()
assert.Equal(t, tt.want, len(got))
})
}
assert.Panics(t, func() { (&Catch{}).Bindings() })
}
func TestCatch_Outputs(t *testing.T) {
type fields struct {
PodLogs *PodLogs
Events *Events
Describe *Describe
Wait *Wait
Get *Get
Delete *Delete
Command *Command
Script *Script
Sleep *Sleep
}
tests := []struct {
name string
fields fields
want int
}{{
fields: fields{
Command: &Command{
Outputs: []Output{{Binding: Binding{"foo", Any{Value: "bar"}}}},
},
},
want: 1,
}, {
fields: fields{
Delete: &Delete{},
},
}, {
fields: fields{
Describe: &Describe{},
},
}, {
fields: fields{
Events: &Events{},
},
}, {
fields: fields{
Get: &Get{},
},
}, {
fields: fields{
PodLogs: &PodLogs{},
},
}, {
fields: fields{
Script: &Script{
Outputs: []Output{{Binding: Binding{"foo", Any{Value: "bar"}}}},
},
},
want: 1,
}, {
fields: fields{
Sleep: &Sleep{},
},
}, {
fields: fields{
Wait: &Wait{},
},
}}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
c := &Catch{
PodLogs: tt.fields.PodLogs,
Events: tt.fields.Events,
Describe: tt.fields.Describe,
Wait: tt.fields.Wait,
Get: tt.fields.Get,
Delete: tt.fields.Delete,
Command: tt.fields.Command,
Script: tt.fields.Script,
Sleep: tt.fields.Sleep,
}
got := c.Outputs()
assert.Equal(t, tt.want, len(got))
})
}
assert.Panics(t, func() { (&Catch{}).Outputs() })
}

View File

@ -1,4 +0,0 @@
package v1alpha1
// Check represents a check to be applied on the result of an operation.
type Check = Any

View File

@ -1,11 +0,0 @@
package v1alpha1
// Cluster defines cluster config and context.
type Cluster struct {
// Kubeconfig is the path to the referenced file.
Kubeconfig string `json:"kubeconfig"`
// Context is the name of the context to use.
// +optional
Context string `json:"context,omitempty"`
}

View File

@ -1,43 +0,0 @@
package v1alpha1
import (
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
)
// Command describes a command to run as a part of a test step.
type Command struct {
// Timeout for the operation. Overrides the global timeout set in the Configuration.
// +optional
Timeout *metav1.Duration `json:"timeout,omitempty"`
// Bindings defines additional binding key/values.
// +optional
Bindings []Binding `json:"bindings,omitempty"`
// Outputs defines output bindings.
// +optional
Outputs []Output `json:"outputs,omitempty"`
// Env defines additional environment variables.
// +optional
Env []Binding `json:"env,omitempty"`
// Cluster defines the target cluster (default cluster will be used if not specified and/or overridden).
// +optional
Cluster string `json:"cluster,omitempty"`
// Entrypoint is the command entry point to run.
Entrypoint string `json:"entrypoint"`
// Args is the command arguments.
// +optional
Args []string `json:"args,omitempty"`
// SkipLogOutput removes the output from the command. Useful for sensitive logs or to reduce noise.
// +optional
SkipLogOutput bool `json:"skipLogOutput,omitempty"`
// Check is an assertion tree to validate the operation outcome.
// +optional
Check *Check `json:"check,omitempty"`
}

View File

@ -21,3 +21,109 @@ type Configuration struct {
// Configuration spec.
Spec ConfigurationSpec `json:"spec"`
}
// ConfigurationSpec contains the configuration used to run tests.
type ConfigurationSpec struct {
// Global timeouts configuration. Applies to all tests/test steps if not overridden.
// +optional
Timeouts Timeouts `json:"timeouts"`
// If set, do not delete the resources after running the tests (implies SkipClusterDelete).
// +optional
SkipDelete bool `json:"skipDelete,omitempty"`
// Template determines whether resources should be considered for templating.
// +optional
Template *bool `json:"template,omitempty"`
// FailFast determines whether the test should stop upon encountering the first failure.
// +optional
FailFast bool `json:"failFast,omitempty"`
// The maximum number of tests to run at once.
// +kubebuilder:validation:Format:=int
// +kubebuilder:validation:Minimum:=1
// +optional
Parallel *int `json:"parallel,omitempty"`
// DeletionPropagationPolicy decides if a deletion will propagate to the dependents of
// the object, and how the garbage collector will handle the propagation.
// +optional
// +kubebuilder:validation:Enum:=Orphan;Background;Foreground
// +kubebuilder:default:=Background
DeletionPropagationPolicy metav1.DeletionPropagation `json:"deletionPropagationPolicy,omitempty"`
// ReportFormat determines test report format (JSON|XML|nil) nil == no report.
// maps to report.Type, however we don't want generated.deepcopy to have reference to it.
// +optional
// +kubebuilder:validation:Enum:=JSON;XML;
ReportFormat ReportFormatType `json:"reportFormat,omitempty"`
// ReportPath defines the path.
// +optional
ReportPath string `json:"reportPath,omitempty"`
// ReportName defines the name of report to create. It defaults to "chainsaw-report".
// +optional
// +kubebuilder:default:="chainsaw-report"
ReportName string `json:"reportName,omitempty"`
// Namespace defines the namespace to use for tests.
// If not specified, every test will execute in a random ephemeral namespace
// unless the namespace is overridden in a the test spec.
// +optional
Namespace string `json:"namespace,omitempty"`
// NamespaceTemplate defines a template to create the test namespace.
// +optional
NamespaceTemplate *Any `json:"namespaceTemplate,omitempty"`
// FullName makes use of the full test case folder path instead of the folder name.
// +optional
FullName bool `json:"fullName,omitempty"`
// ExcludeTestRegex is used to exclude tests based on a regular expression.
// +optional
ExcludeTestRegex string `json:"excludeTestRegex,omitempty"`
// IncludeTestRegex is used to include tests based on a regular expression.
// +optional
IncludeTestRegex string `json:"includeTestRegex,omitempty"`
// RepeatCount indicates how many times the tests should be executed.
// +kubebuilder:validation:Format:=int
// +kubebuilder:validation:Minimum:=1
// +optional
RepeatCount *int `json:"repeatCount,omitempty"`
// TestFile is the name of the file containing the test to run.
// If no extension is provided, chainsaw will try with .yaml first and .yml if needed.
// +kubebuilder:default:="chainsaw-test"
// +optional
TestFile string `json:"testFile,omitempty"`
// ForceTerminationGracePeriod forces the termination grace period on pods, statefulsets, daemonsets and deployments.
// +optional
ForceTerminationGracePeriod *metav1.Duration `json:"forceTerminationGracePeriod,omitempty"`
// DelayBeforeCleanup adds a delay between the time a test ends and the time cleanup starts.
// +optional
DelayBeforeCleanup *metav1.Duration `json:"delayBeforeCleanup,omitempty"`
// Clusters holds a registry to clusters to support multi-cluster tests.
// +optional
Clusters Clusters `json:"clusters,omitempty"`
// Catch defines what the tests steps will execute when an error happens.
// This will be combined with catch handlers defined at the test and step levels.
// +optional
Catch []CatchFinally `json:"catch,omitempty"`
}
type ReportFormatType string
const (
JSONFormat ReportFormatType = "JSON"
XMLFormat ReportFormatType = "XML"
NoReport ReportFormatType = ""
)

View File

@ -1,40 +0,0 @@
package v1alpha1
import (
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
)
// Create represents a set of resources that should be created.
// If a resource already exists in the cluster it will fail.
type Create struct {
// Timeout for the operation. Overrides the global timeout set in the Configuration.
// +optional
Timeout *metav1.Duration `json:"timeout,omitempty"`
// Bindings defines additional binding key/values.
// +optional
Bindings []Binding `json:"bindings,omitempty"`
// Outputs defines output bindings.
// +optional
Outputs []Output `json:"outputs,omitempty"`
// Cluster defines the target cluster (default cluster will be used if not specified and/or overridden).
// +optional
Cluster string `json:"cluster,omitempty"`
// FileRefOrResource provides a reference to the file containing the resources to be created.
FileRefOrResource `json:",inline"`
// Template determines whether resources should be considered for templating.
// +optional
Template *bool `json:"template,omitempty"`
// DryRun determines whether the file should be applied in dry run mode.
// +optional
DryRun *bool `json:"dryRun,omitempty"`
// Expect defines a list of matched checks to validate the operation outcome.
// +optional
Expect []Expectation `json:"expect,omitempty"`
}

View File

@ -1,31 +0,0 @@
package v1alpha1
import (
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
)
// Delete is a reference to an object that should be deleted
type Delete struct {
// Timeout for the operation. Overrides the global timeout set in the Configuration.
// +optional
Timeout *metav1.Duration `json:"timeout,omitempty"`
// Bindings defines additional binding key/values.
// +optional
Bindings []Binding `json:"bindings,omitempty"`
// Cluster defines the target cluster (default cluster will be used if not specified and/or overridden).
// +optional
Cluster string `json:"cluster,omitempty"`
// Template determines whether resources should be considered for templating.
// +optional
Template *bool `json:"template,omitempty"`
// ObjectReference determines objects to be deleted.
ObjectReference `json:"ref"`
// Expect defines a list of matched checks to validate the operation outcome.
// +optional
Expect []Expectation `json:"expect,omitempty"`
}

View File

@ -1,26 +0,0 @@
package v1alpha1
import (
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
)
// Describe defines how to describe resources.
type Describe struct {
// Timeout for the operation. Overrides the global timeout set in the Configuration.
// +optional
Timeout *metav1.Duration `json:"timeout,omitempty"`
// Cluster defines the target cluster (default cluster will be used if not specified and/or overridden).
// +optional
Cluster string `json:"cluster,omitempty"`
// ResourceReference referenced resource type.
ResourceReference `json:",inline"`
// ObjectLabelsSelector determines the selection process of referenced objects.
ObjectLabelsSelector `json:",inline"`
// Show Events indicates whether to include related events.
// +optional
ShowEvents *bool `json:"showEvents,omitempty"`
}

View File

@ -1,28 +0,0 @@
package v1alpha1
import (
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
)
// Error represents an anticipated error condition that may arise during testing.
// Instead of treating such an error as a test failure, it acknowledges it as expected.
type Error struct {
// Timeout for the operation. Overrides the global timeout set in the Configuration.
// +optional
Timeout *metav1.Duration `json:"timeout,omitempty"`
// Bindings defines additional binding key/values.
// +optional
Bindings []Binding `json:"bindings,omitempty"`
// Cluster defines the target cluster (default cluster will be used if not specified and/or overridden).
// +optional
Cluster string `json:"cluster,omitempty"`
// FileRefOrAssert provides a reference to the expected error.
FileRefOrCheck `json:",inline"`
// Template determines whether resources should be considered for templating.
// +optional
Template *bool `json:"template,omitempty"`
}

View File

@ -1,23 +0,0 @@
package v1alpha1
import (
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
)
// Events defines how to collect events.
type Events struct {
// Timeout for the operation. Overrides the global timeout set in the Configuration.
// +optional
Timeout *metav1.Duration `json:"timeout,omitempty"`
// Cluster defines the target cluster (default cluster will be used if not specified and/or overridden).
// +optional
Cluster string `json:"cluster,omitempty"`
// ObjectLabelsSelector determines the selection process of referenced objects.
ObjectLabelsSelector `json:",inline"`
// Format determines the output format (json or yaml).
// +optional
Format Format `json:"format,omitempty"`
}

View File

@ -1,12 +0,0 @@
package v1alpha1
// Expectation represents a check to be applied on the result of an operation
// with a match filter to determine if the verification should be considered.
type Expectation struct {
// Match defines the matching statement.
// +optional
Match *Match `json:"match,omitempty"`
// Check defines the verification statement.
Check Check `json:"check"`
}

View File

@ -1,9 +0,0 @@
package v1alpha1
// FileRef represents a file reference.
type FileRef struct {
// File is the path to the referenced file. This can be a direct path to a file
// or an expression that matches multiple files, such as "manifest/*.yaml" for all YAML
// files within the "manifest" directory.
File string `json:"file,omitempty"`
}

View File

@ -1,12 +0,0 @@
package v1alpha1
// FileRefOrCheck represents a file reference or resource.
type FileRefOrCheck struct {
// FileRef provides a reference to the file containing the resources to be applied.
// +optional
FileRef `json:",inline"`
// Check provides a check used in assertions.
// +optional
Check *Check `json:"resource,omitempty"`
}

View File

@ -1,18 +0,0 @@
package v1alpha1
import (
"k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
)
// FileRefOrResource represents a file reference or resource.
type FileRefOrResource struct {
// FileRef provides a reference to the file containing the resources to be applied.
// +optional
FileRef `json:",inline"`
// Resource provides a resource to be applied.
// +kubebuilder:validation:XEmbeddedResource
// +kubebuilder:pruning:PreserveUnknownFields
// +optional
Resource *unstructured.Unstructured `json:"resource,omitempty"`
}

View File

@ -1,5 +0,0 @@
package v1alpha1
// Format determines the output format (json or yaml).
// +kubebuilder:validation:Pattern=`^(?:json|yaml|\(.+\))$`
type Format string

View File

@ -1,26 +0,0 @@
package v1alpha1
import (
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
)
// Get defines how to get resources.
type Get struct {
// Timeout for the operation. Overrides the global timeout set in the Configuration.
// +optional
Timeout *metav1.Duration `json:"timeout,omitempty"`
// Cluster defines the target cluster (default cluster will be used if not specified and/or overridden).
// +optional
Cluster string `json:"cluster,omitempty"`
// ResourceReference referenced resource type.
ResourceReference `json:",inline"`
// ObjectLabelsSelector determines the selection process of referenced objects.
ObjectLabelsSelector `json:",inline"`
// Format determines the output format (json or yaml).
// +optional
Format Format `json:"format,omitempty"`
}

View File

@ -1,4 +0,0 @@
package v1alpha1
// Match represents a match condition against an evaluated object.
type Match = Any

View File

@ -1,20 +0,0 @@
package v1alpha1
// ObjectLabelsSelector represents a strategy to select objects.
// For a single object name and namespace are used to identify the object.
// For multiple objects use selector.
type ObjectLabelsSelector struct {
// Namespace of the referent.
// More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/
// +optional
Namespace string `json:"namespace,omitempty"`
// Name of the referent.
// More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
// +optional
Name string `json:"name,omitempty"`
// Selector defines labels selector.
// +optional
Selector string `json:"selector,omitempty"`
}

View File

@ -1,12 +0,0 @@
package v1alpha1
// ObjectReference represents one or more objects with a specific apiVersion and kind.
// For a single object name and namespace are used to identify the object.
// For multiple objects use labels.
type ObjectReference struct {
// ObjectType determines the type of referenced objects.
ObjectType `json:",inline"`
// ObjectSelector determines the selection process of referenced objects.
ObjectSelector `json:",inline"`
}

View File

@ -1,20 +0,0 @@
package v1alpha1
// ObjectSelector represents a strategy to select objects.
// For a single object name and namespace are used to identify the object.
// For multiple objects use labels.
type ObjectSelector struct {
// Namespace of the referent.
// More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/
// +optional
Namespace string `json:"namespace,omitempty"`
// Name of the referent.
// More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
// +optional
Name string `json:"name,omitempty"`
// Label selector to match objects to delete
// +optional
Labels map[string]string `json:"labels,omitempty"`
}

View File

@ -1,11 +0,0 @@
package v1alpha1
// ObjectType represents a specific apiVersion and kind.
type ObjectType struct {
// API version of the referent.
APIVersion string `json:"apiVersion"`
// Kind of the referent.
// More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
Kind string `json:"kind"`
}

View File

@ -1,7 +1,7 @@
package v1alpha1
// Operation defines a single operation, only one action is permitted for a given operation.
type Operation struct {
// OperationBase defines common elements to all operations.
type OperationBase struct {
// Description contains a description of the operation.
// +optional
Description string `json:"description,omitempty"`
@ -10,6 +10,13 @@ type Operation struct {
// Even if the test continues executing, it will still be reported as failed.
// +optional
ContinueOnError *bool `json:"continueOnError,omitempty"`
}
// Operation defines a single operation, only one action is permitted for a given operation.
type Operation struct {
// OperationBase defines common elements to all operations.
// +optional
OperationBase `json:",inline"`
// Apply represents resources that should be applied for this test step. This can include things
// like configuration settings or any other resources that need to be available during the test.
@ -32,15 +39,31 @@ type Operation struct {
// +optional
Delete *Delete `json:"delete,omitempty"`
// Describe determines the resource describe collector to execute.
// +optional
Describe *Describe `json:"describe,omitempty"`
// Error represents the expected errors for this test step. If any of these errors occur, the test
// will consider them as expected; otherwise, they will be treated as test failures.
// +optional
Error *Error `json:"error,omitempty"`
// Events determines the events collector to execute.
// +optional
Events *Events `json:"events,omitempty"`
// Get determines the resource get collector to execute.
// +optional
Get *Get `json:"get,omitempty"`
// Patch represents a patch operation.
// +optional
Patch *Patch `json:"patch,omitempty"`
// PodLogs determines the pod logs collector to execute.
// +optional
PodLogs *PodLogs `json:"podLogs,omitempty"`
// Script defines a script to run.
// +optional
Script *Script `json:"script,omitempty"`
@ -70,10 +93,18 @@ func (o *Operation) Bindings() []Binding {
return o.Create.Bindings
case o.Delete != nil:
return o.Delete.Bindings
case o.Describe != nil:
return nil
case o.Error != nil:
return o.Error.Bindings
case o.Events != nil:
return nil
case o.Get != nil:
return nil
case o.Patch != nil:
return o.Patch.Bindings
case o.PodLogs != nil:
return nil
case o.Script != nil:
return o.Script.Bindings
case o.Sleep != nil:
@ -98,10 +129,18 @@ func (o *Operation) Outputs() []Output {
return o.Create.Outputs
case o.Delete != nil:
return nil
case o.Describe != nil:
return nil
case o.Error != nil:
return nil
case o.Events != nil:
return nil
case o.Get != nil:
return nil
case o.Patch != nil:
return o.Patch.Outputs
case o.PodLogs != nil:
return nil
case o.Script != nil:
return o.Script.Outputs
case o.Sleep != nil:

View File

@ -27,56 +27,56 @@ func TestOperation_Bindings(t *testing.T) {
}{{
fields: fields{
Apply: &Apply{
Bindings: []Binding{{"foo", Any{Value: "bar"}}},
ActionBindings: ActionBindings{Bindings: []Binding{{"foo", Any{Value: "bar"}}}},
},
},
want: 1,
}, {
fields: fields{
Assert: &Assert{
Bindings: []Binding{{"foo", Any{Value: "bar"}}},
ActionBindings: ActionBindings{Bindings: []Binding{{"foo", Any{Value: "bar"}}}},
},
},
want: 1,
}, {
fields: fields{
Command: &Command{
Bindings: []Binding{{"foo", Any{Value: "bar"}}},
ActionBindings: ActionBindings{Bindings: []Binding{{"foo", Any{Value: "bar"}}}},
},
},
want: 1,
}, {
fields: fields{
Create: &Create{
Bindings: []Binding{{"foo", Any{Value: "bar"}}},
ActionBindings: ActionBindings{Bindings: []Binding{{"foo", Any{Value: "bar"}}}},
},
},
want: 1,
}, {
fields: fields{
Delete: &Delete{
Bindings: []Binding{{"foo", Any{Value: "bar"}}},
ActionBindings: ActionBindings{Bindings: []Binding{{"foo", Any{Value: "bar"}}}},
},
},
want: 1,
}, {
fields: fields{
Error: &Error{
Bindings: []Binding{{"foo", Any{Value: "bar"}}},
ActionBindings: ActionBindings{Bindings: []Binding{{"foo", Any{Value: "bar"}}}},
},
},
want: 1,
}, {
fields: fields{
Patch: &Patch{
Bindings: []Binding{{"foo", Any{Value: "bar"}}},
ActionBindings: ActionBindings{Bindings: []Binding{{"foo", Any{Value: "bar"}}}},
},
},
want: 1,
}, {
fields: fields{
Script: &Script{
Bindings: []Binding{{"foo", Any{Value: "bar"}}},
ActionBindings: ActionBindings{Bindings: []Binding{{"foo", Any{Value: "bar"}}}},
},
},
want: 1,
@ -87,7 +87,7 @@ func TestOperation_Bindings(t *testing.T) {
}, {
fields: fields{
Update: &Update{
Bindings: []Binding{{"foo", Any{Value: "bar"}}},
ActionBindings: ActionBindings{Bindings: []Binding{{"foo", Any{Value: "bar"}}}},
},
},
want: 1,
@ -139,7 +139,7 @@ func TestOperation_Outputs(t *testing.T) {
}{{
fields: fields{
Apply: &Apply{
Outputs: []Output{{Binding: Binding{"foo", Any{Value: "bar"}}}},
ActionOutputs: ActionOutputs{Outputs: []Output{{Binding: Binding{"foo", Any{Value: "bar"}}}}},
},
},
want: 1,
@ -150,14 +150,14 @@ func TestOperation_Outputs(t *testing.T) {
}, {
fields: fields{
Command: &Command{
Outputs: []Output{{Binding: Binding{"foo", Any{Value: "bar"}}}},
ActionOutputs: ActionOutputs{Outputs: []Output{{Binding: Binding{"foo", Any{Value: "bar"}}}}},
},
},
want: 1,
}, {
fields: fields{
Create: &Create{
Outputs: []Output{{Binding: Binding{"foo", Any{Value: "bar"}}}},
ActionOutputs: ActionOutputs{Outputs: []Output{{Binding: Binding{"foo", Any{Value: "bar"}}}}},
},
},
want: 1,
@ -172,14 +172,14 @@ func TestOperation_Outputs(t *testing.T) {
}, {
fields: fields{
Patch: &Patch{
Outputs: []Output{{Binding: Binding{"foo", Any{Value: "bar"}}}},
ActionOutputs: ActionOutputs{Outputs: []Output{{Binding: Binding{"foo", Any{Value: "bar"}}}}},
},
},
want: 1,
}, {
fields: fields{
Script: &Script{
Outputs: []Output{{Binding: Binding{"foo", Any{Value: "bar"}}}},
ActionOutputs: ActionOutputs{Outputs: []Output{{Binding: Binding{"foo", Any{Value: "bar"}}}}},
},
},
want: 1,
@ -190,7 +190,7 @@ func TestOperation_Outputs(t *testing.T) {
}, {
fields: fields{
Update: &Update{
Outputs: []Output{{Binding: Binding{"foo", Any{Value: "bar"}}}},
ActionOutputs: ActionOutputs{Outputs: []Output{{Binding: Binding{"foo", Any{Value: "bar"}}}}},
},
},
want: 1,

View File

@ -1,11 +0,0 @@
package v1alpha1
// Output represents an output binding with a match to determine if the binding must be considered or not.
type Output struct {
// Binding determines the binding to create when the match succeeds.
Binding `json:",inline"`
// Match defines the matching statement.
// +optional
Match *Match `json:"match,omitempty"`
}

View File

@ -1,40 +0,0 @@
package v1alpha1
import (
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
)
// Patch represents a set of resources that should be patched.
// If a resource doesn't exist yet in the cluster it will fail.
type Patch struct {
// Timeout for the operation. Overrides the global timeout set in the Configuration.
// +optional
Timeout *metav1.Duration `json:"timeout,omitempty"`
// Bindings defines additional binding key/values.
// +optional
Bindings []Binding `json:"bindings,omitempty"`
// Outputs defines output bindings.
// +optional
Outputs []Output `json:"outputs,omitempty"`
// Cluster defines the target cluster (default cluster will be used if not specified and/or overridden).
// +optional
Cluster string `json:"cluster,omitempty"`
// FileRefOrResource provides a reference to the file containing the resources to be patched.
FileRefOrResource `json:",inline"`
// Template determines whether resources should be considered for templating.
// +optional
Template *bool `json:"template,omitempty"`
// DryRun determines whether the file should be applied in dry run mode.
// +optional
DryRun *bool `json:"dryRun,omitempty"`
// Expect defines a list of matched checks to validate the operation outcome.
// +optional
Expect []Expectation `json:"expect,omitempty"`
}

View File

@ -1,29 +0,0 @@
package v1alpha1
import (
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
)
// PodLogs defines how to collect pod logs.
type PodLogs struct {
// Timeout for the operation. Overrides the global timeout set in the Configuration.
// +optional
Timeout *metav1.Duration `json:"timeout,omitempty"`
// Cluster defines the target cluster (default cluster will be used if not specified and/or overridden).
// +optional
Cluster string `json:"cluster,omitempty"`
// ObjectLabelsSelector determines the selection process of referenced objects.
ObjectLabelsSelector `json:",inline"`
// Container in pod to get logs from else --all-containers is used.
// +optional
Container string `json:"container,omitempty"`
// Tail is the number of last lines to collect from pods. If omitted or zero,
// then the default is 10 if you use a selector, or -1 (all) if you use a pod name.
// This matches default behavior of `kubectl logs`.
// +optional
Tail *int `json:"tail,omitempty"`
}

View File

@ -1,18 +0,0 @@
package v1alpha1
// ResourceReference represents a resource (API), it can be represented with a resource or a kind.
// Optionally an apiVersion can be specified.
type ResourceReference struct {
// API version of the referent.
// +optional
APIVersion string `json:"apiVersion,omitempty"`
// Kind of the referent.
// More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
// +optional
Kind string `json:"kind,omitempty"`
// Resource name of the referent.
// +optional
Resource string `json:"resource,omitempty"`
}

View File

@ -1,40 +0,0 @@
package v1alpha1
import (
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
)
// Script describes a script to run as a part of a test step.
type Script struct {
// Timeout for the operation. Overrides the global timeout set in the Configuration.
// +optional
Timeout *metav1.Duration `json:"timeout,omitempty"`
// Bindings defines additional binding key/values.
// +optional
Bindings []Binding `json:"bindings,omitempty"`
// Outputs defines output bindings.
// +optional
Outputs []Output `json:"outputs,omitempty"`
// Env defines additional environment variables.
// +optional
Env []Binding `json:"env,omitempty"`
// Cluster defines the target cluster (default cluster will be used if not specified and/or overridden).
// +optional
Cluster string `json:"cluster,omitempty"`
// Content defines a shell script (run with "sh -c ...").
// +optional
Content string `json:"content,omitempty"`
// SkipLogOutput removes the output from the command. Useful for sensitive logs or to reduce noise.
// +optional
SkipLogOutput bool `json:"skipLogOutput,omitempty"`
// Check is an assertion tree to validate the operation outcome.
// +optional
Check *Check `json:"check,omitempty"`
}

View File

@ -1,11 +0,0 @@
package v1alpha1
import (
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
)
// Sleep represents a duration while nothing happens.
type Sleep struct {
// Duration is the delay used for sleeping.
Duration metav1.Duration `json:"duration"`
}

View File

@ -1,5 +1,19 @@
package v1alpha1
import (
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
)
// TestStep contains the test step definition used in a test spec.
type TestStep struct {
// Name of the step.
// +optional
Name string `json:"name,omitempty"`
// TestStepSpec of the step.
TestStepSpec `json:",inline"`
}
// TestStepSpec defines the desired state and behavior for each test step.
type TestStepSpec struct {
// Description contains a description of the test step.
@ -10,10 +24,21 @@ type TestStepSpec struct {
// +optional
Timeouts *Timeouts `json:"timeouts,omitempty"`
// DeletionPropagationPolicy decides if a deletion will propagate to the dependents of
// the object, and how the garbage collector will handle the propagation.
// Overrides the deletion propagation policy set in both the Configuration and the Test.
// +optional
// +kubebuilder:validation:Enum:=Orphan;Background;Foreground
DeletionPropagationPolicy *metav1.DeletionPropagation `json:"deletionPropagationPolicy,omitempty"`
// Cluster defines the target cluster (default cluster will be used if not specified and/or overridden).
// +optional
Cluster string `json:"cluster,omitempty"`
// Clusters holds a registry to clusters to support multi-cluster tests.
// +optional
Clusters Clusters `json:"clusters,omitempty"`
// SkipDelete determines whether the resources created by the step should be deleted after the test step is executed.
// +optional
SkipDelete *bool `json:"skipDelete,omitempty"`
@ -32,9 +57,13 @@ type TestStepSpec struct {
// Catch defines what the step will execute when an error happens.
// +optional
Catch []Catch `json:"catch,omitempty"`
Catch []CatchFinally `json:"catch,omitempty"`
// Finally defines what the step will execute after the step is terminated.
// +optional
Finally []Finally `json:"finally,omitempty"`
Finally []CatchFinally `json:"finally,omitempty"`
// Cleanup defines what will be executed after the test is terminated.
// +optional
Cleanup []CatchFinally `json:"cleanup,omitempty"`
}

View File

@ -8,6 +8,7 @@ import (
// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object
// +kubebuilder:object:root=true
// +kubebuilder:resource:scope=Cluster
// +kubebuilder:storageversion
// Test is the resource that contains a test definition.
type Test struct {
@ -20,3 +21,84 @@ type Test struct {
// Test spec.
Spec TestSpec `json:"spec"`
}
// TestSpec contains the test spec.
type TestSpec struct {
// Description contains a description of the test.
// +optional
Description string `json:"description,omitempty"`
// Timeouts for the test. Overrides the global timeouts set in the Configuration on a per operation basis.
// +optional
Timeouts *Timeouts `json:"timeouts,omitempty"`
// Cluster defines the target cluster (default cluster will be used if not specified and/or overridden).
// +optional
Cluster string `json:"cluster,omitempty"`
// Clusters holds a registry to clusters to support multi-cluster tests.
// +optional
Clusters Clusters `json:"clusters,omitempty"`
// Skip determines whether the test should skipped.
// +optional
Skip *bool `json:"skip,omitempty"`
// Concurrent determines whether the test should run concurrently with other tests.
// +optional
Concurrent *bool `json:"concurrent,omitempty"`
// SkipDelete determines whether the resources created by the test should be deleted after the test is executed.
// +optional
SkipDelete *bool `json:"skipDelete,omitempty"`
// Template determines whether resources should be considered for templating.
// +optional
Template *bool `json:"template,omitempty"`
// Namespace determines whether the test should run in a random ephemeral namespace or not.
// +optional
Namespace string `json:"namespace,omitempty"`
// NamespaceTemplate defines a template to create the test namespace.
// +optional
NamespaceTemplate *Any `json:"namespaceTemplate,omitempty"`
// Scenarios defines test scenarios.
// +optional
Scenarios []Scenario `json:"scenarios,omitempty"`
// Bindings defines additional binding key/values.
// +optional
Bindings []Binding `json:"bindings,omitempty"`
// Steps defining the test.
Steps []TestStep `json:"steps"`
// Catch defines what the steps will execute when an error happens.
// This will be combined with catch handlers defined at the step level.
// +optional
Catch []CatchFinally `json:"catch,omitempty"`
// ForceTerminationGracePeriod forces the termination grace period on pods, statefulsets, daemonsets and deployments.
// +optional
ForceTerminationGracePeriod *metav1.Duration `json:"forceTerminationGracePeriod,omitempty"`
// DelayBeforeCleanup adds a delay between the time a test ends and the time cleanup starts.
// +optional
DelayBeforeCleanup *metav1.Duration `json:"delayBeforeCleanup,omitempty"`
// DeletionPropagationPolicy decides if a deletion will propagate to the dependents of
// the object, and how the garbage collector will handle the propagation.
// Overrides the deletion propagation policy set in the Configuration.
// +optional
// +kubebuilder:validation:Enum:=Orphan;Background;Foreground
DeletionPropagationPolicy *metav1.DeletionPropagation `json:"deletionPropagationPolicy,omitempty"`
}
// Scenario defines per scenario bindings.
type Scenario struct {
// Bindings defines binding key/values.
// +optional
Bindings []Binding `json:"bindings,omitempty"`
}

View File

@ -1,64 +0,0 @@
package v1alpha1
import (
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
)
// TestSpec contains the test spec.
type TestSpec struct {
// Description contains a description of the test.
// +optional
Description string `json:"description,omitempty"`
// Timeouts for the test. Overrides the global timeouts set in the Configuration on a per operation basis.
// +optional
Timeouts *Timeouts `json:"timeouts,omitempty"`
// Cluster defines the target cluster (default cluster will be used if not specified and/or overridden).
// +optional
Cluster string `json:"cluster,omitempty"`
// Skip determines whether the test should skipped.
// +optional
Skip *bool `json:"skip,omitempty"`
// Concurrent determines whether the test should run concurrently with other tests.
// +optional
Concurrent *bool `json:"concurrent,omitempty"`
// SkipDelete determines whether the resources created by the test should be deleted after the test is executed.
// +optional
SkipDelete *bool `json:"skipDelete,omitempty"`
// Template determines whether resources should be considered for templating.
// +optional
Template *bool `json:"template,omitempty"`
// Namespace determines whether the test should run in a random ephemeral namespace or not.
// +optional
Namespace string `json:"namespace,omitempty"`
// NamespaceTemplate defines a template to create the test namespace.
// +optional
NamespaceTemplate *Any `json:"namespaceTemplate,omitempty"`
// Bindings defines additional binding key/values.
// +optional
Bindings []Binding `json:"bindings,omitempty"`
// Steps defining the test.
Steps []TestStep `json:"steps"`
// Catch defines what the steps will execute when an error happens.
// This will be combined with catch handlers defined at the step level.
// +optional
Catch []Catch `json:"catch,omitempty"`
// ForceTerminationGracePeriod forces the termination grace period on pods, statefulsets, daemonsets and deployments.
// +optional
ForceTerminationGracePeriod *metav1.Duration `json:"forceTerminationGracePeriod,omitempty"`
// DelayBeforeCleanup adds a delay between the time a test ends and the time cleanup starts.
// +optional
DelayBeforeCleanup *metav1.Duration `json:"delayBeforeCleanup,omitempty"`
}

View File

@ -1,11 +0,0 @@
package v1alpha1
// TestStep contains the test step definition used in a test spec.
type TestStep struct {
// Name of the step.
// +optional
Name string `json:"name,omitempty"`
// TestStepSpec of the step.
TestStepSpec `json:",inline"`
}

View File

@ -1,93 +0,0 @@
package v1alpha1
import (
"time"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
)
const (
DefaultApplyTimeout = 5 * time.Second
DefaultAssertTimeout = 30 * time.Second
DefaultCleanupTimeout = 30 * time.Second
DefaultDeleteTimeout = 15 * time.Second
DefaultErrorTimeout = 30 * time.Second
DefaultExecTimeout = 5 * time.Second
)
// Timeouts contains timeouts per operation.
type Timeouts struct {
// Apply defines the timeout for the apply operation
Apply *metav1.Duration `json:"apply,omitempty"`
// Assert defines the timeout for the assert operation
Assert *metav1.Duration `json:"assert,omitempty"`
// Cleanup defines the timeout for the cleanup operation
Cleanup *metav1.Duration `json:"cleanup,omitempty"`
// Delete defines the timeout for the delete operation
Delete *metav1.Duration `json:"delete,omitempty"`
// Error defines the timeout for the error operation
Error *metav1.Duration `json:"error,omitempty"`
// Exec defines the timeout for exec operations
Exec *metav1.Duration `json:"exec,omitempty"`
}
func durationOrDefault(to *metav1.Duration, def time.Duration) time.Duration {
if to != nil {
return to.Duration
}
return def
}
func (t Timeouts) ApplyDuration() time.Duration {
return durationOrDefault(t.Apply, DefaultApplyTimeout)
}
func (t Timeouts) AssertDuration() time.Duration {
return durationOrDefault(t.Assert, DefaultAssertTimeout)
}
func (t Timeouts) CleanupDuration() time.Duration {
return durationOrDefault(t.Cleanup, DefaultCleanupTimeout)
}
func (t Timeouts) DeleteDuration() time.Duration {
return durationOrDefault(t.Delete, DefaultDeleteTimeout)
}
func (t Timeouts) ErrorDuration() time.Duration {
return durationOrDefault(t.Error, DefaultErrorTimeout)
}
func (t Timeouts) ExecDuration() time.Duration {
return durationOrDefault(t.Exec, DefaultExecTimeout)
}
func (t Timeouts) Combine(override *Timeouts) Timeouts {
if override == nil {
return t
}
if override.Apply != nil {
t.Apply = override.Apply
}
if override.Assert != nil {
t.Assert = override.Assert
}
if override.Error != nil {
t.Error = override.Error
}
if override.Delete != nil {
t.Delete = override.Delete
}
if override.Cleanup != nil {
t.Cleanup = override.Cleanup
}
if override.Exec != nil {
t.Exec = override.Exec
}
return t
}

199
pkg/apis/v1alpha1/types.go Normal file
View File

@ -0,0 +1,199 @@
package v1alpha1
import (
"fmt"
"regexp"
"time"
"github.com/kyverno/kyverno-json/pkg/apis/policy/v1alpha1"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
)
var identifier = regexp.MustCompile(`^(?:\w+|\(.+\))$`)
// Any represents any type.
type Any = v1alpha1.Any
// Binding represents a key/value set as a binding in an executing test.
type Binding struct {
// Name the name of the binding.
// +kubebuilder:validation:Pattern=`^(?:\w+|\(.+\))$`
Name string `json:"name"`
// Value value of the binding.
// +kubebuilder:validation:Schemaless
// +kubebuilder:pruning:PreserveUnknownFields
Value Any `json:"value"`
}
func (b Binding) CheckName() error {
if !identifier.MatchString(b.Name) {
return fmt.Errorf("invalid name %s", b.Name)
}
return nil
}
// Check represents a check to be applied on the result of an operation.
type Check = Any
// Cluster defines cluster config and context.
type Cluster struct {
// Kubeconfig is the path to the referenced file.
Kubeconfig string `json:"kubeconfig"`
// Context is the name of the context to use.
// +optional
Context string `json:"context,omitempty"`
}
// Clusters defines a cluster map.
type Clusters map[string]Cluster
// Expectation represents a check to be applied on the result of an operation
// with a match filter to determine if the verification should be considered.
type Expectation struct {
// Match defines the matching statement.
// +optional
Match *Match `json:"match,omitempty"`
// Check defines the verification statement.
Check Check `json:"check"`
}
// Format determines the output format (json or yaml).
// +kubebuilder:validation:Pattern=`^(?:json|yaml|\(.+\))$`
type Format string
// Match represents a match condition against an evaluated object.
type Match = Any
// ObjectName represents an object namespace and name.
type ObjectName struct {
// Namespace of the referent.
// More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/
// +optional
Namespace string `json:"namespace,omitempty"`
// Name of the referent.
// More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
// +optional
Name string `json:"name,omitempty"`
}
// ObjectReference represents one or more objects with a specific apiVersion and kind.
// For a single object name and namespace are used to identify the object.
// For multiple objects use labels.
type ObjectReference struct {
ObjectType `json:",inline"`
ObjectName `json:",inline"`
// Label selector to match objects to delete
// +optional
Labels map[string]string `json:"labels,omitempty"`
}
// ObjectType represents a specific apiVersion and kind.
type ObjectType struct {
// API version of the referent.
APIVersion string `json:"apiVersion"`
// Kind of the referent.
// More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
Kind string `json:"kind"`
}
// Output represents an output binding with a match to determine if the binding must be considered or not.
type Output struct {
// Binding determines the binding to create when the match succeeds.
Binding `json:",inline"`
// Match defines the matching statement.
// +optional
Match *Match `json:"match,omitempty"`
}
const (
DefaultApplyTimeout = 5 * time.Second
DefaultAssertTimeout = 30 * time.Second
DefaultCleanupTimeout = 30 * time.Second
DefaultDeleteTimeout = 15 * time.Second
DefaultErrorTimeout = 30 * time.Second
DefaultExecTimeout = 5 * time.Second
)
// Timeouts contains timeouts per operation.
type Timeouts struct {
// Apply defines the timeout for the apply operation
Apply *metav1.Duration `json:"apply,omitempty"`
// Assert defines the timeout for the assert operation
Assert *metav1.Duration `json:"assert,omitempty"`
// Cleanup defines the timeout for the cleanup operation
Cleanup *metav1.Duration `json:"cleanup,omitempty"`
// Delete defines the timeout for the delete operation
Delete *metav1.Duration `json:"delete,omitempty"`
// Error defines the timeout for the error operation
Error *metav1.Duration `json:"error,omitempty"`
// Exec defines the timeout for exec operations
Exec *metav1.Duration `json:"exec,omitempty"`
}
func durationOrDefault(to *metav1.Duration, def time.Duration) time.Duration {
if to != nil {
return to.Duration
}
return def
}
func (t Timeouts) ApplyDuration() time.Duration {
return durationOrDefault(t.Apply, DefaultApplyTimeout)
}
func (t Timeouts) AssertDuration() time.Duration {
return durationOrDefault(t.Assert, DefaultAssertTimeout)
}
func (t Timeouts) CleanupDuration() time.Duration {
return durationOrDefault(t.Cleanup, DefaultCleanupTimeout)
}
func (t Timeouts) DeleteDuration() time.Duration {
return durationOrDefault(t.Delete, DefaultDeleteTimeout)
}
func (t Timeouts) ErrorDuration() time.Duration {
return durationOrDefault(t.Error, DefaultErrorTimeout)
}
func (t Timeouts) ExecDuration() time.Duration {
return durationOrDefault(t.Exec, DefaultExecTimeout)
}
func (t Timeouts) Combine(override *Timeouts) Timeouts {
if override == nil {
return t
}
if override.Apply != nil {
t.Apply = override.Apply
}
if override.Assert != nil {
t.Assert = override.Assert
}
if override.Error != nil {
t.Error = override.Error
}
if override.Delete != nil {
t.Delete = override.Delete
}
if override.Cleanup != nil {
t.Cleanup = override.Cleanup
}
if override.Exec != nil {
t.Exec = override.Exec
}
return t
}

View File

@ -8,6 +8,56 @@ import (
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
)
func TestBinding_CheckName(t *testing.T) {
tests := []struct {
name string
bindingName string
bindingValue Any
wantErr bool
}{{
name: "empty",
wantErr: true,
}, {
name: "simple",
bindingName: "simple",
wantErr: false,
}, {
name: "with dollar",
bindingName: "$simple",
wantErr: true,
}, {
name: "with space",
bindingName: "simple one",
wantErr: true,
}, {
name: "with dot",
bindingName: "simple.one",
wantErr: true,
}, {
name: "good expression",
bindingName: "('test')",
wantErr: false,
}, {
name: "bad expression",
bindingName: "('test'",
wantErr: true,
}}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
b := Binding{
Name: tt.bindingName,
Value: tt.bindingValue,
}
err := b.CheckName()
if tt.wantErr {
assert.Error(t, err)
} else {
assert.NoError(t, err)
}
})
}
}
func Test_durationOrDefault(t *testing.T) {
tests := []struct {
name string

View File

@ -1,40 +0,0 @@
package v1alpha1
import (
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
)
// Update represents a set of resources that should be updated.
// If a resource does not exist in the cluster it will fail.
type Update struct {
// Timeout for the operation. Overrides the global timeout set in the Configuration.
// +optional
Timeout *metav1.Duration `json:"timeout,omitempty"`
// Bindings defines additional binding key/values.
// +optional
Bindings []Binding `json:"bindings,omitempty"`
// Outputs defines output bindings.
// +optional
Outputs []Output `json:"outputs,omitempty"`
// Cluster defines the target cluster (default cluster will be used if not specified and/or overridden).
// +optional
Cluster string `json:"cluster,omitempty"`
// FileRefOrResource provides a reference to the file containing the resources to be created.
FileRefOrResource `json:",inline"`
// Template determines whether resources should be considered for templating.
// +optional
Template *bool `json:"template,omitempty"`
// DryRun determines whether the file should be applied in dry run mode.
// +optional
DryRun *bool `json:"dryRun,omitempty"`
// Expect defines a list of matched checks to validate the operation outcome.
// +optional
Expect []Expectation `json:"expect,omitempty"`
}

View File

@ -1,29 +0,0 @@
package v1alpha1
import (
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
)
// Wait specifies how to perform wait operations on resources.
type Wait struct {
// Timeout for the operation. Specifies how long to wait for the condition to be met before timing out.
// +optional
Timeout *metav1.Duration `json:"timeout,omitempty"`
// Cluster defines the target cluster where the wait operation will be performed (default cluster will be used if not specified).
// +optional
Cluster string `json:"cluster,omitempty"`
// ResourceReference referenced resource type.
ResourceReference `json:",inline"`
// ObjectLabelsSelector determines the selection process of referenced objects.
ObjectLabelsSelector `json:",inline"`
// For specifies the condition to wait for.
For `json:"for"`
// Format determines the output format (json or yaml).
// +optional
Format Format `json:"format,omitempty"`
}

View File

@ -1,11 +0,0 @@
package v1alpha1
// Condition represents parameters for waiting on a specific condition of a resource.
type Condition struct {
// Name defines the specific condition to wait for, e.g., "Available", "Ready".
Name string `json:"name"`
// Value defines the specific condition status to wait for, e.g., "True", "False".
// +optional
Value *string `json:"value,omitempty"`
}

View File

@ -1,4 +0,0 @@
package v1alpha1
// Deletion represents parameters for waiting on a resource's deletion.
type Deletion struct{}

View File

@ -1,16 +0,0 @@
package v1alpha1
// For specifies the condition to wait for.
type For struct {
// Deletion specifies parameters for waiting on a resource's deletion.
// +optional
Deletion *Deletion `json:"deletion,omitempty"`
// Condition specifies the condition to wait for.
// +optional
Condition *Condition `json:"condition,omitempty"`
// JsonPath specifies the json path condition to wait for.
// +optional
JsonPath *JsonPath `json:"jsonPath,omitempty"`
}

View File

@ -1,10 +0,0 @@
package v1alpha1
// JsonPath represents parameters for waiting on a json path of a resource.
type JsonPath struct {
// Path defines the json path to wait for, e.g. '{.status.phase}'.
Path string `json:"path"`
// Value defines the expected value to wait for, e.g., "Running".
Value string `json:"value"`
}

File diff suppressed because it is too large Load Diff

325
pkg/apis/v1alpha2/action.go Normal file
View File

@ -0,0 +1,325 @@
package v1alpha2
import (
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
)
// ActionCheck contains check for an action.
type ActionCheck struct {
// Check is an assertion tree to validate the operation outcome.
// +optional
Check *Check `json:"check,omitempty"`
}
// ActionCheckRef contains check reference options for an action.
type ActionCheckRef struct {
FileRef `json:",inline"`
// Check provides a check used in assertions.
// +optional
Check *Check `json:"resource,omitempty"`
// Template determines whether resources should be considered for templating.
// +optional
Template *bool `json:"template,omitempty"`
}
// ActionDryRun contains dry run options for an action.
type ActionDryRun struct {
// DryRun determines whether the file should be applied in dry run mode.
// +optional
DryRun *bool `json:"dryRun,omitempty"`
}
// ActionEnv contains environment options for an action.
type ActionEnv struct {
// Env defines additional environment variables.
// +optional
Env []Binding `json:"env,omitempty"`
// SkipLogOutput removes the output from the command. Useful for sensitive logs or to reduce noise.
// +optional
SkipLogOutput bool `json:"skipLogOutput,omitempty"`
}
// ActionExpectations contains expectations for an action.
type ActionExpectations struct {
// Expect defines a list of matched checks to validate the operation outcome.
// +optional
Expect []Expectation `json:"expect,omitempty"`
}
// ActionFormat contains format for an action.
type ActionFormat struct {
// Format determines the output format (json or yaml).
// +optional
Format Format `json:"format,omitempty"`
}
type ActionInlineResource struct {
// Resource provides a resource to be applied.
// +kubebuilder:validation:XEmbeddedResource
// +kubebuilder:pruning:PreserveUnknownFields
// +optional
Resource *unstructured.Unstructured `json:"resource,omitempty"`
}
// ActionObject contains object selector options for an action.
type ActionObject struct {
ObjectType `json:",inline"`
ActionObjectSelector `json:",inline"`
}
// ActionObjectSelector contains object selector options for an action.
type ActionObjectSelector struct {
ObjectName `json:",inline"`
// Selector defines labels selector.
// +optional
Selector string `json:"selector,omitempty"`
}
// FileRef represents a file reference.
type FileRef struct {
// File is the path to the referenced file. This can be a direct path to a file
// or an expression that matches multiple files, such as "manifest/*.yaml" for all YAML
// files within the "manifest" directory.
File string `json:"file,omitempty"`
}
// ActionResourceRef contains resource reference options for an action.
type ActionResourceRef struct {
FileRef `json:",inline"`
// Resource provides a resource to be applied.
// +kubebuilder:validation:XEmbeddedResource
// +kubebuilder:pruning:PreserveUnknownFields
// +optional
Resource *unstructured.Unstructured `json:"resource,omitempty"`
// ActionInlineResource `json:",inline"`
// Template determines whether resources should be considered for templating.
// +optional
Template *bool `json:"template,omitempty"`
}
// ActionTimeout contains timeout options for an action.
type ActionTimeout struct {
// Timeout for the operation. Overrides the global timeout set in the Configuration.
// +optional
Timeout *metav1.Duration `json:"timeout,omitempty"`
}
// Apply represents a set of configurations or resources that
// should be applied during testing.
// +k8s:conversion-gen=false
type Apply struct {
ActionDryRun `json:",inline"`
ActionExpectations `json:",inline"`
ActionResourceRef `json:",inline"`
ActionTimeout `json:",inline"`
}
// Assert represents a test condition that is expected to hold true
// during the testing process.
// +k8s:conversion-gen=false
type Assert struct {
ActionCheckRef `json:",inline"`
ActionTimeout `json:",inline"`
}
// Command describes a command to run as a part of a test step.
// +k8s:conversion-gen=false
type Command struct {
ActionCheck `json:",inline"`
ActionEnv `json:",inline"`
ActionTimeout `json:",inline"`
// Entrypoint is the command entry point to run.
Entrypoint string `json:"entrypoint"`
// Args is the command arguments.
// +optional
Args []string `json:"args,omitempty"`
}
// Create represents a set of resources that should be created.
// If a resource already exists in the cluster it will fail.
// +k8s:conversion-gen=false
type Create struct {
ActionDryRun `json:",inline"`
ActionExpectations `json:",inline"`
ActionResourceRef `json:",inline"`
ActionTimeout `json:",inline"`
}
// Delete is a reference to an object that should be deleted
// +k8s:conversion-gen=false
type Delete struct {
ActionExpectations `json:",inline"`
ActionTimeout `json:",inline"`
// Template determines whether resources should be considered for templating.
// +optional
Template *bool `json:"template,omitempty"`
// File is the path to the referenced file. This can be a direct path to a file
// or an expression that matches multiple files, such as "manifest/*.yaml" for all YAML
// files within the "manifest" directory.
// +optional
File string `json:"file,omitempty"`
// Ref determines objects to be deleted.
// +optional
Ref *ObjectReference `json:"ref,omitempty"`
// DeletionPropagationPolicy decides if a deletion will propagate to the dependents of
// the object, and how the garbage collector will handle the propagation.
// Overrides the deletion propagation policy set in the Configuration, the Test and the TestStep.
// +optional
// +kubebuilder:validation:Enum:=Orphan;Background;Foreground
DeletionPropagationPolicy *metav1.DeletionPropagation `json:"deletionPropagationPolicy,omitempty"`
}
// Describe defines how to describe resources.
// +k8s:conversion-gen=false
type Describe struct {
ActionObject `json:",inline"`
ActionTimeout `json:",inline"`
// Show Events indicates whether to include related events.
// +optional
ShowEvents *bool `json:"showEvents,omitempty"`
}
// Error represents an anticipated error condition that may arise during testing.
// Instead of treating such an error as a test failure, it acknowledges it as expected.
// +k8s:conversion-gen=false
type Error struct {
ActionCheckRef `json:",inline"`
ActionTimeout `json:",inline"`
}
// Events defines how to collect events.
// +k8s:conversion-gen=false
type Events struct {
ActionFormat `json:",inline"`
ActionObjectSelector `json:",inline"`
ActionTimeout `json:",inline"`
}
// Get defines how to get resources.
// +k8s:conversion-gen=false
type Get struct {
ActionFormat `json:",inline"`
ActionObject `json:",inline"`
ActionTimeout `json:",inline"`
}
// Patch represents a set of resources that should be patched.
// If a resource doesn't exist yet in the cluster it will fail.
// +k8s:conversion-gen=false
type Patch struct {
ActionDryRun `json:",inline"`
ActionExpectations `json:",inline"`
ActionResourceRef `json:",inline"`
ActionTimeout `json:",inline"`
}
// PodLogs defines how to collect pod logs.
// +k8s:conversion-gen=false
type PodLogs struct {
ActionObjectSelector `json:",inline"`
ActionTimeout `json:",inline"`
// Container in pod to get logs from else --all-containers is used.
// +optional
Container string `json:"container,omitempty"`
// Tail is the number of last lines to collect from pods. If omitted or zero,
// then the default is 10 if you use a selector, or -1 (all) if you use a pod name.
// This matches default behavior of `kubectl logs`.
// +optional
Tail *int `json:"tail,omitempty"`
}
// Script describes a script to run as a part of a test step.
// +k8s:conversion-gen=false
type Script struct {
ActionCheck `json:",inline"`
ActionEnv `json:",inline"`
ActionTimeout `json:",inline"`
// Content defines a shell script (run with "sh -c ...").
// +optional
Content string `json:"content,omitempty"`
}
// Sleep represents a duration while nothing happens.
// +k8s:conversion-gen=false
type Sleep struct {
// Duration is the delay used for sleeping.
Duration metav1.Duration `json:"duration"`
}
// Update represents a set of resources that should be updated.
// If a resource does not exist in the cluster it will fail.
// +k8s:conversion-gen=false
type Update struct {
ActionDryRun `json:",inline"`
ActionExpectations `json:",inline"`
ActionResourceRef `json:",inline"`
ActionTimeout `json:",inline"`
}
// Wait specifies how to perform wait operations on resources.
// +k8s:conversion-gen=false
type Wait struct {
ActionTimeout `json:",inline"`
ActionFormat `json:",inline"`
ActionObject `json:",inline"`
// WaitFor specifies the condition to wait for.
WaitFor `json:"for"`
}
// WaitFor specifies the condition to wait for.
// +k8s:conversion-gen=false
type WaitFor struct {
// Deletion specifies parameters for waiting on a resource's deletion.
// +optional
Deletion *WaitForDeletion `json:"deletion,omitempty"`
// Condition specifies the condition to wait for.
// +optional
Condition *WaitForCondition `json:"condition,omitempty"`
// JsonPath specifies the json path condition to wait for.
// +optional
JsonPath *WaitForJsonPath `json:"jsonPath,omitempty"`
}
// WaitForCondition represents parameters for waiting on a specific condition of a resource.
// +k8s:conversion-gen=false
type WaitForCondition struct {
// Name defines the specific condition to wait for, e.g., "Available", "Ready".
Name string `json:"name"`
// Value defines the specific condition status to wait for, e.g., "True", "False".
// +optional
Value *string `json:"value,omitempty"`
}
// WaitForDeletion represents parameters for waiting on a resource's deletion.
// +k8s:conversion-gen=false
type WaitForDeletion struct{}
// WaitForJsonPath represents parameters for waiting on a json path of a resource.
// +k8s:conversion-gen=false
type WaitForJsonPath struct {
// Path defines the json path to wait for, e.g. '{.status.phase}'.
Path string `json:"path"`
// Value defines the expected value to wait for, e.g., "Running".
Value string `json:"value"`
}

View File

@ -24,40 +24,47 @@ type Configuration struct {
// ConfigurationSpec contains the configuration used to run tests.
// +k8s:conversion-gen=false
type ConfigurationSpec struct {
// Catch defines what the tests steps will execute when an error happens.
// This will be combined with catch handlers defined at the test and step levels.
// +optional
Catch []Catch `json:"catch,omitempty"`
// Cleanup contains cleanup configuration.
// +optional
Cleanup *Cleanup `json:"cleanup,omitempty"`
Cleanup *CleanupOptions `json:"cleanup,omitempty"`
// Clusters holds a registry to clusters to support multi-cluster tests.
// +optional
Clusters map[string]Cluster `json:"clusters,omitempty"`
Clusters Clusters `json:"clusters,omitempty"`
// Deletion contains the global deletion configuration.
// +optional
// +kubebuilder:default:={}
Deletion DeletionOptions `json:"deletion"`
// Discovery contains tests discovery configuration.
// +optional
Discovery *Discovery `json:"discovery,omitempty"`
// +kubebuilder:default:={}
Discovery DiscoveryOptions `json:"discovery"`
// Error contains the global error configuration.
// +optional
Error *ErrorOptions `json:"error,omitempty"`
// Execution contains tests execution configuration.
// +optional
Execution *Execution `json:"execution,omitempty"`
Execution *ExecutionOptions `json:"execution,omitempty"`
// Namespace contains properties for the namespace to use for tests.
// +optional
Namespace *Namespace `json:"namespace,omitempty"`
Namespace *NamespaceOptions `json:"namespace,omitempty"`
// Report contains properties for the report.
// +optional
Report *Report `json:"report,omitempty"`
Report *ReportOptions `json:"report,omitempty"`
// Templating contains the templating config.
// +optional
Templating *Templating `json:"templating,omitempty"`
// +kubebuilder:default:={}
Templating TemplatingOptions `json:"templating"`
// Global timeouts configuration. Applies to all tests/test steps if not overridden.
// +optional
// +kubebuilder:default:={}
Timeouts Timeouts `json:"timeouts"`
}

View File

@ -0,0 +1,115 @@
package v1alpha2
// Operation defines operation elements.
// +k8s:conversion-gen=false
type Operation struct {
OperationAction `json:",inline"`
OperationBindings `json:",inline"`
OperationClusters `json:",inline"`
OperationOutputs `json:",inline"`
// Description contains a description of the operation.
// +optional
Description string `json:"description,omitempty"`
}
// OperationAction defines an operation action, only one action should be specified per operation.
type OperationAction struct {
// Apply represents resources that should be applied for this test step. This can include things
// like configuration settings or any other resources that need to be available during the test.
// +optional
Apply *Apply `json:"apply,omitempty"`
// Assert represents an assertion to be made. It checks whether the conditions specified in the assertion hold true.
// +optional
Assert *Assert `json:"assert,omitempty"`
// Command defines a command to run.
// +optional
Command *Command `json:"command,omitempty"`
// Create represents a creation operation.
// +optional
Create *Create `json:"create,omitempty"`
// Delete represents a deletion operation.
// +optional
Delete *Delete `json:"delete,omitempty"`
// Describe determines the resource describe collector to execute.
// +optional
Describe *Describe `json:"describe,omitempty"`
// Error represents the expected errors for this test step. If any of these errors occur, the test
// will consider them as expected; otherwise, they will be treated as test failures.
// +optional
Error *Error `json:"error,omitempty"`
// Events determines the events collector to execute.
// +optional
Events *Events `json:"events,omitempty"`
// Get determines the resource get collector to execute.
// +optional
Get *Get `json:"get,omitempty"`
// Patch represents a patch operation.
// +optional
Patch *Patch `json:"patch,omitempty"`
// PodLogs determines the pod logs collector to execute.
// +optional
PodLogs *PodLogs `json:"podLogs,omitempty"`
// Script defines a script to run.
// +optional
Script *Script `json:"script,omitempty"`
// Sleep defines zzzz.
// +optional
Sleep *Sleep `json:"sleep,omitempty"`
// Update represents an update operation.
// +optional
Update *Update `json:"update,omitempty"`
// Wait determines the resource wait collector to execute.
// +optional
Wait *Wait `json:"wait,omitempty"`
}
// OperationBindings contains bindings options for an operation.
type OperationBindings struct {
// Bindings defines additional binding key/values.
// +optional
Bindings []Binding `json:"bindings,omitempty"`
}
// OperationClusters contains clusters options for an operation.
type OperationClusters struct {
// Cluster defines the target cluster (default cluster will be used if not specified and/or overridden).
// +optional
Cluster string `json:"cluster,omitempty"`
// Clusters holds a registry to clusters to support multi-cluster tests.
// +optional
Clusters Clusters `json:"clusters,omitempty"`
}
// OperationOutputs contains outputs options for an operation.
type OperationOutputs struct {
// Outputs defines output bindings.
// +optional
Outputs []Output `json:"outputs,omitempty"`
}
// TryOperation defines operation elements.
// +k8s:conversion-gen=false
type TryOperation struct {
Operation `json:",inline"`
// ContinueOnError determines whether a test should continue or not in case the operation was not successful.
// Even if the test continues executing, it will still be reported as failed.
// +optional
ContinueOnError *bool `json:"continueOnError,omitempty"`
}

View File

@ -1,31 +1,62 @@
package v1alpha1
package v1alpha2
import (
_ "github.com/kyverno/kyverno-json/pkg/apis/policy/v1alpha1"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
)
type ReportFormatType string
const (
JSONFormat ReportFormatType = "JSON"
XMLFormat ReportFormatType = "XML"
NoReport ReportFormatType = ""
)
// ConfigurationSpec contains the configuration used to run tests.
type ConfigurationSpec struct {
// Global timeouts configuration. Applies to all tests/test steps if not overridden.
// +optional
Timeouts Timeouts `json:"timeouts"`
// If set, do not delete the resources after running the tests (implies SkipClusterDelete).
// CleanupOptions contains the configuration used for cleaning up resources.
type CleanupOptions struct {
// If set, do not delete the resources after running a test.
// +optional
SkipDelete bool `json:"skipDelete,omitempty"`
// Template determines whether resources should be considered for templating.
// DelayBeforeCleanup adds a delay between the time a test ends and the time cleanup starts.
// +optional
Template *bool `json:"template,omitempty"`
DelayBeforeCleanup *metav1.Duration `json:"delayBeforeCleanup,omitempty"`
}
// DeletionOptions contains the configuration used for deleting resources.
type DeletionOptions struct {
// Propagation decides if a deletion will propagate to the dependents of
// the object, and how the garbage collector will handle the propagation.
// +optional
// +kubebuilder:validation:Enum:=Orphan;Background;Foreground
// +kubebuilder:default:=Background
Propagation metav1.DeletionPropagation `json:"propagation,omitempty"`
}
// DiscoveryOptions contains the discovery configuration used when discovering tests in folders.
type DiscoveryOptions struct {
// ExcludeTestRegex is used to exclude tests based on a regular expression.
// +optional
ExcludeTestRegex string `json:"excludeTestRegex,omitempty"`
// IncludeTestRegex is used to include tests based on a regular expression.
// +optional
IncludeTestRegex string `json:"includeTestRegex,omitempty"`
// TestFile is the name of the file containing the test to run.
// If no extension is provided, chainsaw will try with .yaml first and .yml if needed.
// +optional
// +kubebuilder:default:="chainsaw-test"
TestFile string `json:"testFile,omitempty"`
// FullName makes use of the full test case folder path instead of the folder name.
// +optional
FullName bool `json:"fullName,omitempty"`
}
// ErrorOptions contains the global error configuration.
type ErrorOptions struct {
// Catch defines what the tests steps will execute when an error happens.
// This will be combined with catch handlers defined at the test and step levels.
// +optional
Catch []Operation `json:"catch,omitempty"`
}
// ExecutionOptions determines how tests are run.
type ExecutionOptions struct {
// FailFast determines whether the test should stop upon encountering the first failure.
// +optional
FailFast bool `json:"failFast,omitempty"`
@ -36,69 +67,59 @@ type ConfigurationSpec struct {
// +optional
Parallel *int `json:"parallel,omitempty"`
// ReportFormat determines test report format (JSON|XML|nil) nil == no report.
// maps to report.Type, however we don't want generated.deepcopy to have reference to it.
// +optional
// +kubebuilder:validation:Enum:=JSON;XML;
ReportFormat ReportFormatType `json:"reportFormat,omitempty"`
// ReportPath defines the path.
// +optional
ReportPath string `json:"reportPath,omitempty"`
// ReportName defines the name of report to create. It defaults to "chainsaw-report".
// +optional
// +kubebuilder:default:="chainsaw-report"
ReportName string `json:"reportName,omitempty"`
// Namespace defines the namespace to use for tests.
// If not specified, every test will execute in a random ephemeral namespace
// unless the namespace is overridden in a the test spec.
// +optional
Namespace string `json:"namespace,omitempty"`
// NamespaceTemplate defines a template to create the test namespace.
// +optional
NamespaceTemplate *Any `json:"namespaceTemplate,omitempty"`
// FullName makes use of the full test case folder path instead of the folder name.
// +optional
FullName bool `json:"fullName,omitempty"`
// ExcludeTestRegex is used to exclude tests based on a regular expression.
// +optional
ExcludeTestRegex string `json:"excludeTestRegex,omitempty"`
// IncludeTestRegex is used to include tests based on a regular expression.
// +optional
IncludeTestRegex string `json:"includeTestRegex,omitempty"`
// RepeatCount indicates how many times the tests should be executed.
// +kubebuilder:validation:Format:=int
// +kubebuilder:validation:Minimum:=1
// +optional
RepeatCount *int `json:"repeatCount,omitempty"`
// TestFile is the name of the file containing the test to run.
// If no extension is provided, chainsaw will try with .yaml first and .yml if needed.
// +kubebuilder:default:="chainsaw-test"
// +optional
TestFile string `json:"testFile,omitempty"`
// ForceTerminationGracePeriod forces the termination grace period on pods, statefulsets, daemonsets and deployments.
// +optional
ForceTerminationGracePeriod *metav1.Duration `json:"forceTerminationGracePeriod,omitempty"`
// DelayBeforeCleanup adds a delay between the time a test ends and the time cleanup starts.
// +optional
DelayBeforeCleanup *metav1.Duration `json:"delayBeforeCleanup,omitempty"`
// Clusters holds a registry to clusters to support multi-cluster tests.
// +optional
Clusters map[string]Cluster `json:"clusters,omitempty"`
// Catch defines what the tests steps will execute when an error happens.
// This will be combined with catch handlers defined at the test and step levels.
// +optional
Catch []Catch `json:"catch,omitempty"`
}
// NamespaceOptions contains the configuration used to allocate a namespace for each test.
type NamespaceOptions struct {
// Name defines the namespace to use for tests.
// If not specified, every test will execute in a random ephemeral namespace
// unless the namespace is overridden in a the test spec.
// +optional
Name string `json:"name,omitempty"`
// Template defines a template to create the test namespace.
// +optional
Template *Any `json:"template,omitempty"`
}
type ReportFormatType string
const (
JSONFormat ReportFormatType = "JSON"
XMLFormat ReportFormatType = "XML"
)
// ReportOptions contains the configuration used for reporting.
type ReportOptions struct {
// ReportFormat determines test report format (JSON|XML).
// +optional
// +kubebuilder:validation:Enum:=JSON;XML
// +kubebuilder:default:="JSON"
Format ReportFormatType `json:"format,omitempty"`
// ReportPath defines the path.
// +optional
Path string `json:"path,omitempty"`
// ReportName defines the name of report to create. It defaults to "chainsaw-report".
// +optional
// +kubebuilder:default:="chainsaw-report"
Name string `json:"name,omitempty"`
}
// TemplatingOptions contains the templating configuration.
type TemplatingOptions struct {
// Enabled determines whether resources should be considered for templating.
// +optional
// +kubebuilder:default:=true
Enabled bool `json:"enabled"`
}

View File

@ -6,19 +6,20 @@ import (
)
func Convert_v1alpha2_ConfigurationSpec_To_v1alpha1_ConfigurationSpec(in *ConfigurationSpec, out *v1alpha1.ConfigurationSpec, _ conversion.Scope) error {
out.Catch = in.Catch
out.Clusters = in.Clusters
out.Timeouts = in.Timeouts
if in := in.Cleanup; in != nil {
out.SkipDelete = in.SkipDelete
out.DelayBeforeCleanup = in.DelayBeforeCleanup
}
if in := in.Discovery; in != nil {
out.ExcludeTestRegex = in.ExcludeTestRegex
out.IncludeTestRegex = in.IncludeTestRegex
out.TestFile = in.TestFile
out.FullName = in.FullName
}
out.Clusters = in.Clusters
out.DeletionPropagationPolicy = in.Deletion.Propagation
out.ExcludeTestRegex = in.Discovery.ExcludeTestRegex
out.IncludeTestRegex = in.Discovery.IncludeTestRegex
out.TestFile = in.Discovery.TestFile
out.FullName = in.Discovery.FullName
// TODO
// if in := in.Error; in != nil {
// out.Catch = in.Catch
// }
if in := in.Execution; in != nil {
out.FailFast = in.FailFast
out.Parallel = in.Parallel
@ -34,43 +35,54 @@ func Convert_v1alpha2_ConfigurationSpec_To_v1alpha1_ConfigurationSpec(in *Config
out.ReportPath = in.Path
out.ReportName = in.Name
}
if in := in.Templating; in != nil {
out.Template = in.Enabled
}
out.Template = &in.Templating.Enabled
out.Timeouts = in.Timeouts
return nil
}
func Convert_v1alpha1_ConfigurationSpec_To_v1alpha2_ConfigurationSpec(in *v1alpha1.ConfigurationSpec, out *ConfigurationSpec, _ conversion.Scope) error {
out.Catch = in.Catch
out.Clusters = in.Clusters
out.Timeouts = in.Timeouts
out.Cleanup = &Cleanup{
out.Cleanup = &CleanupOptions{
SkipDelete: in.SkipDelete,
DelayBeforeCleanup: in.DelayBeforeCleanup,
}
out.Discovery = &Discovery{
out.Clusters = in.Clusters
out.Deletion = DeletionOptions{
Propagation: in.DeletionPropagationPolicy,
}
out.Discovery = DiscoveryOptions{
ExcludeTestRegex: in.ExcludeTestRegex,
IncludeTestRegex: in.IncludeTestRegex,
TestFile: in.TestFile,
FullName: in.FullName,
}
out.Execution = &Execution{
// TODO
// out.Error = &ErrorOptions{
// Catch: in.Catch,
// }
out.Execution = &ExecutionOptions{
FailFast: in.FailFast,
Parallel: in.Parallel,
RepeatCount: in.RepeatCount,
ForceTerminationGracePeriod: in.ForceTerminationGracePeriod,
}
out.Namespace = &Namespace{
out.Namespace = &NamespaceOptions{
Name: in.Namespace,
Template: in.NamespaceTemplate,
}
out.Report = &Report{
out.Report = &ReportOptions{
Format: ReportFormatType(in.ReportFormat),
Path: in.ReportPath,
Name: in.ReportName,
}
out.Templating = &Templating{
Enabled: in.Template,
if in.Template == nil {
out.Templating = TemplatingOptions{
Enabled: true,
}
} else {
out.Templating = TemplatingOptions{
Enabled: *in.Template,
}
}
out.Timeouts = in.Timeouts
return nil
}

71
pkg/apis/v1alpha2/step.go Normal file
View File

@ -0,0 +1,71 @@
package v1alpha2
import (
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
)
// TestStep contains the test step definition used in a test spec.
// +k8s:conversion-gen=false
type TestStep struct {
// Name of the step.
// +optional
Name string `json:"name,omitempty"`
// TestStepSpec of the step.
TestStepSpec `json:",inline"`
}
// TestStepSpec defines the desired state and behavior for each test step.
// +k8s:conversion-gen=false
type TestStepSpec struct {
// Description contains a description of the test step.
// +optional
Description string `json:"description,omitempty"`
// Timeouts for the test step. Overrides the global timeouts set in the Configuration and the timeouts eventually set in the Test.
// +optional
Timeouts *Timeouts `json:"timeouts,omitempty"`
// DeletionPropagationPolicy decides if a deletion will propagate to the dependents of
// the object, and how the garbage collector will handle the propagation.
// Overrides the deletion propagation policy set in both the Configuration and the Test.
// +optional
// +kubebuilder:validation:Enum:=Orphan;Background;Foreground
DeletionPropagationPolicy *metav1.DeletionPropagation `json:"deletionPropagationPolicy,omitempty"`
// Cluster defines the target cluster (default cluster will be used if not specified and/or overridden).
// +optional
Cluster string `json:"cluster,omitempty"`
// Clusters holds a registry to clusters to support multi-cluster tests.
// +optional
Clusters Clusters `json:"clusters,omitempty"`
// SkipDelete determines whether the resources created by the step should be deleted after the test step is executed.
// +optional
SkipDelete *bool `json:"skipDelete,omitempty"`
// Template determines whether resources should be considered for templating.
// +optional
Template *bool `json:"template,omitempty"`
// Bindings defines additional binding key/values.
// +optional
Bindings []Binding `json:"bindings,omitempty"`
// Try defines what the step will try to execute.
// +kubebuilder:validation:MinItems:=1
Try []TryOperation `json:"try"`
// Catch defines what the step will execute when an error happens.
// +optional
Catch []Operation `json:"catch,omitempty"`
// Finally defines what the step will execute after the step is terminated.
// +optional
Finally []Operation `json:"finally,omitempty"`
// Cleanup defines what will be executed after the test is terminated.
// +optional
Cleanup []Operation `json:"cleanup,omitempty"`
}

96
pkg/apis/v1alpha2/test.go Normal file
View File

@ -0,0 +1,96 @@
package v1alpha2
import (
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
)
// +genclient
// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object
// +kubebuilder:object:root=true
// +kubebuilder:resource:scope=Cluster
// Test is the resource that contains a test definition.
type Test struct {
metav1.TypeMeta `json:",inline"`
// Standard object's metadata.
// +optional
metav1.ObjectMeta `json:"metadata,omitempty"`
// Test spec.
Spec TestSpec `json:"spec"`
}
// TestSpec contains the test spec.
// +k8s:conversion-gen=false
type TestSpec struct {
// Cleanup contains cleanup configuration.
// +optional
// +kubebuilder:default:={}
Cleanup CleanupOptions `json:"cleanup"`
// Cluster defines the target cluster (default cluster will be used if not specified and/or overridden).
// +optional
Cluster string `json:"cluster,omitempty"`
// Clusters holds a registry to clusters to support multi-cluster tests.
// +optional
Clusters Clusters `json:"clusters,omitempty"`
// Execution contains tests execution configuration.
// +optional
// +kubebuilder:default:={}
Execution TestExecutionOptions `json:"execution"`
// Bindings defines additional binding key/values.
// +optional
Bindings []Binding `json:"bindings,omitempty"`
// Deletion contains the global deletion configuration.
// +optional
// +kubebuilder:default:={}
Deletion DeletionOptions `json:"deletion"`
// Description contains a description of the test.
// +optional
Description string `json:"description,omitempty"`
// Error contains the global error configuration.
// +optional
// +kubebuilder:default:={}
Error ErrorOptions `json:"error"`
// Namespace contains properties for the namespace to use for tests.
// +optional
// +kubebuilder:default:={}
Namespace NamespaceOptions `json:"namespace"`
// Steps defining the test.
Steps []TestStep `json:"steps"`
// Templating contains the templating config.
// +optional
// +kubebuilder:default:={}
Templating TemplatingOptions `json:"templating"`
// Timeouts for the test. Overrides the global timeouts set in the Configuration on a per operation basis.
// +optional
// +kubebuilder:default:={}
Timeouts Timeouts `json:"timeouts"`
}
// TestExecutionOptions determines how tests are run.
type TestExecutionOptions struct {
// Concurrent determines whether the test should run concurrently with other tests.
// +optional
// +kubebuilder:default:=true
Concurrent bool `json:"concurrent"`
// Skip determines whether the test should skipped.
// +optional
Skip bool `json:"skip,omitempty"`
// TerminationGracePeriod forces the termination grace period on pods, statefulsets, daemonsets and deployments.
// +optional
TerminationGracePeriod *metav1.Duration `json:"terminationGracePeriod,omitempty"`
}

View File

@ -0,0 +1,14 @@
package v1alpha2
import (
"github.com/kyverno/chainsaw/pkg/apis/v1alpha1"
conversion "k8s.io/apimachinery/pkg/conversion"
)
func Convert_v1alpha2_TestSpec_To_v1alpha1_TestSpec(in *TestSpec, out *v1alpha1.TestSpec, s conversion.Scope) error {
return nil
}
func Convert_v1alpha1_TestSpec_To_v1alpha2_TestSpec(in *v1alpha1.TestSpec, out *TestSpec, s conversion.Scope) error {
return nil
}

View File

@ -7,108 +7,28 @@ import (
)
type (
Any = v1alpha1.Any
Catch = v1alpha1.Catch
Cluster = v1alpha1.Cluster
Timeouts = v1alpha1.Timeouts
Any = v1alpha1.Any
Binding = v1alpha1.Binding
Check = v1alpha1.Check
Cluster = v1alpha1.Cluster
Clusters = v1alpha1.Clusters
Expectation = v1alpha1.Expectation
Format = v1alpha1.Format
ObjectName = v1alpha1.ObjectName
ObjectType = v1alpha1.ObjectType
Output = v1alpha1.Output
Timeouts = v1alpha1.Timeouts
)
// Cleanup contains the cleanup configuration.
type Cleanup struct {
// If set, do not delete the resources after running a test.
// +optional
SkipDelete bool `json:"skipDelete,omitempty"`
// ObjectReference represents one or more objects with a specific apiVersion and kind.
// For a single object name and namespace are used to identify the object.
// For multiple objects use labels.
// +k8s:conversion-gen=false
type ObjectReference struct {
ObjectType `json:",inline"`
ObjectName `json:",inline"`
// DelayBeforeCleanup adds a delay between the time a test ends and the time cleanup starts.
// Label selector to match objects to delete
// +optional
DelayBeforeCleanup *metav1.Duration `json:"delayBeforeCleanup,omitempty"`
}
// Discovery contains the tests discovery configuration.
type Discovery struct {
// ExcludeTestRegex is used to exclude tests based on a regular expression.
// +optional
ExcludeTestRegex string `json:"excludeTestRegex,omitempty"`
// IncludeTestRegex is used to include tests based on a regular expression.
// +optional
IncludeTestRegex string `json:"includeTestRegex,omitempty"`
// TestFile is the name of the file containing the test to run.
// If no extension is provided, chainsaw will try with .yaml first and .yml if needed.
// +kubebuilder:default:="chainsaw-test"
// +optional
TestFile string `json:"testFile,omitempty"`
// FullName makes use of the full test case folder path instead of the folder name.
// +optional
FullName bool `json:"fullName,omitempty"`
}
// Execution contains the runner configuration.
type Execution struct {
// FailFast determines whether the test should stop upon encountering the first failure.
// +optional
FailFast bool `json:"failFast,omitempty"`
// The maximum number of tests to run at once.
// +kubebuilder:validation:Format:=int
// +kubebuilder:validation:Minimum:=1
// +optional
Parallel *int `json:"parallel,omitempty"`
// RepeatCount indicates how many times the tests should be executed.
// +kubebuilder:validation:Format:=int
// +kubebuilder:validation:Minimum:=1
// +optional
RepeatCount *int `json:"repeatCount,omitempty"`
// ForceTerminationGracePeriod forces the termination grace period on pods, statefulsets, daemonsets and deployments.
// +optional
ForceTerminationGracePeriod *metav1.Duration `json:"forceTerminationGracePeriod,omitempty"`
}
// Namespace contains info about the namespace used for testing.
type Namespace struct {
// Name defines the namespace to use for tests.
// If not specified, every test will execute in a random ephemeral namespace
// unless the namespace is overridden in a the test spec.
// +optional
Name string `json:"name,omitempty"`
// Template defines a template to create the test namespace.
// +optional
Template *Any `json:"template,omitempty"`
}
type ReportFormatType string
const (
JSONFormat ReportFormatType = "JSON"
XMLFormat ReportFormatType = "XML"
)
// Report contains info about the report.
type Report struct {
// ReportFormat determines test report format (JSON|XML).
// +optional
// +kubebuilder:validation:Enum:=JSON;XML
// +kubebuilder:default:="JSON"
Format ReportFormatType `json:"format,omitempty"`
// ReportPath defines the path.
// +optional
Path string `json:"path,omitempty"`
// ReportName defines the name of report to create. It defaults to "chainsaw-report".
// +optional
// +kubebuilder:default:="chainsaw-report"
Name string `json:"name,omitempty"`
}
// Templating contains the templating configuration.
type Templating struct {
// Enabled determines whether resources should be considered for templating.
// +optional
Enabled *bool `json:"enabled,omitempty"`
Labels *metav1.LabelSelector `json:"labelSelector,omitempty"`
}

View File

@ -22,7 +22,12 @@ limitations under the License.
package v1alpha2
import (
unsafe "unsafe"
v1alpha1 "github.com/kyverno/chainsaw/pkg/apis/v1alpha1"
policyv1alpha1 "github.com/kyverno/kyverno-json/pkg/apis/policy/v1alpha1"
v1 "k8s.io/apimachinery/pkg/apis/meta/v1"
unstructured "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
conversion "k8s.io/apimachinery/pkg/conversion"
runtime "k8s.io/apimachinery/pkg/runtime"
)
@ -34,6 +39,116 @@ func init() {
// RegisterConversions adds conversion functions to the given scheme.
// Public to allow building arbitrary schemes.
func RegisterConversions(s *runtime.Scheme) error {
if err := s.AddGeneratedConversionFunc((*ActionCheck)(nil), (*v1alpha1.ActionCheck)(nil), func(a, b interface{}, scope conversion.Scope) error {
return Convert_v1alpha2_ActionCheck_To_v1alpha1_ActionCheck(a.(*ActionCheck), b.(*v1alpha1.ActionCheck), scope)
}); err != nil {
return err
}
if err := s.AddGeneratedConversionFunc((*v1alpha1.ActionCheck)(nil), (*ActionCheck)(nil), func(a, b interface{}, scope conversion.Scope) error {
return Convert_v1alpha1_ActionCheck_To_v1alpha2_ActionCheck(a.(*v1alpha1.ActionCheck), b.(*ActionCheck), scope)
}); err != nil {
return err
}
if err := s.AddGeneratedConversionFunc((*ActionCheckRef)(nil), (*v1alpha1.ActionCheckRef)(nil), func(a, b interface{}, scope conversion.Scope) error {
return Convert_v1alpha2_ActionCheckRef_To_v1alpha1_ActionCheckRef(a.(*ActionCheckRef), b.(*v1alpha1.ActionCheckRef), scope)
}); err != nil {
return err
}
if err := s.AddGeneratedConversionFunc((*v1alpha1.ActionCheckRef)(nil), (*ActionCheckRef)(nil), func(a, b interface{}, scope conversion.Scope) error {
return Convert_v1alpha1_ActionCheckRef_To_v1alpha2_ActionCheckRef(a.(*v1alpha1.ActionCheckRef), b.(*ActionCheckRef), scope)
}); err != nil {
return err
}
if err := s.AddGeneratedConversionFunc((*ActionDryRun)(nil), (*v1alpha1.ActionDryRun)(nil), func(a, b interface{}, scope conversion.Scope) error {
return Convert_v1alpha2_ActionDryRun_To_v1alpha1_ActionDryRun(a.(*ActionDryRun), b.(*v1alpha1.ActionDryRun), scope)
}); err != nil {
return err
}
if err := s.AddGeneratedConversionFunc((*v1alpha1.ActionDryRun)(nil), (*ActionDryRun)(nil), func(a, b interface{}, scope conversion.Scope) error {
return Convert_v1alpha1_ActionDryRun_To_v1alpha2_ActionDryRun(a.(*v1alpha1.ActionDryRun), b.(*ActionDryRun), scope)
}); err != nil {
return err
}
if err := s.AddGeneratedConversionFunc((*ActionEnv)(nil), (*v1alpha1.ActionEnv)(nil), func(a, b interface{}, scope conversion.Scope) error {
return Convert_v1alpha2_ActionEnv_To_v1alpha1_ActionEnv(a.(*ActionEnv), b.(*v1alpha1.ActionEnv), scope)
}); err != nil {
return err
}
if err := s.AddGeneratedConversionFunc((*v1alpha1.ActionEnv)(nil), (*ActionEnv)(nil), func(a, b interface{}, scope conversion.Scope) error {
return Convert_v1alpha1_ActionEnv_To_v1alpha2_ActionEnv(a.(*v1alpha1.ActionEnv), b.(*ActionEnv), scope)
}); err != nil {
return err
}
if err := s.AddGeneratedConversionFunc((*ActionExpectations)(nil), (*v1alpha1.ActionExpectations)(nil), func(a, b interface{}, scope conversion.Scope) error {
return Convert_v1alpha2_ActionExpectations_To_v1alpha1_ActionExpectations(a.(*ActionExpectations), b.(*v1alpha1.ActionExpectations), scope)
}); err != nil {
return err
}
if err := s.AddGeneratedConversionFunc((*v1alpha1.ActionExpectations)(nil), (*ActionExpectations)(nil), func(a, b interface{}, scope conversion.Scope) error {
return Convert_v1alpha1_ActionExpectations_To_v1alpha2_ActionExpectations(a.(*v1alpha1.ActionExpectations), b.(*ActionExpectations), scope)
}); err != nil {
return err
}
if err := s.AddGeneratedConversionFunc((*ActionFormat)(nil), (*v1alpha1.ActionFormat)(nil), func(a, b interface{}, scope conversion.Scope) error {
return Convert_v1alpha2_ActionFormat_To_v1alpha1_ActionFormat(a.(*ActionFormat), b.(*v1alpha1.ActionFormat), scope)
}); err != nil {
return err
}
if err := s.AddGeneratedConversionFunc((*v1alpha1.ActionFormat)(nil), (*ActionFormat)(nil), func(a, b interface{}, scope conversion.Scope) error {
return Convert_v1alpha1_ActionFormat_To_v1alpha2_ActionFormat(a.(*v1alpha1.ActionFormat), b.(*ActionFormat), scope)
}); err != nil {
return err
}
if err := s.AddGeneratedConversionFunc((*ActionInlineResource)(nil), (*v1alpha1.ActionInlineResource)(nil), func(a, b interface{}, scope conversion.Scope) error {
return Convert_v1alpha2_ActionInlineResource_To_v1alpha1_ActionInlineResource(a.(*ActionInlineResource), b.(*v1alpha1.ActionInlineResource), scope)
}); err != nil {
return err
}
if err := s.AddGeneratedConversionFunc((*v1alpha1.ActionInlineResource)(nil), (*ActionInlineResource)(nil), func(a, b interface{}, scope conversion.Scope) error {
return Convert_v1alpha1_ActionInlineResource_To_v1alpha2_ActionInlineResource(a.(*v1alpha1.ActionInlineResource), b.(*ActionInlineResource), scope)
}); err != nil {
return err
}
if err := s.AddGeneratedConversionFunc((*ActionObject)(nil), (*v1alpha1.ActionObject)(nil), func(a, b interface{}, scope conversion.Scope) error {
return Convert_v1alpha2_ActionObject_To_v1alpha1_ActionObject(a.(*ActionObject), b.(*v1alpha1.ActionObject), scope)
}); err != nil {
return err
}
if err := s.AddGeneratedConversionFunc((*v1alpha1.ActionObject)(nil), (*ActionObject)(nil), func(a, b interface{}, scope conversion.Scope) error {
return Convert_v1alpha1_ActionObject_To_v1alpha2_ActionObject(a.(*v1alpha1.ActionObject), b.(*ActionObject), scope)
}); err != nil {
return err
}
if err := s.AddGeneratedConversionFunc((*ActionObjectSelector)(nil), (*v1alpha1.ActionObjectSelector)(nil), func(a, b interface{}, scope conversion.Scope) error {
return Convert_v1alpha2_ActionObjectSelector_To_v1alpha1_ActionObjectSelector(a.(*ActionObjectSelector), b.(*v1alpha1.ActionObjectSelector), scope)
}); err != nil {
return err
}
if err := s.AddGeneratedConversionFunc((*v1alpha1.ActionObjectSelector)(nil), (*ActionObjectSelector)(nil), func(a, b interface{}, scope conversion.Scope) error {
return Convert_v1alpha1_ActionObjectSelector_To_v1alpha2_ActionObjectSelector(a.(*v1alpha1.ActionObjectSelector), b.(*ActionObjectSelector), scope)
}); err != nil {
return err
}
if err := s.AddGeneratedConversionFunc((*ActionResourceRef)(nil), (*v1alpha1.ActionResourceRef)(nil), func(a, b interface{}, scope conversion.Scope) error {
return Convert_v1alpha2_ActionResourceRef_To_v1alpha1_ActionResourceRef(a.(*ActionResourceRef), b.(*v1alpha1.ActionResourceRef), scope)
}); err != nil {
return err
}
if err := s.AddGeneratedConversionFunc((*v1alpha1.ActionResourceRef)(nil), (*ActionResourceRef)(nil), func(a, b interface{}, scope conversion.Scope) error {
return Convert_v1alpha1_ActionResourceRef_To_v1alpha2_ActionResourceRef(a.(*v1alpha1.ActionResourceRef), b.(*ActionResourceRef), scope)
}); err != nil {
return err
}
if err := s.AddGeneratedConversionFunc((*ActionTimeout)(nil), (*v1alpha1.ActionTimeout)(nil), func(a, b interface{}, scope conversion.Scope) error {
return Convert_v1alpha2_ActionTimeout_To_v1alpha1_ActionTimeout(a.(*ActionTimeout), b.(*v1alpha1.ActionTimeout), scope)
}); err != nil {
return err
}
if err := s.AddGeneratedConversionFunc((*v1alpha1.ActionTimeout)(nil), (*ActionTimeout)(nil), func(a, b interface{}, scope conversion.Scope) error {
return Convert_v1alpha1_ActionTimeout_To_v1alpha2_ActionTimeout(a.(*v1alpha1.ActionTimeout), b.(*ActionTimeout), scope)
}); err != nil {
return err
}
if err := s.AddGeneratedConversionFunc((*Configuration)(nil), (*v1alpha1.Configuration)(nil), func(a, b interface{}, scope conversion.Scope) error {
return Convert_v1alpha2_Configuration_To_v1alpha1_Configuration(a.(*Configuration), b.(*v1alpha1.Configuration), scope)
}); err != nil {
@ -44,19 +159,295 @@ func RegisterConversions(s *runtime.Scheme) error {
}); err != nil {
return err
}
if err := s.AddGeneratedConversionFunc((*FileRef)(nil), (*v1alpha1.FileRef)(nil), func(a, b interface{}, scope conversion.Scope) error {
return Convert_v1alpha2_FileRef_To_v1alpha1_FileRef(a.(*FileRef), b.(*v1alpha1.FileRef), scope)
}); err != nil {
return err
}
if err := s.AddGeneratedConversionFunc((*v1alpha1.FileRef)(nil), (*FileRef)(nil), func(a, b interface{}, scope conversion.Scope) error {
return Convert_v1alpha1_FileRef_To_v1alpha2_FileRef(a.(*v1alpha1.FileRef), b.(*FileRef), scope)
}); err != nil {
return err
}
if err := s.AddGeneratedConversionFunc((*Test)(nil), (*v1alpha1.Test)(nil), func(a, b interface{}, scope conversion.Scope) error {
return Convert_v1alpha2_Test_To_v1alpha1_Test(a.(*Test), b.(*v1alpha1.Test), scope)
}); err != nil {
return err
}
if err := s.AddGeneratedConversionFunc((*v1alpha1.Test)(nil), (*Test)(nil), func(a, b interface{}, scope conversion.Scope) error {
return Convert_v1alpha1_Test_To_v1alpha2_Test(a.(*v1alpha1.Test), b.(*Test), scope)
}); err != nil {
return err
}
if err := s.AddConversionFunc((*v1alpha1.ConfigurationSpec)(nil), (*ConfigurationSpec)(nil), func(a, b interface{}, scope conversion.Scope) error {
return Convert_v1alpha1_ConfigurationSpec_To_v1alpha2_ConfigurationSpec(a.(*v1alpha1.ConfigurationSpec), b.(*ConfigurationSpec), scope)
}); err != nil {
return err
}
if err := s.AddConversionFunc((*v1alpha1.TestSpec)(nil), (*TestSpec)(nil), func(a, b interface{}, scope conversion.Scope) error {
return Convert_v1alpha1_TestSpec_To_v1alpha2_TestSpec(a.(*v1alpha1.TestSpec), b.(*TestSpec), scope)
}); err != nil {
return err
}
if err := s.AddConversionFunc((*ConfigurationSpec)(nil), (*v1alpha1.ConfigurationSpec)(nil), func(a, b interface{}, scope conversion.Scope) error {
return Convert_v1alpha2_ConfigurationSpec_To_v1alpha1_ConfigurationSpec(a.(*ConfigurationSpec), b.(*v1alpha1.ConfigurationSpec), scope)
}); err != nil {
return err
}
if err := s.AddConversionFunc((*TestSpec)(nil), (*v1alpha1.TestSpec)(nil), func(a, b interface{}, scope conversion.Scope) error {
return Convert_v1alpha2_TestSpec_To_v1alpha1_TestSpec(a.(*TestSpec), b.(*v1alpha1.TestSpec), scope)
}); err != nil {
return err
}
return nil
}
func autoConvert_v1alpha2_ActionCheck_To_v1alpha1_ActionCheck(in *ActionCheck, out *v1alpha1.ActionCheck, s conversion.Scope) error {
out.Check = (*policyv1alpha1.Any)(unsafe.Pointer(in.Check))
return nil
}
// Convert_v1alpha2_ActionCheck_To_v1alpha1_ActionCheck is an autogenerated conversion function.
func Convert_v1alpha2_ActionCheck_To_v1alpha1_ActionCheck(in *ActionCheck, out *v1alpha1.ActionCheck, s conversion.Scope) error {
return autoConvert_v1alpha2_ActionCheck_To_v1alpha1_ActionCheck(in, out, s)
}
func autoConvert_v1alpha1_ActionCheck_To_v1alpha2_ActionCheck(in *v1alpha1.ActionCheck, out *ActionCheck, s conversion.Scope) error {
out.Check = (*policyv1alpha1.Any)(unsafe.Pointer(in.Check))
return nil
}
// Convert_v1alpha1_ActionCheck_To_v1alpha2_ActionCheck is an autogenerated conversion function.
func Convert_v1alpha1_ActionCheck_To_v1alpha2_ActionCheck(in *v1alpha1.ActionCheck, out *ActionCheck, s conversion.Scope) error {
return autoConvert_v1alpha1_ActionCheck_To_v1alpha2_ActionCheck(in, out, s)
}
func autoConvert_v1alpha2_ActionCheckRef_To_v1alpha1_ActionCheckRef(in *ActionCheckRef, out *v1alpha1.ActionCheckRef, s conversion.Scope) error {
if err := Convert_v1alpha2_FileRef_To_v1alpha1_FileRef(&in.FileRef, &out.FileRef, s); err != nil {
return err
}
out.Check = (*policyv1alpha1.Any)(unsafe.Pointer(in.Check))
out.Template = (*bool)(unsafe.Pointer(in.Template))
return nil
}
// Convert_v1alpha2_ActionCheckRef_To_v1alpha1_ActionCheckRef is an autogenerated conversion function.
func Convert_v1alpha2_ActionCheckRef_To_v1alpha1_ActionCheckRef(in *ActionCheckRef, out *v1alpha1.ActionCheckRef, s conversion.Scope) error {
return autoConvert_v1alpha2_ActionCheckRef_To_v1alpha1_ActionCheckRef(in, out, s)
}
func autoConvert_v1alpha1_ActionCheckRef_To_v1alpha2_ActionCheckRef(in *v1alpha1.ActionCheckRef, out *ActionCheckRef, s conversion.Scope) error {
if err := Convert_v1alpha1_FileRef_To_v1alpha2_FileRef(&in.FileRef, &out.FileRef, s); err != nil {
return err
}
out.Check = (*policyv1alpha1.Any)(unsafe.Pointer(in.Check))
out.Template = (*bool)(unsafe.Pointer(in.Template))
return nil
}
// Convert_v1alpha1_ActionCheckRef_To_v1alpha2_ActionCheckRef is an autogenerated conversion function.
func Convert_v1alpha1_ActionCheckRef_To_v1alpha2_ActionCheckRef(in *v1alpha1.ActionCheckRef, out *ActionCheckRef, s conversion.Scope) error {
return autoConvert_v1alpha1_ActionCheckRef_To_v1alpha2_ActionCheckRef(in, out, s)
}
func autoConvert_v1alpha2_ActionDryRun_To_v1alpha1_ActionDryRun(in *ActionDryRun, out *v1alpha1.ActionDryRun, s conversion.Scope) error {
out.DryRun = (*bool)(unsafe.Pointer(in.DryRun))
return nil
}
// Convert_v1alpha2_ActionDryRun_To_v1alpha1_ActionDryRun is an autogenerated conversion function.
func Convert_v1alpha2_ActionDryRun_To_v1alpha1_ActionDryRun(in *ActionDryRun, out *v1alpha1.ActionDryRun, s conversion.Scope) error {
return autoConvert_v1alpha2_ActionDryRun_To_v1alpha1_ActionDryRun(in, out, s)
}
func autoConvert_v1alpha1_ActionDryRun_To_v1alpha2_ActionDryRun(in *v1alpha1.ActionDryRun, out *ActionDryRun, s conversion.Scope) error {
out.DryRun = (*bool)(unsafe.Pointer(in.DryRun))
return nil
}
// Convert_v1alpha1_ActionDryRun_To_v1alpha2_ActionDryRun is an autogenerated conversion function.
func Convert_v1alpha1_ActionDryRun_To_v1alpha2_ActionDryRun(in *v1alpha1.ActionDryRun, out *ActionDryRun, s conversion.Scope) error {
return autoConvert_v1alpha1_ActionDryRun_To_v1alpha2_ActionDryRun(in, out, s)
}
func autoConvert_v1alpha2_ActionEnv_To_v1alpha1_ActionEnv(in *ActionEnv, out *v1alpha1.ActionEnv, s conversion.Scope) error {
out.Env = *(*[]v1alpha1.Binding)(unsafe.Pointer(&in.Env))
out.SkipLogOutput = in.SkipLogOutput
return nil
}
// Convert_v1alpha2_ActionEnv_To_v1alpha1_ActionEnv is an autogenerated conversion function.
func Convert_v1alpha2_ActionEnv_To_v1alpha1_ActionEnv(in *ActionEnv, out *v1alpha1.ActionEnv, s conversion.Scope) error {
return autoConvert_v1alpha2_ActionEnv_To_v1alpha1_ActionEnv(in, out, s)
}
func autoConvert_v1alpha1_ActionEnv_To_v1alpha2_ActionEnv(in *v1alpha1.ActionEnv, out *ActionEnv, s conversion.Scope) error {
out.Env = *(*[]v1alpha1.Binding)(unsafe.Pointer(&in.Env))
out.SkipLogOutput = in.SkipLogOutput
return nil
}
// Convert_v1alpha1_ActionEnv_To_v1alpha2_ActionEnv is an autogenerated conversion function.
func Convert_v1alpha1_ActionEnv_To_v1alpha2_ActionEnv(in *v1alpha1.ActionEnv, out *ActionEnv, s conversion.Scope) error {
return autoConvert_v1alpha1_ActionEnv_To_v1alpha2_ActionEnv(in, out, s)
}
func autoConvert_v1alpha2_ActionExpectations_To_v1alpha1_ActionExpectations(in *ActionExpectations, out *v1alpha1.ActionExpectations, s conversion.Scope) error {
out.Expect = *(*[]v1alpha1.Expectation)(unsafe.Pointer(&in.Expect))
return nil
}
// Convert_v1alpha2_ActionExpectations_To_v1alpha1_ActionExpectations is an autogenerated conversion function.
func Convert_v1alpha2_ActionExpectations_To_v1alpha1_ActionExpectations(in *ActionExpectations, out *v1alpha1.ActionExpectations, s conversion.Scope) error {
return autoConvert_v1alpha2_ActionExpectations_To_v1alpha1_ActionExpectations(in, out, s)
}
func autoConvert_v1alpha1_ActionExpectations_To_v1alpha2_ActionExpectations(in *v1alpha1.ActionExpectations, out *ActionExpectations, s conversion.Scope) error {
out.Expect = *(*[]v1alpha1.Expectation)(unsafe.Pointer(&in.Expect))
return nil
}
// Convert_v1alpha1_ActionExpectations_To_v1alpha2_ActionExpectations is an autogenerated conversion function.
func Convert_v1alpha1_ActionExpectations_To_v1alpha2_ActionExpectations(in *v1alpha1.ActionExpectations, out *ActionExpectations, s conversion.Scope) error {
return autoConvert_v1alpha1_ActionExpectations_To_v1alpha2_ActionExpectations(in, out, s)
}
func autoConvert_v1alpha2_ActionFormat_To_v1alpha1_ActionFormat(in *ActionFormat, out *v1alpha1.ActionFormat, s conversion.Scope) error {
out.Format = v1alpha1.Format(in.Format)
return nil
}
// Convert_v1alpha2_ActionFormat_To_v1alpha1_ActionFormat is an autogenerated conversion function.
func Convert_v1alpha2_ActionFormat_To_v1alpha1_ActionFormat(in *ActionFormat, out *v1alpha1.ActionFormat, s conversion.Scope) error {
return autoConvert_v1alpha2_ActionFormat_To_v1alpha1_ActionFormat(in, out, s)
}
func autoConvert_v1alpha1_ActionFormat_To_v1alpha2_ActionFormat(in *v1alpha1.ActionFormat, out *ActionFormat, s conversion.Scope) error {
out.Format = v1alpha1.Format(in.Format)
return nil
}
// Convert_v1alpha1_ActionFormat_To_v1alpha2_ActionFormat is an autogenerated conversion function.
func Convert_v1alpha1_ActionFormat_To_v1alpha2_ActionFormat(in *v1alpha1.ActionFormat, out *ActionFormat, s conversion.Scope) error {
return autoConvert_v1alpha1_ActionFormat_To_v1alpha2_ActionFormat(in, out, s)
}
func autoConvert_v1alpha2_ActionInlineResource_To_v1alpha1_ActionInlineResource(in *ActionInlineResource, out *v1alpha1.ActionInlineResource, s conversion.Scope) error {
out.Resource = (*unstructured.Unstructured)(unsafe.Pointer(in.Resource))
return nil
}
// Convert_v1alpha2_ActionInlineResource_To_v1alpha1_ActionInlineResource is an autogenerated conversion function.
func Convert_v1alpha2_ActionInlineResource_To_v1alpha1_ActionInlineResource(in *ActionInlineResource, out *v1alpha1.ActionInlineResource, s conversion.Scope) error {
return autoConvert_v1alpha2_ActionInlineResource_To_v1alpha1_ActionInlineResource(in, out, s)
}
func autoConvert_v1alpha1_ActionInlineResource_To_v1alpha2_ActionInlineResource(in *v1alpha1.ActionInlineResource, out *ActionInlineResource, s conversion.Scope) error {
out.Resource = (*unstructured.Unstructured)(unsafe.Pointer(in.Resource))
return nil
}
// Convert_v1alpha1_ActionInlineResource_To_v1alpha2_ActionInlineResource is an autogenerated conversion function.
func Convert_v1alpha1_ActionInlineResource_To_v1alpha2_ActionInlineResource(in *v1alpha1.ActionInlineResource, out *ActionInlineResource, s conversion.Scope) error {
return autoConvert_v1alpha1_ActionInlineResource_To_v1alpha2_ActionInlineResource(in, out, s)
}
func autoConvert_v1alpha2_ActionObject_To_v1alpha1_ActionObject(in *ActionObject, out *v1alpha1.ActionObject, s conversion.Scope) error {
out.ObjectType = in.ObjectType
if err := Convert_v1alpha2_ActionObjectSelector_To_v1alpha1_ActionObjectSelector(&in.ActionObjectSelector, &out.ActionObjectSelector, s); err != nil {
return err
}
return nil
}
// Convert_v1alpha2_ActionObject_To_v1alpha1_ActionObject is an autogenerated conversion function.
func Convert_v1alpha2_ActionObject_To_v1alpha1_ActionObject(in *ActionObject, out *v1alpha1.ActionObject, s conversion.Scope) error {
return autoConvert_v1alpha2_ActionObject_To_v1alpha1_ActionObject(in, out, s)
}
func autoConvert_v1alpha1_ActionObject_To_v1alpha2_ActionObject(in *v1alpha1.ActionObject, out *ActionObject, s conversion.Scope) error {
out.ObjectType = in.ObjectType
if err := Convert_v1alpha1_ActionObjectSelector_To_v1alpha2_ActionObjectSelector(&in.ActionObjectSelector, &out.ActionObjectSelector, s); err != nil {
return err
}
return nil
}
// Convert_v1alpha1_ActionObject_To_v1alpha2_ActionObject is an autogenerated conversion function.
func Convert_v1alpha1_ActionObject_To_v1alpha2_ActionObject(in *v1alpha1.ActionObject, out *ActionObject, s conversion.Scope) error {
return autoConvert_v1alpha1_ActionObject_To_v1alpha2_ActionObject(in, out, s)
}
func autoConvert_v1alpha2_ActionObjectSelector_To_v1alpha1_ActionObjectSelector(in *ActionObjectSelector, out *v1alpha1.ActionObjectSelector, s conversion.Scope) error {
out.ObjectName = in.ObjectName
out.Selector = in.Selector
return nil
}
// Convert_v1alpha2_ActionObjectSelector_To_v1alpha1_ActionObjectSelector is an autogenerated conversion function.
func Convert_v1alpha2_ActionObjectSelector_To_v1alpha1_ActionObjectSelector(in *ActionObjectSelector, out *v1alpha1.ActionObjectSelector, s conversion.Scope) error {
return autoConvert_v1alpha2_ActionObjectSelector_To_v1alpha1_ActionObjectSelector(in, out, s)
}
func autoConvert_v1alpha1_ActionObjectSelector_To_v1alpha2_ActionObjectSelector(in *v1alpha1.ActionObjectSelector, out *ActionObjectSelector, s conversion.Scope) error {
out.ObjectName = in.ObjectName
out.Selector = in.Selector
return nil
}
// Convert_v1alpha1_ActionObjectSelector_To_v1alpha2_ActionObjectSelector is an autogenerated conversion function.
func Convert_v1alpha1_ActionObjectSelector_To_v1alpha2_ActionObjectSelector(in *v1alpha1.ActionObjectSelector, out *ActionObjectSelector, s conversion.Scope) error {
return autoConvert_v1alpha1_ActionObjectSelector_To_v1alpha2_ActionObjectSelector(in, out, s)
}
func autoConvert_v1alpha2_ActionResourceRef_To_v1alpha1_ActionResourceRef(in *ActionResourceRef, out *v1alpha1.ActionResourceRef, s conversion.Scope) error {
if err := Convert_v1alpha2_FileRef_To_v1alpha1_FileRef(&in.FileRef, &out.FileRef, s); err != nil {
return err
}
out.Resource = (*unstructured.Unstructured)(unsafe.Pointer(in.Resource))
out.Template = (*bool)(unsafe.Pointer(in.Template))
return nil
}
// Convert_v1alpha2_ActionResourceRef_To_v1alpha1_ActionResourceRef is an autogenerated conversion function.
func Convert_v1alpha2_ActionResourceRef_To_v1alpha1_ActionResourceRef(in *ActionResourceRef, out *v1alpha1.ActionResourceRef, s conversion.Scope) error {
return autoConvert_v1alpha2_ActionResourceRef_To_v1alpha1_ActionResourceRef(in, out, s)
}
func autoConvert_v1alpha1_ActionResourceRef_To_v1alpha2_ActionResourceRef(in *v1alpha1.ActionResourceRef, out *ActionResourceRef, s conversion.Scope) error {
if err := Convert_v1alpha1_FileRef_To_v1alpha2_FileRef(&in.FileRef, &out.FileRef, s); err != nil {
return err
}
out.Resource = (*unstructured.Unstructured)(unsafe.Pointer(in.Resource))
out.Template = (*bool)(unsafe.Pointer(in.Template))
return nil
}
// Convert_v1alpha1_ActionResourceRef_To_v1alpha2_ActionResourceRef is an autogenerated conversion function.
func Convert_v1alpha1_ActionResourceRef_To_v1alpha2_ActionResourceRef(in *v1alpha1.ActionResourceRef, out *ActionResourceRef, s conversion.Scope) error {
return autoConvert_v1alpha1_ActionResourceRef_To_v1alpha2_ActionResourceRef(in, out, s)
}
func autoConvert_v1alpha2_ActionTimeout_To_v1alpha1_ActionTimeout(in *ActionTimeout, out *v1alpha1.ActionTimeout, s conversion.Scope) error {
out.Timeout = (*v1.Duration)(unsafe.Pointer(in.Timeout))
return nil
}
// Convert_v1alpha2_ActionTimeout_To_v1alpha1_ActionTimeout is an autogenerated conversion function.
func Convert_v1alpha2_ActionTimeout_To_v1alpha1_ActionTimeout(in *ActionTimeout, out *v1alpha1.ActionTimeout, s conversion.Scope) error {
return autoConvert_v1alpha2_ActionTimeout_To_v1alpha1_ActionTimeout(in, out, s)
}
func autoConvert_v1alpha1_ActionTimeout_To_v1alpha2_ActionTimeout(in *v1alpha1.ActionTimeout, out *ActionTimeout, s conversion.Scope) error {
out.Timeout = (*v1.Duration)(unsafe.Pointer(in.Timeout))
return nil
}
// Convert_v1alpha1_ActionTimeout_To_v1alpha2_ActionTimeout is an autogenerated conversion function.
func Convert_v1alpha1_ActionTimeout_To_v1alpha2_ActionTimeout(in *v1alpha1.ActionTimeout, out *ActionTimeout, s conversion.Scope) error {
return autoConvert_v1alpha1_ActionTimeout_To_v1alpha2_ActionTimeout(in, out, s)
}
func autoConvert_v1alpha2_Configuration_To_v1alpha1_Configuration(in *Configuration, out *v1alpha1.Configuration, s conversion.Scope) error {
out.ObjectMeta = in.ObjectMeta
if err := Convert_v1alpha2_ConfigurationSpec_To_v1alpha1_ConfigurationSpec(&in.Spec, &out.Spec, s); err != nil {
@ -82,3 +473,49 @@ func autoConvert_v1alpha1_Configuration_To_v1alpha2_Configuration(in *v1alpha1.C
func Convert_v1alpha1_Configuration_To_v1alpha2_Configuration(in *v1alpha1.Configuration, out *Configuration, s conversion.Scope) error {
return autoConvert_v1alpha1_Configuration_To_v1alpha2_Configuration(in, out, s)
}
func autoConvert_v1alpha2_FileRef_To_v1alpha1_FileRef(in *FileRef, out *v1alpha1.FileRef, s conversion.Scope) error {
out.File = in.File
return nil
}
// Convert_v1alpha2_FileRef_To_v1alpha1_FileRef is an autogenerated conversion function.
func Convert_v1alpha2_FileRef_To_v1alpha1_FileRef(in *FileRef, out *v1alpha1.FileRef, s conversion.Scope) error {
return autoConvert_v1alpha2_FileRef_To_v1alpha1_FileRef(in, out, s)
}
func autoConvert_v1alpha1_FileRef_To_v1alpha2_FileRef(in *v1alpha1.FileRef, out *FileRef, s conversion.Scope) error {
out.File = in.File
return nil
}
// Convert_v1alpha1_FileRef_To_v1alpha2_FileRef is an autogenerated conversion function.
func Convert_v1alpha1_FileRef_To_v1alpha2_FileRef(in *v1alpha1.FileRef, out *FileRef, s conversion.Scope) error {
return autoConvert_v1alpha1_FileRef_To_v1alpha2_FileRef(in, out, s)
}
func autoConvert_v1alpha2_Test_To_v1alpha1_Test(in *Test, out *v1alpha1.Test, s conversion.Scope) error {
out.ObjectMeta = in.ObjectMeta
if err := Convert_v1alpha2_TestSpec_To_v1alpha1_TestSpec(&in.Spec, &out.Spec, s); err != nil {
return err
}
return nil
}
// Convert_v1alpha2_Test_To_v1alpha1_Test is an autogenerated conversion function.
func Convert_v1alpha2_Test_To_v1alpha1_Test(in *Test, out *v1alpha1.Test, s conversion.Scope) error {
return autoConvert_v1alpha2_Test_To_v1alpha1_Test(in, out, s)
}
func autoConvert_v1alpha1_Test_To_v1alpha2_Test(in *v1alpha1.Test, out *Test, s conversion.Scope) error {
out.ObjectMeta = in.ObjectMeta
if err := Convert_v1alpha1_TestSpec_To_v1alpha2_TestSpec(&in.Spec, &out.Spec, s); err != nil {
return err
}
return nil
}
// Convert_v1alpha1_Test_To_v1alpha2_Test is an autogenerated conversion function.
func Convert_v1alpha1_Test_To_v1alpha2_Test(in *v1alpha1.Test, out *Test, s conversion.Scope) error {
return autoConvert_v1alpha1_Test_To_v1alpha2_Test(in, out, s)
}

File diff suppressed because it is too large Load Diff

View File

@ -59,6 +59,7 @@ func init() {
func addKnownTypes(scheme *runtime.Scheme) error {
scheme.AddKnownTypes(SchemeGroupVersion,
&Configuration{},
&Test{},
)
// AddToGroupVersion allows the serialization of client types like ListOptions.
v1.AddToGroupVersion(scheme, SchemeGroupVersion)

View File

@ -40,7 +40,7 @@ func Command() *cobra.Command {
Args: cobra.NoArgs,
SilenceUsage: true,
RunE: func(cmd *cobra.Command, _ []string) error {
tests, err := discovery.DiscoverTests(options.testFile, nil, options.testDirs...)
tests, err := discovery.DiscoverTests(options.testFile, nil, true, options.testDirs...)
if err != nil {
return err
}

View File

@ -97,11 +97,11 @@ wait
{{- with .Spec.Steps }}
| # | Name | Bindings | Try | Catch | Finally |
| # | Name | Bindings | Try | Catch | Finally | Cleanup |
|:-:|---|:-:|:-:|:-:|:-:|
{{- range $i, $step := . }}
{{- $name := default (print "step-" (add $i 1)) $step.Name }}
| {{ add $i 1 }} | [{{ $name }}](#step-{{ $name }}) | {{ len $step.Bindings }} | {{ len $step.Try }} | {{ add (len $step.Catch) (len $test.Spec.Catch) }} | {{ len $step.Finally }} |
| {{ add $i 1 }} | [{{ $name }}](#step-{{ $name }}) | {{ len $step.Bindings }} | {{ len $step.Try }} | {{ add (len $step.Catch) (len $test.Spec.Catch) }} | {{ len $step.Finally }} | {{ len $step.Cleanup }} |
{{- end }}
{{- end }}
@ -160,6 +160,17 @@ wait
{{- end }}
{{- end }}
{{- with $step.Cleanup }}
#### Cleanup
| # | Operation | Bindings | Outputs | Description |
|:-:|---|:-:|:-:|---|
{{- range $i, $op := . }}
| {{ add $i 1 }} | `{{ template "FinallyType" $op }}` | {{ len $op.Bindings }} | {{ len $op.Outputs }} | {{ default "*No description*" $op.Description }} |
{{- end }}
{{- end }}
{{- end }}
---

View File

@ -48,7 +48,7 @@ func Command() *cobra.Command {
if save {
path := filepath.Join(path, "chainsaw-test.yaml")
fmt.Fprintf(out, "Saving file %s ...\n", path)
if err := os.WriteFile(path, data, os.ModePerm); err != nil {
if err := os.WriteFile(path, data, 0o600); err != nil {
return err
}
} else {
@ -70,67 +70,79 @@ func sampleSteps(description bool) []v1alpha1.TestStep {
TestStepSpec: v1alpha1.TestStepSpec{
Description: getDescription(description, "sample step 1"),
Try: []v1alpha1.Operation{{
Description: getDescription(description, "sample apply operation"),
OperationBase: v1alpha1.OperationBase{
Description: getDescription(description, "sample apply operation"),
},
Apply: &v1alpha1.Apply{
FileRefOrResource: v1alpha1.FileRefOrResource{
ActionResourceRef: v1alpha1.ActionResourceRef{
FileRef: v1alpha1.FileRef{
File: "resources.yaml",
},
},
},
}, {
Description: getDescription(description, "sample assert operation"),
OperationBase: v1alpha1.OperationBase{
Description: getDescription(description, "sample assert operation"),
},
Assert: &v1alpha1.Assert{
FileRefOrCheck: v1alpha1.FileRefOrCheck{
ActionCheckRef: v1alpha1.ActionCheckRef{
FileRef: v1alpha1.FileRef{
File: "assert.yaml",
},
},
},
}, {
Description: getDescription(description, "sample error operation"),
OperationBase: v1alpha1.OperationBase{
Description: getDescription(description, "sample error operation"),
},
Error: &v1alpha1.Error{
FileRefOrCheck: v1alpha1.FileRefOrCheck{
ActionCheckRef: v1alpha1.ActionCheckRef{
FileRef: v1alpha1.FileRef{
File: "error.yaml",
},
},
},
}, {
Description: getDescription(description, "sample delete operation"),
OperationBase: v1alpha1.OperationBase{
Description: getDescription(description, "sample delete operation"),
},
Delete: &v1alpha1.Delete{
ObjectReference: v1alpha1.ObjectReference{
ObjectSelector: v1alpha1.ObjectSelector{
Name: "foo",
},
Ref: &v1alpha1.ObjectReference{
ObjectType: v1alpha1.ObjectType{
APIVersion: "v1",
Kind: "Pod",
},
ObjectName: v1alpha1.ObjectName{
Name: "foo",
},
},
},
}, {
Description: getDescription(description, "sample script operation"),
OperationBase: v1alpha1.OperationBase{
Description: getDescription(description, "sample script operation"),
},
Script: &v1alpha1.Script{
Content: `echo "test namespace = $NAMESPACE"`,
},
}},
Catch: []v1alpha1.Catch{{
Catch: []v1alpha1.CatchFinally{{
Description: getDescription(description, "sample events collector"),
Events: &v1alpha1.Events{
ObjectLabelsSelector: v1alpha1.ObjectLabelsSelector{
Name: "foo",
ActionObjectSelector: v1alpha1.ActionObjectSelector{
ObjectName: v1alpha1.ObjectName{
Name: "foo",
},
},
},
}, {
Description: getDescription(description, "sample pod logs collector"),
PodLogs: &v1alpha1.PodLogs{
ObjectLabelsSelector: v1alpha1.ObjectLabelsSelector{
ActionObjectSelector: v1alpha1.ActionObjectSelector{
Selector: "app=foo",
},
},
}},
Finally: []v1alpha1.Finally{{
Finally: []v1alpha1.CatchFinally{{
Description: getDescription(description, "sample sleep operation"),
Sleep: &v1alpha1.Sleep{
Duration: metav1.Duration{Duration: 5 * time.Second},

View File

@ -37,7 +37,7 @@ func Command() *cobra.Command {
if err != nil {
return err
}
if err := os.WriteFile(filepath.Join(outPath, entry.Name()), input, os.ModePerm); err != nil {
if err := os.WriteFile(filepath.Join(outPath, entry.Name()), input, 0o600); err != nil {
return err
}
}

View File

@ -155,7 +155,7 @@ func processStep(stderr io.Writer, step *v1alpha1.TestStep, s discovery.Step, fo
if !containsKuttlResources {
step.TestStepSpec.Try = append(step.TestStepSpec.Try, v1alpha1.Operation{
Apply: &v1alpha1.Apply{
FileRefOrResource: v1alpha1.FileRefOrResource{
ActionResourceRef: v1alpha1.ActionResourceRef{
FileRef: v1alpha1.FileRef{
File: file,
},
@ -197,7 +197,7 @@ func processStep(stderr io.Writer, step *v1alpha1.TestStep, s discovery.Step, fo
}
step.TestStepSpec.Try = append(step.TestStepSpec.Try, v1alpha1.Operation{
Apply: &v1alpha1.Apply{
FileRefOrResource: v1alpha1.FileRefOrResource{
ActionResourceRef: v1alpha1.ActionResourceRef{
FileRef: v1alpha1.FileRef{
File: file,
},
@ -222,7 +222,7 @@ func processStep(stderr io.Writer, step *v1alpha1.TestStep, s discovery.Step, fo
if !containsKuttlResources {
step.TestStepSpec.Try = append(step.TestStepSpec.Try, v1alpha1.Operation{
Assert: &v1alpha1.Assert{
FileRefOrCheck: v1alpha1.FileRefOrCheck{
ActionCheckRef: v1alpha1.ActionCheckRef{
FileRef: v1alpha1.FileRef{
File: file,
},
@ -258,7 +258,7 @@ func processStep(stderr io.Writer, step *v1alpha1.TestStep, s discovery.Step, fo
}
step.TestStepSpec.Try = append(step.TestStepSpec.Try, v1alpha1.Operation{
Assert: &v1alpha1.Assert{
FileRefOrCheck: v1alpha1.FileRefOrCheck{
ActionCheckRef: v1alpha1.ActionCheckRef{
FileRef: v1alpha1.FileRef{
File: file,
},
@ -283,7 +283,7 @@ func processStep(stderr io.Writer, step *v1alpha1.TestStep, s discovery.Step, fo
if !containsKuttlResources {
step.TestStepSpec.Try = append(step.TestStepSpec.Try, v1alpha1.Operation{
Error: &v1alpha1.Error{
FileRefOrCheck: v1alpha1.FileRefOrCheck{
ActionCheckRef: v1alpha1.ActionCheckRef{
FileRef: v1alpha1.FileRef{
File: file,
},
@ -319,7 +319,7 @@ func processStep(stderr io.Writer, step *v1alpha1.TestStep, s discovery.Step, fo
}
step.TestStepSpec.Try = append(step.TestStepSpec.Try, v1alpha1.Operation{
Error: &v1alpha1.Error{
FileRefOrCheck: v1alpha1.FileRefOrCheck{
ActionCheckRef: v1alpha1.ActionCheckRef{
FileRef: v1alpha1.FileRef{
File: file,
},
@ -392,9 +392,9 @@ func testStep(to *v1alpha1.TestStepSpec, in unstructured.Unstructured) error {
if operation.Script != "" {
operations = append(operations, v1alpha1.Operation{
Script: &v1alpha1.Script{
Timeout: timeout,
ActionTimeout: v1alpha1.ActionTimeout{Timeout: timeout},
Content: operation.Script,
SkipLogOutput: operation.SkipLogOutput,
ActionEnv: v1alpha1.ActionEnv{SkipLogOutput: operation.SkipLogOutput},
},
})
} else if operation.Command != "" {
@ -409,10 +409,10 @@ func testStep(to *v1alpha1.TestStepSpec, in unstructured.Unstructured) error {
}
operations = append(operations, v1alpha1.Operation{
Command: &v1alpha1.Command{
Timeout: timeout,
ActionTimeout: v1alpha1.ActionTimeout{Timeout: timeout},
Entrypoint: entrypoint,
Args: args,
SkipLogOutput: operation.SkipLogOutput,
ActionEnv: v1alpha1.ActionEnv{SkipLogOutput: operation.SkipLogOutput},
},
})
}
@ -420,7 +420,7 @@ func testStep(to *v1alpha1.TestStepSpec, in unstructured.Unstructured) error {
for _, operation := range from.Apply {
operations = append(operations, v1alpha1.Operation{
Apply: &v1alpha1.Apply{
FileRefOrResource: v1alpha1.FileRefOrResource{
ActionResourceRef: v1alpha1.ActionResourceRef{
FileRef: v1alpha1.FileRef{
File: operation,
},
@ -431,7 +431,7 @@ func testStep(to *v1alpha1.TestStepSpec, in unstructured.Unstructured) error {
for _, operation := range from.Assert {
operations = append(operations, v1alpha1.Operation{
Assert: &v1alpha1.Assert{
FileRefOrCheck: v1alpha1.FileRefOrCheck{
ActionCheckRef: v1alpha1.ActionCheckRef{
FileRef: v1alpha1.FileRef{
File: operation,
},
@ -442,7 +442,7 @@ func testStep(to *v1alpha1.TestStepSpec, in unstructured.Unstructured) error {
for _, operation := range from.Error {
operations = append(operations, v1alpha1.Operation{
Error: &v1alpha1.Error{
FileRefOrCheck: v1alpha1.FileRefOrCheck{
ActionCheckRef: v1alpha1.ActionCheckRef{
FileRef: v1alpha1.FileRef{
File: operation,
},
@ -453,16 +453,16 @@ func testStep(to *v1alpha1.TestStepSpec, in unstructured.Unstructured) error {
for _, operation := range from.Delete {
operations = append(operations, v1alpha1.Operation{
Delete: &v1alpha1.Delete{
ObjectReference: v1alpha1.ObjectReference{
Ref: &v1alpha1.ObjectReference{
ObjectType: v1alpha1.ObjectType{
APIVersion: operation.APIVersion,
Kind: operation.Kind,
},
ObjectSelector: v1alpha1.ObjectSelector{
ObjectName: v1alpha1.ObjectName{
Namespace: operation.Namespace,
Name: operation.Name,
Labels: operation.Labels,
},
Labels: operation.Labels,
},
},
})
@ -481,15 +481,15 @@ func testAssert(to *v1alpha1.TestStepSpec, in unstructured.Unstructured) error {
if cmd.Script != "" {
to.Try = append(to.Try, v1alpha1.Operation{
Script: &v1alpha1.Script{
Content: cmd.Script,
SkipLogOutput: cmd.SkipLogOutput,
Content: cmd.Script,
ActionEnv: v1alpha1.ActionEnv{SkipLogOutput: cmd.SkipLogOutput},
},
})
} else if cmd.Command != "" {
to.Try = append(to.Try, v1alpha1.Operation{
Script: &v1alpha1.Script{
Content: cmd.Command,
SkipLogOutput: cmd.SkipLogOutput,
Content: cmd.Command,
ActionEnv: v1alpha1.ActionEnv{SkipLogOutput: cmd.SkipLogOutput},
},
})
}
@ -504,33 +504,37 @@ func testAssert(to *v1alpha1.TestStepSpec, in unstructured.Unstructured) error {
switch collector.Type {
case "pod":
op := &v1alpha1.PodLogs{
ObjectLabelsSelector: v1alpha1.ObjectLabelsSelector{
Name: collector.Pod,
Namespace: collector.Namespace,
Selector: collector.Selector,
ActionObjectSelector: v1alpha1.ActionObjectSelector{
ObjectName: v1alpha1.ObjectName{
Name: collector.Pod,
Namespace: collector.Namespace,
},
Selector: collector.Selector,
},
Container: collector.Container,
}
if collector.Tail != 0 {
op.Tail = ptr.To(collector.Tail)
}
to.Catch = append(to.Catch, v1alpha1.Catch{PodLogs: op})
to.Catch = append(to.Catch, v1alpha1.CatchFinally{PodLogs: op})
case "command":
if collector.Cmd == "" {
return fmt.Errorf("cmd must be set when tyme is command")
}
to.Catch = append(to.Catch, v1alpha1.Catch{
to.Catch = append(to.Catch, v1alpha1.CatchFinally{
Script: &v1alpha1.Script{
Content: collector.Cmd,
},
})
case "events":
to.Catch = append(to.Catch, v1alpha1.Catch{
to.Catch = append(to.Catch, v1alpha1.CatchFinally{
Events: &v1alpha1.Events{
ObjectLabelsSelector: v1alpha1.ObjectLabelsSelector{
Name: collector.Pod,
Namespace: collector.Namespace,
Selector: collector.Selector,
ActionObjectSelector: v1alpha1.ActionObjectSelector{
ObjectName: v1alpha1.ObjectName{
Name: collector.Pod,
Namespace: collector.Namespace,
},
Selector: collector.Selector,
},
},
})

Some files were not shown because too many files have changed in this diff Show More