Skip to content

feat: update internal PostgreSQL to v16#2139

Closed
zdrapela wants to merge 1 commit into
redhat-developer:mainfrom
zdrapela:fedora-postgresql-16
Closed

feat: update internal PostgreSQL to v16#2139
zdrapela wants to merge 1 commit into
redhat-developer:mainfrom
zdrapela:fedora-postgresql-16

Conversation

@zdrapela

Copy link
Copy Markdown
Member

Description

Upgrade the integrated PostgreSQL from version 15 to 16.

Which issue(s) does this PR fix or relate to

PR acceptance criteria

  • Tests
  • Documentation

How to test changes / Special notes to the reviewer

@openshift-ci

openshift-ci Bot commented Jan 19, 2026

Copy link
Copy Markdown

[APPROVALNOTIFIER] This PR is NOT APPROVED

This pull-request has been approved by:
Once this PR has been reviewed and has the lgtm label, please assign rm3l for approval. For more information see the Code Review Process.

The full list of commands accepted by this bot can be found 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

@sonarqubecloud

Copy link
Copy Markdown

@rhdh-qodo-merge

Copy link
Copy Markdown

PR Reviewer Guide 🔍

Here are some key observations to aid the review process:

🎫 Ticket compliance analysis 🔶

RHIDP-10941 - Partially compliant

Compliant requirements:

  • Update the RHDH Operator configuration to deploy PostgreSQL 16 for the integrated database.
  • Ensure new Operator deployments create a PostgreSQL 16 database by default.

Non-compliant requirements:

  • Document the configuration changes in the PR.

Requires further human verification:

  • Ensure existing deployments continue to work (backward compatibility).
⏱️ Estimated effort to review: 3 🔵🔵🔵⚪⚪
🔒 Security concerns

Supply-chain risk:
several new references use quay.io/fedora/postgresql-16:latest (a floating tag). Using :latest increases the risk of unintentionally pulling changed/unvetted content over time. Prefer an immutable digest (or at minimum a specific version tag) and ensure the final shipped manifests/CSV point to the supported Red Hat image source.

⚡ Recommended focus areas for review

Image Source

The ticket goal is to use the Red Hat supported PostgreSQL 16 image, but the operator RELATED_IMAGE_postgresql and relatedImages are set to quay.io/fedora/postgresql-16:latest. Validate that release artifacts substitute this to registry.redhat.io/rhel9/postgresql-16 (or an approved internal mirror) and that the CSV ends up referencing the supported image for disconnected/restricted environments.

              env:
              - name: OPERATOR_NAME
                value: rhdh-operator
              - name: POD_NAME
                valueFrom:
                  fieldRef:
                    fieldPath: metadata.name
              - name: RELATED_IMAGE_postgresql
                value: quay.io/fedora/postgresql-16:latest
              - name: RELATED_IMAGE_backstage
                value: quay.io/rhdh-community/rhdh:next
              - name: RELATED_IMAGE_catalog_index
                value: quay.io/rhdh/plugin-catalog-index:1.9
              image: quay.io/rhdh/rhdh-rhel9-operator:1.9
              livenessProbe:
                httpGet:
                  path: /healthz
                  port: health
                initialDelaySeconds: 15
                periodSeconds: 20
              name: manager
              ports:
              - containerPort: 8081
                name: health
              - containerPort: 8443
                name: metrics
              readinessProbe:
                httpGet:
                  path: /readyz
                  port: health
                initialDelaySeconds: 5
                periodSeconds: 10
              resources:
                limits:
                  cpu: 500m
                  ephemeral-storage: 20Mi
                  memory: 1Gi
                requests:
                  cpu: 10m
                  memory: 128Mi
              securityContext:
                allowPrivilegeEscalation: false
                capabilities:
                  drop:
                  - ALL
                readOnlyRootFilesystem: true
              volumeMounts:
              - mountPath: /default-config
                name: default-config
              - mountPath: /plugin-deps
                name: plugin-deps
            securityContext:
              runAsNonRoot: true
            serviceAccountName: rhdh-controller-manager
            terminationGracePeriodSeconds: 10
            volumes:
            - configMap:
                name: rhdh-default-config
              name: default-config
            - configMap:
                name: rhdh-plugin-deps
                optional: true
              name: plugin-deps
    permissions:
    - rules:
      - apiGroups:
        - ""
        resources:
        - configmaps
        verbs:
        - get
        - list
        - watch
        - create
        - update
        - patch
        - delete
      - apiGroups:
        - coordination.k8s.io
        resources:
        - leases
        verbs:
        - get
        - list
        - watch
        - create
        - update
        - patch
        - delete
      - apiGroups:
        - ""
        resources:
        - events
        verbs:
        - create
        - patch
      serviceAccountName: rhdh-controller-manager
  strategy: deployment
installModes:
- supported: false
  type: OwnNamespace
- supported: false
  type: SingleNamespace
- supported: false
  type: MultiNamespace
- supported: true
  type: AllNamespaces
keywords:
- Backstage
- RHDH
links:
- name: Product Page
  url: https://developers.redhat.com/products/developer-hub/overview/
