Skip to content

chore(deps): update upstream Backstage chart to 2.8.0#416

Merged
openshift-merge-bot[bot] merged 5 commits into
mainfrom
chore/sync-upstream-backstage-2.8.0
Jun 2, 2026
Merged

chore(deps): update upstream Backstage chart to 2.8.0#416
openshift-merge-bot[bot] merged 5 commits into
mainfrom
chore/sync-upstream-backstage-2.8.0

Conversation

@github-actions
Copy link
Copy Markdown

Automated weekly sync of the vendored Backstage chart from the upstream repository.

Updated the vendored Backstage chart to version 2.8.0 and aligned the dependency reference in charts/backstage/Chart.yaml.

RHDH-specific template patches were re-applied automatically after the subtree pull. Please review the changes to verify the patches applied cleanly. See CONTRIBUTING.md for details.

@github-actions github-actions Bot requested a review from a team as a code owner May 27, 2026 15:57
@openshift-ci openshift-ci Bot requested review from subhashkhileri and zdrapela May 27, 2026 15:57
@rm3l rm3l closed this May 27, 2026
@rm3l rm3l reopened this May 27, 2026
@rm3l
Copy link
Copy Markdown
Member

rm3l commented May 27, 2026

/cc

@openshift-ci openshift-ci Bot requested a review from rm3l May 27, 2026 15:58
@rhdh-qodo-merge
Copy link
Copy Markdown

rhdh-qodo-merge Bot commented May 27, 2026

Code Review by Qodo

🐞 Bugs (4) 📘 Rule violations (0)

Grey Divider


Action required

1. Null rules when empty 🐞 Bug ≡ Correctness ⭐ New
Description
The new HTTPRoute template always emits spec.rules: but only renders list items inside `range
.Values.httpRoute.rules, so httpRoute.rules: [] renders as rules: null`. This can produce an
invalid HTTPRoute manifest and fail installs/upgrades when users enable HTTPRoute but clear rules.
Code

charts/backstage/vendor/backstage/charts/backstage/templates/httproute.yaml[R33-35]

Relevance

⭐⭐ Medium

No direct prior evidence for empty range→null list, but team accepts template correctness fixes (PRs
382, 407).

PR-#382
PR-#407

ⓘ Recommendations generated based on similar findings in past PRs

Evidence
The template prints rules: regardless of whether the subsequent range produces any items; the
schema indicates an empty list is a valid/default value, making rules: null a reachable rendered
output.

charts/backstage/vendor/backstage/charts/backstage/templates/httproute.yaml[33-55]
charts/backstage/vendor/backstage/charts/backstage/values.schema.json[6431-6434]

Agent prompt
The issue below was found during a code review. Follow the provided context and guidance below and implement a solution

## Issue description
`templates/httproute.yaml` unconditionally prints `spec.rules:` and then iterates `httpRoute.rules`. If the list is empty, Helm renders `rules:` with no value, which YAML parses as `null`.

## Issue Context
The chart values schema declares `httpRoute.rules` as an array and even defaults it to an empty list (`[]`), so users can legitimately set it empty.

## Fix Focus Areas
- charts/backstage/vendor/backstage/charts/backstage/templates/httproute.yaml[33-55]

### Suggested fix approach
Update the template to ensure `spec.rules` is always rendered as a YAML array:
- Option A: only emit `rules:` when the list is non-empty.
- Option B: emit `rules: []` when the list is empty.

(If the feature requires at least one rule when enabled, consider using `fail`/`required` to error early when `httpRoute.enabled=true` and `rules` is empty.)

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools


2. Null parentRefs rendered 🐞 Bug ≡ Correctness
Description
The new templates/httproute.yaml always emits spec.parentRefs: but only renders its value when
httpRoute.parentRefs is non-empty, so enabling HTTPRoute with the default empty list produces
parentRefs: null which violates the HTTPRoute CRD schema (array) and will be rejected.
Code

charts/backstage/vendor/backstage/charts/backstage/templates/httproute.yaml[R24-28]

Relevance

⭐⭐⭐ High

