Skip to content

OCPBUGS-80970: Add Ignition v3.6 support to Machine Config Server#5815

Closed
zaneb wants to merge 1 commit into
openshift:mainfrom
zaneb:ignition-3.6
Closed

OCPBUGS-80970: Add Ignition v3.6 support to Machine Config Server#5815
zaneb wants to merge 1 commit into
openshift:mainfrom
zaneb:ignition-3.6

Conversation

@zaneb

@zaneb zaneb commented Mar 27, 2026

Copy link
Copy Markdown
Member

Ignition has been updated to version 2.26.0 in CoreOS, which introduces v3.6 of the config format. v2.26 sends the following Accept header:

application/vnd.coreos.ignition+json;version=3.6.0, */*;q=0.1

The Machine Config Server will not return earlier versions of the ignition format than requested in the Accepts header, so it was returning 400 Bad Request. This occurred because the converter only supported up to v3.5.

Upgrade github.com/coreos/ignition/v2 from v2.20.0 to v2.26.0, which includes v3.6 support. Add v3.5->v3.6 upward converter to the ignition converter's buildConverterList().

The MCS now supports Ignition spec versions: 2.2, 3.0, 3.1, 3.2, 3.3, 3.4, 3.5, and 3.6.

@openshift-ci-robot openshift-ci-robot added jira/severity-critical Referenced Jira bug's severity is critical for the branch this PR is targeting. jira/valid-reference Indicates that this PR references a valid Jira ticket of any type. jira/invalid-bug Indicates that a referenced Jira bug is invalid for the branch this PR is targeting. labels Mar 27, 2026
@openshift-ci-robot

Copy link
Copy Markdown
Contributor

@zaneb: This pull request references Jira Issue OCPBUGS-80970, which is invalid:

  • expected the bug to target the "4.22.0" version, but no target version was set

Comment /jira refresh to re-evaluate validity if changes to the Jira bug are made, or edit the title of this pull request to link to a different bug.

The bug has been updated to refer to the pull request using the external bug tracker.

Details

In response to this:

Ignition has been updated to version 2.26.0 in CoreOS, which introduces v3.6 of the config format. v2.26 sends the following Accept header:

application/vnd.coreos.ignition+json;version=3.6.0, /;q=0.1

The Machine Config Server will not return earlier versions of the ignition format than requested in the Accepts header, so it was returning 400 Bad Request. This occurred because the converter only supported up to v3.5.

Upgrade github.com/coreos/ignition/v2 from v2.20.0 to v2.26.0, which includes v3.6 support. Add v3.5->v3.6 upward converter to the ignition converter's buildConverterList().

The MCS now supports Ignition spec versions: 2.2, 3.0, 3.1, 3.2, 3.3, 3.4, 3.5, and 3.6.

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.

@coderabbitai

coderabbitai Bot commented Mar 27, 2026

Copy link
Copy Markdown

Walkthrough

The PR updates Go module dependencies to newer versions and adds support for Ignition specification version 3.6 by registering a new v3.5→v3.6 converter, updating related tests, and extending API acceptance headers to handle the new version.

Changes

Cohort / File(s) Summary
Dependency Updates
go.mod
Updated multiple Go module dependencies including github.com/coreos/ignition/v2 (v2.20.0→v2.26.0), golang.org/x/* packages, google.golang.org/* packages, and swapped AWS SDK from v1 to v2. Also updated indirect dependencies for jose, opentelemetry, and protobuf.
Ignition 3.6 Converter Support
pkg/controller/common/ignition_converter.go
Added imports for v3.6 translator and types, registered new typed converter entry in buildConverterList to enable v3.5→v3.6 conversions.
Test Extensions for Ignition 3.6
pkg/controller/common/helpers_test.go, pkg/server/api_test.go
Updated TestIgnitionConverterGetSupportedMinorVersions to include "3.6" in supported versions; extended TestAcceptHeaders with v3.6 semver handling, new accept header scenario, and request helper for setting v3.6 accept headers.

Estimated code review effort

🎯 2 (Simple) | ⏱️ ~12 minutes

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests

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

@openshift-ci openshift-ci Bot requested review from djoshy and dkhater-redhat March 27, 2026 01:30
@zaneb

zaneb commented Mar 27, 2026

Copy link
Copy Markdown
Member Author

/jira refresh

@openshift-ci-robot

Copy link
Copy Markdown
Contributor

@zaneb: This pull request references Jira Issue OCPBUGS-80970, which is invalid:

  • expected the bug to target the "4.22.0" version, but no target version was set

Comment /jira refresh to re-evaluate validity if changes to the Jira bug are made, or edit the title of this pull request to link to a different bug.

Details

In response to this:

/jira refresh

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.

@zaneb

zaneb commented Mar 27, 2026

Copy link
Copy Markdown
Member Author

/jira refresh

@openshift-ci-robot openshift-ci-robot added jira/valid-bug Indicates that a referenced Jira bug is valid for the branch this PR is targeting. and removed jira/invalid-bug Indicates that a referenced Jira bug is invalid for the branch this PR is targeting. labels Mar 27, 2026
@openshift-ci-robot

Copy link
Copy Markdown
Contributor

@zaneb: This pull request references Jira Issue OCPBUGS-80970, which is valid. The bug has been moved to the POST state.

3 validation(s) were run on this bug
  • bug is open, matching expected state (open)
  • bug target version (4.22.0) matches configured target version for branch (4.22.0)
  • bug is in the state New, which is one of the valid states (NEW, ASSIGNED, POST)
Details

In response to this:

/jira refresh

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.

Ignition has been updated to version 2.26.0 in CoreOS, which introduces
v3.6 of the config format. v2.26 sends the following Accept header:

    application/vnd.coreos.ignition+json;version=3.6.0, */*;q=0.1

