cd ..
CI/CD

Entendendo Contextos no GitHub Actions: github, env, vars e secrets

Entendendo Contextos no GitHub Actions: github, env, vars e secrets

Se você começou a estudar GitHub Actions, provavelmente já encontrou expressões como estas:

${{ github.repository }}

${{ env.APP_NAME }}

${{ vars.AWS_REGION }}

${{ secrets.GEMINI_API_KEY }}

À primeira vista elas parecem apenas formas diferentes de acessar variáveis.

Mas existe uma diferença importante: cada uma pertence a um contexto diferente, possui um propósito específico e é interpretada em momentos distintos da execução do workflow.

Entender essa diferença é fundamental para escrever workflows mais organizados, reutilizáveis e seguros.

Neste artigo vamos explorar os principais contextos do GitHub Actions utilizando exemplos práticos.

O que você vai aprender

Ao final deste artigo você será capaz de:

O que é um Contexto?

Um Contexto é um objeto disponibilizado pelo GitHub durante a execução do workflow.

Esses objetos armazenam informações sobre a execução e podem ser acessados através de expressões.

A sintaxe sempre segue este padrão:

${{ contexto.propriedade }}

Exemplo:

${{ github.repository }}

Neste exemplo:

Se o workflow estiver sendo executado neste repositório:

csarsantos96/commandlinux-blog

essa será a saída da expressão.

Na prática, funciona como acessar uma propriedade de um objeto em JavaScript.

github.repository

Como o GitHub processa uma expressão

Uma característica muito importante é que expressões como:

${{ github.ref_name }}

não são interpretadas pelo Bash.

Quem resolve essa expressão é o próprio GitHub Actions antes de enviar o Job para o Runner.

Isso permite utilizar condições como:

if: ${{ github.ref_name == 'main' }}

Nesse caso, o GitHub decide se o Job será executado antes mesmo do Runner iniciar.

O contexto github

O contexto github contém praticamente todas as informações sobre a execução do Workflow.

Algumas propriedades bastante utilizadas são:

${{ github.repository }}
${{ github.actor }}
${{ github.event_name }}
${{ github.workflow }}
${{ github.ref }}
${{ github.ref_name }}
${{ github.sha }}
${{ github.run_number }}

Exemplo:

steps:
  - name: Mostrar informações
    run: |
      echo "Repositório: ${{ github.repository }}"
      echo "Usuário: ${{ github.actor }}"
      echo "Evento: ${{ github.event_name }}"
      echo "Branch: ${{ github.ref_name }}"
      echo "Commit: ${{ github.sha }}"

Contexto não é o mesmo que Variável de Ambiente

Esse detalhe costuma gerar bastante confusão.

Veja estes dois exemplos.

Primeiro:

run: echo "${{ github.ref_name }}"

Aqui o GitHub substitui a expressão antes da execução.

Agora:

run: echo "$GITHUB_REF_NAME"

Nesse caso quem interpreta a variável é o Bash dentro do Runner.

O resultado pode ser parecido, mas o momento em que cada valor é resolvido é completamente diferente.

O contexto env

O contexto env representa variáveis definidas dentro do próprio workflow.

Exemplo:

env:
  APP_NAME: commandlinux

jobs:
  build:
    runs-on: ubuntu-latest

    steps:
      - run: echo "${{ env.APP_NAME }}"

Como essa variável também é exportada para o ambiente do Runner, podemos acessá-la diretamente:

run: echo "$APP_NAME"

O contexto env pode ser definido em três níveis:

Cada nível pode sobrescrever o anterior.

O contexto vars

As Variables são configuradas diretamente no GitHub.

Elas podem existir no nível:

São ideais para configurações que não são sensíveis.

Exemplos:

${{ vars.AWS_REGION }}

${{ vars.APP_URL }}

${{ vars.DOCKER_IMAGE }}

Essas informações podem ser reutilizadas por vários workflows sem precisar repetir valores no código.

O contexto secrets

O contexto secrets armazena informações confidenciais.

Por exemplo, durante a tradução automática dos artigos do CommandLinux utilizo uma chave da API do Gemini.

Ela é passada para o programa desta forma:

env:
  GEMINI_API_KEY: ${{ secrets.GEMINI_API_KEY }}

steps:
  - run: node scripts/translate-post.mjs

O segredo nunca fica escrito diretamente no código.

O que nunca fazer

Mesmo que o GitHub tente mascarar valores sensíveis nos logs, a recomendação é nunca imprimir Secrets.

Evite fazer isto:

run: echo "${{ secrets.GEMINI_API_KEY }}"

A melhor prática é passar o Secret diretamente para a aplicação que irá utilizá-lo.

Resumo

ContextoUtilização
githubInformações da execução do workflow
envVariáveis definidas no workflow
varsConfigurações do GitHub que não são sensíveis
secretsInformações confidenciais

Conclusão

Os Contextos são uma das funcionalidades mais importantes do GitHub Actions. Entender quando utilizar github, env, vars e secrets ajuda a criar workflows mais organizados, reutilizáveis e seguros.

Embora todos pareçam apenas “variáveis”, cada um possui um propósito específico e é interpretado em momentos diferentes da execução. Dominar essa diferença evita erros comuns e torna seus pipelines muito mais previsíveis.

Referências

O que achou?