Skip to content

Vendor Prow with Jira QA Contact/Target Version removal; add name-based custom field helper#5017

Open
deepsm007 wants to merge 1 commit intoopenshift:mainfrom
deepsm007:jira-customfield-configurable-downstream
Open

Vendor Prow with Jira QA Contact/Target Version removal; add name-based custom field helper#5017
deepsm007 wants to merge 1 commit intoopenshift:mainfrom
deepsm007:jira-customfield-configurable-downstream

Conversation

@deepsm007
Copy link
Contributor

@deepsm007 deepsm007 commented Mar 16, 2026

  • Depend on upstream Prow after kubernetes-sigs/prow#657 (removed QA Contact / Target Version getters and flags).
  • Add name-based custom field resolution with optional fallback and direct-ID helper for when the field list API is unavailable or uses different names.

Changes

Prow

  • Removed replace sigs.k8s.io/prow => github.com/deepsm007/prow from go.mod.
  • Updated to sigs.k8s.io/prow@main (post-merge of PR 657).
  • Re-vendored.

Jira custom fields (pkg/jira/)

  • CustomFieldResolver: Resolves field names to IDs via Jira field list API (one call, cached). Optional FallbackIDs (map[string]string, name → ID) used when name lookup is empty so callers can supply known IDs (e.g. customfield_12316243).
  • ValueByID(issue, fieldID): Returns custom field value by raw field ID; use when name-based resolution is not available or as a temporary override.
  • Tests: TestValueByID, TestValueByID_with_fallback_id in pkg/jira/customfield_test.go.

Usage

  • By name: resolver.FieldID(ctx, "QA Contact") then ValueByID(issue, id), or resolver.Value(ctx, issue, "QA Contact").
  • Fallback: Set resolver.FallbackIDs = map[string]string{"QA Contact": "customfield_12316243", "Target Version": "customfield_12319940"} (or your instance IDs).
  • Direct ID: ValueByID(issue, "customfield_12316243").

Testing

  • go test ./pkg/jira/... passes.

/cc @openshift/test-platform

@openshift-ci-robot
Copy link
Contributor

Pipeline controller notification
This repo is configured to use the pipeline controller. Second-stage tests will be triggered either automatically or after lgtm label is added, depending on the repository configuration. The pipeline controller will automatically detect which contexts are required and will utilize /test Prow commands to trigger the second stage.

For optional jobs, comment /test ? to see a list of all defined jobs. To trigger manually all jobs from second stage use /pipeline required command.

This repository is configured in: automatic mode

@coderabbitai
Copy link

coderabbitai bot commented Mar 16, 2026

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: 09689fba-d3e3-4bf8-9754-2425134e6b07

📥 Commits

Reviewing files that changed from the base of the PR and between 65933f5 and f525545.