The Machine Config Server will not return earlier versions of the
ignition format than requested in the Accepts header, so it was
returning 400 Bad Request. This occurred because the converter only
supported up to v3.5.

Upgrade github.com/coreos/ignition/v2 from v2.20.0 to v2.26.0, which
includes v3.6 support. Add v3.5->v3.6 upward converter to the
ignition converter's buildConverterList().

The MCS now supports Ignition spec versions: 2.2, 3.0, 3.1, 3.2,
3.3, 3.4, 3.5, and 3.6.

Assisted-by: Claude Code
@bfournie

Copy link
Copy Markdown
Contributor

/lgtm

@openshift-ci openshift-ci Bot added the lgtm Indicates that a PR is ready to be merged. label Mar 27, 2026

@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: 1

🧹 Nitpick comments (2)
pkg/controller/common/helpers_test.go (1)

143-143: Add one explicit converter-path test for 3.5.0 -> 3.6.0.

This assertion verifies advertised support, but not the actual conversion execution path. A single case in TestIgnitionConverterConvert would harden regression coverage for this fix.

Proposed test table addition
@@ func TestIgnitionConverterConvert(t *testing.T) {
 		{
 			name:          "Conversion from 3.5 to 3.1",
 			inputConfig:   ign3Config,
 			inputVersion:  "3.5.0",
 			outputVersion: "3.1.0",
 		},
+		{
+			name:          "Conversion from 3.5 to 3.6",
+			inputConfig:   ign3Config,
+			inputVersion:  "3.5.0",
+			outputVersion: "3.6.0",
+		},
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@pkg/controller/common/helpers_test.go` at line 143, Add a concrete test row
to TestIgnitionConverterConvert that exercises the actual converter execution
path from "3.5.0" -> "3.6.0" (not just the supported list); locate the test
table in pkg/controller/common/helpers_test.go inside
TestIgnitionConverterConvert and add a case with input version "3.5.0" and
target "3.6.0" (ensuring it asserts the expected converter behavior/output used
by the Convert function) so the conversion logic for that upgrade is explicitly
exercised rather than only advertised via the supported slice.
pkg/server/api_test.go (1)

277-280: Use the new v3.6 header helper in a TestAPIHandler scenario.

Line 277 adds the helper, but current handler scenarios don’t exercise it. Adding one v3.6 request case would verify end-to-end behavior for this bugfix path.

Proposed `TestAPIHandler` scenario addition
@@ func TestAPIHandler(t *testing.T) {
 		{
 			name:    "get spec v3_5 config path that exists",
 			request: setV3_5AcceptHeaderOnReq(httptest.NewRequest(http.MethodGet, "http://testrequest/config/master", nil)),
@@
 			},
 		},
+		{
+			name:    "get spec v3_6 config path that exists",
+			request: setV3_6AcceptHeaderOnReq(httptest.NewRequest(http.MethodGet, "http://testrequest/config/master", nil)),
+			serverFunc: func(poolRequest) (*runtime.RawExtension, error) {
+				return &runtime.RawExtension{
+					Raw: helpers.MarshalOrDie(ctrlcommon.NewIgnConfig()),
+				}, nil
+			},
+			checkResponse: func(t *testing.T, response *http.Response) {
+				checkStatus(t, response, http.StatusOK)
+				checkContentType(t, response, "application/json")
+				checkContentLength(t, response, expectedContentLength)
+				checkBodyLength(t, response, expectedContentLength)
+			},
+		},
 	}
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@pkg/server/api_test.go` around lines 277 - 280, The new helper
setV3_6AcceptHeaderOnReq is never exercised; add a test case inside the existing
TestAPIHandler table-driven scenarios that constructs the same base request used
by other cases but passes it through setV3_6AcceptHeaderOnReq before invoking
the handler (the test should call the same handler function used by
TestAPIHandler), then assert the expected status code and response body for the
v3.6 Accept header path; place the scenario alongside the other cases so it runs
as part of TestAPIHandler and use the same assertion helpers the test suite uses
to validate output.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In `@go.mod`:
- Line 55: Update the gRPC-Go dependency to v1.79.3 or later to address
CVE-2026-33186: change the google.golang.org/grpc version in go.mod (the
dependency entry for google.golang.org/grpc) to v1.79.3+, run `go get
google.golang.org/grpc@v1.79.3` (or newer), then run `go mod tidy` to update
go.sum and ensure the module graph is clean, run the test suite and any CI
vulnerability checks, and commit the updated go.mod and go.sum (and vendor files
if your repo vendors dependencies).

---

Nitpick comments:
In `@pkg/controller/common/helpers_test.go`:
- Line 143: Add a concrete test row to TestIgnitionConverterConvert that
exercises the actual converter execution path from "3.5.0" -> "3.6.0" (not just
the supported list); locate the test table in
pkg/controller/common/helpers_test.go inside TestIgnitionConverterConvert and
add a case with input version "3.5.0" and target "3.6.0" (ensuring it asserts
the expected converter behavior/output used by the Convert function) so the
conversion logic for that upgrade is explicitly exercised rather than only
advertised via the supported slice.

In `@pkg/server/api_test.go`:
- Around line 277-280: The new helper setV3_6AcceptHeaderOnReq is never
exercised; add a test case inside the existing TestAPIHandler table-driven
scenarios that constructs the same base request used by other cases but passes
it through setV3_6AcceptHeaderOnReq before invoking the handler (the test should
call the same handler function used by TestAPIHandler), then assert the expected
status code and response body for the v3.6 Accept header path; place the
scenario alongside the other cases so it runs as part of TestAPIHandler and use
the same assertion helpers the test suite uses to validate output.
🪄 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: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: c21a3802-432c-47ef-a71b-90babaebdac3

📥 Commits

Reviewing files that changed from the base of the PR and between cf6b532 and 4916ba6.

⛔ Files ignored due to path filters (293)
  • go.sum is excluded by !**/*.sum
  • vendor/github.com/aws/aws-sdk-go-v2/LICENSE.txt is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/aws/aws-sdk-go-v2/NOTICE.txt is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/aws/aws-sdk-go-v2/aws/arn/arn.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/coreos/go-systemd/v22/dbus/dbus.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/coreos/go-systemd/v22/dbus/methods.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/coreos/go-systemd/v22/dbus/subscription.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/coreos/go-systemd/v22/dbus/subscription_set.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/coreos/go-systemd/v22/journal/journal.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/coreos/go-systemd/v22/journal/journal_unix.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/coreos/go-systemd/v22/unit/deserialize.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/coreos/go-systemd/v22/unit/doc.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/coreos/go-systemd/v22/unit/option.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/coreos/go-systemd/v22/unit/serialize.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/coreos/ignition/v2/config/shared/errors/errors.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/coreos/ignition/v2/config/v3_4/translate/translate.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/coreos/ignition/v2/config/v3_4/types/directory.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/coreos/ignition/v2/config/v3_4/types/file.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/coreos/ignition/v2/config/v3_4/types/mode.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/coreos/ignition/v2/config/v3_4/types/url.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/coreos/ignition/v2/config/v3_5/types/directory.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/coreos/ignition/v2/config/v3_5/types/file.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/coreos/ignition/v2/config/v3_5/types/mode.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/coreos/ignition/v2/config/v3_5/types/url.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/coreos/ignition/v2/config/v3_6/translate/translate.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/coreos/ignition/v2/config/v3_6/types/cex.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/coreos/ignition/v2/config/v3_6/types/clevis.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/coreos/ignition/v2/config/v3_6/types/config.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/coreos/ignition/v2/config/v3_6/types/device.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/coreos/ignition/v2/config/v3_6/types/directory.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/coreos/ignition/v2/config/v3_6/types/disk.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/coreos/ignition/v2/config/v3_6/types/file.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/coreos/ignition/v2/config/v3_6/types/filesystem.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/coreos/ignition/v2/config/v3_6/types/headers.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/coreos/ignition/v2/config/v3_6/types/ignition.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/coreos/ignition/v2/config/v3_6/types/kargs.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/coreos/ignition/v2/config/v3_6/types/luks.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/coreos/ignition/v2/config/v3_6/types/mode.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/coreos/ignition/v2/config/v3_6/types/node.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/coreos/ignition/v2/config/v3_6/types/partition.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/coreos/ignition/v2/config/v3_6/types/passwd.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/coreos/ignition/v2/config/v3_6/types/path.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/coreos/ignition/v2/config/v3_6/types/proxy.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/coreos/ignition/v2/config/v3_6/types/raid.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/coreos/ignition/v2/config/v3_6/types/resource.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/coreos/ignition/v2/config/v3_6/types/schema.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/coreos/ignition/v2/config/v3_6/types/storage.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/coreos/ignition/v2/config/v3_6/types/systemd.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/coreos/ignition/v2/config/v3_6/types/tang.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/coreos/ignition/v2/config/v3_6/types/tls.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/coreos/ignition/v2/config/v3_6/types/unit.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/coreos/ignition/v2/config/v3_6/types/url.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/coreos/ignition/v2/config/v3_6/types/verification.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/coreos/ignition/v2/config/validate/validate.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/go-jose/go-jose/v4/CHANGELOG.md is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/go-jose/go-jose/v4/README.md is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/go-jose/go-jose/v4/crypter.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/go-jose/go-jose/v4/jwe.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/go-jose/go-jose/v4/jwk.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/go-jose/go-jose/v4/jws.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/go-jose/go-jose/v4/shared.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/go-jose/go-jose/v4/signing.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/go-jose/go-jose/v4/symmetric.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/spf13/pflag/flag.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc/LICENSE is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc/config.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc/interceptor.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc/internal/parse.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc/metadata_supplier.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc/semconv.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc/stats_handler.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc/version.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/semconv/v1.37.0/rpcconv/metric.go is excluded by !vendor/**, !**/vendor/**
  • vendor/golang.org/x/mod/modfile/print.go is excluded by !vendor/**, !**/vendor/**
  • vendor/golang.org/x/mod/modfile/read.go is excluded by !vendor/**, !**/vendor/**
  • vendor/golang.org/x/mod/modfile/rule.go is excluded by !vendor/**, !**/vendor/**
  • vendor/golang.org/x/mod/module/module.go is excluded by !vendor/**, !**/vendor/**
  • vendor/golang.org/x/mod/semver/semver.go is excluded by !vendor/**, !**/vendor/**
  • vendor/golang.org/x/net/http2/transport.go is excluded by !vendor/**, !**/vendor/**
  • vendor/golang.org/x/net/http2/writesched_priority_rfc9218.go is excluded by !vendor/**, !**/vendor/**
  • vendor/golang.org/x/net/trace/events.go is excluded by !vendor/**, !**/vendor/**
  • vendor/golang.org/x/net/websocket/hybi.go is excluded by !vendor/**, !**/vendor/**
  • vendor/golang.org/x/oauth2/deviceauth.go is excluded by !vendor/**, !**/vendor/**
  • vendor/golang.org/x/oauth2/oauth2.go is excluded by !vendor/**, !**/vendor/**
  • vendor/golang.org/x/oauth2/pkce.go is excluded by !vendor/**, !**/vendor/**
  • vendor/golang.org/x/oauth2/token.go is excluded by !vendor/**, !**/vendor/**
  • vendor/golang.org/x/oauth2/transport.go is excluded by !vendor/**, !**/vendor/**
  • vendor/golang.org/x/sync/errgroup/errgroup.go is excluded by !vendor/**, !**/vendor/**
  • vendor/golang.org/x/term/terminal.go is excluded by !vendor/**, !**/vendor/**
  • vendor/golang.org/x/text/encoding/japanese/eucjp.go is excluded by !vendor/**, !**/vendor/**
  • vendor/golang.org/x/text/encoding/japanese/iso2022jp.go is excluded by !vendor/**, !**/vendor/**
  • vendor/golang.org/x/text/encoding/japanese/shiftjis.go is excluded by !vendor/**, !**/vendor/**
  • vendor/golang.org/x/text/encoding/korean/euckr.go is excluded by !vendor/**, !**/vendor/**
  • vendor/golang.org/x/text/encoding/simplifiedchinese/gbk.go is excluded by !vendor/**, !**/vendor/**
  • vendor/golang.org/x/text/encoding/simplifiedchinese/hzgb2312.go is excluded by !vendor/**, !**/vendor/**
  • vendor/golang.org/x/text/encoding/traditionalchinese/big5.go is excluded by !vendor/**, !**/vendor/**
  • vendor/golang.org/x/text/encoding/unicode/unicode.go is excluded by !vendor/**, !**/vendor/**
  • vendor/golang.org/x/time/rate/rate.go is excluded by !vendor/**, !**/vendor/**
  • vendor/golang.org/x/time/rate/sometimes.go is excluded by !vendor/**, !**/vendor/**
  • vendor/golang.org/x/tools/go/analysis/diagnostic.go is excluded by !vendor/**, !**/vendor/**
  • vendor/golang.org/x/tools/go/analysis/passes/appends/appends.go is excluded by !vendor/**, !**/vendor/**
  • vendor/golang.org/x/tools/go/analysis/passes/asmdecl/asmdecl.go is excluded by !vendor/**, !**/vendor/**
  • vendor/golang.org/x/tools/go/analysis/passes/assign/assign.go is excluded by !vendor/**, !**/vendor/**
  • vendor/golang.org/x/tools/go/analysis/passes/atomic/atomic.go is excluded by !vendor/**, !**/vendor/**
  • vendor/golang.org/x/tools/go/analysis/passes/bools/bools.go is excluded by !vendor/**, !**/vendor/**
  • vendor/golang.org/x/tools/go/analysis/passes/buildssa/buildssa.go is excluded by !vendor/**, !**/vendor/**
  • vendor/golang.org/x/tools/go/analysis/passes/buildtag/buildtag.go is excluded by !vendor/**, !**/vendor/**
  • vendor/golang.org/x/tools/go/analysis/passes/cgocall/cgocall.go is excluded by !vendor/**, !**/vendor/**
  • vendor/golang.org/x/tools/go/analysis/passes/copylock/copylock.go is excluded by !vendor/**, !**/vendor/**
  • vendor/golang.org/x/tools/go/analysis/passes/ctrlflow/ctrlflow.go is excluded by !vendor/**, !**/vendor/**
  • vendor/golang.org/x/tools/go/analysis/passes/deepequalerrors/deepequalerrors.go is excluded by !vendor/**, !**/vendor/**
  • vendor/golang.org/x/tools/go/analysis/passes/defers/defers.go is excluded by !vendor/**, !**/vendor/**
  • vendor/golang.org/x/tools/go/analysis/passes/directive/directive.go is excluded by !vendor/**, !**/vendor/**
  • vendor/golang.org/x/tools/go/analysis/passes/errorsas/errorsas.go is excluded by !vendor/**, !**/vendor/**
  • vendor/golang.org/x/tools/go/analysis/passes/fieldalignment/fieldalignment.go is excluded by !vendor/**, !**/vendor/**
  • vendor/golang.org/x/tools/go/analysis/passes/framepointer/framepointer.go is excluded by !vendor/**, !**/vendor/**
  • vendor/golang.org/x/tools/go/analysis/passes/ifaceassert/ifaceassert.go is excluded by !vendor/**, !**/vendor/**
  • vendor/golang.org/x/tools/go/analysis/passes/inspect/inspect.go is excluded by !vendor/**, !**/vendor/**
  • vendor/golang.org/x/tools/go/analysis/passes/internal/analysisutil/util.go is excluded by !vendor/**, !**/vendor/**
  • vendor/golang.org/x/tools/go/analysis/passes/internal/ctrlflowinternal/ctrlflowinternal.go is excluded by !vendor/**, !**/vendor/**
  • vendor/golang.org/x/tools/go/analysis/passes/loopclosure/loopclosure.go is excluded by !vendor/**, !**/vendor/**
  • vendor/golang.org/x/tools/go/analysis/passes/lostcancel/lostcancel.go is excluded by !vendor/**, !**/vendor/**
  • vendor/golang.org/x/tools/go/analysis/passes/nilfunc/nilfunc.go is excluded by !vendor/**, !**/vendor/**
  • vendor/golang.org/x/tools/go/analysis/passes/nilness/nilness.go is excluded by !vendor/**, !**/vendor/**
  • vendor/golang.org/x/tools/go/analysis/passes/printf/doc.go is excluded by !vendor/**, !**/vendor/**
  • vendor/golang.org/x/tools/go/analysis/passes/printf/printf.go is excluded by !vendor/**, !**/vendor/**
  • vendor/golang.org/x/tools/go/analysis/passes/printf/types.go is excluded by !vendor/**, !**/vendor/**
  • vendor/golang.org/x/tools/go/analysis/passes/reflectvaluecompare/reflectvaluecompare.go is excluded by !vendor/**, !**/vendor/**
  • vendor/golang.org/x/tools/go/analysis/passes/shadow/shadow.go is excluded by !vendor/**, !**/vendor/**
  • vendor/golang.org/x/tools/go/analysis/passes/sigchanyzer/sigchanyzer.go is excluded by !vendor/**, !**/vendor/**
  • vendor/golang.org/x/tools/go/analysis/passes/slog/slog.go is excluded by !vendor/**, !**/vendor/**
  • vendor/golang.org/x/tools/go/analysis/passes/stdmethods/stdmethods.go is excluded by !vendor/**, !**/vendor/**
  • vendor/golang.org/x/tools/go/analysis/passes/stringintconv/string.go is excluded by !vendor/**, !**/vendor/**
  • vendor/golang.org/x/tools/go/analysis/passes/testinggoroutine/testinggoroutine.go is excluded by !vendor/**, !**/vendor/**
  • vendor/golang.org/x/tools/go/analysis/passes/testinggoroutine/util.go is excluded by !vendor/**, !**/vendor/**
  • vendor/golang.org/x/tools/go/analysis/passes/tests/tests.go is excluded by !vendor/**, !**/vendor/**
  • vendor/golang.org/x/tools/go/analysis/passes/timeformat/timeformat.go is excluded by !vendor/**, !**/vendor/**
  • vendor/golang.org/x/tools/go/analysis/passes/unmarshal/unmarshal.go is excluded by !vendor/**, !**/vendor/**
  • vendor/golang.org/x/tools/go/analysis/passes/unreachable/unreachable.go is excluded by !vendor/**, !**/vendor/**
  • vendor/golang.org/x/tools/go/analysis/passes/unsafeptr/unsafeptr.go is excluded by !vendor/**, !**/vendor/**
  • vendor/golang.org/x/tools/go/analysis/passes/unusedresult/unusedresult.go is excluded by !vendor/**, !**/vendor/**
  • vendor/golang.org/x/tools/go/analysis/passes/unusedwrite/unusedwrite.go is excluded by !vendor/**, !**/vendor/**
  • vendor/golang.org/x/tools/go/ast/astutil/imports.go is excluded by !vendor/**, !**/vendor/**
  • vendor/golang.org/x/tools/go/ast/inspector/cursor.go is excluded by !vendor/**, !**/vendor/**
  • vendor/golang.org/x/tools/go/cfg/builder.go is excluded by !vendor/**, !**/vendor/**
  • vendor/golang.org/x/tools/go/cfg/cfg.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/go/packages/visit.go is excluded by !vendor/**, !**/vendor/**
  • vendor/golang.org/x/tools/go/ssa/builder.go is excluded by !vendor/**, !**/vendor/**
  • vendor/golang.org/x/tools/go/ssa/create.go is excluded by !vendor/**, !**/vendor/**
  • vendor/golang.org/x/tools/go/ssa/emit.go is excluded by !vendor/**, !**/vendor/**
  • vendor/golang.org/x/tools/go/ssa/func.go is excluded by !vendor/**, !**/vendor/**
  • vendor/golang.org/x/tools/go/ssa/instantiate.go is excluded by !vendor/**, !**/vendor/**
  • vendor/golang.org/x/tools/go/ssa/ssa.go is excluded by !vendor/**, !**/vendor/**
  • vendor/golang.org/x/tools/go/ssa/ssautil/visit.go is excluded by !vendor/**, !**/vendor/**
  • vendor/golang.org/x/tools/go/ssa/subst.go is excluded by !vendor/**, !**/vendor/**
  • vendor/golang.org/x/tools/go/ssa/util.go is excluded by !vendor/**, !**/vendor/**
  • vendor/golang.org/x/tools/go/types/objectpath/objectpath.go is excluded by !vendor/**, !**/vendor/**
  • vendor/golang.org/x/tools/go/types/typeutil/callee.go is excluded by !vendor/**, !**/vendor/**
  • vendor/golang.org/x/tools/go/types/typeutil/map.go is excluded by !vendor/**, !**/vendor/**
  • vendor/golang.org/x/tools/imports/forward.go is excluded by !vendor/**, !**/vendor/**
  • vendor/golang.org/x/tools/internal/analysis/analyzerutil/doc.go is excluded by !vendor/**, !**/vendor/**
  • vendor/golang.org/x/tools/internal/analysis/analyzerutil/extractdoc.go is excluded by !vendor/**, !**/vendor/**
  • vendor/golang.org/x/tools/internal/analysis/analyzerutil/readfile.go is excluded by !vendor/**, !**/vendor/**
  • vendor/golang.org/x/tools/internal/analysis/analyzerutil/version.go is excluded by !vendor/**, !**/vendor/**
  • vendor/golang.org/x/tools/internal/analysis/typeindex/typeindex.go is excluded by !vendor/**, !**/vendor/**
  • vendor/golang.org/x/tools/internal/analysisinternal/analysis.go is excluded by !vendor/**, !**/vendor/**
  • vendor/golang.org/x/tools/internal/astutil/stringlit.go is excluded by !vendor/**, !**/vendor/**
  • vendor/golang.org/x/tools/internal/astutil/util.go is excluded by !vendor/**, !**/vendor/**
  • vendor/golang.org/x/tools/internal/cfginternal/cfginternal.go is excluded by !vendor/**, !**/vendor/**
  • vendor/golang.org/x/tools/internal/event/core/export.go is excluded by !vendor/**, !**/vendor/**
  • vendor/golang.org/x/tools/internal/event/label/label.go is excluded by !vendor/**, !**/vendor/**
  • vendor/golang.org/x/tools/internal/gcimporter/bimport.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/imports/sortimports.go is excluded by !vendor/**, !**/vendor/**
  • vendor/golang.org/x/tools/internal/modindex/lookup.go is excluded by !vendor/**, !**/vendor/**
  • vendor/golang.org/x/tools/internal/moreiters/iters.go is excluded by !vendor/**, !**/vendor/**
  • vendor/golang.org/x/tools/internal/packagepath/packagepath.go is excluded by !vendor/**, !**/vendor/**
  • vendor/golang.org/x/tools/internal/refactor/delete.go is excluded by !vendor/**, !**/vendor/**
  • vendor/golang.org/x/tools/internal/refactor/edit.go is excluded by !vendor/**, !**/vendor/**
  • vendor/golang.org/x/tools/internal/refactor/imports.go is excluded by !vendor/**, !**/vendor/**
  • vendor/golang.org/x/tools/internal/refactor/refactor.go is excluded by !vendor/**, !**/vendor/**
  • vendor/golang.org/x/tools/internal/ssainternal/ssainternal.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/import.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/stdlib/stdlib.go is excluded by !vendor/**, !**/vendor/**
  • vendor/golang.org/x/tools/internal/typeparams/normalize.go is excluded by !vendor/**, !**/vendor/**
  • vendor/golang.org/x/tools/internal/typesinternal/classify_call.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/fx.go is excluded by !vendor/**, !**/vendor/**
  • vendor/golang.org/x/tools/internal/typesinternal/isnamed.go is excluded by !vendor/**, !**/vendor/**
  • vendor/golang.org/x/tools/internal/typesinternal/qualifier.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/varkind.go is excluded by !vendor/**, !**/vendor/**
  • vendor/golang.org/x/tools/internal/typesinternal/varkind_go124.go is excluded by !vendor/**, !**/vendor/**
  • vendor/golang.org/x/tools/internal/typesinternal/zerovalue.go is excluded by !vendor/**, !**/vendor/**
  • vendor/golang.org/x/tools/internal/versions/features.go is excluded by !vendor/**, !**/vendor/**
  • vendor/golang.org/x/tools/refactor/satisfy/find.go is excluded by !vendor/**, !**/vendor/**
  • vendor/google.golang.org/genproto/googleapis/api/annotations/annotations.pb.go is excluded by !**/*.pb.go, !vendor/**, !**/vendor/**
  • vendor/google.golang.org/genproto/googleapis/api/annotations/client.pb.go is excluded by !**/*.pb.go, !vendor/**, !**/vendor/**
  • vendor/google.golang.org/genproto/googleapis/api/annotations/field_behavior.pb.go is excluded by !**/*.pb.go, !vendor/**, !**/vendor/**
  • vendor/google.golang.org/genproto/googleapis/api/annotations/field_info.pb.go is excluded by !**/*.pb.go, !vendor/**, !**/vendor/**
  • vendor/google.golang.org/genproto/googleapis/api/annotations/http.pb.go is excluded by !**/*.pb.go, !vendor/**, !**/vendor/**
  • vendor/google.golang.org/genproto/googleapis/api/annotations/resource.pb.go is excluded by !**/*.pb.go, !vendor/**, !**/vendor/**
  • vendor/google.golang.org/genproto/googleapis/api/annotations/routing.pb.go is excluded by !**/*.pb.go, !vendor/**, !**/vendor/**
  • vendor/google.golang.org/genproto/googleapis/api/expr/v1alpha1/checked.pb.go is excluded by !**/*.pb.go, !vendor/**, !**/vendor/**
  • vendor/google.golang.org/genproto/googleapis/api/expr/v1alpha1/eval.pb.go is excluded by !**/*.pb.go, !vendor/**, !**/vendor/**
  • vendor/google.golang.org/genproto/googleapis/api/expr/v1alpha1/explain.pb.go is excluded by !**/*.pb.go, !vendor/**, !**/vendor/**
  • vendor/google.golang.org/genproto/googleapis/api/expr/v1alpha1/syntax.pb.go is excluded by !**/*.pb.go, !vendor/**, !**/vendor/**
  • vendor/google.golang.org/genproto/googleapis/api/expr/v1alpha1/value.pb.go is excluded by !**/*.pb.go, !vendor/**, !**/vendor/**
  • vendor/google.golang.org/genproto/googleapis/api/httpbody/httpbody.pb.go is excluded by !**/*.pb.go, !vendor/**, !**/vendor/**
  • vendor/google.golang.org/genproto/googleapis/api/launch_stage.pb.go is excluded by !**/*.pb.go, !vendor/**, !**/vendor/**
  • vendor/google.golang.org/grpc/CONTRIBUTING.md is excluded by !vendor/**, !**/vendor/**
  • vendor/google.golang.org/grpc/MAINTAINERS.md is excluded by !vendor/**, !**/vendor/**
  • vendor/google.golang.org/grpc/README.md is excluded by !vendor/**, !**/vendor/**
  • vendor/google.golang.org/grpc/balancer/balancer.go is excluded by !vendor/**, !**/vendor/**
  • vendor/google.golang.org/grpc/balancer/endpointsharding/endpointsharding.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/balancer/pickfirst/pickfirstleaf/pickfirstleaf.go is excluded by !vendor/**, !**/vendor/**
  • vendor/google.golang.org/grpc/balancer/roundrobin/roundrobin.go is excluded by !vendor/**, !**/vendor/**
  • vendor/google.golang.org/grpc/balancer_wrapper.go is excluded by !vendor/**, !**/vendor/**
  • vendor/google.golang.org/grpc/binarylog/grpc_binarylog_v1/binarylog.pb.go is excluded by !**/*.pb.go, !vendor/**, !**/vendor/**
  • vendor/google.golang.org/grpc/clientconn.go is excluded by !vendor/**, !**/vendor/**
  • vendor/google.golang.org/grpc/credentials/credentials.go is excluded by !vendor/**, !**/vendor/**
  • vendor/google.golang.org/grpc/credentials/insecure/insecure.go is excluded by !vendor/**, !**/vendor/**
  • vendor/google.golang.org/grpc/credentials/tls.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/internal/internal.go is excluded by !vendor/**, !**/vendor/**
  • vendor/google.golang.org/grpc/encoding/proto/proto.go is excluded by !vendor/**, !**/vendor/**
  • vendor/google.golang.org/grpc/experimental/stats/metricregistry.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.pb.go is excluded by !**/*.pb.go, !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/balancer/gracefulswitch/gracefulswitch.go is excluded by !vendor/**, !**/vendor/**
  • vendor/google.golang.org/grpc/internal/buffer/unbounded.go is excluded by !vendor/**, !**/vendor/**
  • vendor/google.golang.org/grpc/internal/channelz/trace.go is excluded by !vendor/**, !**/vendor/**
  • vendor/google.golang.org/grpc/internal/credentials/credentials.go is excluded by !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/experimental.go is excluded by !vendor/**, !**/vendor/**
  • vendor/google.golang.org/grpc/internal/grpcsync/callback_serializer.go is excluded by !vendor/**, !**/vendor/**
  • vendor/google.golang.org/grpc/internal/grpcsync/event.go is excluded by !vendor/**, !**/vendor/**
  • vendor/google.golang.org/grpc/internal/idle/idle.go is excluded by !vendor/**, !**/vendor/**
  • vendor/google.golang.org/grpc/internal/internal.go is excluded by !vendor/**, !**/vendor/**
  • vendor/google.golang.org/grpc/internal/resolver/delegatingresolver/delegatingresolver.go is excluded by !vendor/**, !**/vendor/**
  • vendor/google.golang.org/grpc/internal/resolver/dns/dns_resolver.go is excluded by !vendor/**, !**/vendor/**
  • vendor/google.golang.org/grpc/internal/stats/metrics_recorder_list.go is excluded by !vendor/**, !**/vendor/**
  • vendor/google.golang.org/grpc/internal/stats/stats.go is excluded by !vendor/**, !**/vendor/**
  • vendor/google.golang.org/grpc/internal/status/status.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/server_stream.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_pool.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/picker_wrapper.go is excluded by !vendor/**, !**/vendor/**
  • vendor/google.golang.org/grpc/preloader.go is excluded by !vendor/**, !**/vendor/**
  • vendor/google.golang.org/grpc/resolver/resolver.go is excluded by !vendor/**, !**/vendor/**
  • vendor/google.golang.org/grpc/resolver_wrapper.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/stats/handlers.go is excluded by !vendor/**, !**/vendor/**
  • vendor/google.golang.org/grpc/stats/stats.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/internal/editionssupport/editions.go is excluded by !vendor/**, !**/vendor/**
  • vendor/google.golang.org/protobuf/internal/encoding/tag/tag.go is excluded by !vendor/**, !**/vendor/**
  • vendor/google.golang.org/protobuf/internal/encoding/text/decode.go is excluded by !vendor/**, !**/vendor/**
  • vendor/google.golang.org/protobuf/internal/filedesc/desc.go is excluded by !vendor/**, !**/vendor/**
  • vendor/google.golang.org/protobuf/internal/filedesc/desc_init.go is excluded by !vendor/**, !**/vendor/**
  • vendor/google.golang.org/protobuf/internal/filedesc/desc_lazy.go is excluded by !vendor/**, !**/vendor/**
  • vendor/google.golang.org/protobuf/internal/filedesc/editions.go is excluded by !vendor/**, !**/vendor/**
  • vendor/google.golang.org/protobuf/internal/genid/descriptor_gen.go is excluded by !vendor/**, !**/vendor/**
  • vendor/google.golang.org/protobuf/internal/impl/codec_map.go is excluded by !vendor/**, !**/vendor/**
  • vendor/google.golang.org/protobuf/internal/impl/decode.go is excluded by !vendor/**, !**/vendor/**
  • vendor/google.golang.org/protobuf/internal/impl/validate.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/proto/decode.go is excluded by !vendor/**, !**/vendor/**
  • vendor/google.golang.org/protobuf/reflect/protodesc/desc.go is excluded by !vendor/**, !**/vendor/**
  • vendor/google.golang.org/protobuf/reflect/protodesc/desc_init.go is excluded by !vendor/**, !**/vendor/**
  • vendor/google.golang.org/protobuf/reflect/protodesc/editions.go is excluded by !vendor/**, !**/vendor/**
  • vendor/google.golang.org/protobuf/reflect/protodesc/proto.go is excluded by !vendor/**, !**/vendor/**
  • vendor/google.golang.org/protobuf/types/descriptorpb/descriptor.pb.go is excluded by !**/*.pb.go, !vendor/**, !**/vendor/**
  • vendor/google.golang.org/protobuf/types/known/timestamppb/timestamp.pb.go is excluded by !**/*.pb.go, !vendor/**, !**/vendor/**
  • vendor/modules.txt is excluded by !vendor/**, !**/vendor/**
📒 Files selected for processing (4)
  • go.mod
  • pkg/controller/common/helpers_test.go
  • pkg/controller/common/ignition_converter.go
  • pkg/server/api_test.go

Comment thread go.mod
google.golang.org/grpc v1.72.2
golang.org/x/net v0.49.0
golang.org/x/time v0.14.0
google.golang.org/grpc v1.78.0

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🔴 Critical

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
set -euo pipefail

echo "Querying OSV for google.golang.org/grpc@v1.78.0 ..."
curl -sS https://api.osv.dev/v1/query \
  -H 'Content-Type: application/json' \
  -d '{"package":{"name":"google.golang.org/grpc","ecosystem":"Go"},"version":"v1.78.0"}' \
  | jq '{vulns: [.vulns[]? | {id, aliases, summary, modified}]}'

echo
echo "Fetching GHSA details for GHSA-p77j-4mvh-x3m3 ..."
curl -sS https://api.osv.dev/v1/vulns/GHSA-p77j-4mvh-x3m3 \
  | jq '{id, aliases, summary, affected}'

Repository: openshift/machine-config-operator

Length of output: 1204


Bump gRPC-Go to v1.79.3 or later; v1.78.0 contains a critical authorization bypass vulnerability (GHSA-p77j-4mvh-x3m3 / CVE-2026-33186).

The current version is vulnerable to an authorization bypass via missing leading slash validation in the :path header. This must be fixed before merge.

🧰 Tools
🪛 OSV Scanner (2.3.5)

[CRITICAL] 55-55: google.golang.org/grpc 1.78.0: gRPC-Go has an authorization bypass via missing leading slash in :path

(GHSA-p77j-4mvh-x3m3)

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@go.mod` at line 55, Update the gRPC-Go dependency to v1.79.3 or later to
address CVE-2026-33186: change the google.golang.org/grpc version in go.mod (the
dependency entry for google.golang.org/grpc) to v1.79.3+, run `go get
google.golang.org/grpc@v1.79.3` (or newer), then run `go mod tidy` to update
go.sum and ensure the module graph is clean, run the test suite and any CI
vulnerability checks, and commit the updated go.mod and go.sum (and vendor files
if your repo vendors dependencies).

@zaneb

zaneb commented Mar 27, 2026

Copy link
Copy Markdown
Member Author

/retest-required

@andfasano

Copy link
Copy Markdown
Contributor

/test ?

func buildConverterList() []ignitionVersionConverter {
return []ignitionVersionConverter{
// v3.5 -> v3.6
newFunctionConverterTypedNoError[v35types.Config, v36types.Config](v35types.MaxVersion, v36types.MaxVersion, v36translate.Translate),

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

From the entries below, it looks like we also need v3.6 -> v3.5

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

@zaneb @travier yes, we need to be able to convert up/down, add the other conversion like this:

// v3.6 -> v3.5
newFunctionConverterTyped[v36types.Config, v35types.Config](v36types.MaxVersion, v35types.MaxVersion, v36tov35.Translate),

But if don't miss changes in the ignition repo, there's no v36tov35 conversion yet

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Ah yes, this is coreos/ign-converter#58 which needs coreos/ign-converter#59 first.

@andfasano

Copy link
Copy Markdown
Contributor

/test e2e-agent-compact-ipv4
/test e2e-agent-compact-ipv4-iso-no-registry

@pablintino

Copy link
Copy Markdown
Contributor

/approve
This bugfix adds Ignition 3.6 to the MCS only. It's not a complete Ignition bump, more UTs are required (even in the addressed MCS) and proper payload test runs are needed.
I'm approving this change given it's low impact in the default behavior and the urgency to unlock agent installs that are now broken.

@openshift-ci

openshift-ci Bot commented Mar 27, 2026

Copy link
Copy Markdown
Contributor

[APPROVALNOTIFIER] This PR is APPROVED

This pull-request has been approved by: bfournie, pablintino, zaneb

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 Mar 27, 2026
@pablintino

Copy link
Copy Markdown
Contributor

/hold
I'd prefer to go with this one if possible as it's a more simple approach that restores an already known behavior.
#5816

@openshift-ci openshift-ci Bot added the do-not-merge/hold Indicates that a PR should not merge because someone has issued a /hold command. label Mar 27, 2026
@openshift-ci

openshift-ci Bot commented Mar 27, 2026

Copy link
Copy Markdown
Contributor

@zaneb: The following tests failed, say /retest to rerun all failed tests or /retest-required to rerun all mandatory failed tests:

Test name Commit Details Required Rerun command
ci/prow/e2e-agent-compact-ipv4 4916ba6 link false /test e2e-agent-compact-ipv4
ci/prow/e2e-agent-compact-ipv4-iso-no-registry 4916ba6 link false /test e2e-agent-compact-ipv4-iso-no-registry

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.

@pablintino

Copy link
Copy Markdown
Contributor

Superseded by #5816

@pablintino

Copy link
Copy Markdown
Contributor

/close

@openshift-ci openshift-ci Bot closed this Mar 27, 2026
@openshift-ci

openshift-ci Bot commented Mar 27, 2026

Copy link
Copy Markdown
Contributor

@pablintino: Closed this PR.

Details

In response to this:

/close

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.

@openshift-ci-robot

Copy link
Copy Markdown
Contributor

@zaneb: This pull request references Jira Issue OCPBUGS-80970. The bug has been updated to no longer refer to the pull request using the external bug tracker.

Details

In response to this:

Ignition has been updated to version 2.26.0 in CoreOS, which introduces v3.6 of the config format. v2.26 sends the following Accept header:

application/vnd.coreos.ignition+json;version=3.6.0, /;q=0.1

The Machine Config Server will not return earlier versions of the ignition format than requested in the Accepts header, so it was returning 400 Bad Request. This occurred because the converter only supported up to v3.5.

Upgrade github.com/coreos/ignition/v2 from v2.20.0 to v2.26.0, which includes v3.6 support. Add v3.5->v3.6 upward converter to the ignition converter's buildConverterList().

The MCS now supports Ignition spec versions: 2.2, 3.0, 3.1, 3.2, 3.3, 3.4, 3.5, and 3.6.

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.

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. do-not-merge/hold Indicates that a PR should not merge because someone has issued a /hold command. jira/severity-critical Referenced Jira bug's severity is critical for the branch this PR is targeting. jira/valid-bug Indicates that a referenced Jira bug is valid for the branch this PR is targeting. 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.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

6 participants