scaffolder: Support conditional if on output links and text (#33332)
* Add sample template for conditional output demo Add a scaffolder template that exercises conditional `if` on output links and text items, for testing issue #24805. Signed-off-by: Dmitry Gusev <gusevda90@gmail.com> * Support conditional `if` on scaffolder output links and text Add `if` property to output link and text items in scaffolder templates, allowing template authors to conditionally show/hide output items based on parameters or step results. Items with a falsy `if` condition are filtered out before being sent to the frontend. Signed-off-by: Dmitry Gusev <gusevda90@gmail.com> * Add changesets for conditional output feature Signed-off-by: Dmitry Gusev <gusevda90@gmail.com> * Document conditional if on output links and text Signed-off-by: Dmitry Gusev <gusevda90@gmail.com> * Guard against non-object items in output arrays Signed-off-by: Dmitry Gusev <gusevda90@gmail.com> * Skip array items in output if-filtering destructuring Add Array.isArray guard to prevent corrupting array items into plain objects during the rest-destructuring step. Signed-off-by: Dmitry Gusev <gusevda90@gmail.com> * Extract filterConditionalItems helper to deduplicate logic Signed-off-by: Dmitry Gusev <gusevda90@gmail.com> * Align output if schema descriptions with step if semantics Signed-off-by: Dmitry Gusev <gusevda90@gmail.com> * Fix docs quality check: replace 'falsy' wording Signed-off-by: Dmitry Gusev <gusevda90@gmail.com> * Refactor filterConditionalItems to use flatMap and generics Replace .filter().map() with a single flatMap call and make the function generic to eliminate JsonArray casts at call sites. Signed-off-by: Dmitry Gusev <gusevda90@gmail.com> --------- Signed-off-by: Dmitry Gusev <gusevda90@gmail.com>
This commit is contained in:
@@ -7,6 +7,7 @@ spec:
|
||||
targets:
|
||||
- ./remote-templates.yaml
|
||||
- ./notifications-demo/template.yaml
|
||||
- ./conditional-output-demo/template.yaml
|
||||
# For local development of a template, you can reference your local templates here.
|
||||
# Examples:
|
||||
#
|
||||
|
||||
@@ -0,0 +1,62 @@
|
||||
apiVersion: scaffolder.backstage.io/v1beta3
|
||||
kind: Template
|
||||
metadata:
|
||||
name: conditional-output-demo
|
||||
title: Conditional Output Demo
|
||||
description: Demonstrates conditional if on output links and text
|
||||
spec:
|
||||
owner: backstage/techdocs-core
|
||||
type: service
|
||||
|
||||
parameters:
|
||||
- title: Options
|
||||
required:
|
||||
- name
|
||||
properties:
|
||||
name:
|
||||
title: Name
|
||||
type: string
|
||||
description: Unique name of the component
|
||||
ui:autofocus: true
|
||||
enableCI:
|
||||
title: Enable CI
|
||||
type: string
|
||||
enum:
|
||||
- 'Yes'
|
||||
- 'No'
|
||||
default: 'Yes'
|
||||
showDetails:
|
||||
title: Show Details
|
||||
type: boolean
|
||||
default: true
|
||||
|
||||
steps:
|
||||
- id: log
|
||||
name: Log
|
||||
action: debug:log
|
||||
input:
|
||||
message: 'Creating ${{ parameters.name }}'
|
||||
|
||||
output:
|
||||
links:
|
||||
- title: Backstage Homepage
|
||||
url: https://backstage.io
|
||||
- if: ${{ parameters.enableCI === "Yes" }}
|
||||
title: CI Dashboard
|
||||
icon: dashboard
|
||||
url: https://ci.example.com/${{ parameters.name }}
|
||||
- if: ${{ parameters.enableCI === "Yes" }}
|
||||
title: CI Docs
|
||||
url: https://ci.example.com/docs
|
||||
text:
|
||||
- title: Summary
|
||||
content: |
|
||||
**Component:** `${{ parameters.name }}`
|
||||
- if: ${{ parameters.showDetails }}
|
||||
title: CI Details
|
||||
content: |
|
||||
**CI enabled:** ${{ parameters.enableCI }}
|
||||
- if: ${{ parameters.enableCI === "Yes" }}
|
||||
title: CI Setup Instructions
|
||||
content: |
|
||||
Run `ci-setup --name ${{ parameters.name }}` to configure CI.
|
||||
Reference in New Issue
Block a user