⛔ Files ignored due to path filters (231)
  • go.sum is excluded by !**/*.sum
  • vendor/github.com/stretchr/testify/assert/assertion_compare.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/stretchr/testify/assert/assertion_format.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/stretchr/testify/assert/assertion_forward.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/stretchr/testify/assert/assertion_order.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/stretchr/testify/assert/assertions.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/stretchr/testify/assert/doc.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/stretchr/testify/assert/http_assertions.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/stretchr/testify/assert/yaml/yaml_custom.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/stretchr/testify/assert/yaml/yaml_default.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/stretchr/testify/assert/yaml/yaml_fail.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/auto/sdk/internal/telemetry/id.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/auto/sdk/internal/telemetry/number.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/auto/sdk/internal/telemetry/span.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/auto/sdk/internal/telemetry/status.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/auto/sdk/internal/telemetry/traces.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/auto/sdk/internal/telemetry/value.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/auto/sdk/span.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/auto/sdk/tracer.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/.codespellignore is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/.golangci.yml is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/.lycheeignore is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/CHANGELOG.md is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/CODEOWNERS is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/CONTRIBUTING.md is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/LICENSE is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/Makefile is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/README.md is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/RELEASING.md is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/SECURITY-INSIGHTS.yml is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/VERSIONING.md is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/attribute/encoder.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/attribute/filter.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/attribute/hash.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/attribute/internal/attribute.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/attribute/internal/xxhash/xxhash.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/attribute/iterator.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/attribute/key.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/attribute/kv.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/attribute/set.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/attribute/type_string.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/attribute/value.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/baggage/baggage.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/codes/codes.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/dependencies.Dockerfile is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/internal/global/instruments.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/internal/global/internal_logging.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/internal/global/meter.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/internal/global/trace.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/metric.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/metric/LICENSE is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/metric/asyncfloat64.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/metric/asyncint64.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/metric/config.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/metric/meter.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/metric/noop/noop.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/metric/syncfloat64.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/metric/syncint64.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/propagation/baggage.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/propagation/propagation.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/propagation/trace_context.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/sdk/LICENSE is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/sdk/internal/x/features.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/sdk/internal/x/x.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/sdk/metric/LICENSE is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/sdk/metric/config.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/sdk/metric/doc.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/sdk/metric/exemplar.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/sdk/metric/exemplar/filter.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/sdk/metric/exemplar/fixed_size_reservoir.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/sdk/metric/exemplar/histogram_reservoir.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/sdk/metric/exemplar/storage.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/sdk/metric/instrument.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/sdk/metric/instrumentkind_string.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/sdk/metric/internal/aggregate/aggregate.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/sdk/metric/internal/aggregate/atomic.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/sdk/metric/internal/aggregate/drop.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/sdk/metric/internal/aggregate/exponential_histogram.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/sdk/metric/internal/aggregate/filtered_reservoir.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/sdk/metric/internal/aggregate/histogram.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/sdk/metric/internal/aggregate/lastvalue.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/sdk/metric/internal/aggregate/limit.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/sdk/metric/internal/aggregate/sum.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/sdk/metric/internal/observ/instrumentation.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/sdk/metric/internal/reservoir/concurrent_safe.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/sdk/metric/internal/reservoir/doc.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/sdk/metric/internal/x/README.md is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/sdk/metric/internal/x/x.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/sdk/metric/manual_reader.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/sdk/metric/meter.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/sdk/metric/metricdata/temporality_string.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/sdk/metric/periodic_reader.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/sdk/metric/pipeline.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/sdk/metric/provider.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/sdk/metric/reader.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/sdk/metric/version.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/sdk/resource/builtin.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/sdk/resource/container.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/sdk/resource/env.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/sdk/resource/host_id.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/sdk/resource/host_id_bsd.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/sdk/resource/host_id_linux.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/sdk/resource/host_id_unsupported.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/sdk/resource/host_id_windows.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/sdk/resource/os.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/sdk/resource/os_release_unix.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/sdk/resource/os_unix.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/sdk/resource/os_unsupported.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/sdk/resource/process.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/sdk/resource/resource.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/sdk/version.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/semconv/v1.34.0/MIGRATION.md is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/semconv/v1.34.0/README.md is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/semconv/v1.37.0/MIGRATION.md is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/semconv/v1.37.0/README.md is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/semconv/v1.37.0/attribute_group.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/semconv/v1.37.0/doc.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/semconv/v1.37.0/error_type.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/semconv/v1.37.0/exception.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/semconv/v1.37.0/schema.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/semconv/v1.39.0/MIGRATION.md is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/semconv/v1.39.0/README.md is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/semconv/v1.39.0/attribute_group.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/semconv/v1.39.0/doc.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/semconv/v1.39.0/error_type.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/semconv/v1.39.0/exception.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/semconv/v1.39.0/otelconv/metric.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/semconv/v1.39.0/schema.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/trace/LICENSE is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/trace/auto.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/trace/config.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/trace/hex.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/trace/internal/telemetry/attr.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/trace/internal/telemetry/id.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/trace/internal/telemetry/value.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/trace/noop.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/trace/noop/noop.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/trace/span.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/trace/trace.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/trace/tracestate.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/version.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/versions.yaml is excluded by !vendor/**, !**/vendor/**
  • vendor/golang.org/x/sys/cpu/cpu.go is excluded by !vendor/**, !**/vendor/**
  • vendor/golang.org/x/sys/cpu/cpu_arm64.go is excluded by !vendor/**, !**/vendor/**
  • vendor/golang.org/x/sys/cpu/cpu_arm64.s is excluded by !vendor/**, !**/vendor/**
  • vendor/golang.org/x/sys/cpu/cpu_gc_arm64.go is excluded by !vendor/**, !**/vendor/**
  • vendor/golang.org/x/sys/cpu/cpu_gccgo_arm64.go is excluded by !vendor/**, !**/vendor/**
  • vendor/golang.org/x/sys/cpu/cpu_netbsd_arm64.go is excluded by !vendor/**, !**/vendor/**
  • vendor/golang.org/x/sys/cpu/cpu_openbsd_arm64.go is excluded by !vendor/**, !**/vendor/**
  • vendor/golang.org/x/sys/cpu/cpu_x86.go is excluded by !vendor/**, !**/vendor/**
  • vendor/golang.org/x/sys/unix/mkerrors.sh 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/zerrors_linux_386.go is excluded by !vendor/**, !**/vendor/**
  • vendor/golang.org/x/sys/unix/zerrors_linux_amd64.go is excluded by !vendor/**, !**/vendor/**
  • vendor/golang.org/x/sys/unix/zerrors_linux_arm.go is excluded by !vendor/**, !**/vendor/**
  • vendor/golang.org/x/sys/unix/zerrors_linux_arm64.go is excluded by !vendor/**, !**/vendor/**
  • vendor/golang.org/x/sys/unix/zerrors_linux_loong64.go is excluded by !vendor/**, !**/vendor/**
  • vendor/golang.org/x/sys/unix/zerrors_linux_mips.go is excluded by !vendor/**, !**/vendor/**
  • vendor/golang.org/x/sys/unix/zerrors_linux_mips64.go is excluded by !vendor/**, !**/vendor/**
  • vendor/golang.org/x/sys/unix/zerrors_linux_mips64le.go is excluded by !vendor/**, !**/vendor/**
  • vendor/golang.org/x/sys/unix/zerrors_linux_mipsle.go is excluded by !vendor/**, !**/vendor/**
  • vendor/golang.org/x/sys/unix/zerrors_linux_ppc.go is excluded by !vendor/**, !**/vendor/**
  • vendor/golang.org/x/sys/unix/zerrors_linux_ppc64.go is excluded by !vendor/**, !**/vendor/**
  • vendor/golang.org/x/sys/unix/zerrors_linux_ppc64le.go is excluded by !vendor/**, !**/vendor/**
  • vendor/golang.org/x/sys/unix/zerrors_linux_riscv64.go is excluded by !vendor/**, !**/vendor/**
  • vendor/golang.org/x/sys/unix/zerrors_linux_s390x.go is excluded by !vendor/**, !**/vendor/**
  • vendor/golang.org/x/sys/unix/zerrors_linux_sparc64.go is excluded by !vendor/**, !**/vendor/**
  • vendor/golang.org/x/sys/unix/ztypes_netbsd_arm.go is excluded by !vendor/**, !**/vendor/**
  • vendor/modules.txt is excluded by !vendor/**, !**/vendor/**
  • vendor/sigs.k8s.io/prow/pkg/apis/prowjobs/v1/types.go is excluded by !vendor/**, !**/vendor/**
  • vendor/sigs.k8s.io/prow/pkg/bugzilla/client.go is excluded by !vendor/**, !**/vendor/**
  • vendor/sigs.k8s.io/prow/pkg/cache/cache.go is excluded by !vendor/**, !**/vendor/**
  • vendor/sigs.k8s.io/prow/pkg/config/cache.go is excluded by !vendor/**, !**/vendor/**
  • vendor/sigs.k8s.io/prow/pkg/config/config.go is excluded by !vendor/**, !**/vendor/**
  • vendor/sigs.k8s.io/prow/pkg/config/jobs.go is excluded by !vendor/**, !**/vendor/**
  • vendor/sigs.k8s.io/prow/pkg/config/tide.go is excluded by !vendor/**, !**/vendor/**
  • vendor/sigs.k8s.io/prow/pkg/crier/reporters/gerrit/reporter.go is excluded by !vendor/**, !**/vendor/**
  • vendor/sigs.k8s.io/prow/pkg/deck/jobs/jobs.go is excluded by !vendor/**, !**/vendor/**
  • vendor/sigs.k8s.io/prow/pkg/genyaml/genyaml.go is excluded by !vendor/**, !**/vendor/**
  • vendor/sigs.k8s.io/prow/pkg/genyaml/populate_struct.go is excluded by !vendor/**, !**/vendor/**
  • vendor/sigs.k8s.io/prow/pkg/gerrit/adapter/adapter.go is excluded by !vendor/**, !**/vendor/**
  • vendor/sigs.k8s.io/prow/pkg/gerrit/client/client.go is excluded by !vendor/**, !**/vendor/**
  • vendor/sigs.k8s.io/prow/pkg/hook/server.go is excluded by !vendor/**, !**/vendor/**
  • vendor/sigs.k8s.io/prow/pkg/interrupts/interrupts.go is excluded by !vendor/**, !**/vendor/**
  • vendor/sigs.k8s.io/prow/pkg/io/opener.go is excluded by !vendor/**, !**/vendor/**
  • vendor/sigs.k8s.io/prow/pkg/jira/jira.go is excluded by !vendor/**, !**/vendor/**
  • vendor/sigs.k8s.io/prow/pkg/kube/config.go is excluded by !vendor/**, !**/vendor/**
  • vendor/sigs.k8s.io/prow/pkg/logrusutil/logrusutil.go is excluded by !vendor/**, !**/vendor/**
  • vendor/sigs.k8s.io/prow/pkg/moonraker/moonraker.go is excluded by !vendor/**, !**/vendor/**
  • vendor/sigs.k8s.io/prow/pkg/pjutil/filter.go is excluded by !vendor/**, !**/vendor/**
  • vendor/sigs.k8s.io/prow/pkg/pjutil/pjutil.go is excluded by !vendor/**, !**/vendor/**
  • vendor/sigs.k8s.io/prow/pkg/pjutil/tot.go is excluded by !vendor/**, !**/vendor/**
  • vendor/sigs.k8s.io/prow/pkg/pluginhelp/hook/hook.go is excluded by !vendor/**, !**/vendor/**
  • vendor/sigs.k8s.io/prow/pkg/plugins/approve/approvers/owners.go is excluded by !vendor/**, !**/vendor/**
  • vendor/sigs.k8s.io/prow/pkg/plugins/assign/assign.go is excluded by !vendor/**, !**/vendor/**
  • vendor/sigs.k8s.io/prow/pkg/plugins/blockade/blockade.go is excluded by !vendor/**, !**/vendor/**
  • vendor/sigs.k8s.io/prow/pkg/plugins/blunderbuss/blunderbuss.go is excluded by !vendor/**, !**/vendor/**
  • vendor/sigs.k8s.io/prow/pkg/plugins/bugzilla/bugzilla.go is excluded by !vendor/**, !**/vendor/**
  • vendor/sigs.k8s.io/prow/pkg/plugins/cat/cat.go is excluded by !vendor/**, !**/vendor/**
  • vendor/sigs.k8s.io/prow/pkg/plugins/cla/cla.go is excluded by !vendor/**, !**/vendor/**
  • vendor/sigs.k8s.io/prow/pkg/plugins/config.go is excluded by !vendor/**, !**/vendor/**
  • vendor/sigs.k8s.io/prow/pkg/plugins/dog/dog.go is excluded by !vendor/**, !**/vendor/**
  • vendor/sigs.k8s.io/prow/pkg/plugins/goose/goose.go is excluded by !vendor/**, !**/vendor/**
  • vendor/sigs.k8s.io/prow/pkg/plugins/heart/heart.go is excluded by !vendor/**, !**/vendor/**
  • vendor/sigs.k8s.io/prow/pkg/plugins/issue-management/link-issue.go is excluded by !vendor/**, !**/vendor/**
  • vendor/sigs.k8s.io/prow/pkg/plugins/jira/jira.go is excluded by !vendor/**, !**/vendor/**
  • vendor/sigs.k8s.io/prow/pkg/plugins/plugin-config-documented.yaml is excluded by !vendor/**, !**/vendor/**
  • vendor/sigs.k8s.io/prow/pkg/plugins/plugins.go is excluded by !vendor/**, !**/vendor/**
  • vendor/sigs.k8s.io/prow/pkg/plugins/pony/pony.go is excluded by !vendor/**, !**/vendor/**
  • vendor/sigs.k8s.io/prow/pkg/plugins/releasenote/releasenote.go is excluded by !vendor/**, !**/vendor/**
  • vendor/sigs.k8s.io/prow/pkg/plugins/respond.go is excluded by !vendor/**, !**/vendor/**
  • vendor/sigs.k8s.io/prow/pkg/plugins/slackevents/slackevents.go is excluded by !vendor/**, !**/vendor/**
  • vendor/sigs.k8s.io/prow/pkg/plugins/testfreeze/checker/checker.go is excluded by !vendor/**, !**/vendor/**
  • vendor/sigs.k8s.io/prow/pkg/plugins/transfer-issue/transfer-issue.go is excluded by !vendor/**, !**/vendor/**
  • vendor/sigs.k8s.io/prow/pkg/plugins/trick-or-treat/trick-or-treat.go is excluded by !vendor/**, !**/vendor/**
  • vendor/sigs.k8s.io/prow/pkg/plugins/trigger/generic-comment.go is excluded by !vendor/**, !**/vendor/**
  • vendor/sigs.k8s.io/prow/pkg/plugins/trigger/push.go is excluded by !vendor/**, !**/vendor/**
  • vendor/sigs.k8s.io/prow/pkg/plugins/trigger/trigger.go is excluded by !vendor/**, !**/vendor/**
  • vendor/sigs.k8s.io/prow/pkg/pod-utils/decorate/podspec.go is excluded by !vendor/**, !**/vendor/**
  • vendor/sigs.k8s.io/prow/pkg/pod-utils/downwardapi/jobspec.go is excluded by !vendor/**, !**/vendor/**
  • vendor/sigs.k8s.io/prow/pkg/repoowners/repoowners.go is excluded by !vendor/**, !**/vendor/**
  • vendor/sigs.k8s.io/prow/pkg/sidecar/censor.go is excluded by !vendor/**, !**/vendor/**
  • vendor/sigs.k8s.io/prow/pkg/sidecar/run.go is excluded by !vendor/**, !**/vendor/**
  • vendor/sigs.k8s.io/prow/pkg/slack/client.go is excluded by !vendor/**, !**/vendor/**
  • vendor/sigs.k8s.io/prow/pkg/throttle/throttle.go is excluded by !vendor/**, !**/vendor/**
  • vendor/sigs.k8s.io/prow/pkg/tide/blockers/blockers.go is excluded by !vendor/**, !**/vendor/**
  • vendor/sigs.k8s.io/prow/pkg/tide/gerrit.go is excluded by !vendor/**, !**/vendor/**
  • vendor/sigs.k8s.io/prow/pkg/tide/github.go is excluded by !vendor/**, !**/vendor/**
  • vendor/sigs.k8s.io/prow/pkg/tide/history/history.go is excluded by !vendor/**, !**/vendor/**
  • vendor/sigs.k8s.io/prow/pkg/tide/status.go is excluded by !vendor/**, !**/vendor/**
  • vendor/sigs.k8s.io/prow/pkg/tide/tide.go is excluded by !vendor/**, !**/vendor/**
📒 Files selected for processing (4)
  • Makefile
  • go.mod
  • pkg/jira/customfield.go
  • pkg/jira/customfield_test.go
🚧 Files skipped from review as they are similar to previous changes (2)
  • go.mod
  • pkg/jira/customfield_test.go

Walkthrough

Updated Go directive and bumped multiple indirect module versions in go.mod; added a concurrency-safe cached Jira custom field resolver with unit tests; and adjusted Makefile targets to use a vendored-safe GOFLAGS and added a generate verification pre-check.

Changes

Cohort / File(s) Summary
Dependency Updates
go.mod
Bumped Go directive to go 1.25.8 and upgraded multiple indirect dependencies (e.g., golang.org/x/sys, github.com/stretchr/testify, sigs.k8s.io/prow, go.opentelemetry.io/*) and related otel modules.
Jira Custom Field Resolver & Tests
pkg/jira/customfield.go, pkg/jira/customfield_test.go
Adds CustomFieldResolver with concurrency-safe lazy loading and fallback ID map, plus FieldID, Value, ValueByID, SetFallbackIDs, and unit tests covering nil/edge cases and fallback resolution.
Makefile tweaks
Makefile
Introduces VENDOR_GOFLAGS (GOFLAGS with -mod=vendor stripped), runs codegen/imports with VENDOR_GOFLAGS, and adds a no-quiet git-diff pre-check in verify-gen to ensure generated files are up to date.

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~20 minutes

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment
📝 Coding Plan
  • Generate coding plan for human review comments

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

@openshift-ci openshift-ci bot requested review from jmguzik and pruan-rht March 16, 2026 18:39
@openshift-ci
Copy link
Contributor

openshift-ci bot commented Mar 16, 2026

[APPROVALNOTIFIER] This PR is APPROVED

This pull-request has been approved by: deepsm007

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 16, 2026
Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 3

🧹 Nitpick comments (1)
pkg/jira/customfield_test.go (1)

74-87: This test doesn’t exercise resolver fallback logic.

TestValueByID_with_fallback_id validates direct ID lookup only. It won’t catch regressions in FieldID/FallbackIDs behavior, which is a core addition in this PR.

Suggested additional test
+func TestFieldID_usesFallbackIDWhenNameMissing(t *testing.T) {
+	t.Parallel()
+	r := NewCustomFieldResolver(nil)
+	r.loaded = true // skip API call path; test fallback behavior directly
+	r.FallbackIDs = map[string]string{"QA Contact": "customfield_12316243"}
+
+	got, err := r.FieldID(context.Background(), "QA Contact")
+	if err != nil {
+		t.Fatalf("FieldID() error = %v", err)
+	}
+	if got != "customfield_12316243" {
+		t.Fatalf("FieldID() = %q, want %q", got, "customfield_12316243")
+	}
+}
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@pkg/jira/customfield_test.go` around lines 74 - 87, Extend the test to
exercise the resolver fallback path instead of only direct-ID lookup: create or
configure a Resolver with Resolver.FallbackIDs mapping a human name (e.g.
"qa_field") to "customfield_12316243", create an Issue whose Fields.Unknowns
contains "customfield_12316243" => "qa@example.com" but no direct entry for the
human name, then call the public resolution helpers (FieldID and/or ValueByID)
with the human name and assert you get "customfield_12316243" for FieldID and
"qa@example.com" for ValueByID; update or add a test (adjacent to
TestValueByID_with_fallback_id) that references Resolver.FallbackIDs, ValueByID,
and FieldID so the fallback behavior is exercised.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In `@pkg/jira/customfield_test.go`:
- Around line 64-69: The test uses a direct equality check on values returned by
ValueByID which can panic for uncomparable types (maps/slices); change the
assertion to use deep equality (reflect.DeepEqual or cmp.Equal) instead of `got
!= tt.want`, and add the necessary import for reflect (or cmp) in
pkg/jira/customfield_test.go so the test safely compares any values returned by
ValueByID.

In `@pkg/jira/customfield.go`:
- Around line 14-20: CustomFieldResolver currently exposes a mutable exported
map FallbackIDs that FieldID reads without synchronization, risking concurrent
map read/write panics; make the fallback map safe by making it unexported (e.g.,
fallbackIDs) and only mutate/access it under the existing mutex (mu), or provide
synchronized accessor/mutator methods (e.g., SetFallbackIDs(map[string]string)
which copies the input map under mu, and getFallbackID(name string) that reads
under mu and returns a copy/value) and update FieldID to use the synchronized
getter; ensure any external callers use the new setter instead of directly
mutating the map.
- Around line 26-27: The loadFields method on CustomFieldResolver can panic
because NewCustomFieldResolver allows r.client to be nil but loadFields
dereferences r.client unconditionally; modify loadFields to check for a nil
r.client at the start (after acquiring the read lock or use write lock as
needed), return a clear error (or no-op) if r.client == nil, and avoid any calls
like r.client.SomeMethod when nil; ensure the same nil-check pattern is applied
to the other affected block(s) referenced (around lines 34-41) so all accesses
to r.client are guarded.

---

Nitpick comments:
In `@pkg/jira/customfield_test.go`:
- Around line 74-87: Extend the test to exercise the resolver fallback path
instead of only direct-ID lookup: create or configure a Resolver with
Resolver.FallbackIDs mapping a human name (e.g. "qa_field") to
"customfield_12316243", create an Issue whose Fields.Unknowns contains
"customfield_12316243" => "qa@example.com" but no direct entry for the human
name, then call the public resolution helpers (FieldID and/or ValueByID) with
the human name and assert you get "customfield_12316243" for FieldID and
"qa@example.com" for ValueByID; update or add a test (adjacent to
TestValueByID_with_fallback_id) that references Resolver.FallbackIDs, ValueByID,
and FieldID so the fallback behavior is exercised.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: 0a8a5657-bbf2-4844-92b9-7332ce849f98

📥 Commits

Reviewing files that changed from the base of the PR and between 05494d0 and ef00ae7.

⛔ Files ignored due to path filters (233)
  • go.sum is excluded by !**/*.sum
  • vendor/github.com/google/go-cmp/cmp/report_compare.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/google/go-cmp/cmp/report_reflect.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/stretchr/testify/assert/assertion_compare.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/stretchr/testify/assert/assertion_format.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/stretchr/testify/assert/assertion_forward.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/stretchr/testify/assert/assertion_order.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/stretchr/testify/assert/assertions.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/stretchr/testify/assert/doc.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/stretchr/testify/assert/http_assertions.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/stretchr/testify/assert/yaml/yaml_custom.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/stretchr/testify/assert/yaml/yaml_default.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/stretchr/testify/assert/yaml/yaml_fail.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/auto/sdk/internal/telemetry/id.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/auto/sdk/internal/telemetry/number.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/auto/sdk/internal/telemetry/span.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/auto/sdk/internal/telemetry/status.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/auto/sdk/internal/telemetry/traces.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/auto/sdk/internal/telemetry/value.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/auto/sdk/span.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/auto/sdk/tracer.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/.codespellignore is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/.golangci.yml is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/.lycheeignore is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/CHANGELOG.md is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/CODEOWNERS is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/CONTRIBUTING.md is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/LICENSE is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/Makefile is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/README.md is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/RELEASING.md is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/SECURITY-INSIGHTS.yml is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/VERSIONING.md is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/attribute/encoder.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/attribute/filter.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/attribute/hash.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/attribute/internal/attribute.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/attribute/internal/xxhash/xxhash.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/attribute/iterator.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/attribute/key.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/attribute/kv.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/attribute/set.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/attribute/type_string.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/attribute/value.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/baggage/baggage.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/codes/codes.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/dependencies.Dockerfile is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/internal/global/instruments.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/internal/global/internal_logging.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/internal/global/meter.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/internal/global/trace.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/metric.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/metric/LICENSE is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/metric/asyncfloat64.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/metric/asyncint64.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/metric/config.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/metric/meter.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/metric/noop/noop.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/metric/syncfloat64.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/metric/syncint64.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/propagation/baggage.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/propagation/propagation.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/propagation/trace_context.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/sdk/LICENSE is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/sdk/internal/x/features.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/sdk/internal/x/x.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/sdk/metric/LICENSE is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/sdk/metric/config.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/sdk/metric/doc.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/sdk/metric/exemplar.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/sdk/metric/exemplar/filter.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/sdk/metric/exemplar/fixed_size_reservoir.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/sdk/metric/exemplar/histogram_reservoir.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/sdk/metric/exemplar/storage.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/sdk/metric/instrument.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/sdk/metric/instrumentkind_string.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/sdk/metric/internal/aggregate/aggregate.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/sdk/metric/internal/aggregate/atomic.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/sdk/metric/internal/aggregate/drop.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/sdk/metric/internal/aggregate/exponential_histogram.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/sdk/metric/internal/aggregate/filtered_reservoir.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/sdk/metric/internal/aggregate/histogram.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/sdk/metric/internal/aggregate/lastvalue.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/sdk/metric/internal/aggregate/limit.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/sdk/metric/internal/aggregate/sum.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/sdk/metric/internal/observ/instrumentation.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/sdk/metric/internal/reservoir/concurrent_safe.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/sdk/metric/internal/reservoir/doc.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/sdk/metric/internal/x/README.md is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/sdk/metric/internal/x/x.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/sdk/metric/manual_reader.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/sdk/metric/meter.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/sdk/metric/metricdata/temporality_string.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/sdk/metric/periodic_reader.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/sdk/metric/pipeline.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/sdk/metric/provider.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/sdk/metric/reader.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/sdk/metric/version.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/sdk/resource/builtin.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/sdk/resource/container.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/sdk/resource/env.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/sdk/resource/host_id.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/sdk/resource/host_id_bsd.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/sdk/resource/host_id_linux.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/sdk/resource/host_id_unsupported.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/sdk/resource/host_id_windows.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/sdk/resource/os.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/sdk/resource/os_release_unix.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/sdk/resource/os_unix.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/sdk/resource/os_unsupported.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/sdk/resource/process.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/sdk/resource/resource.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/sdk/version.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/semconv/v1.34.0/MIGRATION.md is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/semconv/v1.34.0/README.md is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/semconv/v1.37.0/MIGRATION.md is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/semconv/v1.37.0/README.md is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/semconv/v1.37.0/attribute_group.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/semconv/v1.37.0/doc.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/semconv/v1.37.0/error_type.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/semconv/v1.37.0/exception.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/semconv/v1.37.0/schema.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/semconv/v1.39.0/MIGRATION.md is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/semconv/v1.39.0/README.md is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/semconv/v1.39.0/attribute_group.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/semconv/v1.39.0/doc.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/semconv/v1.39.0/error_type.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/semconv/v1.39.0/exception.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/semconv/v1.39.0/otelconv/metric.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/semconv/v1.39.0/schema.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/trace/LICENSE is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/trace/auto.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/trace/config.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/trace/hex.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/trace/internal/telemetry/attr.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/trace/internal/telemetry/id.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/trace/internal/telemetry/value.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/trace/noop.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/trace/noop/noop.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/trace/span.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/trace/trace.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/trace/tracestate.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/version.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/versions.yaml is excluded by !vendor/**, !**/vendor/**
  • vendor/golang.org/x/sys/cpu/cpu.go is excluded by !vendor/**, !**/vendor/**
  • vendor/golang.org/x/sys/cpu/cpu_arm64.go is excluded by !vendor/**, !**/vendor/**
  • vendor/golang.org/x/sys/cpu/cpu_arm64.s is excluded by !vendor/**, !**/vendor/**
  • vendor/golang.org/x/sys/cpu/cpu_gc_arm64.go is excluded by !vendor/**, !**/vendor/**
  • vendor/golang.org/x/sys/cpu/cpu_gccgo_arm64.go is excluded by !vendor/**, !**/vendor/**
  • vendor/golang.org/x/sys/cpu/cpu_netbsd_arm64.go is excluded by !vendor/**, !**/vendor/**
  • vendor/golang.org/x/sys/cpu/cpu_openbsd_arm64.go is excluded by !vendor/**, !**/vendor/**
  • vendor/golang.org/x/sys/cpu/cpu_x86.go is excluded by !vendor/**, !**/vendor/**
  • vendor/golang.org/x/sys/unix/mkerrors.sh 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/zerrors_linux_386.go is excluded by !vendor/**, !**/vendor/**
  • vendor/golang.org/x/sys/unix/zerrors_linux_amd64.go is excluded by !vendor/**, !**/vendor/**
  • vendor/golang.org/x/sys/unix/zerrors_linux_arm.go is excluded by !vendor/**, !**/vendor/**
  • vendor/golang.org/x/sys/unix/zerrors_linux_arm64.go is excluded by !vendor/**, !**/vendor/**
  • vendor/golang.org/x/sys/unix/zerrors_linux_loong64.go is excluded by !vendor/**, !**/vendor/**
  • vendor/golang.org/x/sys/unix/zerrors_linux_mips.go is excluded by !vendor/**, !**/vendor/**
  • vendor/golang.org/x/sys/unix/zerrors_linux_mips64.go is excluded by !vendor/**, !**/vendor/**
  • vendor/golang.org/x/sys/unix/zerrors_linux_mips64le.go is excluded by !vendor/**, !**/vendor/**
  • vendor/golang.org/x/sys/unix/zerrors_linux_mipsle.go is excluded by !vendor/**, !**/vendor/**
  • vendor/golang.org/x/sys/unix/zerrors_linux_ppc.go is excluded by !vendor/**, !**/vendor/**
  • vendor/golang.org/x/sys/unix/zerrors_linux_ppc64.go is excluded by !vendor/**, !**/vendor/**
  • vendor/golang.org/x/sys/unix/zerrors_linux_ppc64le.go is excluded by !vendor/**, !**/vendor/**
  • vendor/golang.org/x/sys/unix/zerrors_linux_riscv64.go is excluded by !vendor/**, !**/vendor/**
  • vendor/golang.org/x/sys/unix/zerrors_linux_s390x.go is excluded by !vendor/**, !**/vendor/**
  • vendor/golang.org/x/sys/unix/zerrors_linux_sparc64.go is excluded by !vendor/**, !**/vendor/**
  • vendor/golang.org/x/sys/unix/ztypes_netbsd_arm.go is excluded by !vendor/**, !**/vendor/**
  • vendor/modules.txt is excluded by !vendor/**, !**/vendor/**
  • vendor/sigs.k8s.io/prow/pkg/apis/prowjobs/v1/types.go is excluded by !vendor/**, !**/vendor/**
  • vendor/sigs.k8s.io/prow/pkg/bugzilla/client.go is excluded by !vendor/**, !**/vendor/**
  • vendor/sigs.k8s.io/prow/pkg/cache/cache.go is excluded by !vendor/**, !**/vendor/**
  • vendor/sigs.k8s.io/prow/pkg/config/cache.go is excluded by !vendor/**, !**/vendor/**
  • vendor/sigs.k8s.io/prow/pkg/config/config.go is excluded by !vendor/**, !**/vendor/**
  • vendor/sigs.k8s.io/prow/pkg/config/jobs.go is excluded by !vendor/**, !**/vendor/**
  • vendor/sigs.k8s.io/prow/pkg/config/tide.go is excluded by !vendor/**, !**/vendor/**
  • vendor/sigs.k8s.io/prow/pkg/crier/reporters/gerrit/reporter.go is excluded by !vendor/**, !**/vendor/**
  • vendor/sigs.k8s.io/prow/pkg/deck/jobs/jobs.go is excluded by !vendor/**, !**/vendor/**
  • vendor/sigs.k8s.io/prow/pkg/genyaml/genyaml.go is excluded by !vendor/**, !**/vendor/**
  • vendor/sigs.k8s.io/prow/pkg/genyaml/populate_struct.go is excluded by !vendor/**, !**/vendor/**
  • vendor/sigs.k8s.io/prow/pkg/gerrit/adapter/adapter.go is excluded by !vendor/**, !**/vendor/**
  • vendor/sigs.k8s.io/prow/pkg/gerrit/client/client.go is excluded by !vendor/**, !**/vendor/**
  • vendor/sigs.k8s.io/prow/pkg/hook/server.go is excluded by !vendor/**, !**/vendor/**
  • vendor/sigs.k8s.io/prow/pkg/interrupts/interrupts.go is excluded by !vendor/**, !**/vendor/**
  • vendor/sigs.k8s.io/prow/pkg/io/opener.go is excluded by !vendor/**, !**/vendor/**
  • vendor/sigs.k8s.io/prow/pkg/jira/jira.go is excluded by !vendor/**, !**/vendor/**
  • vendor/sigs.k8s.io/prow/pkg/kube/config.go is excluded by !vendor/**, !**/vendor/**
  • vendor/sigs.k8s.io/prow/pkg/logrusutil/logrusutil.go is excluded by !vendor/**, !**/vendor/**
  • vendor/sigs.k8s.io/prow/pkg/moonraker/moonraker.go is excluded by !vendor/**, !**/vendor/**
  • vendor/sigs.k8s.io/prow/pkg/pjutil/filter.go is excluded by !vendor/**, !**/vendor/**
  • vendor/sigs.k8s.io/prow/pkg/pjutil/pjutil.go is excluded by !vendor/**, !**/vendor/**
  • vendor/sigs.k8s.io/prow/pkg/pjutil/tot.go is excluded by !vendor/**, !**/vendor/**
  • vendor/sigs.k8s.io/prow/pkg/pluginhelp/hook/hook.go is excluded by !vendor/**, !**/vendor/**
  • vendor/sigs.k8s.io/prow/pkg/plugins/approve/approvers/owners.go is excluded by !vendor/**, !**/vendor/**
  • vendor/sigs.k8s.io/prow/pkg/plugins/assign/assign.go is excluded by !vendor/**, !**/vendor/**
  • vendor/sigs.k8s.io/prow/pkg/plugins/blockade/blockade.go is excluded by !vendor/**, !**/vendor/**
  • vendor/sigs.k8s.io/prow/pkg/plugins/blunderbuss/blunderbuss.go is excluded by !vendor/**, !**/vendor/**
  • vendor/sigs.k8s.io/prow/pkg/plugins/bugzilla/bugzilla.go is excluded by !vendor/**, !**/vendor/**
  • vendor/sigs.k8s.io/prow/pkg/plugins/cat/cat.go is excluded by !vendor/**, !**/vendor/**
  • vendor/sigs.k8s.io/prow/pkg/plugins/cla/cla.go is excluded by !vendor/**, !**/vendor/**
  • vendor/sigs.k8s.io/prow/pkg/plugins/config.go is excluded by !vendor/**, !**/vendor/**
  • vendor/sigs.k8s.io/prow/pkg/plugins/dog/dog.go is excluded by !vendor/**, !**/vendor/**
  • vendor/sigs.k8s.io/prow/pkg/plugins/goose/goose.go is excluded by !vendor/**, !**/vendor/**
  • vendor/sigs.k8s.io/prow/pkg/plugins/heart/heart.go is excluded by !vendor/**, !**/vendor/**
  • vendor/sigs.k8s.io/prow/pkg/plugins/issue-management/link-issue.go is excluded by !vendor/**, !**/vendor/**
  • vendor/sigs.k8s.io/prow/pkg/plugins/jira/jira.go is excluded by !vendor/**, !**/vendor/**
  • vendor/sigs.k8s.io/prow/pkg/plugins/plugin-config-documented.yaml is excluded by !vendor/**, !**/vendor/**
  • vendor/sigs.k8s.io/prow/pkg/plugins/plugins.go is excluded by !vendor/**, !**/vendor/**
  • vendor/sigs.k8s.io/prow/pkg/plugins/pony/pony.go is excluded by !vendor/**, !**/vendor/**
  • vendor/sigs.k8s.io/prow/pkg/plugins/releasenote/releasenote.go is excluded by !vendor/**, !**/vendor/**
  • vendor/sigs.k8s.io/prow/pkg/plugins/respond.go is excluded by !vendor/**, !**/vendor/**
  • vendor/sigs.k8s.io/prow/pkg/plugins/slackevents/slackevents.go is excluded by !vendor/**, !**/vendor/**
  • vendor/sigs.k8s.io/prow/pkg/plugins/testfreeze/checker/checker.go is excluded by !vendor/**, !**/vendor/**
  • vendor/sigs.k8s.io/prow/pkg/plugins/transfer-issue/transfer-issue.go is excluded by !vendor/**, !**/vendor/**
  • vendor/sigs.k8s.io/prow/pkg/plugins/trick-or-treat/trick-or-treat.go is excluded by !vendor/**, !**/vendor/**
  • vendor/sigs.k8s.io/prow/pkg/plugins/trigger/generic-comment.go is excluded by !vendor/**, !**/vendor/**
  • vendor/sigs.k8s.io/prow/pkg/plugins/trigger/push.go is excluded by !vendor/**, !**/vendor/**
  • vendor/sigs.k8s.io/prow/pkg/plugins/trigger/trigger.go is excluded by !vendor/**, !**/vendor/**
  • vendor/sigs.k8s.io/prow/pkg/pod-utils/decorate/podspec.go is excluded by !vendor/**, !**/vendor/**
  • vendor/sigs.k8s.io/prow/pkg/pod-utils/downwardapi/jobspec.go is excluded by !vendor/**, !**/vendor/**
  • vendor/sigs.k8s.io/prow/pkg/repoowners/repoowners.go is excluded by !vendor/**, !**/vendor/**
  • vendor/sigs.k8s.io/prow/pkg/sidecar/censor.go is excluded by !vendor/**, !**/vendor/**
  • vendor/sigs.k8s.io/prow/pkg/sidecar/run.go is excluded by !vendor/**, !**/vendor/**
  • vendor/sigs.k8s.io/prow/pkg/slack/client.go is excluded by !vendor/**, !**/vendor/**
  • vendor/sigs.k8s.io/prow/pkg/throttle/throttle.go is excluded by !vendor/**, !**/vendor/**
  • vendor/sigs.k8s.io/prow/pkg/tide/blockers/blockers.go is excluded by !vendor/**, !**/vendor/**
  • vendor/sigs.k8s.io/prow/pkg/tide/gerrit.go is excluded by !vendor/**, !**/vendor/**
  • vendor/sigs.k8s.io/prow/pkg/tide/github.go is excluded by !vendor/**, !**/vendor/**
  • vendor/sigs.k8s.io/prow/pkg/tide/history/history.go is excluded by !vendor/**, !**/vendor/**
  • vendor/sigs.k8s.io/prow/pkg/tide/status.go is excluded by !vendor/**, !**/vendor/**
  • vendor/sigs.k8s.io/prow/pkg/tide/tide.go is excluded by !vendor/**, !**/vendor/**
📒 Files selected for processing (3)
  • go.mod
  • pkg/jira/customfield.go
  • pkg/jira/customfield_test.go

@deepsm007 deepsm007 force-pushed the jira-customfield-configurable-downstream branch from ef00ae7 to e7cdfd2 Compare March 16, 2026 18:58
Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

♻️ Duplicate comments (2)
pkg/jira/customfield.go (2)

19-20: ⚠️ Potential issue | 🔴 Critical

Synchronize fallback map access to prevent concurrent map panics.

FallbackIDs is an exported mutable map (Line 19), and FieldID reads it unsafely (Line 62). Concurrent writes by callers can cause concurrent map read and map write panics.

Proposed fix
 import (
 	"context"
+	"maps"
 	"sync"

 	jiraapi "github.com/andygrunwald/go-jira"
 	jirautil "sigs.k8s.io/prow/pkg/jira"
 )
@@
 type CustomFieldResolver struct {
 	client      *jiraapi.Client
 	mu          sync.RWMutex
 	byName      map[string]string
 	loaded      bool
-	FallbackIDs map[string]string // optional: field name -> custom field ID
+	fallbackIDs map[string]string // optional: field name -> custom field ID
 }
@@
 func NewCustomFieldResolver(client *jiraapi.Client) *CustomFieldResolver {
-	return &CustomFieldResolver{client: client, byName: make(map[string]string)}
+	return &CustomFieldResolver{
+		client:      client,
+		byName:      make(map[string]string),
+		fallbackIDs: make(map[string]string),
+	}
 }
+
+func (r *CustomFieldResolver) SetFallbackIDs(ids map[string]string) {
+	r.mu.Lock()
+	defer r.mu.Unlock()
+	r.fallbackIDs = maps.Clone(ids)
+}
@@
-	if r.FallbackIDs != nil {
-		if fallback := r.FallbackIDs[fieldName]; fallback != "" {
-			return fallback, nil
-		}
-	}
+	r.mu.RLock()
+	fallback := r.fallbackIDs[fieldName]
+	r.mu.RUnlock()
+	if fallback != "" {
+		return fallback, nil
+	}

Also applies to: 62-64

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

In `@pkg/jira/customfield.go` around lines 19 - 20, The exported mutable map
FallbackIDs can be read concurrently in FieldID causing panics; add a
sync.RWMutex field (e.g., fallbackMu or FallbackIDsMu) to the same struct that
holds FallbackIDs and use RLock/RUnlock inside FieldID when accessing
FallbackIDs, and update any internal writers to use Lock/Unlock (or provide
setter/delete methods that lock) so all reads/writes to FallbackIDs are
synchronized; refer to symbols FallbackIDs and FieldID when making the changes.

22-23: ⚠️ Potential issue | 🔴 Critical

Guard r.client before dereference in loadFields.

NewCustomFieldResolver allows a nil client (Lines 22-23), but loadFields dereferences r.client unconditionally at Line 39. This can panic at runtime.

Proposed fix
 import (
 	"context"
+	"errors"
 	"sync"
@@
 func (r *CustomFieldResolver) loadFields(ctx context.Context) error {
@@
 	r.mu.Lock()
 	defer r.mu.Unlock()
 	if r.loaded {
 		return nil
 	}
+	if r.client == nil {
+		return errors.New("jira client is nil")
+	}
 	fields, resp, err := r.client.Field.GetListWithContext(ctx)

Also applies to: 39-39

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

In `@pkg/jira/customfield.go` around lines 22 - 23, NewCustomFieldResolver
currently allows creating a resolver with a nil jira client but loadFields
dereferences r.client, which can panic; update loadFields to guard r.client
before any dereference (e.g., at the top of loadFields check if r.client == nil
and return early with a safe value or error), and keep using the existing byName
map initialized by NewCustomFieldResolver; reference the NewCustomFieldResolver
constructor and the loadFields method when applying the nil-check so the fix is
localized to that method.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Duplicate comments:
In `@pkg/jira/customfield.go`:
- Around line 19-20: The exported mutable map FallbackIDs can be read
concurrently in FieldID causing panics; add a sync.RWMutex field (e.g.,
fallbackMu or FallbackIDsMu) to the same struct that holds FallbackIDs and use
RLock/RUnlock inside FieldID when accessing FallbackIDs, and update any internal
writers to use Lock/Unlock (or provide setter/delete methods that lock) so all
reads/writes to FallbackIDs are synchronized; refer to symbols FallbackIDs and
FieldID when making the changes.
- Around line 22-23: NewCustomFieldResolver currently allows creating a resolver
with a nil jira client but loadFields dereferences r.client, which can panic;
update loadFields to guard r.client before any dereference (e.g., at the top of
loadFields check if r.client == nil and return early with a safe value or
error), and keep using the existing byName map initialized by
NewCustomFieldResolver; reference the NewCustomFieldResolver constructor and the
loadFields method when applying the nil-check so the fix is localized to that
method.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: 4f0ffba6-4245-40f2-841d-d06ffc5209d3

📥 Commits

Reviewing files that changed from the base of the PR and between ef00ae7 and e7cdfd2.

⛔ Files ignored due to path filters (233)
  • go.sum is excluded by !**/*.sum
  • vendor/github.com/google/go-cmp/cmp/report_compare.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/google/go-cmp/cmp/report_reflect.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/stretchr/testify/assert/assertion_compare.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/stretchr/testify/assert/assertion_format.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/stretchr/testify/assert/assertion_forward.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/stretchr/testify/assert/assertion_order.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/stretchr/testify/assert/assertions.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/stretchr/testify/assert/doc.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/stretchr/testify/assert/http_assertions.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/stretchr/testify/assert/yaml/yaml_custom.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/stretchr/testify/assert/yaml/yaml_default.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/stretchr/testify/assert/yaml/yaml_fail.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/auto/sdk/internal/telemetry/id.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/auto/sdk/internal/telemetry/number.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/auto/sdk/internal/telemetry/span.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/auto/sdk/internal/telemetry/status.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/auto/sdk/internal/telemetry/traces.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/auto/sdk/internal/telemetry/value.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/auto/sdk/span.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/auto/sdk/tracer.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/.codespellignore is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/.golangci.yml is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/.lycheeignore is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/CHANGELOG.md is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/CODEOWNERS is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/CONTRIBUTING.md is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/LICENSE is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/Makefile is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/README.md is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/RELEASING.md is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/SECURITY-INSIGHTS.yml is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/VERSIONING.md is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/attribute/encoder.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/attribute/filter.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/attribute/hash.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/attribute/internal/attribute.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/attribute/internal/xxhash/xxhash.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/attribute/iterator.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/attribute/key.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/attribute/kv.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/attribute/set.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/attribute/type_string.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/attribute/value.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/baggage/baggage.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/codes/codes.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/dependencies.Dockerfile is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/internal/global/instruments.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/internal/global/internal_logging.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/internal/global/meter.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/internal/global/trace.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/metric.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/metric/LICENSE is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/metric/asyncfloat64.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/metric/asyncint64.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/metric/config.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/metric/meter.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/metric/noop/noop.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/metric/syncfloat64.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/metric/syncint64.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/propagation/baggage.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/propagation/propagation.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/propagation/trace_context.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/sdk/LICENSE is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/sdk/internal/x/features.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/sdk/internal/x/x.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/sdk/metric/LICENSE is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/sdk/metric/config.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/sdk/metric/doc.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/sdk/metric/exemplar.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/sdk/metric/exemplar/filter.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/sdk/metric/exemplar/fixed_size_reservoir.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/sdk/metric/exemplar/histogram_reservoir.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/sdk/metric/exemplar/storage.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/sdk/metric/instrument.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/sdk/metric/instrumentkind_string.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/sdk/metric/internal/aggregate/aggregate.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/sdk/metric/internal/aggregate/atomic.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/sdk/metric/internal/aggregate/drop.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/sdk/metric/internal/aggregate/exponential_histogram.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/sdk/metric/internal/aggregate/filtered_reservoir.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/sdk/metric/internal/aggregate/histogram.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/sdk/metric/internal/aggregate/lastvalue.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/sdk/metric/internal/aggregate/limit.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/sdk/metric/internal/aggregate/sum.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/sdk/metric/internal/observ/instrumentation.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/sdk/metric/internal/reservoir/concurrent_safe.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/sdk/metric/internal/reservoir/doc.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/sdk/metric/internal/x/README.md is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/sdk/metric/internal/x/x.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/sdk/metric/manual_reader.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/sdk/metric/meter.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/sdk/metric/metricdata/temporality_string.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/sdk/metric/periodic_reader.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/sdk/metric/pipeline.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/sdk/metric/provider.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/sdk/metric/reader.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/sdk/metric/version.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/sdk/resource/builtin.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/sdk/resource/container.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/sdk/resource/env.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/sdk/resource/host_id.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/sdk/resource/host_id_bsd.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/sdk/resource/host_id_linux.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/sdk/resource/host_id_unsupported.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/sdk/resource/host_id_windows.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/sdk/resource/os.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/sdk/resource/os_release_unix.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/sdk/resource/os_unix.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/sdk/resource/os_unsupported.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/sdk/resource/process.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/sdk/resource/resource.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/sdk/version.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/semconv/v1.34.0/MIGRATION.md is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/semconv/v1.34.0/README.md is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/semconv/v1.37.0/MIGRATION.md is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/semconv/v1.37.0/README.md is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/semconv/v1.37.0/attribute_group.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/semconv/v1.37.0/doc.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/semconv/v1.37.0/error_type.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/semconv/v1.37.0/exception.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/semconv/v1.37.0/schema.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/semconv/v1.39.0/MIGRATION.md is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/semconv/v1.39.0/README.md is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/semconv/v1.39.0/attribute_group.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/semconv/v1.39.0/doc.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/semconv/v1.39.0/error_type.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/semconv/v1.39.0/exception.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/semconv/v1.39.0/otelconv/metric.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/semconv/v1.39.0/schema.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/trace/LICENSE is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/trace/auto.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/trace/config.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/trace/hex.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/trace/internal/telemetry/attr.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/trace/internal/telemetry/id.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/trace/internal/telemetry/value.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/trace/noop.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/trace/noop/noop.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/trace/span.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/trace/trace.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/trace/tracestate.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/version.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/versions.yaml is excluded by !vendor/**, !**/vendor/**
  • vendor/golang.org/x/sys/cpu/cpu.go is excluded by !vendor/**, !**/vendor/**
  • vendor/golang.org/x/sys/cpu/cpu_arm64.go is excluded by !vendor/**, !**/vendor/**
  • vendor/golang.org/x/sys/cpu/cpu_arm64.s is excluded by !vendor/**, !**/vendor/**
  • vendor/golang.org/x/sys/cpu/cpu_gc_arm64.go is excluded by !vendor/**, !**/vendor/**
  • vendor/golang.org/x/sys/cpu/cpu_gccgo_arm64.go is excluded by !vendor/**, !**/vendor/**
  • vendor/golang.org/x/sys/cpu/cpu_netbsd_arm64.go is excluded by !vendor/**, !**/vendor/**
  • vendor/golang.org/x/sys/cpu/cpu_openbsd_arm64.go is excluded by !vendor/**, !**/vendor/**
  • vendor/golang.org/x/sys/cpu/cpu_x86.go is excluded by !vendor/**, !**/vendor/**
  • vendor/golang.org/x/sys/unix/mkerrors.sh 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/zerrors_linux_386.go is excluded by !vendor/**, !**/vendor/**
  • vendor/golang.org/x/sys/unix/zerrors_linux_amd64.go is excluded by !vendor/**, !**/vendor/**
  • vendor/golang.org/x/sys/unix/zerrors_linux_arm.go is excluded by !vendor/**, !**/vendor/**
  • vendor/golang.org/x/sys/unix/zerrors_linux_arm64.go is excluded by !vendor/**, !**/vendor/**
  • vendor/golang.org/x/sys/unix/zerrors_linux_loong64.go is excluded by !vendor/**, !**/vendor/**
  • vendor/golang.org/x/sys/unix/zerrors_linux_mips.go is excluded by !vendor/**, !**/vendor/**
  • vendor/golang.org/x/sys/unix/zerrors_linux_mips64.go is excluded by !vendor/**, !**/vendor/**
  • vendor/golang.org/x/sys/unix/zerrors_linux_mips64le.go is excluded by !vendor/**, !**/vendor/**
  • vendor/golang.org/x/sys/unix/zerrors_linux_mipsle.go is excluded by !vendor/**, !**/vendor/**
  • vendor/golang.org/x/sys/unix/zerrors_linux_ppc.go is excluded by !vendor/**, !**/vendor/**
  • vendor/golang.org/x/sys/unix/zerrors_linux_ppc64.go is excluded by !vendor/**, !**/vendor/**
  • vendor/golang.org/x/sys/unix/zerrors_linux_ppc64le.go is excluded by !vendor/**, !**/vendor/**
  • vendor/golang.org/x/sys/unix/zerrors_linux_riscv64.go is excluded by !vendor/**, !**/vendor/**
  • vendor/golang.org/x/sys/unix/zerrors_linux_s390x.go is excluded by !vendor/**, !**/vendor/**
  • vendor/golang.org/x/sys/unix/zerrors_linux_sparc64.go is excluded by !vendor/**, !**/vendor/**
  • vendor/golang.org/x/sys/unix/ztypes_netbsd_arm.go is excluded by !vendor/**, !**/vendor/**
  • vendor/modules.txt is excluded by !vendor/**, !**/vendor/**
  • vendor/sigs.k8s.io/prow/pkg/apis/prowjobs/v1/types.go is excluded by !vendor/**, !**/vendor/**
  • vendor/sigs.k8s.io/prow/pkg/bugzilla/client.go is excluded by !vendor/**, !**/vendor/**
  • vendor/sigs.k8s.io/prow/pkg/cache/cache.go is excluded by !vendor/**, !**/vendor/**
  • vendor/sigs.k8s.io/prow/pkg/config/cache.go is excluded by !vendor/**, !**/vendor/**
  • vendor/sigs.k8s.io/prow/pkg/config/config.go is excluded by !vendor/**, !**/vendor/**
  • vendor/sigs.k8s.io/prow/pkg/config/jobs.go is excluded by !vendor/**, !**/vendor/**
  • vendor/sigs.k8s.io/prow/pkg/config/tide.go is excluded by !vendor/**, !**/vendor/**
  • vendor/sigs.k8s.io/prow/pkg/crier/reporters/gerrit/reporter.go is excluded by !vendor/**, !**/vendor/**
  • vendor/sigs.k8s.io/prow/pkg/deck/jobs/jobs.go is excluded by !vendor/**, !**/vendor/**
  • vendor/sigs.k8s.io/prow/pkg/genyaml/genyaml.go is excluded by !vendor/**, !**/vendor/**
  • vendor/sigs.k8s.io/prow/pkg/genyaml/populate_struct.go is excluded by !vendor/**, !**/vendor/**
  • vendor/sigs.k8s.io/prow/pkg/gerrit/adapter/adapter.go is excluded by !vendor/**, !**/vendor/**
  • vendor/sigs.k8s.io/prow/pkg/gerrit/client/client.go is excluded by !vendor/**, !**/vendor/**
  • vendor/sigs.k8s.io/prow/pkg/hook/server.go is excluded by !vendor/**, !**/vendor/**
  • vendor/sigs.k8s.io/prow/pkg/interrupts/interrupts.go is excluded by !vendor/**, !**/vendor/**
  • vendor/sigs.k8s.io/prow/pkg/io/opener.go is excluded by !vendor/**, !**/vendor/**
  • vendor/sigs.k8s.io/prow/pkg/jira/jira.go is excluded by !vendor/**, !**/vendor/**
  • vendor/sigs.k8s.io/prow/pkg/kube/config.go is excluded by !vendor/**, !**/vendor/**
  • vendor/sigs.k8s.io/prow/pkg/logrusutil/logrusutil.go is excluded by !vendor/**, !**/vendor/**
  • vendor/sigs.k8s.io/prow/pkg/moonraker/moonraker.go is excluded by !vendor/**, !**/vendor/**
  • vendor/sigs.k8s.io/prow/pkg/pjutil/filter.go is excluded by !vendor/**, !**/vendor/**
  • vendor/sigs.k8s.io/prow/pkg/pjutil/pjutil.go is excluded by !vendor/**, !**/vendor/**
  • vendor/sigs.k8s.io/prow/pkg/pjutil/tot.go is excluded by !vendor/**, !**/vendor/**
  • vendor/sigs.k8s.io/prow/pkg/pluginhelp/hook/hook.go is excluded by !vendor/**, !**/vendor/**
  • vendor/sigs.k8s.io/prow/pkg/plugins/approve/approvers/owners.go is excluded by !vendor/**, !**/vendor/**
  • vendor/sigs.k8s.io/prow/pkg/plugins/assign/assign.go is excluded by !vendor/**, !**/vendor/**
  • vendor/sigs.k8s.io/prow/pkg/plugins/blockade/blockade.go is excluded by !vendor/**, !**/vendor/**
  • vendor/sigs.k8s.io/prow/pkg/plugins/blunderbuss/blunderbuss.go is excluded by !vendor/**, !**/vendor/**
  • vendor/sigs.k8s.io/prow/pkg/plugins/bugzilla/bugzilla.go is excluded by !vendor/**, !**/vendor/**
  • vendor/sigs.k8s.io/prow/pkg/plugins/cat/cat.go is excluded by !vendor/**, !**/vendor/**
  • vendor/sigs.k8s.io/prow/pkg/plugins/cla/cla.go is excluded by !vendor/**, !**/vendor/**
  • vendor/sigs.k8s.io/prow/pkg/plugins/config.go is excluded by !vendor/**, !**/vendor/**
  • vendor/sigs.k8s.io/prow/pkg/plugins/dog/dog.go is excluded by !vendor/**, !**/vendor/**
  • vendor/sigs.k8s.io/prow/pkg/plugins/goose/goose.go is excluded by !vendor/**, !**/vendor/**
  • vendor/sigs.k8s.io/prow/pkg/plugins/heart/heart.go is excluded by !vendor/**, !**/vendor/**
  • vendor/sigs.k8s.io/prow/pkg/plugins/issue-management/link-issue.go is excluded by !vendor/**, !**/vendor/**
  • vendor/sigs.k8s.io/prow/pkg/plugins/jira/jira.go is excluded by !vendor/**, !**/vendor/**
  • vendor/sigs.k8s.io/prow/pkg/plugins/plugin-config-documented.yaml is excluded by !vendor/**, !**/vendor/**
  • vendor/sigs.k8s.io/prow/pkg/plugins/plugins.go is excluded by !vendor/**, !**/vendor/**
  • vendor/sigs.k8s.io/prow/pkg/plugins/pony/pony.go is excluded by !vendor/**, !**/vendor/**
  • vendor/sigs.k8s.io/prow/pkg/plugins/releasenote/releasenote.go is excluded by !vendor/**, !**/vendor/**
  • vendor/sigs.k8s.io/prow/pkg/plugins/respond.go is excluded by !vendor/**, !**/vendor/**
  • vendor/sigs.k8s.io/prow/pkg/plugins/slackevents/slackevents.go is excluded by !vendor/**, !**/vendor/**
  • vendor/sigs.k8s.io/prow/pkg/plugins/testfreeze/checker/checker.go is excluded by !vendor/**, !**/vendor/**
  • vendor/sigs.k8s.io/prow/pkg/plugins/transfer-issue/transfer-issue.go is excluded by !vendor/**, !**/vendor/**
  • vendor/sigs.k8s.io/prow/pkg/plugins/trick-or-treat/trick-or-treat.go is excluded by !vendor/**, !**/vendor/**
  • vendor/sigs.k8s.io/prow/pkg/plugins/trigger/generic-comment.go is excluded by !vendor/**, !**/vendor/**
  • vendor/sigs.k8s.io/prow/pkg/plugins/trigger/push.go is excluded by !vendor/**, !**/vendor/**
  • vendor/sigs.k8s.io/prow/pkg/plugins/trigger/trigger.go is excluded by !vendor/**, !**/vendor/**
  • vendor/sigs.k8s.io/prow/pkg/pod-utils/decorate/podspec.go is excluded by !vendor/**, !**/vendor/**
  • vendor/sigs.k8s.io/prow/pkg/pod-utils/downwardapi/jobspec.go is excluded by !vendor/**, !**/vendor/**
  • vendor/sigs.k8s.io/prow/pkg/repoowners/repoowners.go is excluded by !vendor/**, !**/vendor/**
  • vendor/sigs.k8s.io/prow/pkg/sidecar/censor.go is excluded by !vendor/**, !**/vendor/**
  • vendor/sigs.k8s.io/prow/pkg/sidecar/run.go is excluded by !vendor/**, !**/vendor/**
  • vendor/sigs.k8s.io/prow/pkg/slack/client.go is excluded by !vendor/**, !**/vendor/**
  • vendor/sigs.k8s.io/prow/pkg/throttle/throttle.go is excluded by !vendor/**, !**/vendor/**
  • vendor/sigs.k8s.io/prow/pkg/tide/blockers/blockers.go is excluded by !vendor/**, !**/vendor/**
  • vendor/sigs.k8s.io/prow/pkg/tide/gerrit.go is excluded by !vendor/**, !**/vendor/**
  • vendor/sigs.k8s.io/prow/pkg/tide/github.go is excluded by !vendor/**, !**/vendor/**
  • vendor/sigs.k8s.io/prow/pkg/tide/history/history.go is excluded by !vendor/**, !**/vendor/**
  • vendor/sigs.k8s.io/prow/pkg/tide/status.go is excluded by !vendor/**, !**/vendor/**
  • vendor/sigs.k8s.io/prow/pkg/tide/tide.go is excluded by !vendor/**, !**/vendor/**
📒 Files selected for processing (3)
  • go.mod
  • pkg/jira/customfield.go
  • pkg/jira/customfield_test.go

@deepsm007 deepsm007 force-pushed the jira-customfield-configurable-downstream branch from e7cdfd2 to 65933f5 Compare March 16, 2026 19:29
Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 1

♻️ Duplicate comments (2)
pkg/jira/customfield.go (2)

15-20: ⚠️ Potential issue | 🔴 Critical

Synchronize fallback ID access.

Line 64 reads an exported map without mu, so callers can trigger concurrent map read and map write by updating fallbacks while lookups are running. Keep the map private and only replace/read it under the resolver lock.

Proposed fix
+import "maps"
+
 type CustomFieldResolver struct {
 	client      *jiraapi.Client
 	mu          sync.RWMutex
 	byName      map[string]string
 	loaded      bool
-	FallbackIDs map[string]string // optional: field name -> custom field ID
+	fallbackIDs map[string]string // optional: field name -> custom field ID
 }
 
 func NewCustomFieldResolver(client *jiraapi.Client) *CustomFieldResolver {
-	return &CustomFieldResolver{client: client, byName: make(map[string]string)}
+	return &CustomFieldResolver{
+		client:      client,
+		byName:      make(map[string]string),
+		fallbackIDs: make(map[string]string),
+	}
 }
+
+func (r *CustomFieldResolver) SetFallbackIDs(ids map[string]string) {
+	r.mu.Lock()
+	defer r.mu.Unlock()
+	r.fallbackIDs = maps.Clone(ids)
+}
@@
-	if r.FallbackIDs != nil {
-		if fallback := r.FallbackIDs[fieldName]; fallback != "" {
-			return fallback, nil
-		}
-	}
+	r.mu.RLock()
+	fallback := r.fallbackIDs[fieldName]
+	r.mu.RUnlock()
+	if fallback != "" {
+		return fallback, nil
+	}

Also applies to: 63-65

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

In `@pkg/jira/customfield.go` around lines 15 - 20, The exported map FallbackIDs
on CustomFieldResolver is being read without locking, causing race conditions;
make the map unexported (e.g., fallbackIDs) and ensure all accesses and
replacements happen under the resolver's mu (use mu.Lock()/mu.Unlock() for
writes and mu.RLock()/mu.RUnlock() for reads), and when updating replace the
entire map atomically (assign a new map while holding mu) or copy-on-write to
avoid concurrent read/write panics; update any methods that reference
FallbackIDs (and any callers) to use the new private field and the locked
accessors.

23-25: ⚠️ Potential issue | 🟠 Major

Guard loadFields against a nil Jira client.

NewCustomFieldResolver accepts nil, but Line 40 dereferences r.client unconditionally. The first FieldID or Value call will panic instead of returning an error.

Proposed fix
+import "errors"
+
 func (r *CustomFieldResolver) loadFields(ctx context.Context) error {
 	r.mu.RLock()
 	if r.loaded {
 		r.mu.RUnlock()
 		return nil
@@
 	r.mu.Lock()
 	defer r.mu.Unlock()
 	if r.loaded {
 		return nil
 	}
+	if r.client == nil {
+		return errors.New("jira client is nil")
+	}
 	fields, resp, err := r.client.Field.GetListWithContext(ctx)

Also applies to: 27-40

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

In `@pkg/jira/customfield.go` around lines 23 - 25, NewCustomFieldResolver
currently allows creating a CustomFieldResolver with a nil jira client but
loadFields (called by methods FieldID and Value) dereferences r.client
unconditionally; update loadFields to check for r.client == nil and return a
descriptive error instead of panicking, and propagate that error back to callers
(FieldID and Value) so they return the error instead of panicking; reference
functions: NewCustomFieldResolver, loadFields, FieldID, Value and field r.client
when adding the nil-check and error return.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In `@Makefile`:
- Around line 278-279: The Makefile currently overwrites GOFLAGS when invoking
the scripts (e.g. the lines with export GOFLAGS=-mod=vendor &&
hack/update-codegen.sh and export GOFLAGS=-mod=vendor &&
hack/generate-ci-op-reference.sh), which discards any flags provided by CI or
the caller; change these to append -mod=vendor to the existing GOFLAGS (e.g.
export GOFLAGS="${GOFLAGS} -mod=vendor" or the Makefile-equivalent) so the
original GOFLAGS are preserved, and apply the same change to the other
occurrence mentioned for the generate/imports commands.

---

Duplicate comments:
In `@pkg/jira/customfield.go`:
- Around line 15-20: The exported map FallbackIDs on CustomFieldResolver is
being read without locking, causing race conditions; make the map unexported
(e.g., fallbackIDs) and ensure all accesses and replacements happen under the
resolver's mu (use mu.Lock()/mu.Unlock() for writes and mu.RLock()/mu.RUnlock()
for reads), and when updating replace the entire map atomically (assign a new
map while holding mu) or copy-on-write to avoid concurrent read/write panics;
update any methods that reference FallbackIDs (and any callers) to use the new
private field and the locked accessors.
- Around line 23-25: NewCustomFieldResolver currently allows creating a
CustomFieldResolver with a nil jira client but loadFields (called by methods
FieldID and Value) dereferences r.client unconditionally; update loadFields to
check for r.client == nil and return a descriptive error instead of panicking,
and propagate that error back to callers (FieldID and Value) so they return the
error instead of panicking; reference functions: NewCustomFieldResolver,
loadFields, FieldID, Value and field r.client when adding the nil-check and
error return.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: 47d78d3e-d722-4d67-a8a2-8733277ff178

📥 Commits

Reviewing files that changed from the base of the PR and between e7cdfd2 and 65933f5.

⛔ Files ignored due to path filters (231)
  • go.sum is excluded by !**/*.sum
  • vendor/github.com/stretchr/testify/assert/assertion_compare.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/stretchr/testify/assert/assertion_format.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/stretchr/testify/assert/assertion_forward.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/stretchr/testify/assert/assertion_order.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/stretchr/testify/assert/assertions.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/stretchr/testify/assert/doc.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/stretchr/testify/assert/http_assertions.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/stretchr/testify/assert/yaml/yaml_custom.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/stretchr/testify/assert/yaml/yaml_default.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/stretchr/testify/assert/yaml/yaml_fail.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/auto/sdk/internal/telemetry/id.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/auto/sdk/internal/telemetry/number.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/auto/sdk/internal/telemetry/span.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/auto/sdk/internal/telemetry/status.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/auto/sdk/internal/telemetry/traces.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/auto/sdk/internal/telemetry/value.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/auto/sdk/span.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/auto/sdk/tracer.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/.codespellignore is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/.golangci.yml is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/.lycheeignore is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/CHANGELOG.md is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/CODEOWNERS is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/CONTRIBUTING.md is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/LICENSE is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/Makefile is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/README.md is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/RELEASING.md is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/SECURITY-INSIGHTS.yml is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/VERSIONING.md is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/attribute/encoder.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/attribute/filter.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/attribute/hash.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/attribute/internal/attribute.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/attribute/internal/xxhash/xxhash.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/attribute/iterator.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/attribute/key.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/attribute/kv.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/attribute/set.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/attribute/type_string.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/attribute/value.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/baggage/baggage.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/codes/codes.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/dependencies.Dockerfile is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/internal/global/instruments.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/internal/global/internal_logging.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/internal/global/meter.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/internal/global/trace.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/metric.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/metric/LICENSE is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/metric/asyncfloat64.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/metric/asyncint64.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/metric/config.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/metric/meter.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/metric/noop/noop.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/metric/syncfloat64.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/metric/syncint64.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/propagation/baggage.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/propagation/propagation.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/propagation/trace_context.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/sdk/LICENSE is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/sdk/internal/x/features.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/sdk/internal/x/x.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/sdk/metric/LICENSE is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/sdk/metric/config.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/sdk/metric/doc.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/sdk/metric/exemplar.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/sdk/metric/exemplar/filter.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/sdk/metric/exemplar/fixed_size_reservoir.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/sdk/metric/exemplar/histogram_reservoir.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/sdk/metric/exemplar/storage.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/sdk/metric/instrument.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/sdk/metric/instrumentkind_string.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/sdk/metric/internal/aggregate/aggregate.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/sdk/metric/internal/aggregate/atomic.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/sdk/metric/internal/aggregate/drop.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/sdk/metric/internal/aggregate/exponential_histogram.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/sdk/metric/internal/aggregate/filtered_reservoir.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/sdk/metric/internal/aggregate/histogram.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/sdk/metric/internal/aggregate/lastvalue.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/sdk/metric/internal/aggregate/limit.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/sdk/metric/internal/aggregate/sum.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/sdk/metric/internal/observ/instrumentation.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/sdk/metric/internal/reservoir/concurrent_safe.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/sdk/metric/internal/reservoir/doc.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/sdk/metric/internal/x/README.md is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/sdk/metric/internal/x/x.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/sdk/metric/manual_reader.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/sdk/metric/meter.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/sdk/metric/metricdata/temporality_string.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/sdk/metric/periodic_reader.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/sdk/metric/pipeline.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/sdk/metric/provider.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/sdk/metric/reader.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/sdk/metric/version.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/sdk/resource/builtin.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/sdk/resource/container.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/sdk/resource/env.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/sdk/resource/host_id.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/sdk/resource/host_id_bsd.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/sdk/resource/host_id_linux.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/sdk/resource/host_id_unsupported.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/sdk/resource/host_id_windows.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/sdk/resource/os.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/sdk/resource/os_release_unix.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/sdk/resource/os_unix.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/sdk/resource/os_unsupported.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/sdk/resource/process.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/sdk/resource/resource.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/sdk/version.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/semconv/v1.34.0/MIGRATION.md is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/semconv/v1.34.0/README.md is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/semconv/v1.37.0/MIGRATION.md is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/semconv/v1.37.0/README.md is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/semconv/v1.37.0/attribute_group.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/semconv/v1.37.0/doc.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/semconv/v1.37.0/error_type.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/semconv/v1.37.0/exception.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/semconv/v1.37.0/schema.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/semconv/v1.39.0/MIGRATION.md is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/semconv/v1.39.0/README.md is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/semconv/v1.39.0/attribute_group.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/semconv/v1.39.0/doc.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/semconv/v1.39.0/error_type.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/semconv/v1.39.0/exception.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/semconv/v1.39.0/otelconv/metric.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/semconv/v1.39.0/schema.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/trace/LICENSE is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/trace/auto.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/trace/config.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/trace/hex.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/trace/internal/telemetry/attr.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/trace/internal/telemetry/id.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/trace/internal/telemetry/value.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/trace/noop.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/trace/noop/noop.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/trace/span.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/trace/trace.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/trace/tracestate.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/version.go is excluded by !vendor/**, !**/vendor/**
  • vendor/go.opentelemetry.io/otel/versions.yaml is excluded by !vendor/**, !**/vendor/**
  • vendor/golang.org/x/sys/cpu/cpu.go is excluded by !vendor/**, !**/vendor/**
  • vendor/golang.org/x/sys/cpu/cpu_arm64.go is excluded by !vendor/**, !**/vendor/**
  • vendor/golang.org/x/sys/cpu/cpu_arm64.s is excluded by !vendor/**, !**/vendor/**
  • vendor/golang.org/x/sys/cpu/cpu_gc_arm64.go is excluded by !vendor/**, !**/vendor/**
  • vendor/golang.org/x/sys/cpu/cpu_gccgo_arm64.go is excluded by !vendor/**, !**/vendor/**
  • vendor/golang.org/x/sys/cpu/cpu_netbsd_arm64.go is excluded by !vendor/**, !**/vendor/**
  • vendor/golang.org/x/sys/cpu/cpu_openbsd_arm64.go is excluded by !vendor/**, !**/vendor/**
  • vendor/golang.org/x/sys/cpu/cpu_x86.go is excluded by !vendor/**, !**/vendor/**
  • vendor/golang.org/x/sys/unix/mkerrors.sh 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/zerrors_linux_386.go is excluded by !vendor/**, !**/vendor/**
  • vendor/golang.org/x/sys/unix/zerrors_linux_amd64.go is excluded by !vendor/**, !**/vendor/**
  • vendor/golang.org/x/sys/unix/zerrors_linux_arm.go is excluded by !vendor/**, !**/vendor/**
  • vendor/golang.org/x/sys/unix/zerrors_linux_arm64.go is excluded by !vendor/**, !**/vendor/**
  • vendor/golang.org/x/sys/unix/zerrors_linux_loong64.go is excluded by !vendor/**, !**/vendor/**
  • vendor/golang.org/x/sys/unix/zerrors_linux_mips.go is excluded by !vendor/**, !**/vendor/**
  • vendor/golang.org/x/sys/unix/zerrors_linux_mips64.go is excluded by !vendor/**, !**/vendor/**
  • vendor/golang.org/x/sys/unix/zerrors_linux_mips64le.go is excluded by !vendor/**, !**/vendor/**
  • vendor/golang.org/x/sys/unix/zerrors_linux_mipsle.go is excluded by !vendor/**, !**/vendor/**
  • vendor/golang.org/x/sys/unix/zerrors_linux_ppc.go is excluded by !vendor/**, !**/vendor/**
  • vendor/golang.org/x/sys/unix/zerrors_linux_ppc64.go is excluded by !vendor/**, !**/vendor/**
  • vendor/golang.org/x/sys/unix/zerrors_linux_ppc64le.go is excluded by !vendor/**, !**/vendor/**
  • vendor/golang.org/x/sys/unix/zerrors_linux_riscv64.go is excluded by !vendor/**, !**/vendor/**
  • vendor/golang.org/x/sys/unix/zerrors_linux_s390x.go is excluded by !vendor/**, !**/vendor/**
  • vendor/golang.org/x/sys/unix/zerrors_linux_sparc64.go is excluded by !vendor/**, !**/vendor/**
  • vendor/golang.org/x/sys/unix/ztypes_netbsd_arm.go is excluded by !vendor/**, !**/vendor/**
  • vendor/modules.txt is excluded by !vendor/**, !**/vendor/**
  • vendor/sigs.k8s.io/prow/pkg/apis/prowjobs/v1/types.go is excluded by !vendor/**, !**/vendor/**
  • vendor/sigs.k8s.io/prow/pkg/bugzilla/client.go is excluded by !vendor/**, !**/vendor/**
  • vendor/sigs.k8s.io/prow/pkg/cache/cache.go is excluded by !vendor/**, !**/vendor/**
  • vendor/sigs.k8s.io/prow/pkg/config/cache.go is excluded by !vendor/**, !**/vendor/**
  • vendor/sigs.k8s.io/prow/pkg/config/config.go is excluded by !vendor/**, !**/vendor/**
  • vendor/sigs.k8s.io/prow/pkg/config/jobs.go is excluded by !vendor/**, !**/vendor/**
  • vendor/sigs.k8s.io/prow/pkg/config/tide.go is excluded by !vendor/**, !**/vendor/**
  • vendor/sigs.k8s.io/prow/pkg/crier/reporters/gerrit/reporter.go is excluded by !vendor/**, !**/vendor/**
  • vendor/sigs.k8s.io/prow/pkg/deck/jobs/jobs.go is excluded by !vendor/**, !**/vendor/**
  • vendor/sigs.k8s.io/prow/pkg/genyaml/genyaml.go is excluded by !vendor/**, !**/vendor/**
  • vendor/sigs.k8s.io/prow/pkg/genyaml/populate_struct.go is excluded by !vendor/**, !**/vendor/**
  • vendor/sigs.k8s.io/prow/pkg/gerrit/adapter/adapter.go is excluded by !vendor/**, !**/vendor/**
  • vendor/sigs.k8s.io/prow/pkg/gerrit/client/client.go is excluded by !vendor/**, !**/vendor/**
  • vendor/sigs.k8s.io/prow/pkg/hook/server.go is excluded by !vendor/**, !**/vendor/**
  • vendor/sigs.k8s.io/prow/pkg/interrupts/interrupts.go is excluded by !vendor/**, !**/vendor/**
  • vendor/sigs.k8s.io/prow/pkg/io/opener.go is excluded by !vendor/**, !**/vendor/**
  • vendor/sigs.k8s.io/prow/pkg/jira/jira.go is excluded by !vendor/**, !**/vendor/**
  • vendor/sigs.k8s.io/prow/pkg/kube/config.go is excluded by !vendor/**, !**/vendor/**
  • vendor/sigs.k8s.io/prow/pkg/logrusutil/logrusutil.go is excluded by !vendor/**, !**/vendor/**
  • vendor/sigs.k8s.io/prow/pkg/moonraker/moonraker.go is excluded by !vendor/**, !**/vendor/**
  • vendor/sigs.k8s.io/prow/pkg/pjutil/filter.go is excluded by !vendor/**, !**/vendor/**
  • vendor/sigs.k8s.io/prow/pkg/pjutil/pjutil.go is excluded by !vendor/**, !**/vendor/**
  • vendor/sigs.k8s.io/prow/pkg/pjutil/tot.go is excluded by !vendor/**, !**/vendor/**
  • vendor/sigs.k8s.io/prow/pkg/pluginhelp/hook/hook.go is excluded by !vendor/**, !**/vendor/**
  • vendor/sigs.k8s.io/prow/pkg/plugins/approve/approvers/owners.go is excluded by !vendor/**, !**/vendor/**
  • vendor/sigs.k8s.io/prow/pkg/plugins/assign/assign.go is excluded by !vendor/**, !**/vendor/**
  • vendor/sigs.k8s.io/prow/pkg/plugins/blockade/blockade.go is excluded by !vendor/**, !**/vendor/**
  • vendor/sigs.k8s.io/prow/pkg/plugins/blunderbuss/blunderbuss.go is excluded by !vendor/**, !**/vendor/**
  • vendor/sigs.k8s.io/prow/pkg/plugins/bugzilla/bugzilla.go is excluded by !vendor/**, !**/vendor/**
  • vendor/sigs.k8s.io/prow/pkg/plugins/cat/cat.go is excluded by !vendor/**, !**/vendor/**
  • vendor/sigs.k8s.io/prow/pkg/plugins/cla/cla.go is excluded by !vendor/**, !**/vendor/**
  • vendor/sigs.k8s.io/prow/pkg/plugins/config.go is excluded by !vendor/**, !**/vendor/**
  • vendor/sigs.k8s.io/prow/pkg/plugins/dog/dog.go is excluded by !vendor/**, !**/vendor/**
  • vendor/sigs.k8s.io/prow/pkg/plugins/goose/goose.go is excluded by !vendor/**, !**/vendor/**
  • vendor/sigs.k8s.io/prow/pkg/plugins/heart/heart.go is excluded by !vendor/**, !**/vendor/**
  • vendor/sigs.k8s.io/prow/pkg/plugins/issue-management/link-issue.go is excluded by !vendor/**, !**/vendor/**
  • vendor/sigs.k8s.io/prow/pkg/plugins/jira/jira.go is excluded by !vendor/**, !**/vendor/**
  • vendor/sigs.k8s.io/prow/pkg/plugins/plugin-config-documented.yaml is excluded by !vendor/**, !**/vendor/**
  • vendor/sigs.k8s.io/prow/pkg/plugins/plugins.go is excluded by !vendor/**, !**/vendor/**
  • vendor/sigs.k8s.io/prow/pkg/plugins/pony/pony.go is excluded by !vendor/**, !**/vendor/**
  • vendor/sigs.k8s.io/prow/pkg/plugins/releasenote/releasenote.go is excluded by !vendor/**, !**/vendor/**
  • vendor/sigs.k8s.io/prow/pkg/plugins/respond.go is excluded by !vendor/**, !**/vendor/**
  • vendor/sigs.k8s.io/prow/pkg/plugins/slackevents/slackevents.go is excluded by !vendor/**, !**/vendor/**
  • vendor/sigs.k8s.io/prow/pkg/plugins/testfreeze/checker/checker.go is excluded by !vendor/**, !**/vendor/**
  • vendor/sigs.k8s.io/prow/pkg/plugins/transfer-issue/transfer-issue.go is excluded by !vendor/**, !**/vendor/**
  • vendor/sigs.k8s.io/prow/pkg/plugins/trick-or-treat/trick-or-treat.go is excluded by !vendor/**, !**/vendor/**
  • vendor/sigs.k8s.io/prow/pkg/plugins/trigger/generic-comment.go is excluded by !vendor/**, !**/vendor/**
  • vendor/sigs.k8s.io/prow/pkg/plugins/trigger/push.go is excluded by !vendor/**, !**/vendor/**
  • vendor/sigs.k8s.io/prow/pkg/plugins/trigger/trigger.go is excluded by !vendor/**, !**/vendor/**
  • vendor/sigs.k8s.io/prow/pkg/pod-utils/decorate/podspec.go is excluded by !vendor/**, !**/vendor/**
  • vendor/sigs.k8s.io/prow/pkg/pod-utils/downwardapi/jobspec.go is excluded by !vendor/**, !**/vendor/**
  • vendor/sigs.k8s.io/prow/pkg/repoowners/repoowners.go is excluded by !vendor/**, !**/vendor/**
  • vendor/sigs.k8s.io/prow/pkg/sidecar/censor.go is excluded by !vendor/**, !**/vendor/**
  • vendor/sigs.k8s.io/prow/pkg/sidecar/run.go is excluded by !vendor/**, !**/vendor/**
  • vendor/sigs.k8s.io/prow/pkg/slack/client.go is excluded by !vendor/**, !**/vendor/**
  • vendor/sigs.k8s.io/prow/pkg/throttle/throttle.go is excluded by !vendor/**, !**/vendor/**
  • vendor/sigs.k8s.io/prow/pkg/tide/blockers/blockers.go is excluded by !vendor/**, !**/vendor/**
  • vendor/sigs.k8s.io/prow/pkg/tide/gerrit.go is excluded by !vendor/**, !**/vendor/**
  • vendor/sigs.k8s.io/prow/pkg/tide/github.go is excluded by !vendor/**, !**/vendor/**
  • vendor/sigs.k8s.io/prow/pkg/tide/history/history.go is excluded by !vendor/**, !**/vendor/**
  • vendor/sigs.k8s.io/prow/pkg/tide/status.go is excluded by !vendor/**, !**/vendor/**
  • vendor/sigs.k8s.io/prow/pkg/tide/tide.go is excluded by !vendor/**, !**/vendor/**
📒 Files selected for processing (4)
  • Makefile
  • go.mod
  • pkg/jira/customfield.go
  • pkg/jira/customfield_test.go
🚧 Files skipped from review as they are similar to previous changes (1)
  • pkg/jira/customfield_test.go

@deepsm007 deepsm007 force-pushed the jira-customfield-configurable-downstream branch from 65933f5 to f525545 Compare March 16, 2026 21:18
@openshift-ci
Copy link
Contributor

openshift-ci bot commented Mar 16, 2026

@deepsm007: 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/frontend-checks f525545 link true /test frontend-checks
ci/prow/validate-vendor f525545 link true /test validate-vendor
ci/prow/codegen f525545 link true /test codegen
ci/prow/breaking-changes f525545 link false /test breaking-changes
ci/prow/format f525545 link true /test format
ci/prow/integration f525545 link true /test integration
ci/prow/unit f525545 link true /test unit
ci/prow/checkconfig f525545 link true /test checkconfig
ci/prow/images f525545 link true /test images

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.

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.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants