Frecuentemente publicamos actualizaciones de nuestra documentación. Es posible que la traducción de esta página esté en curso. Para conocer la información más actual, visita la documentación en inglés. Si existe un problema con las traducciones en esta página, por favor infórmanos.

Sintaxis de contexto y de expresiones para acciones de GitHub

Puedes acceder a la información de contexto y evaluar las expresiones en flujos de trabajo y acciones.

GitHub Actions se encuentra disponible con GitHub Free, GitHub Pro, GitHub Free para organizaciones, GitHub Team, GitHub Enterprise Cloud, y GitHub One. GitHub Actions no está disponible para repositorios privados que pertenezcan a cuentas que utilicen planes tradicionales por repositorio. Para obtener más información, consulta la sección "Productos de GitHub".

En este artículo

Acerca de los contextos y 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 literales, referencias de contexto y funciones usando operadores.

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".

Expresión de ejemplo en un condicional if

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

Ejemplo de parámetros en una variable de entorno

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

Contextos

Los contextos son una manera de acceder a información acerca de las ejecuciones de flujo de trabajo, los entornos del ejecutor, los trabajos y los pasos. Los contextos usan la sintaxis de expresión.

${{ <context> }}

Nombre del contextoTipoDescripción
githubobjetoInformación sobre la ejecución del flujo de trabajo. Para obtener más información, consulta github context.
envobjetoContiene variables de entorno establecidas en un flujo de trabajo, trabajo o paso. Para obtener más información, consulta contexto de env.
jobobjetoInformación sobre el trabajo actualmente en ejecución. Para obtener más información, consulta job context.
pasosobjetoInformación sobre los pasos que se han ejecutado en este trabajo. Para obtener más información, consulta steps context.
runnerobjetoIncluye información sobre el ejecutador que está realizando el trabajo actual. Para más información, consulta Contexto del ejecutador (runner).
secretsobjetoHabilita el acceso a los secretos. Para más información sobre secretos, consulta "Creando y usando secretos encriptados."
strategyobjetoBrinda acceso a los parámetros de estrategia configurados y la información sobre el puesto actual. Los parámetros de estregia incluyen fail-fast, job-index, job-total y max-parallel.
matrixobjetoBrinda acceso a los parámetros de la matriz que configuraste para el puesto actual. Por ejemplo, si configuraste una matriz de construcción con las versiones os y nodo, el objeto de contexto de la matriz incluye las versiones os y nodo del puesto actual.
needsobjetoHabilita el acceso de las salidas de todos los jobs que se definen como una dependencia para el job actual. Para obtener más información, consulta needs context.

Como parte de una expresión, puedes acceder a la información del contexto usando una de dos sintaxis.

  • Sintaxis del índice: github['sha']
  • Sintaxis de desreferencia de propiedad: github.sha

Para usar la sintaxis de desreferencia de propiedad, el nombre de la propiedad debe cumplir con lo siguiente:

  • comienza con a-Z o _.
  • esté seguido por a-Z 0-9 - o _.

contexto github

El contexto de github contiene información sobre la ejecución del flujo de trabajo y el evento que desencadenó la ejecución. Puedes leer la mayoría de los datos de contexto de github en las variables del entorno. Para más información sobre las variables de entorno, consulta "Utilizando variables de entorno."

Advertencia: Cuando utilizas todo el contexto de GitHub, cuida que incluya la información sensible tal como un github.token. GitHub enmascara secretos cuando se imprimen en la consola, pero debes tener cuidado cuando exportes o imprimas el contexto.

