Esta versión de GitHub Enterprise se discontinuará el 2022-02-16. No se realizarán lanzamientos de patch, ni siquiera para problemas de seguridad críticos. Para obtener un mejor desempeño, más seguridad y nuevas características, actualiza a la última versión de GitHub Enterprise. Para obtener ayuda con la actualización, contacta al soporte de GitHub Enterprise.

Expresiones

Puedes evaluar las expresiones en los flujos de trabajo y acciones.

Nota: Los ejecutores hospedados en GitHub no son compatibles con GitHub Enterprise Server actualmente. Puedes encontrar más información sobre el soporte que se tiene planeado en el futuro en el Itinerario público de GitHub.

Acerca de las expresiones

Puedes usar expresiones para establecer variables programáticamente en archivos de flujo de trabajo y contextos de acceso. Una expresión puede ser cualquier combinación de valores literales, referencias a un contexto o funciones. Puedes combinar valores literales, referencias de contexto y funciones usando operadores. Para obtener más información sobre los contextos, consulta la sección "Contextos".

Las expresiones se utilizan comúnmente con la palabra clave condicional if en un archivo de flujo de trabajo para determinar si un paso debe ejecutar. Cuando un condicional if es true, se ejecutará el paso.

Debes usar una sintaxis específica para decirle a GitHub que evalúe una expresión en lugar de tratarla como una cadena.

${{ <expression> }}

Podrías omitir la sintaxis de expresión cuando utilizas expresiones en un condicional if (${{ }}) ya que GitHub evalúa automáticamente el condicional if como una expresión. Para obtener más información acerca de los condicionales if, consulta la sección "sintaxis de flujo de trabajo para GitHub Actions".

Advertencia: Cuando crees flujos de trabajo y acciones siempre debes considerar si tu código podría ejecutar entradas no confiables de atacantes potenciales. Se tratará a algunos contextos como una entrada no confiable, ya que un atacante podrían insertar su propio contenido malintencionado. Para obtener más información, consulta la sección "Entenderel riesgo de las inyecciones de scripts".

Expresión de ejemplo en un condicional if

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

Ejemplo de parámetros en una variable de entorno

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

Literales

Como parte de una expresión, puedes usar tipos de datos boolean, null, number o string.

Tipo de datosValor literal
booleanverdadero o falso
nullnull
numberCualquier formato de número compatible con JSON.
secuenciaDebes usar comillas simples. Escapar comillas simples literales con una comilla simple.

Ejemplo

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

OperadorDescripción
( )Agrupación lógica
[ ]Índice
.Desreferencia de propiedad
!No
<Menor que
<Menor o igual
>Mayor que
>=Mayor o igual
==Igual
!=No es igual
&&Y
||O

GitHub realiza comparaciones de igualdad flexible.

  • Si los tipos no coinciden, GitHub fuerza el tipo a un número. GitHub fusiona los tipos de datos con un número usando estas conversiones:

    TypeResultado
    Nulo0
    Booleanoverdadero devuelve 1
    falso devuelve 0
    SecuenciaAnalizado desde cualquier formato de número JSON legal, de lo contrario, NaN.
    Nota: La cadena vacía arroja 0.
    ArregloNaN
    ObjetoNaN
  • Una comparación de un NaN con otro NaN no genera true. Para obtener más información, consulta "Documentos de Mozilla NaN".

  • GitHub ignora las mayúsculas y minúsculas al comparar cadenas.

  • Los objetos y matrices solo se consideran iguales cuando son la misma instancia.

Funciones

GitHub ofrece un conjunto de funciones integradas que puedes usar en expresiones. Algunas funciones fusionan valores en una cadena para realizar las comparaciones. GitHub fusiona los tipos de datos con una cadena usando estas conversiones:

TypeResultado
Nulo''
Booleano'verdadero' o 'falso'
NumberFormato decimal, exponencial para grandes números
ArregloLas matrices no se convierten en cadenas
ObjetoLos objetos no se convierten en cadenas

contains

contiene (buscar, elemento)

Arroja true si search contiene item. Si search es una matriz, esta función arroja true si el item es un elemento de la matriz. Si search es una cadena, esta función arroja true si el item es una subcadena de search. Esta función no distingue mayúsculas de minúsculas. Fusiona valores en una cadena.

Ejemplo usando una matriz

contains(github.event.issue.labels.*.name, 'bug')

Ejemplo usando una cadena

contains('Hello world', 'llo') devuelve verdadero

startsWith

startsWith( searchString, searchValue )

Arroja true cuando searchString empieza con searchValue. Esta función no distingue mayúsculas de minúsculas. Fusiona valores en una cadena.

Ejemplo

startsWith('Hello world', 'He') regresa a verdadero

endsWith

endsWith( searchString, searchValue )

