Ao criar um template no backstage tive a necessidade de reutilizar váriaveis e também fazer modificações. Por exemplo, eu adquiro um ‘Nome do projeto’ e com esse nome, eu quero que automaticamente eu tenha um artifactId e um packageName para passar para meu template Java a fim de deixar tudo estruturado e padronizado. Utilizando o próprio template, ele é bem limitado com os recursos de programação utilizando o Nunjucks além de que atualmente não conseguimos salvar váriáveis em um contexto para reutiliza-las. Por exemplo, no codigo a baixo, se eu for precisar reutilizar o values.xpto em outro step eu teria que colocar a mesma instrução de código.
steps:
- id: fetch-template
name: Fetch Catalog Info
action: fetch:template
input:
url: ./skeleton
values:
xpto: ${{ parameters.name | trim | lower }}
Existe uma Issue para isso no github do backstage. Pode ser que logo essa funcionalidade seja criada, mas mesmo assim, ainda ficamos limitados a funcionalidades.
A maneira mais fácil de solucionar isso e dar mais ‘poder’ de execução, seria criar uma action customizada a fim de realizar essas transformações e reutilizar essas informações geradas nos outros steps.
Para criar uma action customizada, basta seguir o tutorial oficial do backstage: https://backstage.io/docs/features/software-templates/writing-custom-actions . Mas vou deixar aqui minha implementação:
Pronto, agora você consegue reutilizar as váriaveis modificadas desse step em outros lugares, sem precisar ficar duplicando código no template apenas com a instrução de output da action criada: ${{ steps.data.output.youtOutputVar }}