Nombre de la propiedadTipoDescripción
githubobjetoEl contexto de nivel superior disponible durante cualquier trabajo o paso en un flujo de trabajo.
github.eventobjetoLa carga de webhook del evento completo. Para obtener más información, consulta "Eventos que activan los flujos de trabajo".
github.event_pathstringLa ruta a la carga del webhook del evento completo en el ejecutor.
github.workflowstringEl nombre del flujo de trabajo. Si el archivo de flujo de trabajo no especifica un nombre, el valor de esta propiedad es la ruta completa del archivo del flujo de trabajo en el repositorio.
github.jobstringEl job_id del job actual.
github. run_idstringUn número único para cada ejecución dentro de un repositorio. Este número no cambia si vuelves a ejecutar el flujo de trabajo.
github. run_numberstringUn número único para cada ejecución de un flujo de trabajo particular en un repositorio. Este número comienza en 1 para los flujos de trabajo que se ejecutan primero, e incrementa con cada ejecución nueva. Este número no cambia si vuelves a ejecutar el flujo de trabajo.
github.actorstringEl inicio de sesión del usuario que inició la ejecución del flujo de trabajo.
github.repositorystringEl nombre del repositorio y del propietario. Por ejemplo, Codertocat/Hello-World.
github.repository_ownerstringEl nombre del propietario del repositorio. Por ejemplo, Codertocat.
github.event_namestringEl nombre del evento que activó la ejecución del flujo de trabajo.
github.shastringEl SHA de confirmación que activó la ejecución del flujo de trabajo.
github.refstringLa rama o ref de etiqueta que activó la ejecución del flujo de trabajo.
github.head_refstringLa rama head_ref o fuente de la solicitud de extracción en una ejecución de flujo de trabajo. Esta propiedad solo está disponible cuando el evento que activa una ejecución de flujo de trabajo es una pull_request.
github.base_refstringLa rama head_ref o fuente de la solicitud de extracción en una ejecución de flujo de trabajo. Esta propiedad solo está disponible cuando el evento que activa una ejecución de flujo de trabajo es una pull_request.
github.tokenstringUn token para autenticar en nombre de la aplicación de GitHub instalada en tu repositorio. Esto es funcionalmente equivalente al secreto de GITHUB_TOKEN. Para más información, consulta "Autenticando con el GITHUB_TOKEN."
github.workspacestringEl directorio de trabajo predeterminado para los pasos y la ubicación predeterminada de tu repositorio cuando usas la acción checkout.
github.actionstringEl nombre de la acción que se está ejecutando actualmente. GitHub elimina caracteres especiales o usa el nombre run cuando el paso actual ejecuta un script. Si usas la misma acción más de una vez en el mismo trabajo, el nombre incluirá un sufijo con el número de secuencia. Por ejemplo, el primer script que ejecutes tendrá el nombre run1, y el segundo script será nombrado run2. Del mismo modo, la segunda invocación de actions/checkout será actionscheckout2.

contexto de env

El contexto de Env contiene las variables de entorno que se han establecido en un flujo de trabajo, puesto o paso. Para obtener más información acerca de la configuración de variables de entorno en tu flujo de trabajo, consulta "Sintaxis de flujo de trabajo para GitHub Actions".

La sintaxis de contexto env te permite usar el valor de una variable de entorno en tu archivo de flujo de trabajo. Si quieres usar el valor de una variable de entorno dentro de un ejecutor, usa el método normal del sistema operativo del ejecutor para leer las variables de entorno.

Solo puedes usar el contexto de env en el valor de las llaves with y name, o en un condicional if del paso. Para obtener más información sobre la sintaxis del paso, consulta "Sintaxis de flujo de trabajo para GitHub Actions".

Nombre de la propiedadTipoDescripción
envobjetoEste contexto cambia para cada paso en un trabajo. Puedes acceder a este contexto desde cualquier paso en un trabajo.
Env.<env name>stringEl valor de una variable de entorno específica.

contexto job

El contexto trabajo contiene información sobre el trabajo de ejecución actual.

Nombre de la propiedadTipoDescripción
jobobjetoEste contexto cambia para cada trabajo en una ejecución de flujo de trabajo. Puedes acceder a este contexto desde cualquier paso en un trabajo.
job.statusstringEl estado actual del trabajo. Los valores posibles son success, failure o cancelled.
job.containerobjetoInformación sobre el contenedor del trabajo. Para obtener más información sobre los contenedores, consulta "Sintaxis de flujo de trabajo para GitHub Actions".
job.container.networkstringLa Id de la red del contenedor. El ejecutor crea la red usada por todos los contenedores en un trabajo.
job.container.idstringLa Id de la red del contenedor.
job.servicesobjetoLos contenedores de servicio creados para un trabajo. Para obtener más información sobre los contenedores de servicio, consulta "Sintaxis de flujo de trabajo para GitHub Actions".
job.services.<service id>.idstringLa Id del contenedor de servicio.
job.services.<service id>.portsobjetoLos puertos expuestos del contenedor del servicio.
job.services.<service id>.networkstringLa Id de la red del contenedor de servicio. El ejecutor crea la red usada por todos los contenedores en un trabajo.

contexto steps

El contexto steps contiene información sobre los pasos en el trabajo actual que ya se ha ejecutado.

Nombre de la propiedadTipoDescripción
stepsobjetoEste contexto cambia para cada paso en un trabajo. Puedes acceder a este contexto desde cualquier paso en un trabajo.
steps.<step id>.outputsobjetoEl conjunto de salidas definido para el paso. Para obtener más información, consulta "Sintaxis de metadatos para GitHub Actions".
steps.<step id>.outputs.<output name>stringEl valor de un resultado específico.
steps.<step id>.outcomestringEl resultado de un paso completado antes de que se aplique continue-on-error. Los valores posibles son success, failure, cancelled, o skipped. Cuando falla un paso de continue-on-error, el outcome es failure, pero la conclusion final es success.
steps.<step id>.conclusionstringEl resultado de un paso completado después de que se aplica continue-on-error. Los valores posibles son success, failure, cancelled, o skipped. Cuando falla un paso de continue-on-error, el outcome es failure, pero la conclusion final es success.

Contexto runner

El contexto runner contiene información sobre el ejecutador (runner) que está ejecutando el trabajo actual.

Nombre de la propiedadTipoDescripción
osstringEl sistema operativo del ejecutor que ejecuta el trabajo. Los valores posibles son Linux, Windows o macOS.
tempstringLa ruta del directorio temporal para el ejecutor. Se garantiza que este directorio estará vacío al inicio de cada trabajo, incluso en los ejecutores autoalojados.
tool_cachestringLa ruta del directorio que contiene algunas de las herramientas preinstaladas para los ejecutores alojados en GitHub. Para obtener más información, consulta "Software instalado en los ejecutores alojados por GitHub".

Contexto needs

El contexto needs contiene salidas de todos los jobs que se definen como dependencia del job actual. Para obtener más información sobre la definición de dependencias de jobs, consulta la sección "Sintaxis de flujos de trabajo para GitHub Actions".

Nombre de la propiedadTipoDescripción
needs.<job id>objetoUn solo job del cual depende el job actual.
needs.<job id>.resultstringEl resultado de un job del cual depende el job actual. Los valores posibles son success, failure o cancelled.
needs.<job id>.outputsobjetoEl conjunto de resultados de un job del cual depende el job actual.
needs.<job id>.outputs.<output name>stringEl valor de un resultado específico para un job del cual depende el job actual.

Ejemplo de impresión de información de contexto de un archivo de registro

Para inspeccionar la información accesible en cada contexto, puedes utilizar este ejemplo de archivo de flujo de trabajo.

Advertencia: Cuando utilizas todo el contexto de GitHub, cuida que incluya la información sensible tal como un github.token. GitHub enmascara secretos cuando se imprimen en la consola, pero debes tener cuidado cuando exportes o imprimas el contexto.

.github/workflows/main.yml

on: push

jobs:
  one:
    runs-on: ubuntu-16.04
    steps:
      - name: Dump GitHub context
        env:
          GITHUB_CONTEXT: ${{ toJson(github) }}
        run: echo "$GITHUB_CONTEXT"
      - name: Dump job context
        env:
          JOB_CONTEXT: ${{ toJson(job) }}
        run: echo "$JOB_CONTEXT"
      - name: Dump steps context
        env:
          STEPS_CONTEXT: ${{ toJson(steps) }}
        run: echo "$STEPS_CONTEXT"
      - name: Dump runner context
        env:
          RUNNER_CONTEXT: ${{ toJson(runner) }}
        run: echo "$RUNNER_CONTEXT"
      - name: Dump strategy context
        env:
          STRATEGY_CONTEXT: ${{ toJson(strategy) }}
        run: echo "$STRATEGY_CONTEXT"
      - name: Dump matrix context
        env:
          MATRIX_CONTEXT: ${{ toJson(matrix) }}
        run: echo "$MATRIX_CONTEXT"

Literales

Como parte de una expresión, puedes usar tipos de datos boolean, null, number o string. Los literales booleanos no reconocen minúsculas de mayúsculas, por lo que puedes usar true o Treu.

Tipo de datosValor literal
booleantrue o falso
nullnull
numberCualquier formato de número compatible con JSON.
stringDebes 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
<Menos 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:

    TipoResultado
    Null0
    Booleantrue devuelve 1
    falso devuelve 0
    CadenaAnalizado desde cualquier formato de número JSON legal, de lo contrario NaN.
    Nota: la cadena vacía devuelve 0.
    ArrayNaN
    ObjectNaN
  • Una comparación de un NaN a otro NaN no resulta en true. Para obtener más información, consulta "Documentos Mozilla NaN".

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

  • Los objetos y matrices solo se consideran iguales si 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:

TipoResultado
Null''
Boolean'true' o 'falso'
NumberFormato decimal, exponencial para grandes números
ArrayLas matrices no se convierten en cadenas
ObjectLos 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 true

startsWith

startsWith( searchString, searchValue )

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

Ejemplo

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

endsWith

endsWith( searchString, searchValue )

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

Ejemplo

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

format

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

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

Ejemplo

Devuelve '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)

Devuelve una representación JSON con formato mejorado de valor. 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 para value. Puedes utilizar esta función para proporcionar un objeto de JSON como una expresión evaluada.

Ejemplo

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

hashFiles

hashFiles(path)

Devuelve un solo hash para el conjunto de archivos que coinciden con el patrón de path. El path es relativo al directorio GITHUB_WORKSPACE y sólo 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 hash para calcular un hash final SHA-256 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

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

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

Funciones de verificación del estado del trabajo

Puedes usar las siguientes funciones de verificación de estado como expresiones en condicionales if (si). Si la expresión if no contiene ninguna de las funciones de estado, se obtendrá automáticamente con success(). 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
Pasos:
  ...
  - name: The job has succeeded
    if: ${{ success() }}

always

Siempre arroja true, incluso 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

Devuelve 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
Pasos:
  ...
  - 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 devuelve la matriz [ "apple", "orange", "pear" ]

Pregunta a una persona

¿No puedes encontrar lo que estás buscando?

Contáctanos