- name: Documentation
  url: https://access.redhat.com/documentation/en-us/red_hat_developer_hub
- name: Life Cycle
  url: https://access.redhat.com/node/7025299
- name: Support Policies
  url: https://access.redhat.com/policy/developerhub-support-policy
- name: Sources
  url: https://github.com/redhat-developer/rhdh-operator
maintainers:
- email: rhdh-notifications@redhat.com
  name: Red Hat Developer Hub Team
maturity: alpha
minKubeVersion: 1.25.0
provider:
  name: Red Hat Inc.
  url: https://www.redhat.com/
relatedImages:
- image: quay.io/fedora/postgresql-16:latest
  name: postgresql
Tag Stability

Multiple manifests pin PostgreSQL via the floating :latest tag, which can break reproducibility and upgrades and may violate operator bundle best practices (relatedImages typically should be immutable/digest-pinned). Consider using a versioned tag and/or digest pinning for RELATED_IMAGE_postgresql and all rendered statefulsets/jobs that reference the image.

              env:
              - name: OPERATOR_NAME
                value: rhdh-operator
              - name: POD_NAME
                valueFrom:
                  fieldRef:
                    fieldPath: metadata.name
              - name: RELATED_IMAGE_postgresql
                value: quay.io/fedora/postgresql-16:latest
              - name: RELATED_IMAGE_backstage
                value: quay.io/rhdh-community/rhdh:next
              - name: RELATED_IMAGE_catalog_index
                value: quay.io/rhdh/plugin-catalog-index:1.9
              image: quay.io/rhdh/rhdh-rhel9-operator:1.9
              livenessProbe:
                httpGet:
                  path: /healthz
                  port: health
                initialDelaySeconds: 15
                periodSeconds: 20
              name: manager
              ports:
              - containerPort: 8081
                name: health
              - containerPort: 8443
                name: metrics
              readinessProbe:
                httpGet:
                  path: /readyz
                  port: health
                initialDelaySeconds: 5
                periodSeconds: 10
              resources:
                limits:
                  cpu: 500m
                  ephemeral-storage: 20Mi
                  memory: 1Gi
                requests:
                  cpu: 10m
                  memory: 128Mi
              securityContext:
                allowPrivilegeEscalation: false
                capabilities:
                  drop:
                  - ALL
                readOnlyRootFilesystem: true
              volumeMounts:
              - mountPath: /default-config
                name: default-config
              - mountPath: /plugin-deps
                name: plugin-deps
            securityContext:
              runAsNonRoot: true
            serviceAccountName: rhdh-controller-manager
            terminationGracePeriodSeconds: 10
            volumes:
            - configMap:
                name: rhdh-default-config
              name: default-config
            - configMap:
                name: rhdh-plugin-deps
                optional: true
              name: plugin-deps
    permissions:
    - rules:
      - apiGroups:
        - ""
        resources:
        - configmaps
        verbs:
        - get
        - list
        - watch
        - create
        - update
        - patch
        - delete
      - apiGroups:
        - coordination.k8s.io
        resources:
        - leases
        verbs:
        - get
        - list
        - watch
        - create
        - update
        - patch
        - delete
      - apiGroups:
        - ""
        resources:
        - events
        verbs:
        - create
        - patch
      serviceAccountName: rhdh-controller-manager
  strategy: deployment
installModes:
- supported: false
  type: OwnNamespace
- supported: false
  type: SingleNamespace
- supported: false
  type: MultiNamespace
- supported: true
  type: AllNamespaces
keywords:
- Backstage
- RHDH
links:
- name: Product Page
  url: https://developers.redhat.com/products/developer-hub/overview/
- name: Documentation
  url: https://access.redhat.com/documentation/en-us/red_hat_developer_hub
- name: Life Cycle
  url: https://access.redhat.com/node/7025299
- name: Support Policies
  url: https://access.redhat.com/policy/developerhub-support-policy
- name: Sources
  url: https://github.com/redhat-developer/rhdh-operator
maintainers:
- email: rhdh-notifications@redhat.com
  name: Red Hat Developer Hub Team
maturity: alpha
minKubeVersion: 1.25.0
provider:
  name: Red Hat Inc.
  url: https://www.redhat.com/
relatedImages:
- image: quay.io/fedora/postgresql-16:latest
  name: postgresql
📄 References
  1. redhat-developer/rhdh-operator/pkg/model/testdata/janus-db-statefulset.yaml [18-47]
  2. redhat-developer/rhdh-operator/config/profile/rhdh/default-config/db-statefulset.yaml [60-90]
  3. redhat-developer/rhdh-operator/config/profile/backstage.io/default-config/db-statefulset.yaml [60-90]
  4. redhat-developer/rhdh-chart/charts/backstage/values.yaml [283-310]
  5. redhat-developer/rhdh-operator/config/profile/rhdh/default-config/db-statefulset.yaml [1-11]
  6. redhat-developer/rhdh-operator/config/profile/backstage.io/default-config/db-statefulset.yaml [12-27]
  7. redhat-developer/rhdh-operator/pkg/model/testdata/default-config/db-statefulset.yaml [1-18]
  8. redhat-developer/rhdh-operator/pkg/model/testdata/rhdh-db-statefulset.yaml [1-17]