Team previously accepted Helm template-structure fixes preventing invalid YAML rendering (PR #382;
also YAML-break fix PR #289).

PR-#382
PR-#289

ⓘ Recommendations generated based on similar findings in past PRs

Evidence
The template prints parentRefs: unconditionally but conditionally prints its contents, which
results in a null value when the list is empty. This conflicts with the schema where parentRefs
is typed as an array, and the default values set it to an empty list.

charts/backstage/vendor/backstage/charts/backstage/templates/httproute.yaml[24-28]
charts/backstage/vendor/backstage/charts/backstage/values.yaml[100-124]
charts/backstage/vendor/backstage/charts/backstage/values.schema.json[6361-6430]
charts/backstage/vendor/backstage/charts/backstage/ci/httproute-values.yaml[1-6]
PR-#382

Agent prompt
The issue below was found during a code review. Follow the provided context and guidance below and implement a solution

### Issue description
`charts/backstage/vendor/backstage/charts/backstage/templates/httproute.yaml` always prints the `parentRefs:` key, but uses a `with` block to render its value. When `httpRoute.parentRefs` is the default empty list (`[]`), Helm renders `parentRefs: null`, which fails HTTPRoute CRD validation because the field is an array.

### Issue Context
- `httpRoute.parentRefs` defaults to `[]` in `values.yaml`.
- The Gateway API HTTPRoute schema expects `parentRefs` to be an array (not `null`).
- The provided CI values file sets `parentRefs`, masking this failure.

### Fix Focus Areas
- charts/backstage/vendor/backstage/charts/backstage/templates/httproute.yaml[24-28]

### Suggested fix
Wrap the *entire* `parentRefs:` stanza in a `with`/`if` so the key is omitted when empty, e.g.

```yaml
spec:
 {{- with .Values.httpRoute.parentRefs }}
 parentRefs:
   {{- toYaml . | nindent 4 }}
 {{- end }}
```

(Alternatively, render an explicit empty array `parentRefs: []` if you want the field present, but do not render it as `null`.)

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools


3. Rule dash gated by matches 🐞 Bug ≡ Correctness
Description
In templates/httproute.yaml, the - list item marker for each HTTPRoute rule is emitted only
inside with .matches, so any rule without matches (allowed by the values schema) renders
backendRefs without a list item and produces invalid YAML.
Code

charts/backstage/vendor/backstage/charts/backstage/templates/httproute.yaml[R33-53]

Relevance

⭐⭐⭐ High

Similar to prior accepted “dash/indentation breaks YAML list structure” fixes in vendored charts (PR
#382) and other YAML-format breakages (PR #289).

PR-#382
PR-#289

ⓘ Recommendations generated based on similar findings in past PRs

Evidence
The rule list item dash is only produced when .matches is present, but the schema does not require
matches, making it easy to provide schema-valid values that render invalid YAML. The CI example
includes matches, so it wouldn’t catch this case.

charts/backstage/vendor/backstage/charts/backstage/templates/httproute.yaml[33-54]
charts/backstage/vendor/backstage/charts/backstage/values.schema.tmpl.json[182-336]
charts/backstage/vendor/backstage/charts/backstage/ci/httproute-values.yaml[8-14]
PR-#382

Agent prompt
The issue below was found during a code review. Follow the provided context and guidance below and implement a solution

### Issue description
The HTTPRoute `rules:` list item marker (`-`) is currently inside `{{- with .matches }}`. If a user provides a rule without `matches`, Helm will skip the block that prints `- matches:` and then still print `backendRefs:` at the rule indentation level, resulting in an invalid YAML structure.

### Issue Context
`values.schema*.json` does not require `rules[].matches`, so this is a schema-valid configuration that currently breaks rendering.

### Fix Focus Areas
- charts/backstage/vendor/backstage/charts/backstage/templates/httproute.yaml[33-54]
- charts/backstage/vendor/backstage/charts/backstage/values.schema.tmpl.json[182-339]

### Suggested fix
Restructure the loop so the dash is always emitted for each rule, and optional sections are nested under that item, e.g.

```yaml
rules:
 {{- range .Values.httpRoute.rules }}
 - {{- if .name }}
   name: {{ .name }}
   {{- end }}
   {{- with .matches }}
   matches:
     {{- toYaml . | nindent 6 }}
   {{- end }}
   {{- with .filters }}
   filters:
     {{- toYaml . | nindent 6 }}
   {{- end }}
   {{- with .timeouts }}
   timeouts:
     {{- toYaml . | nindent 6 }}
   {{- end }}
   backendRefs:
     - name: {{ $fullName }}
       port: {{ $svcPort }}
       weight: 1
 {{- end }}
```

Optionally: if `rules` is empty, consider rendering `rules: []` (valid YAML) or failing fast via schema constraints (e.g., `minItems: 1`).

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools



Remediation recommended

4. backendRefs value ignored 🐞 Bug ⚙ Maintainability ⭐ New
Description
The values schema allows httpRoute.rules[].backendRefs, but templates/httproute.yaml hardcodes
backendRefs to the chart service and never reads .backendRefs. As a result, user-provided
backendRefs values validate but are silently ignored at render time.
Code

charts/backstage/vendor/backstage/charts/backstage/templates/httproute.yaml[R50-53]

Relevance

⭐⭐⭐ High

Team previously accepted fixing schema/template mismatches so values aren’t misleading/ignored (PR
280).

PR-#280

ⓘ Recommendations generated based on similar findings in past PRs

Evidence
The schema explicitly defines backendRefs under each HTTPRoute rule, but the template always emits
a fixed backendRefs list and never references the user-provided field.

charts/backstage/vendor/backstage/charts/backstage/values.schema.json[6436-6462]
charts/backstage/vendor/backstage/charts/backstage/templates/httproute.yaml[47-53]

Agent prompt
The issue below was found during a code review. Follow the provided context and guidance below and implement a solution

## Issue description
`httpRoute.rules[].backendRefs` is modeled in the values schema, but the HTTPRoute template always renders backendRefs pointing to the Backstage Service (`$fullName` / `$svcPort`). This creates a schema/behavior contract mismatch.

## Issue Context
Example of the silent misconfiguration:
- User sets `httpRoute.rules[0].backendRefs: [{ name: "some-other-svc", port: 80 }]`
- Rendered manifest still routes to `name: {{ $fullName }}`.

## Fix Focus Areas
- charts/backstage/vendor/backstage/charts/backstage/templates/httproute.yaml[47-53]
- charts/backstage/vendor/backstage/charts/backstage/values.schema.json[6436-6462]

### Suggested fix approach
Pick one:
1) **Support configurable backendRefs**: render `.backendRefs` when provided, otherwise fall back to the current default service backend.
2) **Remove backendRefs from the schema** (and any docs defaults) if routing is intentionally fixed to the Backstage service, so users aren't misled by a value that cannot work.

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools


Grey Divider

Previous review results

Review updated until commit 312b96c

Results up to commit 3758d92


🐞 Bugs (2) 📘 Rule violations (0) 📎 Requirement gaps (0)


Action required
1. Null parentRefs rendered 🐞 Bug ≡ Correctness
Description
The new templates/httproute.yaml always emits spec.parentRefs: but only renders its value when
httpRoute.parentRefs is non-empty, so enabling HTTPRoute with the default empty list produces
parentRefs: null which violates the HTTPRoute CRD schema (array) and will be rejected.
Code

charts/backstage/vendor/backstage/charts/backstage/templates/httproute.yaml[R24-28]

Relevance

⭐⭐⭐ High

Team previously accepted Helm template-structure fixes preventing invalid YAML rendering (PR #382;
also YAML-break fix PR #289).

PR-#382
PR-#289

ⓘ Recommendations generated based on similar findings in past PRs

Evidence
The template prints parentRefs: unconditionally but conditionally prints its contents, which
results in a null value when the list is empty. This conflicts with the schema where parentRefs
is typed as an array, and the default values set it to an empty list.

charts/backstage/vendor/backstage/charts/backstage/templates/httproute.yaml[24-28]
charts/backstage/vendor/backstage/charts/backstage/values.yaml[100-124]
charts/backstage/vendor/backstage/charts/backstage/values.schema.json[6361-6430]
charts/backstage/vendor/backstage/charts/backstage/ci/httproute-values.yaml[1-6]
PR-#382

Agent prompt
The issue below was found during a code review. Follow the provided context and guidance below and implement a solution

### Issue description
`charts/backstage/vendor/backstage/charts/backstage/templates/httproute.yaml` always prints the `parentRefs:` key, but uses a `with` block to render its value. When `httpRoute.parentRefs` is the default empty list (`[]`), Helm renders `parentRefs: null`, which fails HTTPRoute CRD validation because the field is an array.

### Issue Context
- `httpRoute.parentRefs` defaults to `[]` in `values.yaml`.
- The Gateway API HTTPRoute schema expects `parentRefs` to be an array (not `null`).
- The provided CI values file sets `parentRefs`, masking this failure.

### Fix Focus Areas
- charts/backstage/vendor/backstage/charts/backstage/templates/httproute.yaml[24-28]

### Suggested fix
Wrap the *entire* `parentRefs:` stanza in a `with`/`if` so the key is omitted when empty, e.g.

```yaml
spec:
 {{- with .Values.httpRoute.parentRefs }}
 parentRefs:
   {{- toYaml . | nindent 4 }}
 {{- end }}
```

(Alternatively, render an explicit empty array `parentRefs: []` if you want the field present, but do not render it as `null`.)

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools


2. Rule dash gated by matches 🐞 Bug ≡ Correctness
Description
In templates/httproute.yaml, the - list item marker for each HTTPRoute rule is emitted only
inside with .matches, so any rule without matches (allowed by the values schema) renders
backendRefs without a list item and produces invalid YAML.
Code

charts/backstage/vendor/backstage/charts/backstage/templates/httproute.yaml[R33-53]

Relevance

⭐⭐⭐ High

Similar to prior accepted “dash/indentation breaks YAML list structure” fixes in vendored charts (PR
#382) and other YAML-format breakages (PR #289).

PR-#382
PR-#289

ⓘ Recommendations generated based on similar findings in past PRs

Evidence
The rule list item dash is only produced when .matches is present, but the schema does not require
matches, making it easy to provide schema-valid values that render invalid YAML. The CI example
includes matches, so it wouldn’t catch this case.

charts/backstage/vendor/backstage/charts/backstage/templates/httproute.yaml[33-54]
charts/backstage/vendor/backstage/charts/backstage/values.schema.tmpl.json[182-336]
charts/backstage/vendor/backstage/charts/backstage/ci/httproute-values.yaml[8-14]
PR-#382

Agent prompt
The issue below was found during a code review. Follow the provided context and guidance below and implement a solution

### Issue description
The HTTPRoute `rules:` list item marker (`-`) is currently inside `{{- with .matches }}`. If a user provides a rule without `matches`, Helm will skip the block that prints `- matches:` and then still print `backendRefs:` at the rule indentation level, resulting in an invalid YAML structure.

### Issue Context
`values.schema*.json` does not require `rules[].matches`, so this is a schema-valid configuration that currently breaks rendering.

### Fix Focus Areas
- charts/backstage/vendor/backstage/charts/backstage/templates/httproute.yaml[33-54]
- charts/backstage/vendor/backstage/charts/backstage/values.schema.tmpl.json[182-339]

### Suggested fix
Restructure the loop so the dash is always emitted for each rule, and optional sections are nested under that item, e.g.

```yaml
rules:
 {{- range .Values.httpRoute.rules }}
 - {{- if .name }}
   name: {{ .name }}
   {{- end }}
   {{- with .matches }}
   matches:
     {{- toYaml . | nindent 6 }}
   {{- end }}
   {{- with .filters }}
   filters:
     {{- toYaml . | nindent 6 }}
   {{- end }}
   {{- with .timeouts }}
   timeouts:
     {{- toYaml . | nindent 6 }}
   {{- end }}
   backendRefs:
     - name: {{ $fullName }}
       port: {{ $svcPort }}
       weight: 1
 {{- end }}
```

Optionally: if `rules` is empty, consider rendering `rules: []` (valid YAML) or failing fast via schema constraints (e.g., `minItems: 1`).

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools


Qodo Logo

@rhdh-qodo-merge
Copy link
Copy Markdown

rhdh-qodo-merge Bot commented May 27, 2026

Review Summary by Qodo

(Agentic_describe updated until commit 312b96c)

Update Backstage chart to 2.8.0 with Gateway API HTTPRoute support

✨ Enhancement

Grey Divider

Walkthroughs

Description
• Update vendored Backstage chart from 2.7.0 to 2.8.0
• Add Gateway API HTTPRoute support for chart deployment
• Update Cosign installer dependency from 4.1.0 to 4.1.2
• Install Gateway API CRDs in test workflow for KIND cluster
Diagram
flowchart LR
  A["Backstage Chart 2.7.0"] -->|"Update version"| B["Backstage Chart 2.8.0"]
  B -->|"Add HTTPRoute template"| C["Gateway API Support"]
  D["Cosign 4.1.0"] -->|"Bump dependency"| E["Cosign 4.1.2"]
  F["Test Workflow"] -->|"Install Gateway API CRDs"| G["KIND Cluster Setup"]

Loading

Grey Divider

File Changes

1. charts/backstage/Chart.yaml Dependencies +1/-1

Update backstage dependency version to 2.8.0

charts/backstage/Chart.yaml


2. charts/backstage/vendor/backstage/.github/workflows/release.yml Dependencies +1/-1

Bump sigstore cosign-installer to 4.1.2

charts/backstage/vendor/backstage/.github/workflows/release.yml


3. charts/backstage/vendor/backstage/.github/workflows/test.yml ✨ Enhancement +4/-0

Add Gateway API CRDs installation step

charts/backstage/vendor/backstage/.github/workflows/test.yml


View more (7)
4. charts/backstage/vendor/backstage/charts/backstage/Chart.yaml ⚙️ Configuration changes +1/-1

Update chart version to 2.8.0

charts/backstage/vendor/backstage/charts/backstage/Chart.yaml


5. charts/backstage/vendor/backstage/charts/backstage/README.md 📝 Documentation +8/-1

Update version badge and add HTTPRoute documentation

charts/backstage/vendor/backstage/charts/backstage/README.md


6. charts/backstage/vendor/backstage/charts/backstage/ci/httproute-values.yaml ✨ Enhancement +14/-0

Add HTTPRoute example configuration values

charts/backstage/vendor/backstage/charts/backstage/ci/httproute-values.yaml


7. charts/backstage/vendor/backstage/charts/backstage/templates/httproute.yaml ✨ Enhancement +55/-0

Add HTTPRoute Kubernetes resource template

charts/backstage/vendor/backstage/charts/backstage/templates/httproute.yaml


8. charts/backstage/vendor/backstage/charts/backstage/values.schema.json ✨ Enhancement +232/-0

Add HTTPRoute schema definitions and validation

charts/backstage/vendor/backstage/charts/backstage/values.schema.json


9. charts/backstage/vendor/backstage/charts/backstage/values.schema.tmpl.json ✨ Enhancement +233/-1

Add HTTPRoute schema template definitions

charts/backstage/vendor/backstage/charts/backstage/values.schema.tmpl.json


10. charts/backstage/vendor/backstage/charts/backstage/values.yaml ✨ Enhancement +25/-0

Add HTTPRoute configuration parameters to values

charts/backstage/vendor/backstage/charts/backstage/values.yaml


Grey Divider

Qodo Logo

@rhdh-qodo-merge rhdh-qodo-merge Bot added documentation Improvements or additions to documentation enhancement New feature or request Other Tests labels May 27, 2026
@github-actions github-actions Bot force-pushed the chore/sync-upstream-backstage-2.8.0 branch from 3758d92 to 312b96c Compare May 29, 2026 15:36
@rm3l rm3l closed this May 29, 2026
@rm3l rm3l reopened this May 29, 2026
@rhdh-qodo-merge
Copy link
Copy Markdown

rhdh-qodo-merge Bot commented May 29, 2026

Code review by qodo was updated up to the latest commit 312b96c

@rm3l
Copy link
Copy Markdown
Member

rm3l commented May 29, 2026

/bump backstage minor

github-actions Bot added 4 commits June 1, 2026 04:30
…e985e8

8e985e8 chore(deps): bump actions/stale from 10.2.0 to 10.3.0 (#331)
60103f6 chore(deps): bump docker/login-action from 4.1.0 to 4.2.0 (#332)
927fe5d feat: integrate gateway api endpoint for chart deployment (#329)
a82a9b7 chore(deps): bump sigstore/cosign-installer from 4.1.0 to 4.1.2 (#330)

git-subtree-dir: charts/backstage/vendor/backstage
git-subtree-split: 8e985e8fc8b5388f4b5a86ee00dfa8305bfb3329
@github-actions github-actions Bot force-pushed the chore/sync-upstream-backstage-2.8.0 branch from 5e76a3e to dd231a8 Compare June 1, 2026 04:30
@rm3l
Copy link
Copy Markdown
Member

rm3l commented Jun 1, 2026

/bump backstage minor

Signed-off-by: RHDH Bot <146280956+rhdh-bot@users.noreply.github.com>
@sonarqubecloud
Copy link
Copy Markdown

sonarqubecloud Bot commented Jun 1, 2026

@openshift-ci openshift-ci Bot added the lgtm label Jun 2, 2026
@openshift-merge-bot openshift-merge-bot Bot merged commit 4b57460 into main Jun 2, 2026
6 of 7 checks passed
@openshift-merge-bot openshift-merge-bot Bot deleted the chore/sync-upstream-backstage-2.8.0 branch June 2, 2026 13:39
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

documentation Improvements or additions to documentation enhancement New feature or request lgtm Other Tests

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants