mirror of
https://github.com/projectcapsule/capsule.git
synced 2026-08-25 16:07:24 +00:00
* fix(controller): decode old object for delete requests Signed-off-by: Oliver Bähler <oliverbaehler@hotmail.com> Signed-off-by: Oliver Baehler <oliver@sudo-i.net> * chore: modernize golang Signed-off-by: Oliver Bähler <oliverbaehler@hotmail.com> Signed-off-by: Oliver Baehler <oliver@sudo-i.net> * chore: modernize golang Signed-off-by: Oliver Bähler <oliverbaehler@hotmail.com> Signed-off-by: Oliver Baehler <oliver@sudo-i.net> * chore: modernize golang Signed-off-by: Oliver Bähler <oliverbaehler@hotmail.com> Signed-off-by: Oliver Baehler <oliver@sudo-i.net> * chore(deps): update codecov/codecov-action action to v5.5.2 (#1783) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Signed-off-by: Oliver Baehler <oliver@sudo-i.net> * chore(deps): update anchore/sbom-action digest to 43a17d6 (#1781) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Signed-off-by: Oliver Baehler <oliver@sudo-i.net> * fix(deps): update module k8s.io/dynamic-resource-allocation to v0.34.3 (#1786) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Signed-off-by: Oliver Baehler <oliver@sudo-i.net> * fix(deps): update module k8s.io/apiextensions-apiserver to v0.34.3 (#1785) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Signed-off-by: Oliver Baehler <oliver@sudo-i.net> * fix(controller): allow no spaces in template references (#1789) * fix(controller): decode old object for delete requests Signed-off-by: Oliver Bähler <oliverbaehler@hotmail.com> * chore: modernize golang Signed-off-by: Oliver Bähler <oliverbaehler@hotmail.com> * chore: modernize golang Signed-off-by: Oliver Bähler <oliverbaehler@hotmail.com> * chore: modernize golang Signed-off-by: Oliver Bähler <oliverbaehler@hotmail.com> * fix(controller): allow no spaces in template references Signed-off-by: Oliver Bähler <oliverbaehler@hotmail.com> * fix(controller): allow no spaces in template references Signed-off-by: Oliver Bähler <oliverbaehler@hotmail.com> --------- Signed-off-by: Oliver Bähler <oliverbaehler@hotmail.com> Signed-off-by: Oliver Baehler <oliver@sudo-i.net> * chore(deps): update securego/gosec action to v2.22.11 (#1788) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Signed-off-by: Oliver Baehler <oliver@sudo-i.net> * chore(deps): update all-ci-updates (#1791) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Signed-off-by: Oliver Baehler <oliver@sudo-i.net> * fix(deps): update k8s.io/utils digest to 61b37f7 (#1801) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Signed-off-by: Oliver Baehler <oliver@sudo-i.net> * fix(controller): template concurrency (#1802) Signed-off-by: Oliver Bähler <oliverbaehler@hotmail.com> Signed-off-by: Oliver Baehler <oliver@sudo-i.net> * chore(deps): update all-ci-updates (#1795) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Signed-off-by: Oliver Baehler <oliver@sudo-i.net> * chore(deps): update dependency kubernetes-sigs/kind to v0.31.0 (#1796) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Signed-off-by: Oliver Baehler <oliver@sudo-i.net> * fix(deps): update kubernetes packages to v0.35.0 (#1797) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Signed-off-by: Oliver Baehler <oliver@sudo-i.net> * fix(deps): update module k8s.io/dynamic-resource-allocation to v0.35.0 (#1798) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Signed-off-by: Oliver Baehler <oliver@sudo-i.net> * chore(deps): update dependency kubernetes-sigs/controller-tools to v0.20.0 (#1799) * chore(deps): update dependency kubernetes-sigs/controller-tools to v0.20.0 * chore(deps): update dependency kubernetes-sigs/controller-tools to v0.20.0 Signed-off-by: Hristo Hristov <me@hhristov.info> --------- Signed-off-by: Hristo Hristov <me@hhristov.info> Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Co-authored-by: Hristo Hristov <me@hhristov.info> Signed-off-by: Oliver Baehler <oliver@sudo-i.net> * fix(deps): update k8s.io/utils digest to 98d557b (#1803) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Signed-off-by: Oliver Baehler <oliver@sudo-i.net> * chore(deps): update all-ci-updates (#1793) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Signed-off-by: Oliver Baehler <oliver@sudo-i.net> * fix(deps): update module github.com/onsi/ginkgo/v2 to v2.27.3 (#1776) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Signed-off-by: Oliver Baehler <oliver@sudo-i.net> * chore(deps): update github/codeql-action digest to f67ec12 (#1790) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Signed-off-by: Oliver Baehler <oliver@sudo-i.net> * chore(deps): update dependency google/ko to v0.18.1 (#1792) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Signed-off-by: Oliver Baehler <oliver@sudo-i.net> * fix(deps): update module github.com/onsi/gomega to v1.38.3 (#1777) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Signed-off-by: Oliver Baehler <oliver@sudo-i.net> * fix(deps): update module sigs.k8s.io/cluster-api to v1.12.1 (#1784) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Signed-off-by: Oliver Baehler <oliver@sudo-i.net> * fix(deps): update k8s.io/utils digest to 383b50a (#1804) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Signed-off-by: Oliver Baehler <oliver@sudo-i.net> * chore(deps): update actions/stale digest to a21a081 (#1808) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Signed-off-by: Oliver Baehler <oliver@sudo-i.net> * chore: adjust makefile and releaser for kubernetes 1.35 (#1809) * chore: adjust makefile and releaser for kubernetes 1.35 Signed-off-by: Hristo Hristov <me@hhristov.info> * chore: adjust makefile and releaser for kubernetes 1.35 Signed-off-by: Hristo Hristov <me@hhristov.info> --------- Signed-off-by: Hristo Hristov <me@hhristov.info> Signed-off-by: Oliver Baehler <oliver@sudo-i.net> * chore(deps): update all-ci-updates (#1807) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Signed-off-by: Oliver Baehler <oliver@sudo-i.net> * fix(deps): update k8s.io/utils digest to 718f0e5 (#1806) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Signed-off-by: Oliver Baehler <oliver@sudo-i.net> * chore(deps): update anchore/sbom-action digest to a930d0a (#1805) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Signed-off-by: Oliver Baehler <oliver@sudo-i.net> * chore(deps): update helm release kube-prometheus-stack to v80.8.2 (#1810) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Signed-off-by: Oliver Baehler <oliver@sudo-i.net> * feat: add dynamic capsule user evaluation (#1811) * chore: improve dev targets Signed-off-by: Oliver Bähler <oliverbaehler@hotmail.com> * feat(controller): implement deterministic rolebinding reflection Signed-off-by: Oliver Bähler <oliverbaehler@hotmail.com> * feat(controller): capsule users are determined from configuration status Signed-off-by: Oliver Bähler <oliverbaehler@hotmail.com> * feat(tenantowners): added agreggate option - tenantowners are always considered capsule users Signed-off-by: Oliver Bähler <oliverbaehler@hotmail.com> * feat(tenantowner): add implicit aggregation for tenants Signed-off-by: Oliver Bähler <oliverbaehler@hotmail.com> * chore: remove helm flags Signed-off-by: Oliver Bähler <oliverbaehler@hotmail.com> * fix(config): remove usergroups default Signed-off-by: Oliver Bähler <oliverbaehler@hotmail.com> --------- Signed-off-by: Oliver Bähler <oliverbaehler@hotmail.com> Signed-off-by: Oliver Baehler <oliver@sudo-i.net> * chore(deps): update helm release kube-prometheus-stack to v80.9.2 (#1812) Signed-off-by: Oliver Baehler <oliver@sudo-i.net> * chore(deps): update all-ci-updates (#1814) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Signed-off-by: Oliver Baehler <oliver@sudo-i.net> * chore(deps): update amannn/action-semantic-pull-request digest to 71b07ef (#1815) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Signed-off-by: Oliver Baehler <oliver@sudo-i.net> * chore(deps): update github/codeql-action digest to fd448f7 (#1816) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Signed-off-by: Oliver Baehler <oliver@sudo-i.net> * feat: use cert-manager certificates by default (#1818) * fix(controller): decode old object for delete requests Signed-off-by: Oliver Bähler <oliverbaehler@hotmail.com> * chore: modernize golang Signed-off-by: Oliver Bähler <oliverbaehler@hotmail.com> * chore: modernize golang Signed-off-by: Oliver Bähler <oliverbaehler@hotmail.com> * chore: modernize golang Signed-off-by: Oliver Bähler <oliverbaehler@hotmail.com> * feat(helm): use cert-manager certificates by default Signed-off-by: Oliver Bähler <oliverbaehler@hotmail.com> * chore: move dependencies to trackable resources Signed-off-by: Oliver Bähler <oliverbaehler@hotmail.com> * chore: move dependencies to trackable resources Signed-off-by: Oliver Bähler <oliverbaehler@hotmail.com> * chore: move dependencies to trackable resources Signed-off-by: Oliver Bähler <oliverbaehler@hotmail.com> * chore: move dependencies to trackable resources Signed-off-by: Oliver Bähler <oliverbaehler@hotmail.com> * chore: move dependencies to trackable resources Signed-off-by: Oliver Bähler <oliverbaehler@hotmail.com> * chore: move dependencies to trackable resources Signed-off-by: Oliver Bähler <oliverbaehler@hotmail.com> --------- Signed-off-by: Oliver Bähler <oliverbaehler@hotmail.com> Signed-off-by: Oliver Baehler <oliver@sudo-i.net> * chore(deps): update helm release kube-prometheus-stack to v80.13.2 (#1817) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Signed-off-by: Oliver Baehler <oliver@sudo-i.net> * chore(deps): update dependency prometheus-operator/prometheus-operator to v0.87.1 (#1820) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Signed-off-by: Oliver Baehler <oliver@sudo-i.net> * chore(deps): update dependency golangci/golangci-lint to v2.8.0 (#1823) * chore(deps): update dependency golangci/golangci-lint to v2.8.0 * chore(deps): update dependency golangci/golangci-lint to v2.8.0 Signed-off-by: Hristo Hristov <me@hhristov.info> * chore(deps): update dependency golangci/golangci-lint to v2.8.0 Signed-off-by: Hristo Hristov <me@hhristov.info> * chore(deps): update dependency golangci/golangci-lint to v2.8.0 Signed-off-by: Hristo Hristov <me@hhristov.info> --------- Signed-off-by: Hristo Hristov <me@hhristov.info> Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Co-authored-by: Hristo Hristov <me@hhristov.info> Signed-off-by: Oliver Baehler <oliver@sudo-i.net> * chore(deps): update helm release kube-prometheus-stack to v80.13.3 (#1827) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Signed-off-by: Oliver Baehler <oliver@sudo-i.net> * fix(deps): update module github.com/onsi/gomega to v1.39.0 (#1826) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Signed-off-by: Oliver Baehler <oliver@sudo-i.net> * chore(deps): update dependency prometheus-operator/prometheus-operator to v0.88.0 (#1828) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Signed-off-by: Oliver Baehler <oliver@sudo-i.net> * fix(deps): update module github.com/onsi/ginkgo/v2 to v2.27.4 (#1825) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Signed-off-by: Oliver Baehler <oliver@sudo-i.net> * chore(deps): update anchore/sbom-action digest to 0b82b0b (#1824) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Signed-off-by: Oliver Baehler <oliver@sudo-i.net> * fix(deps): update k8s.io/utils digest to 914a6e7 (#1822) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Signed-off-by: Oliver Baehler <oliver@sudo-i.net> * chore(deps): update all-ci-updates (#1830) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Signed-off-by: Oliver Baehler <oliver@sudo-i.net> * chore(deps): update actions/stale digest to d6f8a33 (#1843) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Signed-off-by: Oliver Baehler <oliver@sudo-i.net> * chore(deps): update amannn/action-semantic-pull-request digest to b439535 (#1835) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Signed-off-by: Oliver Baehler <oliver@sudo-i.net> * chore(deps): update actions/checkout action to v6.0.2 (#1845) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Signed-off-by: Oliver Baehler <oliver@sudo-i.net> * chore(deps): update all-ci-updates (#1847) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Signed-off-by: Oliver Baehler <oliver@sudo-i.net> * chore(deps): update all-ci-updates (#1848) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Signed-off-by: Oliver Baehler <oliver@sudo-i.net> * feat: add ruleset api(#1844) * fix(controller): decode old object for delete requests Signed-off-by: Oliver Bähler <oliverbaehler@hotmail.com> * chore: modernize golang Signed-off-by: Oliver Bähler <oliverbaehler@hotmail.com> * chore: modernize golang Signed-off-by: Oliver Bähler <oliverbaehler@hotmail.com> * chore: modernize golang Signed-off-by: Oliver Bähler <oliverbaehler@hotmail.com> * fix(config): remove usergroups default Signed-off-by: Oliver Bähler <oliverbaehler@hotmail.com> * fix(config): remove usergroups default Signed-off-by: Oliver Bähler <oliverbaehler@hotmail.com> * sec(ghsa-2ww6-hf35-mfjm): intercept namespace subresource Signed-off-by: Oliver Bähler <oliverbaehler@hotmail.com> * feat(api): add rulestatus api Signed-off-by: Oliver Bähler <oliverbaehler@hotmail.com> * chore: conflicts Signed-off-by: Oliver Bähler <oliverbaehler@hotmail.com> * chore: conflicts Signed-off-by: Oliver Bähler <oliverbaehler@hotmail.com> * chore: conflicts Signed-off-by: Oliver Bähler <oliverbaehler@hotmail.com> * chore: conflicts Signed-off-by: Oliver Bähler <oliverbaehler@hotmail.com> * chore: conflicts Signed-off-by: Oliver Bähler <oliverbaehler@hotmail.com> * chore: conflicts Signed-off-by: Oliver Bähler <oliverbaehler@hotmail.com> * chore: conflicts Signed-off-by: Oliver Bähler <oliverbaehler@hotmail.com> * chore: conflicts Signed-off-by: Oliver Bähler <oliverbaehler@hotmail.com> * chore: conflicts Signed-off-by: Oliver Bähler <oliverbaehler@hotmail.com> * chore: conflicts Signed-off-by: Oliver Bähler <oliverbaehler@hotmail.com> * chore: conflicts Signed-off-by: Oliver Bähler <oliverbaehler@hotmail.com> * feat(api): add rulestatus api Signed-off-by: Oliver Bähler <oliverbaehler@hotmail.com> * feat(api): add rulestatus api Signed-off-by: Oliver Bähler <oliverbaehler@hotmail.com> * feat(api): add rulestatus api Signed-off-by: Oliver Bähler <oliverbaehler@hotmail.com> * feat(api): add rulestatus api Signed-off-by: Oliver Bähler <oliverbaehler@hotmail.com> * feat(api): add rulestatus api Signed-off-by: Oliver Bähler <oliverbaehler@hotmail.com> * feat(api): add rulestatus api Signed-off-by: Oliver Bähler <oliverbaehler@hotmail.com> --------- Signed-off-by: Oliver Bähler <oliverbaehler@hotmail.com> Signed-off-by: Oliver Baehler <oliver@sudo-i.net> * chore(deps): update dependency alessandrojcm/commitlint-pre-commit-hook to v9.24.0 (#1833) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Signed-off-by: Oliver Baehler <oliver@sudo-i.net> * chore(deps): update anchore/sbom-action digest to deef08a (#1836) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Signed-off-by: Oliver Baehler <oliver@sudo-i.net> * chore(deps): update dependency adrienverge/yamllint to v1.38.0 (#1832) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Signed-off-by: Oliver Baehler <oliver@sudo-i.net> * chore(deps): update github/codeql-action digest to b2ff80d (#1821) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Signed-off-by: Oliver Baehler <oliver@sudo-i.net> * chore(deps): update github/codeql-action digest to f985be5 (#1850) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Signed-off-by: Oliver Baehler <oliver@sudo-i.net> * chore(deps): update anchore/sbom-action digest to 5620efe (#1852) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Signed-off-by: Oliver Baehler <oliver@sudo-i.net> * chore(deps): update all-ci-updates (#1851) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Signed-off-by: Oliver Baehler <oliver@sudo-i.net> * chore(deps): update all-ci-updates (#1837) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Signed-off-by: Oliver Baehler <oliver@sudo-i.net> * chore(deps): update all-ci-updates (#1856) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Signed-off-by: Oliver Baehler <oliver@sudo-i.net> * chore(deps): update github/codeql-action digest to 8aac4e4 (#1855) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Signed-off-by: Oliver Baehler <oliver@sudo-i.net> * feat: diverse performance improvements (#1861) Signed-off-by: Oliver Bähler <oliverbaehler@hotmail.com> Signed-off-by: Oliver Baehler <oliver@sudo-i.net> * chore(deps): update actions/stale digest to dcd2b94 (#1857) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Signed-off-by: Oliver Baehler <oliver@sudo-i.net> * fix(docs): update home in chart.yaml (#1864) * fix(docs): update home in chart.yaml Signed-off-by: sandert-k8s <sandert98@gmail.com> * fix: linter Signed-off-by: sandert-k8s <sandert98@gmail.com> --------- Signed-off-by: sandert-k8s <sandert98@gmail.com> Signed-off-by: Oliver Baehler <oliver@sudo-i.net> * chore(deps): update actions/stale digest to b5d41d4 (#1866) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Signed-off-by: Oliver Baehler <oliver@sudo-i.net> * chore(deps): update zgosalvez/github-actions-ensure-sha-pinned-actions action to v5 (#1865) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Signed-off-by: Oliver Baehler <oliver@sudo-i.net> * chore(deps): update amannn/action-semantic-pull-request digest to ac7e3fc (#1871) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Signed-off-by: Oliver Baehler <oliver@sudo-i.net> * chore(deps): update anchore/sbom-action digest to 6d473d3 (#1860) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Signed-off-by: Oliver Baehler <oliver@sudo-i.net> * chore(deps): update anchore/sbom-action digest to 17ae174 (#1876) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Signed-off-by: Oliver Baehler <oliver@sudo-i.net> * chore(deps): update github/codeql-action digest to 0ec47d0 (#1858) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Signed-off-by: Oliver Baehler <oliver@sudo-i.net> * chore(deps): update anchore/sbom-action digest to 57aae52 (#1882) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Signed-off-by: Oliver Baehler <oliver@sudo-i.net> * chore(deps): update actions/stale digest to db5d06a (#1886) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Signed-off-by: Oliver Baehler <oliver@sudo-i.net> * chore(deps): update anchore/sbom-action digest to a0a6512 (#1887) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Signed-off-by: Oliver Baehler <oliver@sudo-i.net> * chore(deps): update anchore/sbom-action digest to e22c389 (#1888) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Signed-off-by: Oliver Baehler <oliver@sudo-i.net> * chore(deps): update anchore/sbom-action digest to f0d33c1 (#1893) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Signed-off-by: Oliver Baehler <oliver@sudo-i.net> * chore(workflows): bump trivy action to 0.35.0 (#1896) Signed-off-by: Hristo Hristov <me@hhristov.info> Signed-off-by: Oliver Baehler <oliver@sudo-i.net> * fix(webhook): adapt to controller-runtime breaking change in newwebhookmanagedby (#1898) Signed-off-by: Hristo Hristov <me@hhristov.info> Signed-off-by: Oliver Baehler <oliver@sudo-i.net> * feat: add e2e openshift support (#1894) * feat: add e2e openshift support Signed-off-by: Hristo Hristov <me@hhristov.info> * feat: add e2e openshift support Signed-off-by: Hristo Hristov <me@hhristov.info> * feat: add e2e openshift support Signed-off-by: Hristo Hristov <me@hhristov.info> * feat: add e2e openshift support Signed-off-by: Hristo Hristov <me@hhristov.info> * feat: add e2e openshift support Signed-off-by: Hristo Hristov <me@hhristov.info> * feat: add e2e openshift support Signed-off-by: Hristo Hristov <me@hhristov.info> * feat: add e2e openshift support Signed-off-by: Hristo Hristov <me@hhristov.info> * feat: add e2e openshift support Signed-off-by: Hristo Hristov <me@hhristov.info> * feat: add e2e openshift support Signed-off-by: Hristo Hristov <me@hhristov.info> * feat: add e2e openshift support Signed-off-by: Hristo Hristov <me@hhristov.info> * feat: add e2e openshift support Signed-off-by: Hristo Hristov <me@hhristov.info> * feat: add e2e openshift support Signed-off-by: Hristo Hristov <me@hhristov.info> * feat: add e2e openshift support Signed-off-by: Hristo Hristov <me@hhristov.info> * feat: add e2e openshift support Signed-off-by: Hristo Hristov <me@hhristov.info> * feat: add e2e openshift support Signed-off-by: Hristo Hristov <me@hhristov.info> --------- Signed-off-by: Hristo Hristov <me@hhristov.info> Signed-off-by: Oliver Baehler <oliver@sudo-i.net> * chore(deps): update all-ci-updates (#1873) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Signed-off-by: Oliver Baehler <oliver@sudo-i.net> * chore(deps): update all-ci-updates (#1859) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Signed-off-by: Oliver Baehler <oliver@sudo-i.net> * chore(deps): update dependency alessandrojcm/commitlint-pre-commit-hook to v9.25.0 (#1907) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Signed-off-by: Oliver Baehler <oliver@sudo-i.net> * chore(deps): set renovate minimum release age to 14 days (#1908) Signed-off-by: Hristo Hristov <me@hhristov.info> Signed-off-by: Oliver Baehler <oliver@sudo-i.net> * chore: add lfx status badges (#1909) Signed-off-by: Hristo Hristov <me@hhristov.info> Signed-off-by: Oliver Baehler <oliver@sudo-i.net> * ci: pin slsa provenance workflow (#1903) Signed-off-by: Akash Kumar <meakash7902@gmail.com> Signed-off-by: Oliver Baehler <oliver@sudo-i.net> * chore(deps): update dependency b1nary-gr0up/nwa to v0.7.8 (#1906) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Signed-off-by: Oliver Baehler <oliver@sudo-i.net> * chore(deps): update all-ci-updates (#1900) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Signed-off-by: Oliver Baehler <oliver@sudo-i.net> * feat: upstream enterprise preview (#1841) feat: upstream enterprise preview --------- Signed-off-by: Oliver Baehler <oliver@sudo-i.net> Co-authored-by: CorentinPtrl <pitrel.corentin@gmail.com> Signed-off-by: Oliver Baehler <oliver@sudo-i.net> * chore: bump supported version (#1918) * fix(controller): decode old object for delete requests Signed-off-by: Oliver Bähler <oliverbaehler@hotmail.com> * chore: modernize golang Signed-off-by: Oliver Bähler <oliverbaehler@hotmail.com> * chore: modernize golang Signed-off-by: Oliver Bähler <oliverbaehler@hotmail.com> * chore: modernize golang Signed-off-by: Oliver Bähler <oliverbaehler@hotmail.com> * chore: bump makefile 1.35 --------- Signed-off-by: Oliver Bähler <oliverbaehler@hotmail.com> Signed-off-by: Oliver Baehler <oliver@sudo-i.net> * fix: release workflows (#1919) * fix(controller): decode old object for delete requests Signed-off-by: Oliver Bähler <oliverbaehler@hotmail.com> * chore: modernize golang Signed-off-by: Oliver Bähler <oliverbaehler@hotmail.com> * chore: modernize golang Signed-off-by: Oliver Bähler <oliverbaehler@hotmail.com> * chore: modernize golang Signed-off-by: Oliver Bähler <oliverbaehler@hotmail.com> * chore: bump makefile 1.35 * fix: release workflows Signed-off-by: Oliver Baehler <oliver@sudo-i.net> --------- Signed-off-by: Oliver Bähler <oliverbaehler@hotmail.com> Signed-off-by: Oliver Baehler <oliver@sudo-i.net> * fix: reuse webhookport from values (#1927) * fix(controller): decode old object for delete requests Signed-off-by: Oliver Bähler <oliverbaehler@hotmail.com> * chore: modernize golang Signed-off-by: Oliver Bähler <oliverbaehler@hotmail.com> * chore: modernize golang Signed-off-by: Oliver Bähler <oliverbaehler@hotmail.com> * chore: modernize golang Signed-off-by: Oliver Bähler <oliverbaehler@hotmail.com> * fix: reuse webhookport from values Signed-off-by: Oliver Baehler <oliver@sudo-i.net> * fix: consider webhooks.service.port Signed-off-by: Oliver Baehler <oliver@sudo-i.net> * fix: consider webhooks.service.port Signed-off-by: Oliver Baehler <oliver@sudo-i.net> --------- Signed-off-by: Oliver Bähler <oliverbaehler@hotmail.com> Signed-off-by: Oliver Baehler <oliver@sudo-i.net> * fix: correct helm values schema for webservcie ports (#1928) Signed-off-by: bakito <github@bakito.ch> Signed-off-by: Oliver Baehler <oliver@sudo-i.net> * fix: correct helm docs for webhook service port schema (#1929) Signed-off-by: bakito <github@bakito.ch> Signed-off-by: Oliver Baehler <oliver@sudo-i.net> * chore(deps): update capsule-proxy docker tag to v0.12.0 (#1846) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Signed-off-by: Oliver Baehler <oliver@sudo-i.net> * chore(deps): update dependency prometheus-operator/prometheus-operator to v0.91.0 (#1849) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Signed-off-by: Oliver Baehler <oliver@sudo-i.net> * chore(deps): update dependency grafana/grafana-operator to v5.22.2 (#1819) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Signed-off-by: Oliver Baehler <oliver@sudo-i.net> * chore: use release age for all managers except helm (#1931) * fix(controller): decode old object for delete requests Signed-off-by: Oliver Bähler <oliverbaehler@hotmail.com> * chore: modernize golang Signed-off-by: Oliver Bähler <oliverbaehler@hotmail.com> * chore: modernize golang Signed-off-by: Oliver Bähler <oliverbaehler@hotmail.com> * chore: modernize golang Signed-off-by: Oliver Bähler <oliverbaehler@hotmail.com> * chore: use release age for all managers except helm Signed-off-by: Oliver Baehler <oliver@sudo-i.net> --------- Signed-off-by: Oliver Bähler <oliverbaehler@hotmail.com> Signed-off-by: Oliver Baehler <oliver@sudo-i.net> * chore(deps): update capsule-proxy docker tag to v0.13.1 (#1932) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Signed-off-by: Oliver Baehler <oliver@sudo-i.net> * feat: add observedgeneration to status object of all crds (#1930) * feat: add observedgeneration to status object of all crds Signed-off-by: sandert-k8s <sandert98@gmail.com> * chore(api): rename rulestatusspec to rulestatusstatus Signed-off-by: sandert-k8s <sandert98@gmail.com> --------- Signed-off-by: sandert-k8s <sandert98@gmail.com> Signed-off-by: Oliver Baehler <oliver@sudo-i.net> * chore: promote sander tervoert as maintainer (#1933) * chore: promote sander tervoert as maintainer Signed-off-by: Hristo Hristov <me@hhristov.info> * chore: promote sander tervoert as maintainer Signed-off-by: Hristo Hristov <me@hhristov.info> * chore: promote sander tervoert as maintainer Signed-off-by: Hristo Hristov <me@hhristov.info> * chore: promote sander tervoert as maintainer Signed-off-by: Hristo Hristov <me@hhristov.info> --------- Signed-off-by: Hristo Hristov <me@hhristov.info> Signed-off-by: Oliver Baehler <oliver@sudo-i.net> * chore: promote sander tervoert as maintainer (#1939) Signed-off-by: Hristo Hristov <me@hhristov.info> Signed-off-by: Oliver Baehler <oliver@sudo-i.net> * ci: add goreleaser dry run (#1936) Signed-off-by: Alan <alan747271363-art@users.noreply.github.com> Co-authored-by: Alan <alan747271363-art@users.noreply.github.com> Signed-off-by: Oliver Baehler <oliver@sudo-i.net> * fix(deps): update module gomodules.xyz/jsonpatch/v2 to v3 (#1917) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Signed-off-by: Oliver Baehler <oliver@sudo-i.net> * chore(deps): update helm release kube-prometheus-stack to v85 (#1914) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Signed-off-by: Oliver Baehler <oliver@sudo-i.net> * fix(deps): update module go.uber.org/zap to v1.28.0 (#1904) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Signed-off-by: Oliver Baehler <oliver@sudo-i.net> * fix: avoid rejection when users are classified as administrators (#1941) * fix(controller): decode old object for delete requests Signed-off-by: Oliver Bähler <oliverbaehler@hotmail.com> * chore: modernize golang Signed-off-by: Oliver Bähler <oliverbaehler@hotmail.com> * chore: modernize golang Signed-off-by: Oliver Bähler <oliverbaehler@hotmail.com> * chore: modernize golang Signed-off-by: Oliver Bähler <oliverbaehler@hotmail.com> * fix: avoid rejection when users are classified as administrators Signed-off-by: Oliver Baehler <oliver@sudo-i.net> --------- Signed-off-by: Oliver Bähler <oliverbaehler@hotmail.com> Signed-off-by: Oliver Baehler <oliver@sudo-i.net> * chore(deps): update capsule-proxy docker tag to v0.13.2 (#1942) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Signed-off-by: Oliver Baehler <oliver@sudo-i.net> * fix(deps): update module sigs.k8s.io/gateway-api to v1.5.1 (#1878) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Signed-off-by: Oliver Baehler <oliver@sudo-i.net> * chore: typo in ruleset description crd (#1944) Signed-off-by: sandert-k8s <sandert98@gmail.com> Signed-off-by: Oliver Baehler <oliver@sudo-i.net> * feat: add tenant list to status of capsuleconfiguration (#1935) Signed-off-by: sandert-k8s <sandert98@gmail.com> Signed-off-by: Oliver Baehler <oliver@sudo-i.net> * fix: correct tls reconciler and add tenantowners (#1946) * fix(controller): decode old object for delete requests Signed-off-by: Oliver Bähler <oliverbaehler@hotmail.com> * chore: modernize golang Signed-off-by: Oliver Bähler <oliverbaehler@hotmail.com> * chore: modernize golang Signed-off-by: Oliver Bähler <oliverbaehler@hotmail.com> * chore: modernize golang Signed-off-by: Oliver Bähler <oliverbaehler@hotmail.com> * fix: tls controller Signed-off-by: Oliver Baehler <oliver@sudo-i.net> * feat: add tenantowner tenant status reference Signed-off-by: Oliver Baehler <oliver@sudo-i.net> * fix: tlsreconciler only patches cabundles Signed-off-by: Oliver Baehler <oliver@sudo-i.net> * chore: refactor logger usage Signed-off-by: Oliver Baehler <oliver@sudo-i.net> * Potential fix for pull request finding Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com> * Potential fix for pull request finding Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com> * fix: tlsreconciler only patches cabundles Signed-off-by: Oliver Baehler <oliver@sudo-i.net> * fix: tlsreconciler only patches cabundles Signed-off-by: Oliver Baehler <oliver@sudo-i.net> --------- Signed-off-by: Oliver Bähler <oliverbaehler@hotmail.com> Signed-off-by: Oliver Baehler <oliver@sudo-i.net> Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com> Signed-off-by: Oliver Baehler <oliver@sudo-i.net> * chore: fix typo (#1945) * chore: typo in ruleset description crd Signed-off-by: sandert-k8s <sandert98@gmail.com> * chore: fix typo Signed-off-by: sandert-k8s <sandert98@gmail.com> --------- Signed-off-by: sandert-k8s <sandert98@gmail.com> Signed-off-by: Oliver Baehler <oliver@sudo-i.net> * fix: allow managed metadata defined per tenant (#1947) * fix: allow managed metadata defined per tenant Signed-off-by: Oliver Baehler <oliver@sudo-i.net> * fix: allow managed metadata defined per tenant Signed-off-by: Oliver Baehler <oliver@sudo-i.net> --------- Signed-off-by: Oliver Baehler <oliver@sudo-i.net> * feat: action type Signed-off-by: Oliver Baehler <oliver@sudo-i.net> * fix: preserve ca-bundles injected from external providers (#1948) * fix: preserve ca-bundles injected from external providers (#1948) Signed-off-by: Oliver Baehler <oliver@sudo-i.net> * fix(deps): update module sigs.k8s.io/cluster-api to v1.13.2 (#1874) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Signed-off-by: Oliver Baehler <oliver@sudo-i.net> * feat(deps): bump golang 1.26.4 (#1949) * fix(controller): decode old object for delete requests Signed-off-by: Oliver Bähler <oliverbaehler@hotmail.com> * chore: modernize golang Signed-off-by: Oliver Bähler <oliverbaehler@hotmail.com> * chore: modernize golang Signed-off-by: Oliver Bähler <oliverbaehler@hotmail.com> * chore: modernize golang Signed-off-by: Oliver Bähler <oliverbaehler@hotmail.com> * fix: preserve ca-bundles injected from external providers Signed-off-by: Oliver Baehler <oliver@sudo-i.net> * feat(deps): bump golang 1.26.4 Signed-off-by: Oliver Baehler <oliver@sudo-i.net> * Potential fix for pull request finding Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com> * feat(deps): bump golang 1.26.4 Signed-off-by: Oliver Baehler <oliver@sudo-i.net> --------- Signed-off-by: Oliver Bähler <oliverbaehler@hotmail.com> Signed-off-by: Oliver Baehler <oliver@sudo-i.net> Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com> Signed-off-by: Oliver Baehler <oliver@sudo-i.net> * chore(deps): update capsule-proxy docker tag to v0.13.3 (#1950) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Signed-off-by: Oliver Baehler <oliver@sudo-i.net> * chore(deps): update all-ci-updates (#1902) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Signed-off-by: Oliver Baehler <oliver@sudo-i.net> * fix: best effort patch reconciling status (#1952) * fix(controller): decode old object for delete requests Signed-off-by: Oliver Bähler <oliverbaehler@hotmail.com> * chore: modernize golang Signed-off-by: Oliver Bähler <oliverbaehler@hotmail.com> * chore: modernize golang Signed-off-by: Oliver Bähler <oliverbaehler@hotmail.com> * chore: modernize golang Signed-off-by: Oliver Bähler <oliverbaehler@hotmail.com> * fix: preserve ca-bundles injected from external providers Signed-off-by: Oliver Baehler <oliver@sudo-i.net> * fix: best effort patch reconciling status Signed-off-by: Oliver Baehler <oliver@sudo-i.net> --------- Signed-off-by: Oliver Bähler <oliverbaehler@hotmail.com> Signed-off-by: Oliver Baehler <oliver@sudo-i.net> * fix: use different match strategy for truthy and match (#1953) * fix(controller): decode old object for delete requests Signed-off-by: Oliver Bähler <oliverbaehler@hotmail.com> * chore: modernize golang Signed-off-by: Oliver Bähler <oliverbaehler@hotmail.com> * chore: modernize golang Signed-off-by: Oliver Bähler <oliverbaehler@hotmail.com> * chore: modernize golang Signed-off-by: Oliver Bähler <oliverbaehler@hotmail.com> * fix: preserve ca-bundles injected from external providers Signed-off-by: Oliver Baehler <oliver@sudo-i.net> * fix: best effort patch reconciling status Signed-off-by: Oliver Baehler <oliver@sudo-i.net> * fix: use different match strategy for truthy and match Signed-off-by: Oliver Baehler <oliver@sudo-i.net> --------- Signed-off-by: Oliver Bähler <oliverbaehler@hotmail.com> Signed-off-by: Oliver Baehler <oliver@sudo-i.net> * progress Signed-off-by: Oliver Baehler <oliver@sudo-i.net> * feat: add registry Signed-off-by: Oliver Baehler <oliver@sudo-i.net> * feat: add registry Signed-off-by: Oliver Baehler <oliver@sudo-i.net> * chore: update all gihub actions, use digest versioning and remove obsolete docs-lint workflow (#1955) Signed-off-by: bakito <github@bakito.ch> Signed-off-by: Oliver Baehler <oliver@sudo-i.net> * fix: translate serviceaccounts to type serviceaccount not user (#1956) * fix(controller): decode old object for delete requests Signed-off-by: Oliver Bähler <oliverbaehler@hotmail.com> * chore: modernize golang Signed-off-by: Oliver Bähler <oliverbaehler@hotmail.com> * chore: modernize golang Signed-off-by: Oliver Bähler <oliverbaehler@hotmail.com> * chore: modernize golang Signed-off-by: Oliver Bähler <oliverbaehler@hotmail.com> * fix: preserve ca-bundles injected from external providers Signed-off-by: Oliver Baehler <oliver@sudo-i.net> * fix: translate serviceaccounts to type serviceaccount not user Signed-off-by: Oliver Baehler <oliver@sudo-i.net> --------- Signed-off-by: Oliver Bähler <oliverbaehler@hotmail.com> Signed-off-by: Oliver Baehler <oliver@sudo-i.net> * feat: add improved registry enforcement Signed-off-by: Oliver Baehler <oliver@sudo-i.net> --------- Signed-off-by: Oliver Bähler <oliverbaehler@hotmail.com> Signed-off-by: Oliver Baehler <oliver@sudo-i.net> Signed-off-by: Hristo Hristov <me@hhristov.info> Signed-off-by: sandert-k8s <sandert98@gmail.com> Signed-off-by: Akash Kumar <meakash7902@gmail.com> Signed-off-by: bakito <github@bakito.ch> Signed-off-by: Alan <alan747271363-art@users.noreply.github.com> Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Co-authored-by: Hristo Hristov <me@hhristov.info> Co-authored-by: Sander Tervoert <32864332+sandert-k8s@users.noreply.github.com> Co-authored-by: Akash Kumar <91385321+AkashKumar7902@users.noreply.github.com> Co-authored-by: CorentinPtrl <pitrel.corentin@gmail.com> Co-authored-by: Marc Brugger <github@bakito.ch> Co-authored-by: alan747271363-art <alan747271363@gmail.com> Co-authored-by: Alan <alan747271363-art@users.noreply.github.com> Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
657 lines
14 KiB
Go
657 lines
14 KiB
Go
// Copyright 2020-2026 Project Capsule Authors
|
|
// SPDX-License-Identifier: Apache-2.0
|
|
|
|
package cache
|
|
|
|
import (
|
|
"testing"
|
|
|
|
corev1 "k8s.io/api/core/v1"
|
|
|
|
"github.com/projectcapsule/capsule/pkg/api"
|
|
"github.com/projectcapsule/capsule/pkg/api/rules"
|
|
)
|
|
|
|
func TestRegistryRuleSetCache_GetOrBuild(t *testing.T) {
|
|
t.Parallel()
|
|
|
|
tests := []struct {
|
|
name string
|
|
rules []rules.OCIRegistry
|
|
wantNil bool
|
|
wantErr bool
|
|
wantFromCache bool
|
|
wantRuleCount int
|
|
wantHasImages bool
|
|
wantHasVolumes bool
|
|
}{
|
|
{
|
|
name: "empty rules return nil",
|
|
rules: nil,
|
|
wantNil: true,
|
|
},
|
|
{
|
|
name: "build single rule",
|
|
rules: []rules.OCIRegistry{
|
|
{
|
|
RegExpression: api.RegExpression{
|
|
Expression: `^ghcr\.io/projectcapsule/.*`,
|
|
},
|
|
Policy: []corev1.PullPolicy{
|
|
corev1.PullIfNotPresent,
|
|
},
|
|
Validation: []rules.RegistryValidationTarget{
|
|
rules.ValidateImages,
|
|
},
|
|
},
|
|
},
|
|
wantRuleCount: 1,
|
|
wantHasImages: true,
|
|
wantHasVolumes: false,
|
|
},
|
|
{
|
|
name: "empty validation defaults to images and volumes",
|
|
rules: []rules.OCIRegistry{
|
|
{
|
|
RegExpression: api.RegExpression{
|
|
Expression: `^ghcr\.io/projectcapsule/.*`,
|
|
},
|
|
},
|
|
},
|
|
wantRuleCount: 1,
|
|
wantHasImages: true,
|
|
wantHasVolumes: true,
|
|
},
|
|
{
|
|
name: "invalid regex returns error",
|
|
rules: []rules.OCIRegistry{
|
|
{
|
|
RegExpression: api.RegExpression{
|
|
Expression: `[`,
|
|
},
|
|
},
|
|
},
|
|
wantErr: true,
|
|
},
|
|
}
|
|
|
|
for _, tt := range tests {
|
|
t.Run(tt.name, func(t *testing.T) {
|
|
t.Parallel()
|
|
|
|
regexCache := NewRegexCache()
|
|
registryCache := NewRegistryRuleSetCache(regexCache)
|
|
|
|
rs, fromCache, err := registryCache.GetOrBuild(tt.rules)
|
|
|
|
if tt.wantErr {
|
|
if err == nil {
|
|
t.Fatal("expected error, got nil")
|
|
}
|
|
|
|
if rs != nil {
|
|
t.Fatalf("expected nil ruleset on error, got %#v", rs)
|
|
}
|
|
|
|
return
|
|
}
|
|
|
|
if err != nil {
|
|
t.Fatalf("expected no error, got %v", err)
|
|
}
|
|
|
|
if tt.wantNil {
|
|
if rs != nil {
|
|
t.Fatalf("expected nil ruleset, got %#v", rs)
|
|
}
|
|
|
|
return
|
|
}
|
|
|
|
if rs == nil {
|
|
t.Fatal("expected ruleset, got nil")
|
|
}
|
|
|
|
if fromCache != tt.wantFromCache {
|
|
t.Fatalf("expected fromCache=%t, got %t", tt.wantFromCache, fromCache)
|
|
}
|
|
|
|
if len(rs.Compiled) != tt.wantRuleCount {
|
|
t.Fatalf("expected %d compiled rules, got %d", tt.wantRuleCount, len(rs.Compiled))
|
|
}
|
|
|
|
if rs.HasImages != tt.wantHasImages {
|
|
t.Fatalf("expected HasImages=%t, got %t", tt.wantHasImages, rs.HasImages)
|
|
}
|
|
|
|
if rs.HasVolumes != tt.wantHasVolumes {
|
|
t.Fatalf("expected HasVolumes=%t, got %t", tt.wantHasVolumes, rs.HasVolumes)
|
|
}
|
|
|
|
if got := registryCache.Stats(); got != 1 {
|
|
t.Fatalf("expected 1 registry ruleset cache entry, got %d", got)
|
|
}
|
|
|
|
if got := regexCache.Stats(); got != tt.wantRuleCount {
|
|
t.Fatalf("expected %d regex cache entries, got %d", tt.wantRuleCount, got)
|
|
}
|
|
})
|
|
}
|
|
}
|
|
|
|
func TestRegistryRuleSetCache_GetOrBuild_ReusesCachedRuleSet(t *testing.T) {
|
|
t.Parallel()
|
|
|
|
regexCache := NewRegexCache()
|
|
registryCache := NewRegistryRuleSetCache(regexCache)
|
|
|
|
rules := []rules.OCIRegistry{
|
|
{
|
|
RegExpression: api.RegExpression{
|
|
Expression: `^ghcr\.io/projectcapsule/.*`,
|
|
},
|
|
},
|
|
}
|
|
|
|
first, fromCache, err := registryCache.GetOrBuild(rules)
|
|
if err != nil {
|
|
t.Fatalf("expected no error, got %v", err)
|
|
}
|
|
|
|
if fromCache {
|
|
t.Fatal("expected first lookup to build ruleset, got cache hit")
|
|
}
|
|
|
|
second, fromCache, err := registryCache.GetOrBuild(rules)
|
|
if err != nil {
|
|
t.Fatalf("expected no error, got %v", err)
|
|
}
|
|
|
|
if !fromCache {
|
|
t.Fatal("expected second lookup to hit cache")
|
|
}
|
|
|
|
if first != second {
|
|
t.Fatal("expected cached ruleset pointer to be reused")
|
|
}
|
|
|
|
if got := registryCache.Stats(); got != 1 {
|
|
t.Fatalf("expected 1 registry ruleset cache entry, got %d", got)
|
|
}
|
|
|
|
if got := regexCache.Stats(); got != 1 {
|
|
t.Fatalf("expected 1 regex cache entry, got %d", got)
|
|
}
|
|
}
|
|
|
|
func TestRegistryRuleSetCache_Match(t *testing.T) {
|
|
t.Parallel()
|
|
|
|
tests := []struct {
|
|
name string
|
|
rules []rules.OCIRegistry
|
|
image string
|
|
pullPolicy corev1.PullPolicy
|
|
target rules.RegistryValidationTarget
|
|
wantMatch bool
|
|
wantErr bool
|
|
}{
|
|
{
|
|
name: "match image with default validation and any pull policy",
|
|
rules: []rules.OCIRegistry{
|
|
{
|
|
RegExpression: api.RegExpression{
|
|
Expression: `^ghcr\.io/projectcapsule/.*`,
|
|
},
|
|
},
|
|
},
|
|
image: "ghcr.io/projectcapsule/capsule:latest",
|
|
pullPolicy: corev1.PullIfNotPresent,
|
|
target: rules.ValidateImages,
|
|
wantMatch: true,
|
|
},
|
|
{
|
|
name: "match volume with default validation",
|
|
rules: []rules.OCIRegistry{
|
|
{
|
|
RegExpression: api.RegExpression{
|
|
Expression: `^ghcr\.io/projectcapsule/.*`,
|
|
},
|
|
},
|
|
},
|
|
image: "ghcr.io/projectcapsule/capsule:latest",
|
|
pullPolicy: corev1.PullIfNotPresent,
|
|
target: rules.ValidateVolumes,
|
|
wantMatch: true,
|
|
},
|
|
{
|
|
name: "does not match wrong image",
|
|
rules: []rules.OCIRegistry{
|
|
{
|
|
RegExpression: api.RegExpression{
|
|
Expression: `^ghcr\.io/projectcapsule/.*`,
|
|
},
|
|
},
|
|
},
|
|
image: "docker.io/library/nginx:latest",
|
|
pullPolicy: corev1.PullIfNotPresent,
|
|
target: rules.ValidateImages,
|
|
wantMatch: false,
|
|
},
|
|
{
|
|
name: "does not match wrong pull policy",
|
|
rules: []rules.OCIRegistry{
|
|
{
|
|
RegExpression: api.RegExpression{
|
|
Expression: `^ghcr\.io/projectcapsule/.*`,
|
|
},
|
|
Policy: []corev1.PullPolicy{
|
|
corev1.PullAlways,
|
|
},
|
|
},
|
|
},
|
|
image: "ghcr.io/projectcapsule/capsule:latest",
|
|
pullPolicy: corev1.PullIfNotPresent,
|
|
target: rules.ValidateImages,
|
|
wantMatch: false,
|
|
},
|
|
{
|
|
name: "matches allowed pull policy",
|
|
rules: []rules.OCIRegistry{
|
|
{
|
|
RegExpression: api.RegExpression{
|
|
Expression: `^ghcr\.io/projectcapsule/.*`,
|
|
},
|
|
Policy: []corev1.PullPolicy{
|
|
corev1.PullIfNotPresent,
|
|
},
|
|
},
|
|
},
|
|
image: "ghcr.io/projectcapsule/capsule:latest",
|
|
pullPolicy: corev1.PullIfNotPresent,
|
|
target: rules.ValidateImages,
|
|
wantMatch: true,
|
|
},
|
|
{
|
|
name: "does not match wrong validation target",
|
|
rules: []rules.OCIRegistry{
|
|
{
|
|
RegExpression: api.RegExpression{
|
|
Expression: `^ghcr\.io/projectcapsule/.*`,
|
|
},
|
|
Validation: []rules.RegistryValidationTarget{
|
|
rules.ValidateVolumes,
|
|
},
|
|
},
|
|
},
|
|
image: "ghcr.io/projectcapsule/capsule:latest",
|
|
pullPolicy: corev1.PullIfNotPresent,
|
|
target: rules.ValidateImages,
|
|
wantMatch: false,
|
|
},
|
|
{
|
|
name: "matches configured validation target",
|
|
rules: []rules.OCIRegistry{
|
|
{
|
|
RegExpression: api.RegExpression{
|
|
Expression: `^ghcr\.io/projectcapsule/.*`,
|
|
},
|
|
Validation: []rules.RegistryValidationTarget{
|
|
rules.ValidateImages,
|
|
},
|
|
},
|
|
},
|
|
image: "ghcr.io/projectcapsule/capsule:latest",
|
|
pullPolicy: corev1.PullIfNotPresent,
|
|
target: rules.ValidateImages,
|
|
wantMatch: true,
|
|
},
|
|
{
|
|
name: "negated regex matches non matching image",
|
|
rules: []rules.OCIRegistry{
|
|
{
|
|
RegExpression: api.RegExpression{
|
|
Expression: `^ghcr\.io/projectcapsule/.*`,
|
|
Negate: true,
|
|
},
|
|
},
|
|
},
|
|
image: "docker.io/library/nginx:latest",
|
|
pullPolicy: corev1.PullIfNotPresent,
|
|
target: rules.ValidateImages,
|
|
wantMatch: true,
|
|
},
|
|
{
|
|
name: "negated regex does not match matching image",
|
|
rules: []rules.OCIRegistry{
|
|
{
|
|
RegExpression: api.RegExpression{
|
|
Expression: `^ghcr\.io/projectcapsule/.*`,
|
|
Negate: true,
|
|
},
|
|
},
|
|
},
|
|
image: "ghcr.io/projectcapsule/capsule:latest",
|
|
pullPolicy: corev1.PullIfNotPresent,
|
|
target: rules.ValidateImages,
|
|
wantMatch: false,
|
|
},
|
|
{
|
|
name: "invalid regex returns error",
|
|
rules: []rules.OCIRegistry{
|
|
{
|
|
RegExpression: api.RegExpression{
|
|
Expression: `[`,
|
|
},
|
|
},
|
|
},
|
|
image: "ghcr.io/projectcapsule/capsule:latest",
|
|
pullPolicy: corev1.PullIfNotPresent,
|
|
target: rules.ValidateImages,
|
|
wantErr: true,
|
|
},
|
|
{
|
|
name: "empty rules do not match",
|
|
rules: nil,
|
|
image: "ghcr.io/projectcapsule/capsule:latest",
|
|
pullPolicy: corev1.PullIfNotPresent,
|
|
target: rules.ValidateImages,
|
|
wantMatch: false,
|
|
},
|
|
}
|
|
|
|
for _, tt := range tests {
|
|
t.Run(tt.name, func(t *testing.T) {
|
|
t.Parallel()
|
|
|
|
registryCache := NewRegistryRuleSetCache(NewRegexCache())
|
|
|
|
matched, err := registryCache.Match(
|
|
tt.rules,
|
|
tt.image,
|
|
tt.pullPolicy,
|
|
tt.target,
|
|
)
|
|
|
|
if tt.wantErr {
|
|
if err == nil {
|
|
t.Fatal("expected error, got nil")
|
|
}
|
|
|
|
return
|
|
}
|
|
|
|
if err != nil {
|
|
t.Fatalf("expected no error, got %v", err)
|
|
}
|
|
|
|
if tt.wantMatch && matched == nil {
|
|
t.Fatal("expected match, got nil")
|
|
}
|
|
|
|
if !tt.wantMatch && matched != nil {
|
|
t.Fatalf("expected no match, got %#v", matched)
|
|
}
|
|
})
|
|
}
|
|
}
|
|
|
|
func TestRegistryRuleSetCache_HashRules_NormalizesPolicyAndValidationOrder(t *testing.T) {
|
|
t.Parallel()
|
|
|
|
c := NewRegistryRuleSetCache(NewRegexCache())
|
|
|
|
a := []rules.OCIRegistry{
|
|
{
|
|
RegExpression: api.RegExpression{
|
|
Expression: `^ghcr\.io/projectcapsule/.*`,
|
|
},
|
|
Policy: []corev1.PullPolicy{
|
|
corev1.PullAlways,
|
|
corev1.PullIfNotPresent,
|
|
},
|
|
Validation: []rules.RegistryValidationTarget{
|
|
rules.ValidateImages,
|
|
rules.ValidateVolumes,
|
|
},
|
|
},
|
|
}
|
|
|
|
b := []rules.OCIRegistry{
|
|
{
|
|
RegExpression: api.RegExpression{
|
|
Expression: `^ghcr\.io/projectcapsule/.*`,
|
|
},
|
|
Policy: []corev1.PullPolicy{
|
|
corev1.PullIfNotPresent,
|
|
corev1.PullAlways,
|
|
},
|
|
Validation: []rules.RegistryValidationTarget{
|
|
rules.ValidateVolumes,
|
|
rules.ValidateImages,
|
|
},
|
|
},
|
|
}
|
|
|
|
if c.HashRules(a) != c.HashRules(b) {
|
|
t.Fatal("expected equal hashes when policy and validation values only differ by order")
|
|
}
|
|
}
|
|
|
|
func TestRegistryRuleSetCache_HashRules_UsesNegate(t *testing.T) {
|
|
t.Parallel()
|
|
|
|
c := NewRegistryRuleSetCache(NewRegexCache())
|
|
|
|
positive := []rules.OCIRegistry{
|
|
{
|
|
RegExpression: api.RegExpression{
|
|
Expression: `^ghcr\.io/.*`,
|
|
},
|
|
},
|
|
}
|
|
|
|
negative := []rules.OCIRegistry{
|
|
{
|
|
RegExpression: api.RegExpression{
|
|
Expression: `^ghcr\.io/.*`,
|
|
Negate: true,
|
|
},
|
|
},
|
|
}
|
|
|
|
if c.HashRules(positive) == c.HashRules(negative) {
|
|
t.Fatal("expected different hashes for negated and non-negated registry expressions")
|
|
}
|
|
}
|
|
|
|
func TestRegistryRuleSetCache_PruneActive(t *testing.T) {
|
|
t.Parallel()
|
|
|
|
registryCache := NewRegistryRuleSetCache(NewRegexCache())
|
|
|
|
keepRules := []rules.OCIRegistry{
|
|
{
|
|
RegExpression: api.RegExpression{
|
|
Expression: `^ghcr\.io/projectcapsule/.*`,
|
|
},
|
|
},
|
|
}
|
|
|
|
removeRules := []rules.OCIRegistry{
|
|
{
|
|
RegExpression: api.RegExpression{
|
|
Expression: `^docker\.io/library/.*`,
|
|
},
|
|
},
|
|
}
|
|
|
|
keep, _, err := registryCache.GetOrBuild(keepRules)
|
|
if err != nil {
|
|
t.Fatalf("expected no error, got %v", err)
|
|
}
|
|
|
|
remove, _, err := registryCache.GetOrBuild(removeRules)
|
|
if err != nil {
|
|
t.Fatalf("expected no error, got %v", err)
|
|
}
|
|
|
|
if got := registryCache.Stats(); got != 2 {
|
|
t.Fatalf("expected 2 cache entries before prune, got %d", got)
|
|
}
|
|
|
|
removed := registryCache.PruneActive(map[string]struct{}{
|
|
keep.ID: {},
|
|
})
|
|
|
|
if removed != 1 {
|
|
t.Fatalf("expected 1 pruned cache entry, got %d", removed)
|
|
}
|
|
|
|
if !registryCache.Has(keep.ID) {
|
|
t.Fatalf("expected kept ruleset id %q to remain", keep.ID)
|
|
}
|
|
|
|
if registryCache.Has(remove.ID) {
|
|
t.Fatalf("expected removed ruleset id %q to be pruned", remove.ID)
|
|
}
|
|
|
|
if got := registryCache.Stats(); got != 1 {
|
|
t.Fatalf("expected 1 cache entry after prune, got %d", got)
|
|
}
|
|
}
|
|
|
|
func TestRegistryRuleSetCache_Reset(t *testing.T) {
|
|
t.Parallel()
|
|
|
|
registryCache := NewRegistryRuleSetCache(NewRegexCache())
|
|
|
|
rs, _, err := registryCache.GetOrBuild([]rules.OCIRegistry{
|
|
{
|
|
RegExpression: api.RegExpression{
|
|
Expression: `^ghcr\.io/projectcapsule/.*`,
|
|
},
|
|
},
|
|
})
|
|
if err != nil {
|
|
t.Fatalf("expected no error, got %v", err)
|
|
}
|
|
|
|
if got := registryCache.Stats(); got != 1 {
|
|
t.Fatalf("expected 1 cache entry, got %d", got)
|
|
}
|
|
|
|
registryCache.Reset()
|
|
|
|
if got := registryCache.Stats(); got != 0 {
|
|
t.Fatalf("expected 0 cache entries after reset, got %d", got)
|
|
}
|
|
|
|
if registryCache.Has(rs.ID) {
|
|
t.Fatalf("expected ruleset id %q to be removed after reset", rs.ID)
|
|
}
|
|
}
|
|
|
|
func TestCompiledRule_AllowsPullPolicy(t *testing.T) {
|
|
t.Parallel()
|
|
|
|
tests := []struct {
|
|
name string
|
|
rule CompiledRule
|
|
pullPolicy corev1.PullPolicy
|
|
want bool
|
|
}{
|
|
{
|
|
name: "empty policy allows any",
|
|
rule: CompiledRule{},
|
|
pullPolicy: corev1.PullAlways,
|
|
want: true,
|
|
},
|
|
{
|
|
name: "configured policy allows matching value",
|
|
rule: CompiledRule{
|
|
AllowedPolicy: map[corev1.PullPolicy]struct{}{
|
|
corev1.PullIfNotPresent: {},
|
|
},
|
|
},
|
|
pullPolicy: corev1.PullIfNotPresent,
|
|
want: true,
|
|
},
|
|
{
|
|
name: "configured policy rejects non matching value",
|
|
rule: CompiledRule{
|
|
AllowedPolicy: map[corev1.PullPolicy]struct{}{
|
|
corev1.PullIfNotPresent: {},
|
|
},
|
|
},
|
|
pullPolicy: corev1.PullAlways,
|
|
want: false,
|
|
},
|
|
}
|
|
|
|
for _, tt := range tests {
|
|
t.Run(tt.name, func(t *testing.T) {
|
|
t.Parallel()
|
|
|
|
if got := tt.rule.AllowsPullPolicy(tt.pullPolicy); got != tt.want {
|
|
t.Fatalf("expected %t, got %t", tt.want, got)
|
|
}
|
|
})
|
|
}
|
|
}
|
|
|
|
func TestCompiledRule_MatchesTarget(t *testing.T) {
|
|
t.Parallel()
|
|
|
|
tests := []struct {
|
|
name string
|
|
rule CompiledRule
|
|
target rules.RegistryValidationTarget
|
|
want bool
|
|
}{
|
|
{
|
|
name: "matches images",
|
|
rule: CompiledRule{
|
|
ValidateImages: true,
|
|
},
|
|
target: rules.ValidateImages,
|
|
want: true,
|
|
},
|
|
{
|
|
name: "does not match images when only volumes configured",
|
|
rule: CompiledRule{
|
|
ValidateVolumes: true,
|
|
},
|
|
target: rules.ValidateImages,
|
|
want: false,
|
|
},
|
|
{
|
|
name: "matches volumes",
|
|
rule: CompiledRule{
|
|
ValidateVolumes: true,
|
|
},
|
|
target: rules.ValidateVolumes,
|
|
want: true,
|
|
},
|
|
{
|
|
name: "does not match unknown target",
|
|
rule: CompiledRule{
|
|
ValidateImages: true,
|
|
ValidateVolumes: true,
|
|
},
|
|
target: rules.RegistryValidationTarget("unknown"),
|
|
want: false,
|
|
},
|
|
}
|
|
|
|
for _, tt := range tests {
|
|
t.Run(tt.name, func(t *testing.T) {
|
|
t.Parallel()
|
|
|
|
if got := tt.rule.MatchesTarget(tt.target); got != tt.want {
|
|
t.Fatalf("expected %t, got %t", tt.want, got)
|
|
}
|
|
})
|
|
}
|
|
}
|