Skip to content

NO-ISSUE: Merge upstream 2026-07-30 - #516

Merged
openshift-merge-bot[bot] merged 22 commits into
openshift:mainfrom
hroyrh:merge-upstream-2026-07-30
Jul 31, 2026
Merged

NO-ISSUE: Merge upstream 2026-07-30#516
openshift-merge-bot[bot] merged 22 commits into
openshift:mainfrom
hroyrh:merge-upstream-2026-07-30

Conversation

@hroyrh

@hroyrh hroyrh commented Jul 30, 2026

Copy link
Copy Markdown

Summary by CodeRabbit

  • New Features

    • Added admission validation for DataImage and HostFirmwareComponents resources.
    • Added URL validation supporting HTTP, HTTPS, FTP, Gopher, and OCI schemes while rejecting unsupported or malformed URLs.
    • Added TLS support for additional ML-KEM curve preferences.
  • Bug Fixes

    • Improved end-to-end test image downloads with caching and fallback sources.
    • Ensured automated cleaning is disabled after verification.
  • Maintenance

    • Updated the project’s Go toolchain and Kubernetes dependencies.

nuhakala and others added 20 commits July 21, 2026 13:34
- Adds new webhooks for DataImages and HostFirmwareComponents
- Validates URLs in DataImages, HostFirmwareComponents and BMHs
- Adds common function to validate URL in webhooks

