Skip to main content
Publicamos atualizações frequentes em nossa documentação, e a tradução desta página ainda pode estar em andamento. Para obter as informações mais recentes, acesse a documentação em inglês. Se houver problemas com a tradução desta página, entre em contato conosco.

Esta versão do GitHub Enterprise foi descontinuada em 2022-06-03. Nenhum lançamento de patch será feito, mesmo para questões críticas de segurança. Para obter melhor desempenho, melhorar a segurança e novos recursos, upgrade to the latest version of GitHub Enterprise. Para ajuda com a atualização, contact GitHub Enterprise support.

Expressões

Você pode avaliar expressões em fluxos de trabalho e ações.

Observação: Executores hospedados em GitHub não são atualmente compatíveis com GitHub Enterprise Server. Você pode ver mais informações sobre suporte futuro planejado no Itinerário público do GitHub.

Sobre as expressões

Você pode usar expressões para definir variáveis de ambiente programaticamente em arquivos de fluxo de trabalho e contextos de acesso. Uma expressão pode ser qualquer combinação de valores literais, referências a um contexto ou funções. É possível combinar literais, referências de contexto e funções usando operadores. Para obter mais informações sobre os contextos, consulte "Contextos".

Expressões são comumente usadas com a condicional if palavra-chave em um arquivo de fluxo de trabalho para determinar se uma etapa deve ser executada. Quando uma condicional if for true, a etapa será executada.

É necessário usar uma sintaxe específica para avisar o GitHub para avaliar a expressão e não tratá-la como uma string.

${{ <expression> }}

Quando você usa expressões em uma condicional if você pode omitir a sintaxe da expressão (${{ }}) porque GitHub calcula automaticamente a condição if como expressão. Para obter mais informações sobre as condições se, consulte "Sintaxe de fluxo de trabalho para GitHub Actions".

Aviso: Ao criar fluxos de trabalho e ações, você sempre deve considerar se seu código pode executar entradas não confiáveis de possíveis invasores. Certos contextos devem ser tratados como entradas não confiáveis, uma vez que um invasor pode inserir seu próprio conteúdo malicioso. Para obter mais informações, consulte "Entender o risco de injeções de scripts".

Exemplo de expressão em uma condicional if

steps:
  - uses: actions/hello-world-javascript-action@v1.1
    if: ${{ <expression> }}

Exemplo de configuração de variável de ambiente

env:
  MY_ENV_VAR: ${{ <expression> }}

Literais

Como parte da expressão, você pode usar os tipos de dados boolean, null, number ou string.

