Pular para o conteúdo principal
Version: v4.5.0

Inputs Avançados

Os inputs avançados permite aplicar regras mais complexas aos inputs, isso te auxilia na criação de Templates e Plugins.

Computed Inputs

Por meio do computed-inputs, é possível:

  • Criar inputs com base em outros inputs;
  • Usar o valor num Template/Plugin que está sendo aplicado no momento.

Confira o exemplo na utilização de um filtro title, a primeira letra de cada nome é transformada em letra maiúscula (upper case):

inputs:
- label: Type your name
name: name
type: text

computed-inputs:
name_formatted: "{{ name | title }}"

Global Input

Quando você definir os inputs globais dentro de um app (via Template ou Plugin), qualquer Plugin pode acessá-los ou modificá-los.

Você deve declarar um input global por meio da flag global: true, confira:

inputs:
- label: Commit message
type: text
default: example
name: message
required: true
global: true

Exemplo 1: Template base com input global

O Template base neste exemplo, possui um input global que pode ser utilizado em outras aplicações de Plugins, ou seja, no mesmo app em que foi criado com este Template:

name: global-template
description: Template that has a global input
types:
- app-template
inputs:
- label: Project name
type: text
name: project_name
default: project-name
global: true

No exemplo acima, como o input project_name está definido como global, qualquer valor informado nele pode ser usado por outros Plugins.

Exemplo 2: Plugin utilizando o input global dos seus Templates

O valor de um input global definido em um Template pode ser usado dentro de um Plugin. Não é necessário defini-lo novamente no arquivo plugin.yaml.
Para acessar o valor de um input definido em um Template, no Plugin, adicione o nome do input entre chaves duplas "{{ ... }}" formando a expressão {{ <nome-do-input> }}. Confira o exemplo abaixo utilizando um input "project_name" de um Template, a expressão será {{ project_name }}.

name: global-plugin
description: Plugin that has a input from global input
types:
- app
inputs:
- label: Insert any text
type: text
name: json_body
hooks:
- type: edit-json
trigger: after-render
path: package.json
indent: "\t"
encoding: utf-8
changes:
- jsonpath: "$.name[?name = '{{ project_name }}']"
update:
value: |
{
"name": "other-project",
"version": "1.2.5",
"bin": {
"other-project": "./path/to/project"
}
}

O valor do input project_name definido no Template será utilizado como parte da expressão do jsonpath utilizado em um Hook Declarativo edit-json ao aplicar o Plugin.

Exemplo 3: Plugin utilizando o input global como valor default em um dos seus inputs

Você pode usar o valor do input global para definir o valor default de um Plugin que será aplicado após outro Template (ou Plugin) tenha definido um input global:

name: global-plugin
description: Plugin that uses a global input as default value
display-name: globa-plugin
picture: plugin.png
category: backend # Ref: https://docs.legacy.stackspot.com/latest/docs/create-stacks/yaml/#category
compatibility:
- java
- spring
about: docs/about.md
usage: docs/usage.md
use-case: docs/use-case.md
implementation: docs/implementation.md
technologies: # Ref: https://docs.legacy.stackspot.com/latest/docs/create-stacks/yaml/#technologies
- "Api"
types:
- app
inputs:
- label: Project Name
type: text
name: project_name
default: project_name
global: true

Global Computed Inputs

caution

O global-computed-inputs aceita expressões Jinja.

Confira mais detalhes sobre o uso do Jinja na StackSpot

O global computed inputs possibilita o uso de computed-inputs de maneira global nos Templates e Plugins.

Por meio do global-computed-inputs, é possível:

  • Usar computed-inputs de maneira global;
  • Reaproveitar o valor do input em Plugins subsequentes.

Exemplo 1. Definindo um global-computed-input em um template base

name: global-computed-input-template
description: Template that has a global computed input
types:
- app-template
inputs:
- label: Project name
type: text
name: project_name
default: project-name
global-computed-inputs:
project_name_sanitized: "{{project_name|replace('-', '_')|lower}}"

O valor project_name_sanitized pode agora ser usado em todos as aplicações subsequentes de Plugins.

Exemplo 2. Plugin usando o valor global-computed-input

Plugin com global-computed-inputs Os Plugins aplicados em seguida terão acesso ao valor do global-computed-inputs.

Para usar o valor project_name_sanitized definido como global computed input no Template anterior, basta defini-lo como {{project_name_sanitized}} no arquivo onde o parse será feito:

Por exemplo, para usar este valor em um arquivo README.md que seria criado pelo Plugin:

|_plugin.yaml
|_templates
|_README.MD

README.md

O valor project_name_sanitized é {{project_name_sanitized}}.

info

Não é necessário redefinir essa parte no plugin.yaml.

Esta página foi útil?