@rhdh-qodo-merge rhdh-qodo-merge Bot added the enhancement New feature or request label Jan 19, 2026
@rhdh-qodo-merge

Copy link
Copy Markdown

PR Type

Enhancement


Description

  • Upgrade PostgreSQL image references from v15 to v16 across all configuration files

  • Update container image tags in manifests, config profiles, and test data

  • Update registry mirror configuration for restricted environment deployments


File Walkthrough

Relevant files
Configuration changes
11 files
prepare-restricted-environment.sh
Update PostgreSQL registry mirror to v16                                 
+2/-2     
backstage-default-config_v1_configmap.yaml
Update PostgreSQL image reference to v16                                 
+1/-1     
backstage-operator.clusterserviceversion.yaml
Update PostgreSQL image references in operator manifest   
+2/-2     
rhdh-default-config_v1_configmap.yaml
Update PostgreSQL image reference to v16                                 
+1/-1     
rhdh-plugin-deps_v1_configmap.yaml
Update PostgreSQL image for SonataFlow database job           
+1/-1     
db-statefulset.yaml
Update PostgreSQL image reference to v16                                 
+1/-1     
db-statefulset.yaml
Update PostgreSQL image reference to v16                                 
+1/-1     
deployment-patch.yaml
Update PostgreSQL image in operator deployment patch         
+1/-1     
sonataflow.yaml
Update PostgreSQL image for SonataFlow database job           
+1/-1     
install.yaml
Update PostgreSQL image references in distribution manifest
+1/-1     
install.yaml
Update PostgreSQL image references in distribution manifest
+3/-3     
Tests
3 files
db-statefulset.yaml
Update PostgreSQL image in test data fixture                         
+1/-1     
ips-db-statefulset.yaml
Update PostgreSQL image in test data fixture                         
+1/-1     
rhdh-db-statefulset.yaml
Update PostgreSQL image in test data fixture                         
+1/-1     

@rhdh-qodo-merge

Copy link
Copy Markdown

PR Code Suggestions ✨

Explore these optional code suggestions:

CategorySuggestion                                                                                                                                    Impact
High-level
Use the official Red Hat image

The PR incorrectly uses a Fedora community PostgreSQL image. It should be
updated to use the official Red Hat supported image
(registry.redhat.io/rhel9/postgresql-16) as required by the ticket.

Examples:

bundle/rhdh/manifests/backstage-operator.clusterserviceversion.yaml [338]
                  value: quay.io/fedora/postgresql-16:latest
bundle/rhdh/manifests/rhdh-default-config_v1_configmap.yaml [90]
              image: quay.io/fedora/postgresql-16:latest # will be replaced with the actual image

Solution Walkthrough:

Before:

# In various YAML configuration files:
...
spec:
  containers:
    - name: postgresql
      # The PR uses a Fedora community image
      image: quay.io/fedora/postgresql-16:latest
...
# In the ClusterServiceVersion:
relatedImages:
  - image: quay.io/fedora/postgresql-16:latest
    name: postgresql
...

After:

# In various YAML configuration files:
...
spec:
  containers:
    - name: postgresql
      # Should use the official Red Hat supported image
      image: registry.redhat.io/rhel9/postgresql-16
...
# In the ClusterServiceVersion:
relatedImages:
  - image: registry.redhat.io/rhel9/postgresql-16
    name: postgresql
...
Suggestion importance[1-10]: 10

__

Why: This suggestion addresses a critical flaw where the PR uses an unsupported community image instead of the required Red Hat supported image, directly contradicting the core requirement of the associated ticket.

High
Security
Harden psql container security

Add a securityContext to the psql container in
bundle/rhdh/manifests/rhdh-plugin-deps_v1_configmap.yaml to enforce
runAsNonRoot: true and allowPrivilegeEscalation: false for security hardening.

bundle/rhdh/manifests/rhdh-plugin-deps_v1_configmap.yaml [95-100]

 - name: psql
   image: quay.io/fedora/postgresql-16:latest
+  securityContext:
+    runAsNonRoot: true
+    allowPrivilegeEscalation: false
   resources:
     limits:
       cpu: "100m"
       memory: "128Mi"
  • Apply / Chat
Suggestion importance[1-10]: 8

__

Why: This suggestion provides a significant security improvement by proposing to run the psql container as a non-root user and preventing privilege escalation, which is a critical security best practice.

Medium
General
Pin image version instead of latest

Replace the :latest tag with a specific version tag (e.g., :16) for the
postgresql-16 image to ensure predictable deployments. This should be applied
across all relevant YAML files.

bundle/backstage.io/manifests/backstage-default-config_v1_configmap.yaml [87]

-image: quay.io/fedora/postgresql-16:latest # will be replaced with the actual image
+image: quay.io/fedora/postgresql-16:16 # will be replaced with the actual image
  • Apply / Chat
Suggestion importance[1-10]: 6

__

Why: The suggestion correctly points out that using the :latest tag is a bad practice for deployment stability. Pinning to a specific version like :16 improves reproducibility, which is a valuable improvement.

Low
Parameterize Postgres version

