Trinta DevOps

Dicas e macetes do mundo Open Source

Alterando a variável set-output para a GITHUB_OUTPUT

Aqui mostro a troca de variáveis de ambiente GITHUB_OUTPUT no GIT HUB Actions

Os outputs no GitHub Actions são utilizadas para exportar variáveis entre seus jobs. São utilizadas quando queremos compartilhar resultados de uma action com outras etapas do nosso fluxo.

O GitHub publicou em seu blog um post para efetuarmos uma alteração nos fluxos criados, que utilizam o “set-output OU save-state” . As exportações assim como o exemplo abaixo serão substituídas a partir de 31 de Maio de 2023. Será utilizada a variável GITHUB_OUTPUT para a exportação das variáveis para serem compartilhadas.

- name: Save state
  run: echo "::save-state name={name}::{value}"

- name: Set output
  run: echo "::set-output name={name}::{value}"

A partir da data 31/03/23, as regras acima não mais funcionarão. Neste post mostro como alteramos estas variáveis para compartilhamento das variáveis.

Abaixo temos um exemplo de uma Action completa com os exemplos da exportação para a GITHUB_OUTPUT, veja as linhas destacadas.

Arquivo action.yaml

name: 'Hello World'
description: 'Greet someone'
inputs:
  who-to-greet:  # id of input
    description: 'Name of Variable'
    required: true
    default: 'World'
  singer:
    required: true
    default: "Bob Marley"
outputs:
  random-number:
    description: "Random number"
    value: ${{ steps.random-number-generator.outputs.random-number }}
  my-name:
    description: "Meu nome"
    value: ${{ steps.my-name-generator.outputs.my-name}}
runs:
  using: "composite"
  steps:
    - run: echo Hello ${{ inputs.who-to-greet }}.
      shell: bash
    - id: random-number-generator
      run: echo "random-number=$(echo $RANDOM)"  >> $GITHUB_OUTPUT
      shell: bash
    - id: name-of-singer
      run: echo "The name of singer is" ${{ inputs.singer }}
      shell: bash
    - run: echo "${{ github.action_path }}" >> $GITHUB_PATH
      shell: bash
    - run: goodbye.sh
      shell: bash
    - id: my-name-generator 
      run: echo "my-name=Trinta"  >> $GITHUB_OUTPUT
      shell: bash
    - id: test-variable
      run: echo "TESTE"
      shell: bash

Na linha 24 e 34 acima, temos o modo correto em que a devemos exportar (trocar) as variáveis de output. Na linha 24 exportamos uma variável chamada random-number e como conteúdo, a resolução do $(echo $RANDOM), que nada mais fará que mandar um número aleatório para a variável e enviará para a variável GITHUB_OUTPUT, para que outros jobs possam consumi-la.

Para utilizar as variáveis em um job do tipo composite, é obrigatória a identificação com as flags “-id: <nome>”, conforme o exemplo acima.

Abaixo, temos o Workflow que consumirá as variáveis acima.

Arquivo ci.yaml

on: [push]

jobs:
  hello_world_job:
    runs-on: self-hosted 
    name: A job to say hello
    steps:
      - uses: actions/checkout@v3
      - id: foo
        uses: trintadevops/learnactions@main
        with:
          who-to-greet: 'Trinta'
      - run: echo random-number ${{ steps.foo.outputs.random-number }}
        shell: bash
      - run: echo "What's your name?" ${{ steps.foo.outputs.my-name}}
        shell: bash

As linhas 12 e 14 consomem as variáveis exportadas na action acima, utilizando a sequência steps.foo.outputs.random-number.

Vamos fatiar o O steps.foo.outputs.random-number para explicar.

O “steps.foo”, refere-se ao id: foo da linha 8, que utiliza a action do repositório trintadevops/learnactions@main.

O restante outputs.random-number refere-se a variável random-number que foi exportada no arquivo da action composite, o arquivo action.yaml acima.

Deixe um comentário