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 dados | Valor do literal |
|---|---|
boolean | true ou false |
null | null |
number | Qualquer formato de número aceito por JSON. |
string | Você 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
| Operador | Descriçã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:
Tipo Resultado Nulo 0Booleano trueretorna1
falseretorna0string Analisado com base em qualquer formato de número JSON; do contrário, NaN.
Observação: string vazia retorna0.Array NaNObject NaN -
Uma comparação de um
NaNcom outroNaNnão resulta emtrue. 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:
| Tipo | Resultado |
|---|---|
| Nulo | '' |
| Booleano | 'true' ou 'false' |
| Número | Formato decimal, exponencial para números altos |
| Array | Arrays não são convertidos em uma string |
| Object | Objetos 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.