In .rhdh/scripts/prepare-restricted-environment.sh, define a variable for the
PostgreSQL version (e.g., PG_VERSION=16) and use it to construct image source
URLs, simplifying future upgrades.

.rhdh/scripts/prepare-restricted-environment.sh [1138-1139]

-- ${registry_url_internal}/rhel9/postgresql-16
-source: registry.redhat.io/rhel9/postgresql-16
+- ${registry_url_internal}/rhel9/postgresql-${PG_VERSION}
+source: registry.redhat.io/rhel9/postgresql-${PG_VERSION}
  • Apply / Chat
Suggestion importance[1-10]: 5

__

Why: This is a good suggestion for improving the maintainability of the shell script by using a variable for the PostgreSQL version, making future updates easier and less error-prone.

Low
Organization
best practice
Quote interpolated shell variables

Quote the expanded registry URL so unexpected characters/spaces in
registry_url_internal cannot break the generated YAML.

.rhdh/scripts/prepare-restricted-environment.sh [1137-1139]

 - mirrors:
-  - ${registry_url_internal}/rhel9/postgresql-16
+  - "${registry_url_internal}/rhel9/postgresql-16"
   source: registry.redhat.io/rhel9/postgresql-16
  • Apply / Chat
Suggestion importance[1-10]: 6

__

Why:
Relevant best practice - Harden shell scripts by quoting variables to avoid word-splitting/globbing and brittle output.

Low
  • More

@zdrapela

Copy link
Copy Markdown
Member Author

@zdrapela zdrapela closed this Jan 21, 2026
@zdrapela

Copy link
Copy Markdown
Member Author

/config

@rhdh-qodo-merge

Copy link
Copy Markdown
🛠️ Wiki configuration file settings:

🛠️ Local configuration file settings:
 [jira]
jira_base_url = "https://redhat.atlassian.net"

[github_app]
# what should be launched automatically
pr_commands = [
    "/agentic_review",
    "/agentic_describe --pr_description.final_update_message=false",
    "/generate_labels",
]

[pr_test]
enable=false

[review_agent]
comments_location_policy = "summary"

[checks]
enable_auto_checks_feedback = true
persistent_comment = true
final_update_message = false

[config]
ignore_pr_authors = REDACTED

[rag_arguments]
enable_rag=true
rag_repo_list=['redhat-developer/rhdh','redhat-developer/red-hat-developers-documentation-rhdh','redhat-developer/rhdh-operator','redhat-developer/rhdh-chart']

🛠️ Global configuration file settings:

🛠️ PR-Agent final configurations:
==================== CONFIG ====================
config.organization_id = 'redhat.com'  
config.second_model_for_exhaustive_mode = 'openai/openai/o4-mini'  
config.model = 'openai/openai/gpt-5.2'  
config.model_turbo = 'openai/anthropic/claude-haiku-4-5'  
config.model_reasoning = 'openai/vertex_ai/gemini-2.5-pro'  
config.fallback_models = ['openai/anthropic/claude-sonnet-4-6', 'openai/openai/gpt-5.2']  
config.use_async_clone = True  
config.pr_compliance = {'ENABLE_RULES_PLATFORM': True}  
config.git_provider = 'github'  
config.publish_output = True  
config.publish_output_no_suggestions = True  
config.publish_output_progress = True  
config.verbosity_level = 0  
config.publish_logs = False  
config.debug_mode = False  
config.use_wiki_settings_file = True  
config.use_repo_settings_file = True  
config.use_global_settings_file = True  
config.use_global_wiki_settings_file = False  
config.disable_auto_feedback = False  
config.ai_timeout = 150  
config.response_language = 'en-US'  
config.clone_repo_instead_of_fetch = True  
config.always_clone = False  
config.add_repo_metadata = True  
config.clone_repo_time_limit = 300  
config.publish_inline_comments_fallback_batch_size = 5  
config.publish_inline_comments_fallback_sleep_time = 2  
config.max_model_tokens = 32000  
config.custom_model_max_tokens = -1  
config.patch_extension_skip_types = ['.md', '.txt']  
config.extra_allowed_extensions = []  
config.allow_dynamic_context = True  
config.allow_forward_dynamic_context = True  
config.max_extra_lines_before_dynamic_context = 12  
config.patch_extra_lines_before = 5  
config.patch_extra_lines_after = 1  
config.ai_handler = 'litellm'  
config.cli_mode = False  
config.fetch_github_apps_from_platform = False  
config.trial_git_org_max_invokes_per_month = 30  
config.trial_ratio_close_to_limit = 0.8  
config.invite_only_mode = False  
config.enable_request_access_msg_on_new_pr = False  
config.check_also_invites_field = False  
config.allowed_users = []  
config.calculate_context = True  
config.disable_checkboxes = False  
config.output_relevant_configurations = False  
config.large_patch_policy = 'clip'  
config.seed = -1  
config.temperature = 0.2  
config.allow_dynamic_context_ab_testing = False  
config.choose_dynamic_context_ab_testing_ratio = 0.5  
config.ignore_pr_title = ['^\\[Auto\\]', '^Auto']  
config.ignore_pr_target_branches = []  
config.ignore_pr_source_branches = []  
config.ignore_pr_labels = []  
config.ignore_ticket_labels = []  
config.allow_only_specific_folders = []  
config.ignore_pr_authors = 'REDACTED'  
config.ignore_repositories = []  
config.ignore_language_framework = []  
config.is_auto_command = False  
config.is_new_pr = False  
config.enable_ai_metadata = True  
config.present_reasoning = True  
config.max_tickets = 10  
config.max_tickets_chars = 8000  
config.prevent_any_approval = False  
config.enable_comment_approval = False  
config.enable_auto_approval = False  
config.auto_approve_for_low_review_effort = -1  
config.auto_approve_for_no_suggestions = False  
config.ensure_ticket_compliance = False  
config.new_diff_format = True  
config.new_diff_format_add_external_references = True  
config.tasks_queue_ttl_from_dequeue_in_seconds = 900  
config.enable_custom_labels = False  