Tipo de dadosValor do literal
booleantrue ou false
nullnull
numberQualquer formato de número aceito por JSON.
stringVocê não precisa anexar strings em ${{ e }}. No entanto, se o fizer, você deverá usar aspas simples (') em torno da string. Para usar uma aspa simples literal, não use as aspas simples literais e use as aspas simples adicionais (''). Colocar aspas duplas (") irá gerar um erro.

Exemplo

env:
  myNull: ${{ null }}
  myBoolean: ${{ false }}
  myIntegerNumber: ${{ 711 }}
  myFloatNumber: ${{ -9.2 }}
  myHexNumber: ${{ 0xff }}
  myExponentialNumber: ${{ -2.99e-2 }}
  myString: Mona the Octocat
  myStringInBraces: ${{ 'It''s open source!' }}

Operadores

OperadorDescrição
( )Agrupamento lógico
[ ]Índice
.Property de-reference
!Não
<Menor que
<=Menor ou igual
>Maior que
>=Maior ou igual
==Igual
!=Não igual
&&E
||Ou

O GitHub faz comparações livres de igualdade.

  • Se os tipos não correspondem, o GitHub força o tipo para um número. O GitHub converte tipos de dados em um número usando estes esquemas:

    TipoResultado
    Nulo0
    Booleanotrue retorna 1
    false retorna 0
    stringAnalisado com base em qualquer formato de número JSON; do contrário, NaN.
    Observação: string vazia retorna 0.
    ArrayNaN
    ObjectNaN
  • Uma comparação de um NaN com outro NaN não resulta em true. Para obter mais informações, consulte os "docs NaN Mozilla."

  • O GitHub ignora as maiúsculas e minúsculas ao comparar strings.

  • Objetos e arrays só são considerados iguais quando forem a mesma instância.

Funções

O GitHub oferece um conjunto de funções integradas que podem ser usadas em expressões. Algumas funções convertem valores em uma string para realizar comparações. O GitHub converte tipos de dados em uma string usando estes esquemas:

TipoResultado
Nulo''
Booleano'true' ou 'false'
NúmeroFormato decimal, exponencial para números altos
ArrayArrays não são convertidos em uma string
ObjectObjetos não são convertidos em uma string

contains

contains( search, item )

Retorna verdadeiro se a pesquisa contiver item. Se a pesquisa for uma array, essa função retornará verdadeiro se o item `for um elemento na array. Se apesquisafor uma string, essa função retornaráverdadeirose oitemfor uma substring dapesquisa`. Essa função não diferencia maiúsculas de minúsculas. Lança valores em uma string.

Exemplo de uso de array

contains(github.event.issue.labels.*.name, 'bug') retorna se a issue relacionada ao evento possui uma etiqueta de "erro".

Exemplo de uso de string

contains('Hello world', 'llo') retorna true.

startsWith

startsWith( searchString, searchValue )

Retorna true quando searchString começar com searchValue. Essa função não diferencia maiúsculas de minúsculas. Lança valores em uma string.

Exemplo

startsWith('Hello world', 'He') retorna true.

endsWith

endsWith( searchString, searchValue )

Retorna true se searchString terminar com searchValue. Essa função não diferencia maiúsculas de minúsculas. Lança valores em uma string.

Exemplo

endsWith('Hello world', 'ld') retorna true.

format

format( string, replaceValue0, replaceValue1, ..., replaceValueN)

Substitui valores na string pela variável replaceValueN. As variáveis na string são especificadas usando a sintaxe {N}, onde N é um inteiro. Você deve especificar pelo menos um replaceValue e string. Não há máximo para o número de variáveis (replaceValueN) que você pode usar. Escape de chaves usando chaves duplas.

Exemplo

format('Hello {0} {1} {2}', 'Mona', 'the', 'Octocat')

Retorna 'Hello Mona the Octocat'.

Exemplo de escape de chaves

format('{{Hello {0} {1} {2}!}}', 'Mona', 'the', 'Octocat')

Returna '{Hello Mona the Octocat!}'.

join

join( array, optionalSeparator )

O valor para array pode ser uma array ou uma string. Todos os valores na array são concatenados em uma string. Se você fornecer optionalSeparator, ele será inserido entre os valores concatenados. Caso contrário, será usado o separador-padrão ,. Lança valores em uma string.

Exemplo

join(github.event.issue.labels.*.name, ', ') may return 'bug, help wanted'

toJSON

toJSON(value)

Retorna uma bela representação JSON de value. Você pode usar essa função para depurar as informações fornecidas em contextos.

Exemplo

toJSON(job) pode retornar { "status": "Success" }

fromJSON

fromJSON(value)

Retorna um objeto do JSON ou tipo de dado do JSON para valor. Você pode usar esta função para fornecer um objeto do JSON como uma expressão avaliada ou para converter variáveis de ambiente de uma string.

Exemplo que retorna um objeto do JSON

Este fluxo de trabalho define uma matriz JSON em um trabalho, e o passa para o próximo trabalho usando uma saída do fromJSON.

name: build
on: push
jobs:
  job1:
    runs-on: ubuntu-latest
    outputs:
      matrix: ${{ steps.set-matrix.outputs.matrix }}
    steps:
      - id: set-matrix
        run: echo "::set-output name=matrix::{\"include\":[{\"project\":\"foo\",\"config\":\"Debug\"},{\"project\":\"bar\",\"config\":\"Release\"}]}"
  job2:
    needs: job1
    runs-on: ubuntu-latest
    strategy:
      matrix: ${{fromJSON(needs.job1.outputs.matrix)}}
    steps:
      - run: build

Exemplo que retorna um tipo de dado do JSON

Este fluxo de trabalho usa fromJSON para converter variáveis de ambiente de uma string para um número inteiro ou booleano.

name: print
on: push
env: 
  continue: true
  time: 3
jobs:
  job1:
    runs-on: ubuntu-latest
    steps:
      - continue-on-error: ${{ fromJSON(env.continue) }}
        timeout-minutes: ${{ fromJSON(env.time) }}
        run: echo ...

hashFiles

hashFiles(path)

Retorna um único hash para o conjunto de arquivos que correspondem ao padrão do caminho. Você pode fornecer um único padrão de caminho ou vários padrões de caminho separados por vírgulas. O caminho é relativo ao diretório GITHUB_WORKSPACE e pode incluir apenas arquivos dentro do GITHUB_WORKSPACE. Essa função calcula uma hash SHA-256 individual para cada arquivo correspondente e, em seguida, usa esses hashes para calcular um hash SHA-256 final para o conjunto de arquivos. Se o padrão caminho não corresponder a nenhum arquivo, ele irá retornar uma string vazia. Para obter mais informações sobre o SHA-256, consulte "SHA-2".

Você pode usar a correspondência de padrão de caracteres para corresponder os nomes dos arquivos. No Windows, a correspondência do padrão diferencia maiúsculas e minúsculas. Para obter mais informações sobre caracteres de correspondência de padrões suportados, consulte "Sintaxe de fluxo de trabalho para o GitHub Actions".

Exemplo com um padrão único

Corresponde qualquer arquivo package-lock.json no repositório.

hashFiles('**/package-lock.json')

Exemplo com vários padrões

Cria um hash para arquivos de pacote-lock.json e Gemfile.lock no repositório.

hashFiles('**/package-lock.json', '**/Gemfile.lock')

Funções de verificação

Você pode usar as funções de verificação de status a seguir como expressões nas condicionais if. Uma verificação de status padrão de success() é aplicada, a menos que você inclua uma dessas funções. Para obter mais informações sobre as condicionais se, consulte "Sintaxe do fluxo de trabalho para o GitHub Actions.

success

Retorna verdadeiro quando não ocorrer falha em nenhuma das etapas anteriores falhar ou quando não for cancelada.

Exemplo

etapas:
  ...
  - nome: O trabalho foi bem-sucedido
    se: ${{ success() }}

always

Faz com que a etapa seja sempre executada e retorna verdadeiro, mesmo quando cancelada. Um trabalho ou uma etapa não será executado(a) quando uma falha crítica impedir a tarefa de ser executada. Por exemplo, se houver falha ao obter as fontes.

Exemplo

se: ${{ always() }}

cancelled

Retornará true se o fluxo de trabalho foi cancelado.

Exemplo

se: ${{ cancelled() }}

failure

Retorna verdadeiro quando ocorre uma falha no trabalho em qualquer etapa anterior. Se você tem uma cadeia de trabalhos dependentes, fracasso() retorna verdadeiro se algum trabalho ancestral falhar.

Exemplo

etapas:
  ...
  - nome: Ocorreu uma falha no trabalho
    if: ${{ failure() }}

falha com as condições

Você pode incluir condições extras para uma etapa a ser executada após uma falha, mas você ainda deve incluir failure() para substituir a verificação de status padrão de sucess() que é automaticamente aplicada a condições se que não contenham uma função de verificação de status.

Exemplo
etapas:
  ...
  - name: Failing step
    id: demo
    run: exit 1
  - name: The demo step has failed
    if: ${{ failure() && steps.demo.conclusion == 'failure' }}

Filtros de objeto

Você pode usar a sintaxe * para aplicar um filtro e selecionar itens correspondentes em uma coleção.

Por exemplo, pense em um array de objetos de nome frutas.

[
  { "name": "maçã", "quantidade": 1 },
  { "name": "laranja", "quantidade": 2 },
  { "name": "pera", "quantidade": 1 }
]

O filtro frutas.*.name retorna o array [ "maçã", "laranja", "pera" ].

Você também pode usar a sintaxe * em um objeto. Por exemplo, suponha que você tenha um objeto chamado vegetables.


{
  "scallions":
  {
    "colors": ["green", "white", "red"],
    "ediblePortions": ["roots", "stalks"],
  },
  "beets":
  {
    "colors": ["purple", "red", "gold", "white", "pink"],
    "ediblePortions": ["roots", "stems", "leaves"],
  },
  "artichokes":
  {
    "colors": ["green", "purple", "red", "black"],
    "ediblePortions": ["hearts", "stems", "leaves"],
  },
}

O filtro vegetables.*.ComblePortions pode ser avaliado:


[
  ["roots", "stalks"],
  ["hearts", "stems", "leaves"],
  ["roots", "stems", "leaves"],
]

Uma vez que os objetos não preservam a ordem, não se pode garantir a ordem de saída.