Signed-off-by: Nuutti Hakala <nuutti.hakala@est.tech>
Bumps the kubernetes group with 3 updates in the / directory: [k8s.io/api](https://github.com/kubernetes/api), [k8s.io/client-go](https://github.com/kubernetes/client-go) and [k8s.io/component-base](https://github.com/kubernetes/component-base).
Bumps the kubernetes group with 1 update in the /apis directory: [k8s.io/api](https://github.com/kubernetes/api).
Bumps the kubernetes group with 1 update in the /test directory: [k8s.io/api](https://github.com/kubernetes/api).


Updates `k8s.io/api` from 0.35.6 to 0.35.7
- [Commits](kubernetes/api@v0.35.6...v0.35.7)

Updates `k8s.io/apimachinery` from 0.35.6 to 0.35.7
- [Commits](kubernetes/apimachinery@v0.35.6...v0.35.7)

Updates `k8s.io/client-go` from 0.35.6 to 0.35.7
- [Changelog](https://github.com/kubernetes/client-go/blob/master/CHANGELOG.md)
- [Commits](kubernetes/client-go@v0.35.6...v0.35.7)

Updates `k8s.io/component-base` from 0.35.6 to 0.35.7
- [Commits](kubernetes/component-base@v0.35.6...v0.35.7)

Updates `k8s.io/api` from 0.35.6 to 0.35.7
- [Commits](kubernetes/api@v0.35.6...v0.35.7)

Updates `k8s.io/apimachinery` from 0.35.6 to 0.35.7
- [Commits](kubernetes/apimachinery@v0.35.6...v0.35.7)

Updates `k8s.io/api` from 0.35.6 to 0.35.7
- [Commits](kubernetes/api@v0.35.6...v0.35.7)

Updates `k8s.io/apimachinery` from 0.35.6 to 0.35.7
- [Commits](kubernetes/apimachinery@v0.35.6...v0.35.7)

---
updated-dependencies:
- dependency-name: k8s.io/api
  dependency-version: 0.35.7
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: kubernetes
- dependency-name: k8s.io/apimachinery
  dependency-version: 0.35.7
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: kubernetes
- dependency-name: k8s.io/client-go
  dependency-version: 0.35.7
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: kubernetes
- dependency-name: k8s.io/component-base
  dependency-version: 0.35.7
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: kubernetes
- dependency-name: k8s.io/api
  dependency-version: 0.35.7
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: kubernetes
- dependency-name: k8s.io/apimachinery
  dependency-version: 0.35.7
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: kubernetes
- dependency-name: k8s.io/api
  dependency-version: 0.35.7
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: kubernetes
- dependency-name: k8s.io/apimachinery
  dependency-version: 0.35.7
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: kubernetes
...

Signed-off-by: dependabot[bot] <support@github.com>
Bumps [github.com/prometheus/client_golang](https://github.com/prometheus/client_golang) from 1.23.2 to 1.24.0.
- [Release notes](https://github.com/prometheus/client_golang/releases)
- [Changelog](https://github.com/prometheus/client_golang/blob/v1.24.0/CHANGELOG.md)
- [Commits](prometheus/client_golang@v1.23.2...v1.24.0)

---
updated-dependencies:
- dependency-name: github.com/prometheus/client_golang
  dependency-version: 1.24.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
…s/main/github.com/prometheus/client_golang-1.24.0

🌱 Bump github.com/prometheus/client_golang from 1.23.2 to 1.24.0
…s/main/kubernetes-04e42a2908

🌱 Bump the kubernetes group across 3 directories with 4 updates
Bumps the go_modules group with 2 updates in the / directory: [github.com/google/cel-go](https://github.com/google/cel-go) and [google.golang.org/grpc](https://github.com/grpc/grpc-go).


Updates `github.com/google/cel-go` from 0.26.0 to 0.29.0
- [Release notes](https://github.com/google/cel-go/releases)
- [Commits](https://github.com/google/cel-go/compare/v0.26.0...v0.29.0)

Updates `google.golang.org/grpc` from 1.80.0 to 1.82.1
- [Release notes](https://github.com/grpc/grpc-go/releases)
- [Commits](grpc/grpc-go@v1.80.0...v1.82.1)

---
updated-dependencies:
- dependency-name: github.com/google/cel-go
  dependency-version: 0.29.0
  dependency-type: indirect
- dependency-name: google.golang.org/grpc
  dependency-version: 1.82.1
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Signed-off-by: Dmitry Tantsur <dtantsur@protonmail.com>
…s/go_modules-6a8aee5517

🌱 Bump the go_modules group across 1 directory with 2 updates
Otherwise, cleanup may take too long, leaving the host dangling.

Signed-off-by: Dmitry Tantsur <dtantsur@protonmail.com>
Signed-off-by: Nuutti Hakala <nuutti.hakala@est.tech>
…lidation

✨ Add webhooks to validate URLs
🌱 Bump go modules across two directories
🌱 e2e: disable cleaning before the test is over
It is better to create a BMC emulator instance after network
interfaces are created. This is required in order to ensure the BMC
emulator is created only after the network-dependent environment is
ready, so startup is more reliable and provisioning can reach it
consistently.

Signed-off-by: Tero Kauppinen <tero.kauppinen@est.tech>
…or-creation

🌱 vbmctl: launch BMC emulator after network initialization
🌱 e2e: fall back to upstream images if artifactory is not available
This commit:
 - Modifies all go.mod files to require go version 1.26.0 for go binary
   compilation.
 - Adjust hack scripts, Makefile and Dockerfiles to be aligned with the
   new go requirement
 - Align access_test to comply with the stricter character substitution
   standards introduced by go 1.26
 - Adds 2 new supported TLS curves:
    - SecP256r1MLKEM768  (P-256 + ML-KEM-768)
    - SecP384r1MLKEM1024  (P-384 + ML-KEM-1024)

Signed-off-by: Adam Rozman <adam.rozman@est.tech>
🌱 Bump minimum required go version to 1.26.0
Bumps [go.etcd.io/etcd/client/pkg/v3](https://github.com/etcd-io/etcd) from 3.6.13 to 3.7.1.
- [Release notes](https://github.com/etcd-io/etcd/releases)
- [Commits](etcd-io/etcd@v3.6.13...v3.7.1)

---
updated-dependencies:
- dependency-name: go.etcd.io/etcd/client/pkg/v3
  dependency-version: 3.7.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
…s/main/go.etcd.io/etcd/client/pkg/v3-3.7.0

🌱 Bump go.etcd.io/etcd/client/pkg/v3 from 3.6.13 to 3.7.1
@openshift-ci
openshift-ci Bot requested review from dtantsur and honza July 30, 2026 11:53
@coderabbitai

coderabbitai Bot commented Jul 30, 2026

Copy link
Copy Markdown

Walkthrough

Changes

Go 1.26 toolchains and dependencies are adopted across builds and modules. DataImage and HostFirmwareComponents validation webhooks are added and registered, with shared URL validation and manifests. CI downloads are cached with fallbacks, and selected test flows are reordered or cleaned up.

Go 1.26 and admission webhook integration

Layer / File(s) Summary
Go 1.26 toolchain and dependencies
Dockerfile, Dockerfile.plugin-test, Makefile, Tiltfile, go.mod, apis/go.mod, hack/..., test/go.mod, main.go
Build images, module directives, dependencies, helper scripts, and TLS curve preferences are updated for Go 1.26.
Shared URL and resource validation
internal/webhooks/metal3.io/v1alpha1/*validation*
URL validation now uses a shared allowlist for BareMetalHost images, DataImage URLs, and HostFirmwareComponents firmware updates, with unit tests.
Webhook handlers and deployment wiring
internal/webhooks/metal3.io/v1alpha1/*webhook.go, main.go, config/base/webhook/manifests.yaml, config/render/capm3.yaml
DataImage and HostFirmwareComponents webhook handlers are registered and configured for create and update admission validation.
CI image caching and test orchestration
hack/ci-e2e.sh, test/e2e/automated_cleaning_test.go, test/vbmctl/cmd/vbmctl/create.go, pkg/hardwareutils/bmc/access_test.go
E2E image downloads use caching and fallback URLs; cleaning and BMC emulator steps are reordered, and a test assertion is reformatted.

Estimated code review effort: 4 (Complex) | ~45 minutes

Sequence Diagram(s)

sequenceDiagram
  participant KubernetesAPIServer
  participant DataImageWebhook
  participant ValidateURL
  KubernetesAPIServer->>DataImageWebhook: CREATE or UPDATE DataImage
  DataImageWebhook->>ValidateURL: Validate Spec.URL
  ValidateURL-->>DataImageWebhook: Return validation result
  DataImageWebhook-->>KubernetesAPIServer: Return admission response
Loading

Possibly related PRs

Suggested reviewers: honza, dtantsur, peppi-lotta

🚥 Pre-merge checks | ✅ 12 | ❌ 3

❌ Failed checks (3 warnings)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 11.11% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
Test Structure And Quality ⚠️ Warning FAIL: the Ginkgo test creates two userdata secrets via createDiskTestUserdata/createSSHSetupUserdata but never adds them to toCleanup, so namespace-scoped cleanup leaves resources behind. Track the userdata secrets in toCleanup (or DeferCleanup them) and close SSH clients with defer immediately after connect for consistent cleanup.
Ipv6 And Disconnected Network Test Compatibility ⚠️ Warning New e2e test uses EstablishSSHConnection, which formats host:port with fmt.Sprintf and is IPv6-unsafe. Use net.JoinHostPort in EstablishSSHConnection and make the test/user-data IP handling family-aware or skip on IPv6-only clusters.
✅ Passed checks (12 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
Stable And Deterministic Test Names ✅ Passed Changed Ginkgo titles are static: Describe("Automated cleaning") and It("should perform automated cleaning when enabled"); no dynamic data found.
Microshift Test Compatibility ✅ Passed PASS: The only e2e change is an existing BMH test; it uses core K8s + BareMetalHost CRDs only, with no MicroShift-blocked APIs, namespaces, or unsupported assumptions.
Single Node Openshift (Sno) Test Compatibility ✅ Passed No new Ginkgo e2e tests were added; only an existing e2e It was modified, with no multi-node assumptions or SNO issues.
Topology-Aware Scheduling Compatibility ✅ Passed Changed files add webhook admission wiring only; no nodeSelector, affinity, topologySpreadConstraints, or ControlPlaneTopology logic was introduced.
Ote Binary Stdout Contract ✅ Passed No changed init/main/suite setup code writes to stdout; main.go logs via controller-runtime after logger setup, and new webhooks use structured logging only.
No-Weak-Crypto ✅ Passed No weak-crypto APIs or custom crypto were added in the touched files; only TLS curve prefs, URL validation, and a non-secret BootMACAddress compare changed.
Container-Privileges ✅ Passed No changed manifest introduced privileged/hostNetwork/hostPID/hostIPC/SYS_ADMIN/allowPrivilegeEscalation=true; rendered pod keeps allowPrivilegeEscalation:false, privileged:false, runAsNonRoot:true.
No-Sensitive-Data-In-Logs ✅ Passed No new sensitive logging found: webhook logs only use namespace/name, and the libvirt URI print in vbmctl already existed in the parent commit.
Title check ✅ Passed The title clearly identifies this pull request as an upstream merge dated July 30, 2026, which matches the stated objective and changes.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@hroyrh
hroyrh force-pushed the merge-upstream-2026-07-30 branch from ecc344b to 5658a6e Compare July 30, 2026 11:57
@openshift-ci

openshift-ci Bot commented Jul 30, 2026

Copy link
Copy Markdown

@hroyrh: all tests passed!

Full PR test history. Your PR dashboard.

Details

Instructions for interacting with me using PR comments are available here. If you have questions or suggestions related to my behavior, please file an issue against the kubernetes-sigs/prow repository. I understand the commands that are listed here.

@hroyrh

hroyrh commented Jul 30, 2026

Copy link
Copy Markdown
Author

@coderabbitai review

@coderabbitai

coderabbitai Bot commented Jul 30, 2026

Copy link
Copy Markdown
✅ Action performed

Review finished.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 2

🧹 Nitpick comments (2)
Tiltfile (1)

64-64: 🔒 Security & Privacy | 🔵 Trivial | ⚡ Quick win

Use immutable image references across development and verification workflows.

Mutable image tags can cause local builds, code generation, and module checks to use different toolchains or image contents over time.

  • Tiltfile#L64-L64: replace golang:1.26 with a verified immutable Go 1.26.5 reference.
  • hack/generate.sh#L38-L38: pin quay.io/metal3-io/basic-checks:golang-1.26 to a verified digest.
  • hack/gomod.sh#L45-L45: pin quay.io/metal3-io/basic-checks:golang-1.26 to the same verified digest used for module checks.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@Tiltfile` at line 64, Replace the mutable Go image reference in Tiltfile
lines 64-64 with a verified immutable Go 1.26.5 reference. Pin
quay.io/metal3-io/basic-checks:golang-1.26 in hack/generate.sh lines 38-38 and
hack/gomod.sh lines 45-45 to the same verified digest, ensuring all development,
generation, and module-check workflows use immutable image contents.
internal/webhooks/metal3.io/v1alpha1/dataimage_webhook.go (1)

33-37: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

Align both webhook builders with the validating-only manifests.

  • internal/webhooks/metal3.io/v1alpha1/dataimage_webhook.go#L33-L37: remove WithDefaulter and the no-op defaulter interface, or add a mutating webhook configuration.
  • internal/webhooks/metal3.io/v1alpha1/hostfirmwarecomponents_webhook.go#L33-L37: apply the same fix.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@internal/webhooks/metal3.io/v1alpha1/dataimage_webhook.go` around lines 33 -
37, Align both webhook builders with the validating-only manifests by removing
the WithDefaulter call and each corresponding no-op defaulter interface
implementation in DataImage and HostFirmwareComponents. Apply the same change in
internal/webhooks/metal3.io/v1alpha1/dataimage_webhook.go:33-37 and
internal/webhooks/metal3.io/v1alpha1/hostfirmwarecomponents_webhook.go:33-37; do
not add mutating webhook configuration.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@hack/ci-e2e.sh`:
- Around line 109-136: Update cache_image and the SourceForge ISO download flow
to write into temporary files within IMAGE_DIR, moving each temporary file to
its final cache path only after wget succeeds. Ensure failed or interrupted
Artifactory and fallback downloads cannot leave partial files that satisfy the
existing -f cache checks, and apply the same atomic handling to IMAGE_FILE,
ISO_FILE, and IPA_FILE downloads.

In `@internal/webhooks/metal3.io/v1alpha1/dataimage_webhook.go`:
- Around line 49-68: Make the nil-object checks in DataImage.ValidateCreate and
DataImage.ValidateUpdate return a non-nil validation error instead of nil, nil,
rejecting missing webhook input while preserving the existing logging. Apply the
same fail-closed change to HostFirmwareComponents.ValidateCreate and
HostFirmwareComponents.ValidateUpdate in
internal/webhooks/metal3.io/v1alpha1/hostfirmwarecomponents_webhook.go (lines
54-72).

---

Nitpick comments:
In `@internal/webhooks/metal3.io/v1alpha1/dataimage_webhook.go`:
- Around line 33-37: Align both webhook builders with the validating-only
manifests by removing the WithDefaulter call and each corresponding no-op
defaulter interface implementation in DataImage and HostFirmwareComponents.
Apply the same change in
internal/webhooks/metal3.io/v1alpha1/dataimage_webhook.go:33-37 and
internal/webhooks/metal3.io/v1alpha1/hostfirmwarecomponents_webhook.go:33-37; do
not add mutating webhook configuration.

In `@Tiltfile`:
- Line 64: Replace the mutable Go image reference in Tiltfile lines 64-64 with a
verified immutable Go 1.26.5 reference. Pin
quay.io/metal3-io/basic-checks:golang-1.26 in hack/generate.sh lines 38-38 and
hack/gomod.sh lines 45-45 to the same verified digest, ensuring all development,
generation, and module-check workflows use immutable image contents.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Repository: openshift/coderabbit/.coderabbit.yaml

Review profile: CHILL

Plan: Pro Plus

Run ID: 93dbe0fb-f620-4f87-92ea-368d3d17aa0e

📥 Commits

Reviewing files that changed from the base of the PR and between f64454b and 5658a6e.

⛔ Files ignored due to path filters (329)
  • apis/go.sum is excluded by !**/*.sum
  • apis/vendor/modules.txt is excluded by !**/vendor/**
  • go.sum is excluded by !**/*.sum
  • hack/tools/go.sum is excluded by !**/*.sum
  • hack/tools/vendor/google.golang.org/protobuf/encoding/prototext/decode.go is excluded by !**/vendor/**
  • hack/tools/vendor/google.golang.org/protobuf/internal/descfmt/stringer.go is excluded by !**/vendor/**
  • hack/tools/vendor/google.golang.org/protobuf/internal/version/version.go is excluded by !**/vendor/**
  • hack/tools/vendor/modules.txt is excluded by !**/vendor/**
  • test/go.sum is excluded by !**/*.sum
  • test/vendor/google.golang.org/protobuf/encoding/protodelim/protodelim.go is excluded by !**/vendor/**
  • test/vendor/google.golang.org/protobuf/encoding/prototext/decode.go is excluded by !**/vendor/**
  • test/vendor/google.golang.org/protobuf/internal/descfmt/stringer.go is excluded by !**/vendor/**
  • test/vendor/google.golang.org/protobuf/internal/version/version.go is excluded by !**/vendor/**
  • test/vendor/k8s.io/client-go/tools/leaderelection/resourcelock/leaselock.go is excluded by !**/vendor/**
  • test/vendor/modules.txt is excluded by !**/vendor/**
  • vendor/github.com/antlr4-go/antlr/v4/antlrdoc.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/antlr4-go/antlr/v4/atn.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/antlr4-go/antlr/v4/atn_config.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/antlr4-go/antlr/v4/input_stream.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/antlr4-go/antlr/v4/jcollect.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/antlr4-go/antlr/v4/lexer.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/antlr4-go/antlr/v4/ll1_analyzer.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/antlr4-go/antlr/v4/mutex.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/antlr4-go/antlr/v4/mutex_nomutex.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/antlr4-go/antlr/v4/parser_atn_simulator.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/antlr4-go/antlr/v4/prediction_context.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/antlr4-go/antlr/v4/recognizer.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/antlr4-go/antlr/v4/statistics.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/antlr4-go/antlr/v4/token.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/antlr4-go/antlr/v4/utils.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/google/cel-go/cel/BUILD.bazel is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/google/cel-go/cel/env.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/google/cel-go/cel/fieldpaths.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/google/cel-go/cel/folding.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/google/cel-go/cel/inlining.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/google/cel-go/cel/library.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/google/cel-go/cel/optimizer.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/google/cel-go/cel/options.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/google/cel-go/cel/program.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/google/cel-go/cel/prompt.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/google/cel-go/cel/templates/authoring.tmpl is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/google/cel-go/cel/validator.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/google/cel-go/checker/checker.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/google/cel-go/checker/cost.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/google/cel-go/checker/env.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/google/cel-go/checker/options.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/google/cel-go/checker/scopes.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/google/cel-go/common/ast/ast.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/google/cel-go/common/ast/conversion.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/google/cel-go/common/containers/container.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/google/cel-go/common/debug/debug.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/google/cel-go/common/decls/decls.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/google/cel-go/common/doc.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/google/cel-go/common/env/BUILD.bazel is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/google/cel-go/common/env/env.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/google/cel-go/common/env/io.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/google/cel-go/common/functions/functions.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/google/cel-go/common/overloads/overloads.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/google/cel-go/common/runes/buffer.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/google/cel-go/common/source.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/google/cel-go/common/stdlib/standard.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/google/cel-go/common/types/BUILD.bazel is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/google/cel-go/common/types/bool.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/google/cel-go/common/types/bytes.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/google/cel-go/common/types/double.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/google/cel-go/common/types/duration.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/google/cel-go/common/types/err.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/google/cel-go/common/types/int.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/google/cel-go/common/types/json_value.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/google/cel-go/common/types/list.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/google/cel-go/common/types/map.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/google/cel-go/common/types/null.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/google/cel-go/common/types/object.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/google/cel-go/common/types/optional.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/google/cel-go/common/types/pb/file.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/google/cel-go/common/types/pb/pb.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/google/cel-go/common/types/pb/type.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/google/cel-go/common/types/provider.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/google/cel-go/common/types/ref/provider.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/google/cel-go/common/types/string.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/google/cel-go/common/types/timestamp.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/google/cel-go/common/types/uint.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/google/cel-go/common/types/unknown.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/google/cel-go/ext/BUILD.bazel is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/google/cel-go/ext/README.md is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/google/cel-go/ext/bindings.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/google/cel-go/ext/comprehensions.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/google/cel-go/ext/costs.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/google/cel-go/ext/encoders.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/google/cel-go/ext/extension_option_factory.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/google/cel-go/ext/formatting.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/google/cel-go/ext/formatting_v2.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/google/cel-go/ext/lists.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/google/cel-go/ext/native.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/google/cel-go/ext/network.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/google/cel-go/ext/regex.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/google/cel-go/ext/sets.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/google/cel-go/ext/strings.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/google/cel-go/interpreter/BUILD.bazel is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/google/cel-go/interpreter/activation.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/google/cel-go/interpreter/attribute_patterns.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/google/cel-go/interpreter/attributes.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/google/cel-go/interpreter/decorators.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/google/cel-go/interpreter/frame.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/google/cel-go/interpreter/interpretable.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/google/cel-go/interpreter/interpreter.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/google/cel-go/interpreter/planner.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/google/cel-go/interpreter/runtimecost.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/google/cel-go/parser/helper.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/google/cel-go/parser/parser.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/google/cel-go/parser/unparser.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/prometheus/client_golang/internal/github.com/golang/gddo/httputil/header/header.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/prometheus/client_golang/prometheus/collectors/go_collector_go116.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/prometheus/client_golang/prometheus/collectors/go_collector_latest.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/prometheus/client_golang/prometheus/counter.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/prometheus/client_golang/prometheus/desc.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/prometheus/client_golang/prometheus/expvar_collector.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/prometheus/client_golang/prometheus/gauge.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/prometheus/client_golang/prometheus/go_collector_go116.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/prometheus/client_golang/prometheus/go_collector_latest.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/prometheus/client_golang/prometheus/histogram.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/prometheus/client_golang/prometheus/internal/difflib.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/prometheus/client_golang/prometheus/labels.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/prometheus/client_golang/prometheus/metric.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/prometheus/client_golang/prometheus/process_collector_darwin.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/prometheus/client_golang/prometheus/process_collector_windows.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/prometheus/client_golang/prometheus/promhttp/http.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/prometheus/client_golang/prometheus/promhttp/instrument_client.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/prometheus/client_golang/prometheus/promhttp/instrument_server.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/prometheus/client_golang/prometheus/promhttp/option.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/prometheus/client_golang/prometheus/registry.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/prometheus/client_golang/prometheus/summary.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/prometheus/client_golang/prometheus/timer.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/prometheus/client_golang/prometheus/vec.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/prometheus/client_golang/prometheus/wrap.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/prometheus/common/expfmt/decode.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/prometheus/common/expfmt/expfmt.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/prometheus/common/expfmt/fuzz.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/prometheus/common/expfmt/openmetrics_create.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/prometheus/common/expfmt/text_create.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/prometheus/common/expfmt/text_parse.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/prometheus/common/model/labels.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/prometheus/common/model/labelset.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/prometheus/common/model/metric.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/prometheus/common/model/time.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/prometheus/common/model/value.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/prometheus/common/model/value_float.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/prometheus/common/model/value_histogram.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/prometheus/procfs/.golangci.yml is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/prometheus/procfs/Makefile is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/prometheus/procfs/Makefile.common is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/prometheus/procfs/README.md is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/prometheus/procfs/SECURITY.md is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/prometheus/procfs/arp.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/prometheus/procfs/buddyinfo.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/prometheus/procfs/cmdline.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/prometheus/procfs/cpuinfo.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/prometheus/procfs/cpuinfo_armx.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/prometheus/procfs/cpuinfo_loong64.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/prometheus/procfs/cpuinfo_mipsx.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/prometheus/procfs/cpuinfo_others.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/prometheus/procfs/cpuinfo_ppcx.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/prometheus/procfs/cpuinfo_riscvx.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/prometheus/procfs/cpuinfo_s390x.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/prometheus/procfs/cpuinfo_x86.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/prometheus/procfs/crypto.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/prometheus/procfs/doc.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/prometheus/procfs/fs.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/prometheus/procfs/fs_statfs_notype.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/prometheus/procfs/fs_statfs_type.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/prometheus/procfs/fscache.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/prometheus/procfs/internal/fs/fs.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/prometheus/procfs/internal/util/parse.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/prometheus/procfs/internal/util/readfile.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/prometheus/procfs/internal/util/sysreadfile.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/prometheus/procfs/internal/util/sysreadfile_compat.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/prometheus/procfs/internal/util/valueparser.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/prometheus/procfs/ipvs.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/prometheus/procfs/kernel_hung.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/prometheus/procfs/kernel_random.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/prometheus/procfs/loadavg.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/prometheus/procfs/mdstat.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/prometheus/procfs/meminfo.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/prometheus/procfs/mountinfo.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/prometheus/procfs/mountstats.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/prometheus/procfs/net_conntrackstat.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/prometheus/procfs/net_dev.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/prometheus/procfs/net_dev_snmp6.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/prometheus/procfs/net_ip_socket.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/prometheus/procfs/net_protocols.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/prometheus/procfs/net_route.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/prometheus/procfs/net_sockstat.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/prometheus/procfs/net_softnet.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/prometheus/procfs/net_tcp.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/prometheus/procfs/net_tls_stat.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/prometheus/procfs/net_udp.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/prometheus/procfs/net_unix.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/prometheus/procfs/net_wireless.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/prometheus/procfs/net_xfrm.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/prometheus/procfs/netstat.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/prometheus/procfs/nfnetlink_queue.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/prometheus/procfs/proc.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/prometheus/procfs/proc_cgroup.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/prometheus/procfs/proc_cgroups.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/prometheus/procfs/proc_environ.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/prometheus/procfs/proc_fdinfo.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/prometheus/procfs/proc_interrupts.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/prometheus/procfs/proc_io.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/prometheus/procfs/proc_limits.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/prometheus/procfs/proc_maps.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/prometheus/procfs/proc_netstat.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/prometheus/procfs/proc_ns.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/prometheus/procfs/proc_psi.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/prometheus/procfs/proc_smaps.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/prometheus/procfs/proc_snmp.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/prometheus/procfs/proc_snmp6.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/prometheus/procfs/proc_stat.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/prometheus/procfs/proc_statm.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/prometheus/procfs/proc_status.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/prometheus/procfs/proc_sys.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/prometheus/procfs/schedstat.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/prometheus/procfs/slab.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/prometheus/procfs/softirqs.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/prometheus/procfs/stat.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/prometheus/procfs/swaps.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/prometheus/procfs/thread.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/prometheus/procfs/vm.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/prometheus/procfs/zoneinfo.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/stoewer/go-strcase/.gitignore is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/stoewer/go-strcase/.golangci.yml is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/stoewer/go-strcase/LICENSE is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/stoewer/go-strcase/README.md is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/stoewer/go-strcase/camel.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/stoewer/go-strcase/doc.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/stoewer/go-strcase/helper.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/stoewer/go-strcase/kebab.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/stoewer/go-strcase/snake.go is excluded by !**/vendor/**, !vendor/**
  • vendor/go.etcd.io/etcd/client/pkg/v3/LICENSE is excluded by !**/vendor/**, !vendor/**
  • vendor/go.etcd.io/etcd/client/pkg/v3/transport/listener.go is excluded by !**/vendor/**, !vendor/**
  • vendor/go.etcd.io/etcd/client/pkg/v3/transport/listener_opts.go is excluded by !**/vendor/**, !vendor/**
  • vendor/go.etcd.io/etcd/client/pkg/v3/transport/listener_tls.go is excluded by !**/vendor/**, !vendor/**
  • vendor/go.etcd.io/etcd/client/pkg/v3/transport/timeout_transport.go is excluded by !**/vendor/**, !vendor/**
  • vendor/go.etcd.io/etcd/client/pkg/v3/verify/verify.go is excluded by !**/vendor/**, !vendor/**
  • vendor/golang.org/x/sys/unix/syscall_linux.go is excluded by !**/vendor/**, !vendor/**
  • vendor/golang.org/x/sys/unix/syscall_linux_386.go is excluded by !**/vendor/**, !vendor/**
  • vendor/golang.org/x/sys/unix/syscall_linux_amd64.go is excluded by !**/vendor/**, !vendor/**
  • vendor/golang.org/x/sys/unix/syscall_linux_arm.go is excluded by !**/vendor/**, !vendor/**
  • vendor/golang.org/x/sys/unix/syscall_linux_arm64.go is excluded by !**/vendor/**, !vendor/**
  • vendor/golang.org/x/sys/unix/syscall_linux_loong64.go is excluded by !**/vendor/**, !vendor/**
  • vendor/golang.org/x/sys/unix/syscall_linux_mips64x.go is excluded by !**/vendor/**, !vendor/**
  • vendor/golang.org/x/sys/unix/syscall_linux_mipsx.go is excluded by !**/vendor/**, !vendor/**
  • vendor/golang.org/x/sys/unix/syscall_linux_ppc.go is excluded by !**/vendor/**, !vendor/**
  • vendor/golang.org/x/sys/unix/syscall_linux_ppc64x.go is excluded by !**/vendor/**, !vendor/**
  • vendor/golang.org/x/sys/unix/syscall_linux_riscv64.go is excluded by !**/vendor/**, !vendor/**
  • vendor/golang.org/x/sys/unix/syscall_linux_s390x.go is excluded by !**/vendor/**, !vendor/**
  • vendor/golang.org/x/sys/unix/syscall_linux_sparc64.go is excluded by !**/vendor/**, !vendor/**
  • vendor/golang.org/x/sys/unix/zerrors_linux.go is excluded by !**/vendor/**, !vendor/**
  • vendor/golang.org/x/sys/unix/zsyscall_linux.go is excluded by !**/vendor/**, !vendor/**
  • vendor/golang.org/x/sys/unix/zsyscall_linux_386.go is excluded by !**/vendor/**, !vendor/**
  • vendor/golang.org/x/sys/unix/zsyscall_linux_amd64.go is excluded by !**/vendor/**, !vendor/**
  • vendor/golang.org/x/sys/unix/zsyscall_linux_arm.go is excluded by !**/vendor/**, !vendor/**
  • vendor/golang.org/x/sys/unix/zsyscall_linux_arm64.go is excluded by !**/vendor/**, !vendor/**
  • vendor/golang.org/x/sys/unix/zsyscall_linux_loong64.go is excluded by !**/vendor/**, !vendor/**
  • vendor/golang.org/x/sys/unix/zsyscall_linux_mips.go is excluded by !**/vendor/**, !vendor/**
  • vendor/golang.org/x/sys/unix/zsyscall_linux_mips64.go is excluded by !**/vendor/**, !vendor/**
  • vendor/golang.org/x/sys/unix/zsyscall_linux_mips64le.go is excluded by !**/vendor/**, !vendor/**
  • vendor/golang.org/x/sys/unix/zsyscall_linux_mipsle.go is excluded by !**/vendor/**, !vendor/**
  • vendor/golang.org/x/sys/unix/zsyscall_linux_ppc.go is excluded by !**/vendor/**, !vendor/**
  • vendor/golang.org/x/sys/unix/zsyscall_linux_ppc64.go is excluded by !**/vendor/**, !vendor/**
  • vendor/golang.org/x/sys/unix/zsyscall_linux_ppc64le.go is excluded by !**/vendor/**, !vendor/**
  • vendor/golang.org/x/sys/unix/zsyscall_linux_riscv64.go is excluded by !**/vendor/**, !vendor/**
  • vendor/golang.org/x/sys/unix/zsyscall_linux_s390x.go is excluded by !**/vendor/**, !vendor/**
  • vendor/golang.org/x/sys/unix/zsyscall_linux_sparc64.go is excluded by !**/vendor/**, !vendor/**
  • vendor/golang.org/x/sys/windows/security_windows.go is excluded by !**/vendor/**, !vendor/**
  • vendor/golang.org/x/sys/windows/syscall_windows.go is excluded by !**/vendor/**, !vendor/**
  • vendor/golang.org/x/sys/windows/types_windows.go is excluded by !**/vendor/**, !vendor/**
  • vendor/golang.org/x/text/unicode/norm/forminfo.go is excluded by !**/vendor/**, !vendor/**
  • vendor/golang.org/x/text/unicode/norm/iter.go is excluded by !**/vendor/**, !vendor/**
  • vendor/golang.org/x/text/unicode/norm/normalize.go is excluded by !**/vendor/**, !vendor/**
  • vendor/golang.org/x/tools/go/packages/packages.go is excluded by !**/vendor/**, !vendor/**
  • vendor/golang.org/x/tools/internal/gcimporter/iexport.go is excluded by !**/vendor/**, !vendor/**
  • vendor/golang.org/x/tools/internal/gcimporter/iimport.go is excluded by !**/vendor/**, !vendor/**
  • vendor/golang.org/x/tools/internal/stdlib/deps.go is excluded by !**/vendor/**, !vendor/**
  • vendor/golang.org/x/tools/internal/stdlib/manifest.go is excluded by !**/vendor/**, !vendor/**
  • vendor/golang.org/x/tools/internal/typesinternal/element.go is excluded by !**/vendor/**, !vendor/**
  • vendor/golang.org/x/tools/internal/typesinternal/types.go is excluded by !**/vendor/**, !vendor/**
  • vendor/golang.org/x/tools/internal/typesinternal/zerovalue.go is excluded by !**/vendor/**, !vendor/**
  • vendor/google.golang.org/grpc/balancer/balancer.go is excluded by !**/vendor/**, !vendor/**
  • vendor/google.golang.org/grpc/balancer/pickfirst/pickfirst.go is excluded by !**/vendor/**, !vendor/**
  • vendor/google.golang.org/grpc/clientconn.go is excluded by !**/vendor/**, !vendor/**
  • vendor/google.golang.org/grpc/dialoptions.go is excluded by !**/vendor/**, !vendor/**
  • vendor/google.golang.org/grpc/encoding/encoding.go is excluded by !**/vendor/**, !vendor/**
  • vendor/google.golang.org/grpc/encoding/gzip/gzip.go is excluded by !**/vendor/**, !vendor/**
  • vendor/google.golang.org/grpc/experimental/balancer/weight/weight.go is excluded by !**/vendor/**, !vendor/**
  • vendor/google.golang.org/grpc/experimental/stats/metrics.go is excluded by !**/vendor/**, !vendor/**
  • vendor/google.golang.org/grpc/health/grpc_health_v1/health_grpc.pb.go is excluded by !**/*.pb.go, !**/vendor/**, !vendor/**
  • vendor/google.golang.org/grpc/internal/envconfig/envconfig.go is excluded by !**/vendor/**, !vendor/**
  • vendor/google.golang.org/grpc/internal/envconfig/xds.go is excluded by !**/vendor/**, !vendor/**
  • vendor/google.golang.org/grpc/internal/grpcutil/encode_duration.go is excluded by !**/vendor/**, !vendor/**
  • vendor/google.golang.org/grpc/internal/mem/buffer_pool.go is excluded by !**/vendor/**, !vendor/**
  • vendor/google.golang.org/grpc/internal/resolver/config_selector.go is excluded by !**/vendor/**, !vendor/**
  • vendor/google.golang.org/grpc/internal/stats/labels.go is excluded by !**/vendor/**, !vendor/**
  • vendor/google.golang.org/grpc/internal/transport/client_stream.go is excluded by !**/vendor/**, !vendor/**
  • vendor/google.golang.org/grpc/internal/transport/controlbuf.go is excluded by !**/vendor/**, !vendor/**
  • vendor/google.golang.org/grpc/internal/transport/flowcontrol.go is excluded by !**/vendor/**, !vendor/**
  • vendor/google.golang.org/grpc/internal/transport/handler_server.go is excluded by !**/vendor/**, !vendor/**
  • vendor/google.golang.org/grpc/internal/transport/http2_client.go is excluded by !**/vendor/**, !vendor/**
  • vendor/google.golang.org/grpc/internal/transport/http2_server.go is excluded by !**/vendor/**, !vendor/**
  • vendor/google.golang.org/grpc/internal/transport/http_util.go is excluded by !**/vendor/**, !vendor/**
  • vendor/google.golang.org/grpc/internal/transport/internal/internal.go is excluded by !**/vendor/**, !vendor/**
  • vendor/google.golang.org/grpc/internal/transport/readyreader/raw_conn_linux.go is excluded by !**/vendor/**, !vendor/**
  • vendor/google.golang.org/grpc/internal/transport/readyreader/raw_conn_nonlinux.go is excluded by !**/vendor/**, !vendor/**
  • vendor/google.golang.org/grpc/internal/transport/readyreader/ready_reader.go is excluded by !**/vendor/**, !vendor/**
  • vendor/google.golang.org/grpc/internal/transport/transport.go is excluded by !**/vendor/**, !vendor/**
  • vendor/google.golang.org/grpc/mem/buffer_slice.go is excluded by !**/vendor/**, !vendor/**
  • vendor/google.golang.org/grpc/mem/buffers.go is excluded by !**/vendor/**, !vendor/**
  • vendor/google.golang.org/grpc/rpc_util.go is excluded by !**/vendor/**, !vendor/**
  • vendor/google.golang.org/grpc/server.go is excluded by !**/vendor/**, !vendor/**
  • vendor/google.golang.org/grpc/stream.go is excluded by !**/vendor/**, !vendor/**
  • vendor/google.golang.org/grpc/version.go is excluded by !**/vendor/**, !vendor/**
  • vendor/google.golang.org/protobuf/encoding/protodelim/protodelim.go is excluded by !**/vendor/**, !vendor/**
  • vendor/google.golang.org/protobuf/encoding/protojson/decode.go is excluded by !**/vendor/**, !vendor/**
  • vendor/google.golang.org/protobuf/encoding/protojson/well_known_types.go is excluded by !**/vendor/**, !vendor/**
  • vendor/google.golang.org/protobuf/encoding/prototext/decode.go is excluded by !**/vendor/**, !vendor/**
  • vendor/google.golang.org/protobuf/internal/descfmt/stringer.go is excluded by !**/vendor/**, !vendor/**
  • vendor/google.golang.org/protobuf/internal/version/version.go is excluded by !**/vendor/**, !vendor/**
  • vendor/google.golang.org/protobuf/reflect/protodesc/desc_init.go is excluded by !**/vendor/**, !vendor/**
  • vendor/k8s.io/client-go/tools/leaderelection/resourcelock/leaselock.go is excluded by !**/vendor/**, !vendor/**
  • vendor/modules.txt is excluded by !**/vendor/**, !vendor/**
📒 Files selected for processing (28)
  • Dockerfile
  • Dockerfile.plugin-test
  • Makefile
  • Tiltfile
  • apis/go.mod
  • config/base/webhook/manifests.yaml
  • config/render/capm3.yaml
  • go.mod
  • hack/ci-e2e.sh
  • hack/e2e/ensure_go.sh
  • hack/generate.sh
  • hack/gomod.sh
  • hack/tools/go.mod
  • internal/webhooks/metal3.io/v1alpha1/baremetalhost_validation.go
  • internal/webhooks/metal3.io/v1alpha1/baremetalhost_validation_test.go
  • internal/webhooks/metal3.io/v1alpha1/common_validation.go
  • internal/webhooks/metal3.io/v1alpha1/dataimage_validation.go
  • internal/webhooks/metal3.io/v1alpha1/dataimage_validation_test.go
  • internal/webhooks/metal3.io/v1alpha1/dataimage_webhook.go
  • internal/webhooks/metal3.io/v1alpha1/hostfirmwarecomponents_validation.go
  • internal/webhooks/metal3.io/v1alpha1/hostfirmwarecomponents_validation_test.go
  • internal/webhooks/metal3.io/v1alpha1/hostfirmwarecomponents_webhook.go
  • main.go
  • pkg/hardwareutils/bmc/access_test.go
  • pkg/hardwareutils/go.mod
  • test/e2e/automated_cleaning_test.go
  • test/go.mod
  • test/vbmctl/cmd/vbmctl/create.go

Comment thread hack/ci-e2e.sh
Comment on lines +109 to +136
cache_image() {
wget --no-verbose -P "${IMAGE_DIR}/" "$@"
}

ARTIFACTORY_ROOT=https://artifactory.nordix.org/artifactory

## Download disk images
if [[ ! -f "${IMAGE_DIR}/${IMAGE_FILE}" ]]; then
wget --no-verbose -P "${IMAGE_DIR}/" https://artifactory.nordix.org/artifactory/metal3/images/iso/"${IMAGE_FILE}"
if ! cache_image "${ARTIFACTORY_ROOT}/metal3/images/iso/${IMAGE_FILE}"; then
cache_image https://download.cirros-cloud.net/"${CIRROS_VERSION}/${IMAGE_FILE}"
fi
fi
if [[ ! -f "${IMAGE_DIR}/${ISO_FILE}" ]]; then
wget --no-verbose -P "${IMAGE_DIR}/" https://artifactory.nordix.org/artifactory/metal3/images/sysrescue/"${ISO_FILE}"
if ! cache_image "${ARTIFACTORY_ROOT}/metal3/images/sysrescue/${ISO_FILE}"; then
wget --no-verbose -O "${IMAGE_DIR}/${ISO_FILE}" https://sourceforge.net/projects/systemrescuecd/files/sysresccd-x86/"${SYSRESCUE_VERSION}"/"${ISO_FILE}"/download
fi
fi

## Download IPA (Ironic Python Agent) image
# Ironic IPA downloader is configured to use this local image in the tests.
# This saves time, especially during ironic upgrade tests and also
# gives us early failure in case there is some issue downloading it.
IPA_FILE="ipa-centos9-master.tar.gz"
IPA_BASEURI=https://artifactory.nordix.org/artifactory/openstack-remote/ironic-python-agent/dib/
IPA_BASEURI="${ARTIFACTORY_ROOT}/openstack-remote/ironic-python-agent/dib/"
if [[ ! -f "${IMAGE_DIR}/${IPA_FILE}" ]]; then
wget --no-verbose -P "${IMAGE_DIR}/" "${IPA_BASEURI}/${IPA_FILE}"
if ! cache_image "${IPA_BASEURI}/${IPA_FILE}"; then
cache_image https://tarballs.opendev.org/openstack/ironic-python-agent/dib/"${IPA_FILE}"
fi

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🩺 Stability & Availability | 🟠 Major | ⚡ Quick win

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
set -euo pipefail

printf 'Repository files matching ci-e2e.sh:\n'
fd -a 'ci-e2e\.sh$' . || true

printf '\nFile excerpt with line numbers:\n'
if [ -f hack/ci-e2e.sh ]; then
  nl -ba hack/ci-e2e.sh | sed -n '90,150p'
fi

printf '\nSearch for IMAGE_DIR/IMAGE_FILE/ISO_FILE/IPA handling elsewhere in script:\n'
rg -n 'IMAGE_DIR|IMAGE_FILE|ISO_FILE|IPA_FILE|cache_image|wget|download' hack/ci-e2e.sh || true

printf '\nBehavioral probe: how bash -f treats zero/partial files and wget default naming:\n'
python3 - <<'PY'
import subprocess, tempfile, os
with tempfile.Traffic() as d:
    pass
PY
tmp="$(mktemp -d)"
printf 'tmpdir=%s\n' "$tmp"
for path in "$tmp/empty" "$tmp/partial" "$tmp/nonexistent"; do
  [ -f "$path" ] && echo "$path exists" || echo "$path missing"
  [ -s "$path" ] && echo "$path non-empty" || echo "$path empty-or-missing"
  if [ -f "$path" ]; then wc -c < "$path"; fi
done
rm -rf "$tmp"

Repository: openshift/baremetal-operator

Length of output: 310


🏁 Script executed:

#!/bin/bash
set -euo pipefail

printf 'Repository files matching ci-e2e.sh:\n'
fd -a 'ci-e2e\.sh$' . || true

printf '\nFile excerpt with line numbers:\n'
if [ -f hack/ci-e2e.sh ]; then
  nl -ba hack/ci-e2e.sh | sed -n '90,150p'
fi

printf '\nSearch for IMAGE_DIR/IMAGE_FILE/ISO_FILE/IPA handling elsewhere in script:\n'
rg -n 'IMAGE_DIR|IMAGE_FILE|ISO_FILE|IPA_FILE|cache_image|wget|download' hack/ci-e2e.sh || true

printf '\nBehavioral probe: how bash -f treats zero/partial files:\n'
tmp="$(mktemp -d)"
for path in "$tmp/empty" "$tmp/partial" "$tmp/nonexistent"; do
  [ -f "$path" ] && echo "$path exists" || echo "$path missing"
  [ -s "$path" ] && echo "$path non-empty" || echo "$path empty-or-missing"
  if [ -f "$path" ]; then wc -c < "$path"; fi
done
rm -rf "$tmp"

Repository: openshift/baremetal-operator

Length of output: 310


🏁 Script executed:

#!/bin/bash
set -euo pipefail

FILE=hack/ci-e2e.sh

printf 'File exists and size:\n'
if [ -f "$FILE" ]; then
  count=$(wc -l < "$FILE")
  printf '%s lines\n' "$count"
else
  printf 'missing\n'
fi

printf '\nRelevant excerpts:\n'
awk 'NR>=100 && NR<=145 {printf "%6d\t%s\n", NR, $0}' "$FILE"

printf '\nSearch for relevant symbols/paths:\n'
rg -n 'cache_image|IMAGE_DIR|IMAGE_FILE|ISO_FILE|IPA_FILE|ARTIFACTORY_ROOT|sourceforge|download\.opendev\.org|sysrescc|metal3/images' "$FILE" || true

printf '\nBehavioral probe for bash [ -f ] and [ -s ]:\n'
tmp="$(mktemp -d)"
trap 'rm -rf "$tmp"' EXIT
for path in "$tmp/empty" "$tmp/partial" "$tmp/nonexistent"; do
  [ -f "$path" ] && echo "$path: exists" || echo "$path: missing"
  [ -s "$path" ] && echo "$path: non-empty" || echo "$path: empty-or-missing"
done
printf '\nBehavioral probe: wget default name for https path without final / download path:\n'
for url in \
  'https://server/artifact' \
  'https://server/articles/iso/IMAGE' \
  'https://download.cirros-cloud.net/CIRROS_VERSION/IMAGE' \
  'https://example/path/download'
do
  python3 - "$url" <<'PY'
import urllib.parse, sys
url = sys.argv[1]
parts = urllib.parse.urlparse(url).path.rstrip('/').split('/')
print('/'.join(parts[-1:]))
PY
done

Repository: openshift/baremetal-operator

Length of output: 4705


Download artifacts to a temporary file before treating them as cached.

wget writes directly to the final cache path here, so an interrupted Artifactory or fallback download can leave a zero-byte or incomplete file that the [[ -f ... ]] checks accept as a cache hit. Download to a temporary path first, then move it into place on success; apply the same approach to the SourceForge ISO download.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@hack/ci-e2e.sh` around lines 109 - 136, Update cache_image and the
SourceForge ISO download flow to write into temporary files within IMAGE_DIR,
moving each temporary file to its final cache path only after wget succeeds.
Ensure failed or interrupted Artifactory and fallback downloads cannot leave
partial files that satisfy the existing -f cache checks, and apply the same
atomic handling to IMAGE_FILE, ISO_FILE, and IPA_FILE downloads.

Comment on lines +49 to +68
func (webhook *DataImage) ValidateCreate(_ context.Context, dataimg *metal3api.DataImage) (admission.Warnings, error) {
if dataimg == nil {
dataimagelog.Error(errors.New("object is nil"), "validate create error")
return nil, nil
}

dataimagelog.Info("validate create", "namespace", dataimg.Namespace, "name", dataimg.Name)
return nil, kerrors.NewAggregate(webhook.validateDataImage(dataimg))
}

// ValidateUpdate implements webhook.Validator so a webhook will be registered for the type.
func (webhook *DataImage) ValidateUpdate(_ context.Context, oldImg, newImg *metal3api.DataImage) (admission.Warnings, error) {
if oldImg == nil {
dataimagelog.Error(errors.New("old object is nil"), "validate update error")
return nil, nil
}

if newImg == nil {
dataimagelog.Error(fmt.Errorf("new object is nil for %s/%s", oldImg.Namespace, oldImg.Name), "validate update error")
return nil, nil

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🔒 Security & Privacy | 🟠 Major | ⚡ Quick win

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
set -euo pipefail

echo "== files =="
git ls-files | rg 'dataimage_webhook\.go|hostfirmwarecomponents_webhook\.go$' || true

echo "== relevant snippets =="
for f in internal/webhooks/metal3.io/v1alpha1/dataimage_webhook.go internal/webhooks/metal3.io/v1alpha1/hostfirmwarecomponents_webhook.go; do
  if [ -f "$f" ]; then
    echo "--- $f ---"
    sed -n '1,160p' "$f" | nl -ba
  fi
done

echo "== imports/types/context around webhooks =="
rg -n "type DataImage|func \\(webhook \\*DataImage\\) Validate(Create|Update)|type .*Firmware.*Components|func \\(webhook \\*HostFirmwareComponents\\) Validate(Create|Update)|Validate(object|oldObject|newObject|nil)|nil" -S internal/webhooks || true

Repository: openshift/baremetal-operator

Length of output: 438


🏁 Script executed:

#!/bin/bash
set -euo pipefail

# Behavioral check for the control-flow semantics if object nil handling is removed/changed.
python3 - <<'PY'
def current_dataimage(dataimg):
    errors = []
    if dataimg is None:
        errors.append("nil create object")
        return None, None
    return None, "aggregate:" + str(errors)

def current_update(oldimg, newimg):
    errors = []
    if oldimg is None:
        errors.append("nil old object")
        return None, None
    if newimg is None:
        errors.append(f"nil new object for {oldimg}")
        return None, None
    return None, "aggregate:" + str(errors)

for name, fn in [("ValidateCreate(nil)", lambda: current_dataimage(None)),
                 ("ValidateUpdate(nil, nil)", lambda: current_update(None, None)),
                 ("ValidateUpdate(1, nil)", lambda: current_update(1, None)),
                 ("ValidateUpdate(1, 2)", lambda: current_update(1, 2))]:
    warnings, err = fn()
    print(f"{name}: warnings={warnings!r}, err={err!r}, closed={err is not None}")
PY

Repository: openshift/baremetal-operator

Length of output: 420


🏁 Script executed:

#!/bin/bash
set -efo pipefail

echo "== relevant snippets =="
for f in internal/webhooks/metal3.io/v1alpha1/dataimage_webhook.go internal/webhooks/metal3.io/v1alpha1/hostfirmwarecomponents_webhook.go; do
  if [ -f "$f" ]; then
    echo "--- $f ---"
    awk '{printf "%5d\t%s\n", NR, $0}' "$f" | sed -n '1,160p'
  fi
done

echo "== webhook nil handling occurrences =="
rg -n 'Validate(Create|Update)|object is nil|old object is nil|new object is nil|return nil, nil|return nil, kerrors.NewAggregate|validate(D|H).*Components|validate.*Image' -S internal/webhooks || true

echo "== go tool availability =="
command -v go || true
go version 2>/dev/null || true

Repository: openshift/baremetal-operator

Length of output: 22261


Fail closed for nil webhook objects.

  • internal/webhooks/metal3.io/v1alpha1/dataimage_webhook.go#L49-L68 returns nil, nil when Create or Update objects are nil.
  • internal/webhooks/metal3.io/v1alpha1/hostfirmwarecomponents_webhook.go#L54-L72 does the same.
    Return a non-nil validation error in these checks so nil webhook input is rejected rather than implicitly admitted.
📍 Affects 2 files
  • internal/webhooks/metal3.io/v1alpha1/dataimage_webhook.go#L49-L68 (this comment)
  • internal/webhooks/metal3.io/v1alpha1/hostfirmwarecomponents_webhook.go#L54-L72
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@internal/webhooks/metal3.io/v1alpha1/dataimage_webhook.go` around lines 49 -
68, Make the nil-object checks in DataImage.ValidateCreate and
DataImage.ValidateUpdate return a non-nil validation error instead of nil, nil,
rejecting missing webhook input while preserving the existing logging. Apply the
same fail-closed change to HostFirmwareComponents.ValidateCreate and
HostFirmwareComponents.ValidateUpdate in
internal/webhooks/metal3.io/v1alpha1/hostfirmwarecomponents_webhook.go (lines
54-72).

@hroyrh hroyrh changed the title Merge upstream 2026 07 30 NO-ISSUE: Merge upstream 2026-07-30 Jul 31, 2026
@openshift-ci-robot openshift-ci-robot added the jira/valid-reference Indicates that this PR references a valid Jira ticket of any type. label Jul 31, 2026
@openshift-ci-robot

Copy link
Copy Markdown

@hroyrh: This pull request explicitly references no jira issue.

Details

In response to this:

Summary by CodeRabbit

  • New Features

  • Added admission validation for DataImage and HostFirmwareComponents resources.

  • Added URL validation supporting HTTP, HTTPS, FTP, Gopher, and OCI schemes while rejecting unsupported or malformed URLs.

  • Added TLS support for additional ML-KEM curve preferences.

  • Bug Fixes

  • Improved end-to-end test image downloads with caching and fallback sources.

  • Ensured automated cleaning is disabled after verification.

  • Maintenance

  • Updated the project’s Go toolchain and Kubernetes dependencies.

Instructions for interacting with me using PR comments are available here. If you have questions or suggestions related to my behavior, please file an issue against the openshift-eng/jira-lifecycle-plugin repository.

@elfosardo

Copy link
Copy Markdown

/approve

@openshift-ci

openshift-ci Bot commented Jul 31, 2026

Copy link
Copy Markdown

[APPROVALNOTIFIER] This PR is APPROVED

This pull-request has been approved by: elfosardo, hroyrh

The full list of commands accepted by this bot can be found here.

The pull request process is described here

Details Needs approval from an approver in each of these files:

Approvers can indicate their approval by writing /approve in a comment
Approvers can cancel approval by writing /approve cancel in a comment

@openshift-ci openshift-ci Bot added the approved Indicates a PR has been approved by an approver from all required OWNERS files. label Jul 31, 2026
@jadhaj

jadhaj commented Jul 31, 2026

Copy link
Copy Markdown

/verified later @jadhaj

@openshift-ci-robot openshift-ci-robot added verified-later verified Signifies that the PR passed pre-merge verification criteria labels Jul 31, 2026
@openshift-ci-robot

Copy link
Copy Markdown

@jadhaj: This PR has been marked to be verified later by @jadhaj.

Details

In response to this:

/verified later @jadhaj

Instructions for interacting with me using PR comments are available here. If you have questions or suggestions related to my behavior, please file an issue against the openshift-eng/jira-lifecycle-plugin repository.

@dtantsur

Copy link
Copy Markdown
Member

/lgtm

Who in the right mind approved inclusion of FTP and Gopher in the schema list? Oo

@openshift-ci openshift-ci Bot added the lgtm Indicates that a PR is ready to be merged. label Jul 31, 2026
@openshift-merge-bot
openshift-merge-bot Bot merged commit 34bbeb3 into openshift:main Jul 31, 2026
11 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

approved Indicates a PR has been approved by an approver from all required OWNERS files. jira/valid-reference Indicates that this PR references a valid Jira ticket of any type. lgtm Indicates that a PR is ready to be merged. verified Signifies that the PR passed pre-merge verification criteria verified-later

Projects

None yet

Development

Successfully merging this pull request may close these issues.

9 participants