==================== PR_REVIEWER ====================
pr_reviewer.require_score_review = False  
pr_reviewer.require_tests_review = True  
pr_reviewer.require_estimate_effort_to_review = True  
pr_reviewer.require_can_be_split_review = False  
pr_reviewer.require_security_review = True  
pr_reviewer.require_todo_scan = False  
pr_reviewer.require_ticket_analysis_review = True  
pr_reviewer.require_ticket_labels = False  
pr_reviewer.require_no_ticket_labels = False  
pr_reviewer.check_pr_additional_content = False  
pr_reviewer.persistent_comment = True  
pr_reviewer.extra_instructions = ''  
pr_reviewer.final_update_message = True  
pr_reviewer.enable_review_labels_security = True  
pr_reviewer.enable_review_labels_effort = True  
pr_reviewer.enable_help_text = False  

==================== PR_COMPLIANCE ====================
pr_compliance.enabled = True  
pr_compliance.enable_rules_platform = True  
pr_compliance.rule_providers = []  
pr_compliance.enable_security_section = True  
pr_compliance.enable_ticket_section = True  
pr_compliance.enable_codebase_duplication_section = True  
pr_compliance.enable_custom_compliance_section = True  
pr_compliance.require_ticket_analysis_review = True  
pr_compliance.allow_repo_pr_compliance = True  
pr_compliance.enable_global_pr_compliance = True  
pr_compliance.max_lines_allowed = 2000  
pr_compliance.local_wiki_compliance_str = ''  
pr_compliance.global_wiki_pr_compliance = ''  
pr_compliance.local_repo_compliance_str = ''  
pr_compliance.global_repo_pr_compliance_str = ''  
pr_compliance.global_compliance_str = ''  
pr_compliance.enable_generic_custom_compliance_checklist = True  
pr_compliance.persist_generic_custom_compliance_checklist = False  
pr_compliance.display_no_compliance_only = False  
pr_compliance.enable_security_compliance = True  
pr_compliance.enable_update_pr_compliance_checkbox = True  
pr_compliance.enable_todo_scan = False  
pr_compliance.enable_ticket_labels = False  
pr_compliance.enable_no_ticket_labels = False  
pr_compliance.check_pr_additional_content = False  
pr_compliance.enable_compliance_labels_security = True  
pr_compliance.enable_user_defined_compliance_labels = True  
pr_compliance.enable_estimate_effort_to_review = True  
pr_compliance.max_rag_components_to_analyze = 5  
pr_compliance.min_component_size = 5  
pr_compliance.persistent_comment = True  
pr_compliance.enable_help_text = False  
pr_compliance.extra_instructions = ''  

==================== PR_DESCRIPTION ====================
pr_description.publish_labels = False  
pr_description.add_original_user_description = True  
pr_description.generate_ai_title = False  
pr_description.extra_instructions = ''  
pr_description.enable_pr_type = True  
pr_description.final_update_message = True  
pr_description.enable_help_text = False  
pr_description.enable_help_comment = False  
pr_description.bring_latest_tag = False  
pr_description.enable_pr_diagram = True  
pr_description.publish_description_as_comment = False  
pr_description.publish_description_as_comment_persistent = True  
pr_description.enable_semantic_files_types = True  
pr_description.collapsible_file_list = 'adaptive'  
pr_description.collapsible_file_list_threshold = 8  
pr_description.inline_file_summary = False  
pr_description.use_description_markers = False  
pr_description.include_generated_by_header = True  
pr_description.enable_large_pr_handling = True  
pr_description.max_ai_calls = 4  
pr_description.auto_create_ticket = False  

==================== PR_QUESTIONS ====================
pr_questions.aware_ai_handler = False  
pr_questions.enable_help_text = False  

