Observação: GitHub Actions estava disponível para GitHub Enterprise Server 2.22 como um beta limitado. O beta terminou. GitHub Actions está agora geralmente disponível em GitHub Enterprise Server 3.0 ou posterior. Para obter mais informações, consulte as observações sobre a versão GitHub Enterprise Server 3.0.
- Para obter mais informações sobre a atualização para GitHub Enterprise Server 3.0 ou posterior, consulte "Atualizar GitHub Enterprise Server".
- Para obter mais informações sobre a configuração de GitHub Actions após atualizar, consulte a documentação para GitHub Enterprise Server 3.0.
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 configurar variáveis por programação em arquivos de fluxo de trabalho e acessar contextos. 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ê deve usar aspas simples. Aspas simples de literal devem ter aspas simples como escape. |
Exemplo
env:
myNull: ${{ null }}
myBoolean: ${{ false }}
myIntegerNumber: ${{ 711 }}
myFloatNumber: ${{ -9.2 }}
myHexNumber: ${{ 0xff }}
myExponentialNumber: ${{ -2.99-e2 }}
myString: ${{ 'Mona the Octocat' }}
myEscapedString: ${{ 'It''s open source!' }}
Operadores
Operador | Descrição |
---|---|
( ) | Agrupamento lógico |
[ ] | Índice |
. | Desreferência de propriedade |
! | 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 0
Booleano true
retorna1
false
retorna0
string Analisado com base em qualquer formato de número JSON; do contrário, NaN
.
Observação: string vazia retorna0
.Array NaN
Object NaN
-
Uma comparação de um
NaN
com outroNaN
nã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 a
pesquisafor uma string, essa função retornará
verdadeirose o
itemfor uma substring da
pesquisa`. 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')
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
Retorna 'Hello Mona the Octocat'
format('Hello {0} {1} {2}', 'Mona', 'the', 'Octocat')
Exemplo de escape de chaves
Returna '{Hello Mona the Octocat!}'
format('{{Hello {0} {1} {2}!}}', '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. 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 de status de trabalho
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 condicionais if
, consulte "Sintaxe de 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.
Exemplo
etapas:
...
- nome: Ocorreu uma falha no trabalho
if: ${{ 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" ]