Arroja true si searchString termina con searchValue. Esta función no distingue mayúsculas de minúsculas. Fusiona valores en una cadena.

Ejemplo

endsWith('Hello world', 'He') devuelve verdadero

format

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

Reemplaza valores en la string, con la variable replaceValueN. Las variables en la string se especifican con la sintaxis {N}, donde N es un entero. Debes especificar al menos un replaceValue y una string. No existe un máximo para el número de variables (replaceValueN) que puedes usar. Escapar las llaves utilizando llaves dobles.

Ejemplo

Arroja 'Hello Mona the Octocat'

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

Ejemplo de evasión de llaves

Devuelve '{Hello Mona the Octocat!}'

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

join

join( array, optionalSeparator )

El valor para array puede ser una matriz o una cadena. Todos los valores en array se concatenan en una cadena. Si proporcionas optionalSeparator, se inserta entre los valores concatenados. De lo contrario, se usa el separador predeterminado ,. Fusiona valores en una cadena.

Ejemplo

join(github.event.issue.labels.*.name, ', ') puede devolver 'bug, help wanted'

toJSON

toJSON(value)

Arroja una representación JSON con formato mejorado de value. Puedes usar esta función para depurar la información suministrada en contextos.

Ejemplo

toJSON(job) puede devolver { "status": "Success" }

fromJSON

fromJSON(value)

Devuelve un objeto de JSON o un tipo de datos de JSON para value. Puedes utilizar esta función para proporcionar un objeto JSON como una expresión evaluada o para convertir variables de ambiente desde una secuencia.

Ejemplo de devolver un objeto JSON

Este flujo de trabajo configura una matriz de JSON en un job, y lo pasa al siguiente job utilizando un resultado y 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

Ejemplo de devolver un tipo de datos JSON

Este flujo de trabajo utiliza fromJSON para convertir las variables de ambiente de una secuencia a un número entero o 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)

Arroja un solo hash para el conjunto de archivos que coincide con el patrón de path. Puedes proporcionar un patrón de path o path múltiples se parados por comas. El path está relacionado con el directorio GITHUB_WORKSPACE y solo puede incluir archivos dentro del directorio GITHUB_WORKSPACE. Esta función calcula un hash SHA-256 individual para cada archivo coincidente, y luego usa esos hashes para calcular un hash SHA-256 final para el conjunto de archivos. Para más información sobre SHA-256, consulta "SHA-2".

Puedes usar caracteres de coincidencia de patrones para encontrar nombres de archivos. La coincidencia de patrones no distingue mayúsculas de minúsculas en Windows. Para obtener más información acerca de los caracteres compatibles con los patrones, consulta "Sintaxis de flujo de trabajo para GitHub Actions".

Ejemplo con un solo patrón

Encuentra cualquier archivo package-lock.json en el repositorio.

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

Ejemplo con patrones múltiples

Crea un hash para cualquier archivo de package-lock.json y de Gemfile.lock en el repositorio.

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

Funciones de verificación del estado del trabajo

Puedes usar las siguientes funciones de verificación de estado como expresiones en condicionales if. Se aplicará una verificación de estado predeterminado de success() a menos de que incluyas una de estas funciones. Para obtener información sobre los condicionales if, consulta "Sintaxis de flujo de trabajo para acciones de GitHub".

success

Arroja true cuando no falló ni se canceló ninguno de los pasos anteriores.

Ejemplo

steps:
  ...
  - name: The job has succeeded
    if: ${{ success() }}

always

Ocasiona que el paso siempre se ejecute y devuelve true, aún cuando se cancela. No se ejecutará un trabajo o paso cuando una falla crítica impida que la tarea se ejecute. Por ejemplo, si fallaron las fuentes.

Ejemplo

if: ${{ always() }}

cancelled

Arroja true si se canceló el flujo de trabajo.

Ejemplo

if: ${{ cancelled() }}

failure

Arroja true cuando falla cualquiera de los pasos anteriores de un trabajo.

Ejemplo

steps:
  ...
  - name: The job has failed
    if: ${{ failure() }}

Filtros de objetos

Puedes usar la sintaxis * para aplicar un filtro y seleccionar los elementos coincidentes en una recopilación.

Por ejemplo, considera una matriz de objetos llamada fruits.

[
  { "name": "apple", "quantity": 1 },
  { "name": "orange", "quantity": 2 },
  { "name": "pear", "quantity": 1 }
]

El filtro fruits.*.name arroja la matriz [ "apple", "orange", "pear" ]

¿Te ayudó este documento?

Política de privacidad

¡Ayúdanos a hacer geniales estos documentos!

Todos los documentos de GitHub son de código abierto. ¿Notas algo que esté mal o que no sea claro? Emite una solicitud de cambios.

Haz una contribución

O, aprende cómo contribuir.