==================== PR_CODE_SUGGESTIONS ====================
pr_code_suggestions.suggestions_depth = 'exhaustive'  
pr_code_suggestions.commitable_code_suggestions = False  
pr_code_suggestions.decouple_hunks = False  
pr_code_suggestions.dual_publishing_score_threshold = -1  
pr_code_suggestions.focus_only_on_problems = True  
pr_code_suggestions.allow_thumbs_up_down = False  
pr_code_suggestions.enable_suggestion_type_reuse = False  
pr_code_suggestions.enable_more_suggestions_checkbox = True  
pr_code_suggestions.high_level_suggestions_enabled = True  
pr_code_suggestions.extra_instructions = ''  
pr_code_suggestions.enable_help_text = False  
pr_code_suggestions.show_extra_context = False  
pr_code_suggestions.persistent_comment = True  
pr_code_suggestions.max_history_len = 5  
pr_code_suggestions.apply_suggestions_checkbox = True  
pr_code_suggestions.enable_chat_in_code_suggestions = True  
pr_code_suggestions.apply_limit_scope = True  
pr_code_suggestions.suggestions_score_threshold = 0  
pr_code_suggestions.new_score_mechanism = True  
pr_code_suggestions.new_score_mechanism_th_high = 9  
pr_code_suggestions.new_score_mechanism_th_medium = 7  
pr_code_suggestions.discard_unappliable_suggestions = False  
pr_code_suggestions.num_code_suggestions_per_chunk = 3  
pr_code_suggestions.num_best_practice_suggestions = 2  
pr_code_suggestions.max_number_of_calls = 3  
pr_code_suggestions.final_clip_factor = 0.8  
pr_code_suggestions.demand_code_suggestions_self_review = False  
pr_code_suggestions.code_suggestions_self_review_text = '**Author self-review**: I have reviewed the PR code suggestions, and addressed the relevant ones.'  
pr_code_suggestions.approve_pr_on_self_review = False  
pr_code_suggestions.fold_suggestions_on_self_review = True  
pr_code_suggestions.publish_post_process_suggestion_impact = True  
pr_code_suggestions.wiki_page_accepted_suggestions = True  
pr_code_suggestions.enable_local_self_reflect_in_large_prs = False  
pr_code_suggestions.simplify_response = True  

==================== PR_CUSTOM_PROMPT ====================
pr_custom_prompt.prompt = 'The code suggestions should focus only on the following:\n- ...\n- ...\n...\n'  
pr_custom_prompt.suggestions_score_threshold = 0  
pr_custom_prompt.num_code_suggestions_per_chunk = 4  
pr_custom_prompt.self_reflect_on_custom_suggestions = True  
pr_custom_prompt.enable_help_text = False  

==================== PR_ADD_DOCS ====================
pr_add_docs.extra_instructions = ''  
pr_add_docs.docs_style = 'Sphinx'  
pr_add_docs.file = ''  
pr_add_docs.class_name = ''  

==================== PR_UPDATE_CHANGELOG ====================
pr_update_changelog.push_changelog_changes = False  
pr_update_changelog.extra_instructions = ''  
pr_update_changelog.add_pr_link = True  
pr_update_changelog.skip_ci_on_push = True  

==================== PR_ANALYZE ====================
pr_analyze.enable_help_text = False  

==================== PR_TEST ====================
pr_test.enable = False  
pr_test.extra_instructions = ''  
pr_test.testing_framework = ''  
pr_test.num_tests = 3  
pr_test.avoid_mocks = True  
pr_test.file = ''  
pr_test.class_name = ''  
pr_test.enable_help_text = False  

==================== PR_IMPROVE_COMPONENT ====================
pr_improve_component.num_code_suggestions = 4  
pr_improve_component.extra_instructions = ''  
pr_improve_component.file = ''  
pr_improve_component.class_name = ''  

==================== REVIEW_AGENT ====================
review_agent.llm_model = 'openai/openai/gpt-5.2_thinking'  
review_agent.enable_database_persistence = True  
review_agent.conversion_llm_model = 'openai/openai/gpt-5.2'  
review_agent.enabled = True  
review_agent.ensemble_models = ['openai/openai/gpt-5.2_thinking', 'openai/anthropic/claude-opus-4-6_thinking']  
review_agent.publish_output = True  
review_agent.enable_extended_mode = False  
review_agent.enable_context_collector = False  
review_agent.enable_issues_agent = True  
review_agent.enable_compliance_agent = True  
review_agent.enable_spec_agent = True  
review_agent.enable_ui_agent = False  
review_agent.enable_deduplication = True  
review_agent.enable_conversion_agent = False  
review_agent.enable_precision_agent = False  
review_agent.enable_past_bugs_collector = False  
review_agent.persistent_comment = True  
review_agent.persistent_comment_notification = True  
review_agent.enable_incremental_review = True  
review_agent.rules_enabled = True  
review_agent.requirements_gap_enabled = True  
review_agent.llm_call_timeout = 180  
review_agent.context_collector_llm_model = 'turbo'  
review_agent.feedback_tool_llm_model = 'turbo'  
review_agent.spec_llm_model = ''  
review_agent.conversion_batching_mode = 'batch'  
review_agent.conversion_batch_size = 10  
review_agent.precision_llm_model = ''  
review_agent.precision_max_llm_calls = 45  
review_agent.precision_batching_mode = 'batch'  
review_agent.precision_batch_size = 50  
review_agent.precision_agent_vote_strategy = 'unanimous_discard'  
review_agent.langsmith_project_name = 'review-agent'  
review_agent.max_tokens_for_file = 'REDACTED'  
review_agent.single_unified_diff_tokens_limit = 'REDACTED'  
review_agent.max_llm_calls = 100  
review_agent.context_collector_max_llm_calls = 6  
review_agent.compliance_batch_size = 0  
review_agent.past_bugs_max_results = 10  
review_agent.past_bugs_dedup = True  
review_agent.past_bugs_enable_similar_search = True  
review_agent.deduplication_llm_max_tokens = 'REDACTED'  
review_agent.publishing_action_level_rank_threshold = 0  
review_agent.comments_location_policy = 'summary'  
review_agent.inline_comments_severity_threshold = 3  
review_agent.prefer_single_line_comments = False  
review_agent.issues_user_guidelines = ''  
review_agent.compliance_user_guidelines = ''  
review_agent.demand_self_review = False  
review_agent.self_review_text = '**Author self-review**: I have reviewed the code review findings, and addressed the relevant ones.'  
review_agent.approve_pr_on_self_review = False  

