Skip to main content

Crear una acción compuesta

En esta guía, aprenderás cómo crear una acción compuesta.

Platform navigation

Introducción

En esta guía, aprenderás acerca de los componentes básicos necesarios para crear y usar una acción compuesta empaquetada. Para centrar esta guía en los componentes necesarios para empaquetar la acción, la funcionalidad del código de la acción es mínima. La acción imprime "Hello World" y después "Goodbye", o si proporcionas un nombre personalizado, imprime "Hello [who-to-greet]" y luego "Goodbye". La acción también asigna un número aleatorio a la variable de salida random-number y ejecuta un script denominado goodbye.sh.

Una vez que completes este proyecto, deberías comprender cómo crear tu propia acción compuesta y probarla en un flujo de trabajo.

Warning

Al crear flujos de trabajo y acciones, siempre debe tener en cuenta si el código podría ejecutar una entrada de posibles atacantes que no es de confianza. 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, vea «Fortalecimiento de seguridad para GitHub Actions».

Acciones compuestas y flujos de trabajo reutilizables

Las acciones de composición permiten recopilar una serie de pasos de trabajo de flujo de trabajo en una sola acción que, a continuación, puedes ejecutar como un único paso de trabajo en varios flujos de trabajo. Los flujos de trabajo reutilizables proporcionan otra manera de evitar la duplicación, ya que permiten ejecutar un flujo de trabajo completo desde otros flujos de trabajo. Para obtener más información, vea «Evitar la duplicación».

Requisitos previos

Antes de comenzar, necesitarás crear un repositorio en GitHub.

  1. Crea un repositorio público nuevo en GitHub. Puede elegir cualquier nombre de repositorio o usar el ejemplo hello-world-composite-action siguiente. Puedes agregar estos archivos después de que tu proyecto se haya subido a GitHub. Para obtener más información, vea «Crear un repositorio nuevo».

  2. Clona tu repositorio en tu computadora. Para obtener más información, vea «Clonar un repositorio».

  3. Desde tu terminal, cambia los directorios en tu repositorio nuevo.

    Shell
    cd hello-world-composite-action
    
  4. En el repositorio hello-world-composite-action, cree un archivo denominado goodbye.sh con código de ejemplo:

    Shell
    echo "echo Goodbye" > goodbye.sh
    
  5. Desde el terminal, convierta goodbye.sh en ejecutable.

    Shell
    chmod +x goodbye.sh
    
Shell
chmod +x goodbye.sh
Shell
git add --chmod=+x -- goodbye.sh
  1. Desde el terminal, registre el archivo goodbye.sh.

    Shell
    git add goodbye.sh
    git commit -m "Add goodbye script"
    git push
    
Shell
git add goodbye.sh
git commit -m "Add goodbye script"
git push
Shell
git commit -m "Add goodbye script"
git push

Crear un archivo de metadatos de una acción

  1. En el repositorio hello-world-composite-action, cree un archivo denominado action.yml y agregue el código de ejemplo siguiente. Para más información sobre la sintaxis, consulta "Sintaxis de metadatos para Acciones de GitHub".

    YAML
    name: 'Hello World'
    description: 'Greet someone'
    inputs:
      who-to-greet:  # id of input
        description: 'Who to greet'
        required: true
        default: 'World'
    outputs:
      random-number:
        description: "Random number"
        value: ${{ steps.random-number-generator.outputs.random-number }}
    runs:
      using: "composite"
      steps:
        - name: Set Greeting
          run: echo "Hello $INPUT_WHO_TO_GREET."
          shell: bash
          env:
            INPUT_WHO_TO_GREET: ${{ inputs.who-to-greet }}
    
        - name: Random Number Generator
          id: random-number-generator
          run: echo "random-number=$(echo $RANDOM)" >> $GITHUB_OUTPUT
          shell: bash
    
        - name: Set GitHub Path
          run: echo "$GITHUB_ACTION_PATH" >> $GITHUB_PATH
          shell: bash
          env:
            GITHUB_ACTION_PATH: ${{ github.action_path }}
    
        - name: Run goodbye.sh
          run: goodbye.sh
          shell: bash
    
    

    Este archivo define la entrada who-to-greet, asigna el número generado aleatoriamente a la variable de salida random-number, agrega la ruta de acceso de la acción a la ruta del sistema del ejecutor (para buscar el script goodbye.sh durante la ejecución) y ejecuta el script goodbye.sh.

    Para más información sobre la administración de las salidas, consulta "Sintaxis de metadatos para Acciones de GitHub".

    Para más información sobre cómo usar github.action_path, consulta "Acceso a información contextual sobre ejecuciones de flujo de trabajo".

  2. Desde el terminal, registre el archivo action.yml.

    Shell
    git add action.yml
    git commit -m "Add action"
    git push
    
  3. Desde tu terminal, agrega una etiqueta. En este ejemplo se usa una etiqueta denominada v1. Para obtener más información, vea «Acercad e las acciones personalizadas».

    Shell
    git tag -a -m "Description of this release" v1
    git push --follow-tags
    

Probar tu acción en un flujo de trabajo

En el siguiente código de flujo de trabajo se usa la acción "Hola mundo" completada que has creado en "Crear una acción compuesta".

Copie el código de flujo de trabajo en un archivo .github/workflows/main.yml de otro repositorio, pero reemplace actions y SHA por el propietario del repositorio y el SHA de la confirmación que quiere usar, respectivamente. También puede reemplazar la entrada who-to-greet por su nombre.

YAML
on: [push]

jobs:
  hello_world_job:
    runs-on: ubuntu-latest
    name: A job to say hello
    steps:
      - uses: actions/checkout@v4
      - id: foo
        uses: OWNER/hello-world-composite-action@SHA
        with:
          who-to-greet: 'Mona the Octocat'
      - run: echo random-number "$RANDOM_NUMBER"
        shell: bash
        env:
          RANDOM_NUMBER: ${{ steps.foo.outputs.random-number }}

En el repositorio, haga clic en la pestaña Actions y seleccione la última ejecución de flujo de trabajo. La salida deberá incluir "Hello Mona the Octocat", el resultado del script de "Goodbye" y un número aleatorio.

Acciones compuestas de ejemplo en GitHub

Puedes encontrar muchos ejemplos de acciones compuestas en GitHub.