No tienes acceso a esta clase

¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera

Curso de GitHub Actions

Curso de GitHub Actions

Juan José Torres

Juan José Torres

Expresiones para agregar lógica a un workflow

7/18
Recursos

GitHub Actions permite a los desarrolladores automatizar, personalizar y ejecutar sus flujos de trabajo de software directamente en GitHub.

Uno de los elementos claves para comenzar es la creación de un workflow file, también conocido como .yml file. Por ejemplo, un archivo llamado triggers.yml puede hacer que GitHub Actions reconozca que ha completado un desafío específico.

¿Cómo se crea un workflow file?

Primero, debe asignar un nombre descriptivo a su workflow, por ejemplo, triggers. A esto, a veces se le llama run name. Este término se refiere a lo que aparecerá en la consola o en la sección de acciones de GitHub.

Es importante porque a menudo hay más de un workflow en un repositorio, por lo que un run name claro puede ayudar a diferenciarlos.

¿Cómo se seleccionan los triggers correctos en un workflow file?

Se pueden usar una amplia variedad de triggers para iniciar un workflow. Estos pueden incluir:

  • Push, que ejecuta el workflow cada vez que se realiza un 'push' a la rama maestra.
  • Pull Request, que se activa cada vez que se abre un 'pull request'.
  • Workflow Dispatch, que permite a los usuarios ejecutar workflows manualmente.
  • Schedule, que ejecuta workflows en un horario específico.

¿Cómo se utilizan las expresiones en GitHub Actions?

Las expresiones son elementos indispensables en GitHub Actions. Permiten acceder a valores literales o de variables, comparar diferentes expresiones y utilizar varias funciones.

Existen muchas funciones comunes, como if, contains, toJson y fromJson, que desempeñan roles esenciales en el control de los workflows. Por ejemplo, la función if se puede usar para determinar si se ejecuta un trabajo, mientras que contains puede restringir la ejecución a situaciones específicas.

Por ahora, te animo a jugar con lo que has aprendido y te desafío a crear un archivo workflow llamado 'expresiones.yml' que utilice al menos tres de las expresiones que hemos discutido. Para una guía completa de todas las funciones disponibles de GitHub Actions, consulta la documentación oficial de GitHub.

Aportes 8

Preguntas 2

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad?

name: Expression
on:
	workflow_dispatch:
		inputs:
			edad:
				description: 'Edad'
				required: true
				type: integer
			nombre:
				description: 'Tu nombre'
				required: true
				default: 'Juan'
				type: string
jobs:
	mayor:
		if: ${{ inputs.edad >= 18 }}
		runs-on: ubuntu-latest
		steps:
			- name : Correr script
				run: echo ${{ inputs.nombre }} es mayor de edad
	menor:
		if: ${{ inputs.edad < 18 }}
		runs-on: ubuntu-latest
		steps:
			- name : Correr script
				run: echo ${{ inputs.nombre }} es menor de edad