==================== PR_HELP ====================
pr_help.force_local_db = False  
pr_help.num_retrieved_snippets = 5  

==================== PR_NEW_ISSUE ====================
pr_new_issue.label_to_prompt_part = {'general': 'general question', 'feature': 'feature request (may already be addressed in the documentation)', 'bug': 'possible bug report (may be a by design behavior)'}  
pr_new_issue.supported_repos = ['qodo-ai/pr-agent']  

==================== PR_HELP_DOCS ====================
pr_help_docs.repo_url = ''  
pr_help_docs.repo_default_branch = 'main'  
pr_help_docs.docs_path = 'docs'  
pr_help_docs.exclude_root_readme = False  
pr_help_docs.supported_doc_exts = ['.md', '.mdx', '.rst']  
pr_help_docs.enable_help_text = False  

==================== PR_SIMILAR_ISSUE ====================
pr_similar_issue.skip_comments = False  
pr_similar_issue.force_update_dataset = False  
pr_similar_issue.max_issues_to_scan = 500  
pr_similar_issue.vectordb = 'pinecone'  

==================== PR_FIND_SIMILAR_COMPONENT ====================
pr_find_similar_component.class_name = ''  
pr_find_similar_component.file = ''  
pr_find_similar_component.search_from_org = False  
pr_find_similar_component.allow_fallback_less_words = True  
pr_find_similar_component.number_of_keywords = 5  
pr_find_similar_component.number_of_results = 5  

