Pular para o conteúdo principal

Outputs do Workflow

Dados de saída (Outputs)

É possível declarar os dados de saída (outputs) apenas em Workflows do tipo reusable. Possibilitando assim trafegar informações entre Workflows, Actions ou Plugins. Os dados de saída podem ser declarados tanto no Step, quanto no próprio Workflow. Cada um tem seu propósito mas ambos seguem a mesma sintaxe.

inputs de um Workflow
inputs:
- type: text
name: text_input
label: "Type some text:"
- type: bool
name: boolean_input
label: "Do you want to run optional job?"
computed-inputs:
computed_input_name: "{{ text_input_name | upper }}"
outputs:
uppercase_text_output: "{{computed_input_name | encrypt }}"

O output definido no exemplo anterior pode ser acessado por outros Jobs e Steps do Workflow executados posteriormente usando a expressão Jinja:

Considere o seguinte Job que usará o output:

schema-version: v1
kind: workflow
metadata: ...
spec:
jobs:
- name: my_job
label: Meu job
steps:
- action: meu-studio/minha-action@1
name: my_action
inputs:
some_text: "Hello!"

A expressão Jinja para usar o output deve conter a seguinte sintaxe na expressão Jinja:

{{ outputs.<nome-do-job>.<nome-do-step>.<nome-do-output> }}

Exemplo:

{{ outputs.my_job.my_action.some_text_upper }}
Dica!

Os outputs do Workflow possuem o comportamento semelhante ao computed-inputs. Para saber mais como usar os Outputs do Workflow, confira o conteúdo dos computed-inputs.

Gerar outputs no step do tipo run

Em Workflows do tipo reusable você também pode gerar dados de saída (outputs) em Steps do tipo run. No campo script do seu Step do tipo run use a sintaxe a seguir:

Sintaxe do output em Step do tipo 'run'.
echo nome_output=valor_output >> $STK_OUTPUTS

Exemplos:

Defina um valor para o output, seguindo o modelo a seguir:

echo environment_name='development' >> $STK_OUTPUTS

Use outras variáveis e aplique filtros Jinja. Considere o uso de uma variável do seu Workflow, conforme o exemplo a seguir:

echo "branch_lower={{ branch | lower }}" >> $STK_OUTPUTS

Confira um exemplo de uso:

kind: workflow
schema-version: v1
metadata:
name: lint-test-notify
version: 1.0.0
display-name: Lint, Test and Notify
description: Exemplo de outputs em um cenário de execução de teste, lint e notificação de uma aplicação.
spec:
type: reusable
label: Lint + Test + Notify
targets:
- app
- infra
docs:
pt_br: docs/pt-br.md
en_us: docs/en-us.md
inputs:
- type: text
label: Nome da branch
name: branch
default: feature/NOVA-FEATURE
- type: int
label: Cobertura mínima (0-100)
name: coverage_threshold
default: 80
jobs:
- id: prepare
label: Coletar contexto
steps:
- id: collect
type: run
label: Coletar arquivos alterados e normalizar branch
script: |
# Definindo um output simples (valor estático/simulado)
echo "changed_files=5" >> $STK_OUTPUTS

# Usando uma variável com filtro Jinja (branch em minúsculas)
echo "branch_lower={{ branch | lower }}" >> $STK_OUTPUTS

- id: test
label: Executar testes
depends-on:
- prepare
# Usando um output de outro job/step no when
when: "{{ outputs.prepare.collect.changed_files | int > 0 }}"
steps:
- id: run_tests
type: run
label: Rodar testes e registrar status
script: |
THRESHOLD="{{ coverage_threshold }}"
# Simulando cobertura calculada
COVERAGE=82

if [ "$COVERAGE" -ge "$THRESHOLD" ]; then
echo "test_status=passed" >> $STK_OUTPUTS
else
echo "test_status=failed" >> $STK_OUTPUTS
fi

- id: notify
label: Notificar sucesso
depends-on:
- test
# Condicional baseada em outro output gerado no job 'test'
when: "{{ outputs.test.run_tests.test_status == 'passed' }}"
steps:
- id: send_message
type: run
label: Enviar notificação
script: |
echo "message=Build OK na branch {{ outputs.prepare.collect.branch_lower }}" >> $STK_OUTPUTS
echo "notified=true" >> $STK_OUTPUTS

:::tip! Dica!

  • Use nomes de outputs em snake_case e sem espaços.
  • Evite expor segredos via outputs. Prefira connections e variáveis seguras.
  • Mantenha scripts idempotentes e rápidos. Retorne apenas o necessário em $STK_OUTPUTS.
  • Sempre referencie outputs com a sintaxe: {{ outputs.<job_id>.<step_id>.<output_name> }}
  • Use a mesma sintaxe para valores de saída em Actions do tipo Shell.

:::