```js name: Expression on: workflow_dispatch: inputs: nombre: description: 'Nombre' required: true type: string pull_request: types: [opened, synchronize, reopened] paths: - '**.py' jobs: manual: if: ${{ github.event_name == 'workflow_dispatch' }} runs-on: ubuntu_latest steps: - name: Correr manual run: echo ${{ inputs.nombre }} esta aprendiendo de workflows automatico: runs-on: ubuntu-latest steps: - name: Checkout uses: actions/checkout@v3 - name: Definir variable run: echo "USERNAME=${{ github.actor }}" >> $GITHUB_ENV - name: Correr script run: python main.py - name: Obtener salida run: echo "RESULT=$?" >> $GITHUB_ENV - name: Revisar la salida del script run: | if [[ "$RESULT" == *"iMrJulian"* ]]; then echo "Adios iMrJulian" exit 1 fi revisar_comentarios: runs-on: ubuntu-latest steps: - name: Revisar si el PR body contiene 'iMrJulian' if: ${{ contains(github.event.pull_request.body, 'iMrJulian') }} run: | echo "El cuerpo del PR contiene 'iMrJulian'." exit 1 - name: PR Body no contiene 'iMrJulian' run: echo "El cuerpo del PR no contiene 'iMrJulian'." ```jobs: revisar\_comentarios: runs-on: ubuntu-latest steps: - name: Revisar si el PR body contiene 'iMrJulian' if: ${{ contains(github.event.pull\_request.body, 'iMrJulian') }} run: | echo "El cuerpo del PR contiene 'iMrJulian'." exit 1 - name: PR Body no contiene 'iMrJulian' run: echo "El cuerpo del PR no contiene 'iMrJulian'."
Hola! tengo la siguiente duda: Tengo el siguiente workflow file, con el evento de worflow\_dispatch, pero en la interfaz de GitHub no esta reconociendo este evento por que no me da la opción de lanzarlo manualmente ni ingresar los valores de los inputs, sabe que me puede estar faltando? ![](https://static.platzi.com/media/user_upload/Screenshot%202024-06-28%20at%2015.56.58-68aa0b11-449c-4814-8abf-36a9308f8762.jpg)![](https://static.platzi.com/media/user_upload/Screenshot%202024-06-28%20at%2015.56.48-39e87257-093e-48f1-ba1d-8ee5b07d0610.jpg)
```c# name: Aprendiendo expresiones run-name: ¡Aprendiendo expresiones en github actions! on: workflow_dispatch: inputs: nombre: description: nombre de la persona default: Angel type: string required: true peso: description: peso de la persona required: true type: number altura: description: altura de la persona required: true type: number imprimir_json: description: deseas imprimir a json type: boolean default: true jobs: job-saber-si-es-alto: runs-on: ubuntu-latest name: Job para saber si es alto if: ${{ inputs.altura >= 1.80 }} steps: - name: imprimir si es alto run: echo "Eres alto ${{inputs.nombre}} mides ${{ inputs.altura }} metros" job-saber-si-pesa-mas-de-60-kilos: runs-on: ubuntu-latest name: Job para saber si pesa mas de 60 kilos if: ${{ inputs.peso > 60 }} steps: - name: imprimir peso run: echo "Pesas mas de 60 kilos" job-imprimir-json: runs-on: ubuntu-latest name: Job para imprimir a JSON if: ${{ inputs.imprimir_json }} steps: - name: Imprimir JSON run: echo "${{toJSON(inputs)}}" ```name: Aprendiendo expresionesrun-name: ¡Aprendiendo expresiones en github actions!on:  workflow\_dispatch:    inputs:      nombre:        description: nombre de la persona        default: Angel        type: string        required: true      peso:        description: peso de la persona        required: true        type: number      altura:        description: altura de la persona        required: true        type: number      imprimir\_json:        description: deseas imprimir a json        type: boolean        default: truejobs:  job-saber-si-es-alto:    runs-on: ubuntu-latest    name: Job para saber si es alto    if: ${{ inputs.altura >= 1.80 }}    steps:      - name: imprimir si es alto        run: echo "Eres alto ${{inputs.nombre}} mides ${{ inputs.altura }} metros"   job-saber-si-pesa-mas-de-60-kilos:    runs-on: ubuntu-latest    name: Job para saber si pesa mas de 60 kilos    if: ${{ inputs.peso > 60 }}    steps:      - name: imprimir peso        run: echo "Pesas mas de 60 kilos"   job-imprimir-json:    runs-on: ubuntu-latest    name: Job para imprimir a JSON    if: ${{ inputs.imprimir\_json }}    steps:      - name: Imprimir JSON        run: echo "${{toJSON(inputs)}}"
```jsx name: Aprendiendo a usar triggers en github actions on: push: branches: - main - aprendiendo-github-actions pull_request: branches: - main - aprendiendo-github-actions types: #especifica el tipo de pull request - opened - labeled paths: #especifica si se activa cuando haya cambios en ciertos archivos - "**.py" issues: types: - closed - opened - edited issue_comment: types: - created - edited - deleted jobs: nombre-job-aprendiendo-triggers: name: Ejemplo workflow para aprender triggers runs-on: ubuntu-latest steps: - name: clonar el repositorio con la action checkout uses: actions/checkout@v4 - name: Instalar Python 3.10 uses: actions/setup-python@v3 with: python-version: "3.10" - name: correr el script de python run: python main.py ```
name: Expresiones run-name: ¡Estoy aprendiendo a usar Expresiones! on: workflow\_dispatch: inputs: edad: description: 'Edad' required: true type: integer nombre: description: 'Tu nombre' required: true default: 'Juan' type: string jobs: mayor: if: ${{ inputs.edad >= 18 }} runs-on: ubuntu-latest steps: \- name: Correr script run: echo ${{ inputs.nombre }} es mayor de edad menor: if: ${{ inputs.edad < 18 }} runs-on: ubuntu-latest steps: \- name: Correr script run: echo ${{ inputs.nombre }} es menor de edad
name: Expresiones
on:
  workflow_dispatch:
    inputs:
      edad:
        description: '¿Qué edad tienes?'
        required: true
        type: integer
      nombre:
        description: ¿Cómo te llamas?
        required: true
        default: Agustina
        type: string
      nacionalidad:
        description: ¿Dónde naciste?
        required: true
        type: string
jobs:
  mayor:
    if: ${{ inputs.edad >= 18 }}
    runs-on: ubuntu-latest
    steps:
      - name: correr script
        run: echo ${{ inputs.nombre }} es mayor de edad
  menor: 
    if: ${{ inputs.edad < 18 }}
    runs-on: ubuntu-latest
    steps:
      - name: correr script
        run: echo ${{ inputs.nombre }} es menor de edad
  suscripcion_no:
    if: ${{ inputs.nacionalidad != España }}
    runs-on: ubuntu-latest
    steps: 
      - name: correr script
        run: echo ${{ inputs.nacionalidad}} no es un país apto para la suscripción.
  suscripcion_si:
    if: ${{ inputs.nacionalidad == España }}
    runs-on: ubuntu-latest
    steps: 
      - name: correr script
        run: echo ${{ inputs.nacionalidad}}  es un país apto para la suscripción.       

 

Reto 3

name: Reto 3 - Aprende a usar Expresiones
on:
  push:
    branches:
      - aprendiendo-github-actions

  workflow_dispatch:
    inputs:
      nombre:
        description: 'Nombre'
        required: true
        default: Ingresa tu nombre
        type: string
      edad:
        description: 'Edad'
        required: true
        type: number
      fruta:
        description: 'Lista de Frutas'
        default: Manzana
        required: true
        type: choice
        options:
        - Frutilla
        - Pera
        - Manzana
jobs:
    fruta-favorita:
      runs-on: ubuntu-latest
      steps:
      - name: Fruta Seleccionada
        run: |
          if ${{ inputs.fruta == 'Frutilla' }}; then
            echo ${{ inputs.nombre }} Tu fruta favorita es la Frutilla 
          elif ${{ inputs.fruta == 'Pera' }}; then
            echo ${{ inputs.nombre }} Tu fruta favorita es la Pera
          else 
            echo ${{ inputs.nombre }} Tu fruta favorita es la Manzana
          fi
    mayor:
      if: ${{ inputs.edad >= 18 }} 
      runs-on: ubuntu-latest
      steps:
        - name: Correr script
          run: echo ${{ inputs.nombre }} es mayor de edad
    menor:
      if: ${{ inputs.edad < 18 }} 
      runs-on: ubuntu-latest
      steps:
        - name: Correr script
          run: echo ${{ inputs.nombre }} es menor de edad