==================== BEST_PRACTICES ====================
best_practices.auto_best_practices_str = ''  
best_practices.wiki_best_practices_str = ''  
best_practices.global_wiki_best_practices = ''  
best_practices.local_repo_best_practices_str = '\n<b>Pattern 1: Add complete, runnable examples in docs and example manifests by including required dependent resources (for example, Secrets or CRDs) with safe placeholder values so users can apply them out-of-the-box.</b>\n\nExample code before:\n```\n# examples/orchestrator.yaml\napiVersion: rhdh.redhat.com/v1alpha4\nkind: Backstage\nmetadata:\n  name: orchestrator\nspec:\n  application:\n    extraEnvs:\n      secrets:\n        - name: backend-auth-secret\n# Secret referenced above is missing\n```\n\nExample code after:\n```\n# examples/orchestrator.yaml\n---\napiVersion: v1\nkind: Secret\nmetadata:\n  name: backend-auth-secret\nstringData:\n  BACKEND_SECRET: "dummy-not-secret"\n---\napiVersion: rhdh.redhat.com/v1alpha4\nkind: Backstage\nmetadata:\n  name: orchestrator\nspec:\n  application:\n    extraEnvs:\n      secrets:\n        - name: backend-auth-secret\n```\n\n<details><summary>Examples for relevant past discussions:</summary>\n\n- https://github.com/redhat-developer/rhdh-operator/pull/1567#discussion_r2315417933\n- https://github.com/redhat-developer/rhdh-operator/pull/1219#discussion_r2163204987\n</details>\n\n\n___\n\n<b>Pattern 2: When introducing optional features controlled by CR fields, implement idempotent create-or-update logic, register required schemes, add RBAC, and gate behavior on CRD presence; also document enabling/disabling and lifecycle management.</b>\n\nExample code before:\n```\n// creates ServiceMonitor with server-side apply (SSA)\nerr := c.Patch(ctx, sm, client.Apply, applyOpts)\n// no scheme registration or RBAC for ServiceMonitor\n```\n\nExample code after:\n```\n// register monitoring v1 scheme and add RBAC for servicemonitors\ncontrollerutil.CreateOrUpdate(ctx, c, sm, func() error {\n  sm.Spec = desiredSpec\n  return controllerutil.SetControllerReference(owner, sm, scheme)\n})\n// check CRD exists if needed; reconcile create/update/delete on spec.monitoring.enabled\n```\n\n<details><summary>Examples for relevant past discussions:</summary>\n\n- https://github.com/redhat-developer/rhdh-operator/pull/1374#discussion_r2248149438\n- https://github.com/redhat-developer/rhdh-operator/pull/1374#discussion_r2253372015\n- https://github.com/redhat-developer/rhdh-operator/pull/1499#discussion_r2284826017\n</details>\n\n\n___\n\n<b>Pattern 3: Preserve autoscaling compatibility by omitting or commenting out hard-coded replicas in Deployment/StatefulSet templates and add explicit comments explaining the omission.</b>\n\nExample code before:\n```\nspec:\n  replicas: 1\n  template:\n    spec: {}\n```\n\nExample code after:\n```\nspec:\n  # replicas: 1  # Intentionally omitted to allow HPA or custom scaling control.\n  template:\n    spec: {}\n```\n\n<details><summary>Examples for relevant past discussions:</summary>\n\n- https://github.com/redhat-developer/rhdh-operator/pull/1284#discussion_r2156758328\n- https://github.com/redhat-developer/rhdh-operator/pull/1284#discussion_r2157238898\n</details>\n\n\n___\n\n<b>Pattern 4: Keep documentation synchronized with implementation changes, specifying versions, defaults, namespaces, and merge semantics to avoid user confusion when behavior evolves.</b>\n\nExample code before:\n```\n# docs/configuration.md\nFrom version 0.7.0, dynamic plugins are overridden by the CR.\n```\n\nExample code after:\n```\n# docs/configuration.md\nBefore 0.8.0 the Operator replaced defaults; since 0.8.0 it merges defaults with the user ConfigMap (non-deep merge).\nResources are created in the same namespace as the Backstage CR unless stated otherwise.\n```\n\n<details><summary>Examples for relevant past discussions:</summary>\n\n- https://github.com/redhat-developer/rhdh-operator/pull/1486#discussion_r2288776329\n- https://github.com/redhat-developer/rhdh-operator/pull/1551#discussion_r2301210631\n- https://github.com/redhat-developer/rhdh-operator/pull/1551#discussion_r2301214220\n- https://github.com/redhat-developer/rhdh-operator/pull/1323#discussion_r2179583371\n</details>\n\n\n___\n\n<b>Pattern 5: Harden shell scripts by enabling strict modes, quoting variables and arrays, validating required env vars, avoiding brittle traps, and removing unused variables to satisfy ShellCheck and prevent runtime errors.</b>\n\nExample code before:\n```\n#!/bin/bash\nfor db in ${!allDB[@]}; do\n  echo Copying database: $db\ndone\ntrap "rm -f $tmpFile" EXIT\n```\n\nExample code after:\n```\n#!/bin/bash\nset -euo pipefail\n: "${TO_PSW:?TO_PSW environment variable not set}"\nfor db in "${allDB[@]}"; do\n  echo "Copying database: ${db}"\ndone\ntrap \'rm -f "$tmpFile" || true\' EXIT\n```\n\n<details><summary>Examples for relevant past discussions:</summary>\n\n- https://github.com/redhat-developer/rhdh-operator/pull/1305#discussion_r2175117965\n- https://github.com/redhat-developer/rhdh-operator/pull/1305#discussion_r2175123942\n- https://github.com/redhat-developer/rhdh-operator/pull/1305#discussion_r2175338254\n- https://github.com/redhat-developer/rhdh-operator/pull/1305#discussion_r2188582064\n- https://github.com/redhat-developer/rhdh-operator/pull/1305#discussion_r2188591953\n</details>\n\n\n___\n'  
best_practices.global_repo_best_practices_str = ''  
best_practices.global_best_practices_str = ''  
best_practices.organization_name = ''  
best_practices.max_lines_allowed = 2000  
best_practices.enable_global_best_practices = True  
best_practices.allow_repo_best_practices = True  
best_practices.enabled = True  

==================== AUTO_BEST_PRACTICES ====================
auto_best_practices.enable_auto_best_practices = True  
auto_best_practices.utilize_auto_best_practices = True  
auto_best_practices.extra_instructions = ''  
auto_best_practices.min_suggestions_to_auto_best_practices = 10  
auto_best_practices.number_of_days_to_update = 30  
auto_best_practices.max_patterns = 5  
auto_best_practices.minimal_date_to_update = '2025-01-26'  
auto_best_practices.generate_new_best_practices = False  

==================== JIRA ====================
jira.jira_client_id = 'REDACTED'  
jira.jira_app_secret = 'REDACTED'  
jira.jira_base_url = 'https://redhat.atlassian.net'  

==================== LINEAR ====================
linear.linear_client_id = 'REDACTED'  

==================== PR_TO_TICKET ====================
pr_to_ticket.default_base_url = ''  
pr_to_ticket.default_project_key = 'REDACTED'  
pr_to_ticket.fallback_to_git_provider_issues = True  
pr_to_ticket.direct_update_compliance = False  

==================== github_app ====================
github_app.bot_user = 'github-actions[bot]'  
github_app.override_deployment_type = True  
github_app.handle_pr_actions = ['opened', 'reopened', 'ready_for_review']  
github_app.pr_commands = ['/agentic_review', '/agentic_describe --pr_description.final_update_message=false', '/generate_labels']  
github_app.feedback_on_draft_pr = False  
github_app.handle_push_trigger = False  
github_app.push_commands = ['/agentic_review']  
github_app.ignore_pr_title = []  
github_app.ignore_bot_pr = True  

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant