Skip to main content

Uso de scripts para probar el código en un ejecutor

Procedimientos para usar características fundamentales de GitHub Actions para la integración continua (CI).

Información general de ejemplo

En este artículo se usa un flujo de trabajo de ejemplo para mostrar algunas de las principales características de CI de GitHub Actions. Cuando se desencadena este flujo de trabajo, ejecuta automáticamente un script que comprueba si el sitio de documentación de GitHub tiene vínculos rotos.

En el diagrama siguiente se muestra una vista general de los pasos del flujo de trabajo y de cómo se ejecutan en el trabajo:

Diagrama general de los pasos del flujo de trabajo

Características que se usan en este ejemplo

El flujo de trabajo de ejemplo muestra las funcionalidades siguientes de GitHub Actions:

CaracterísticaImplementación
Desencadenamiento de un flujo de trabajo para que se ejecute automáticamente:push

Flujo de trabajo de ejemplo

El flujo de trabajo siguiente lo creó el equipo de ingeniería de documentos de GitHub. Para revisar la versión más reciente de este archivo en el repositorio github/docs, consulta link-check-all.yml.

Nota: cada línea de este flujo de trabajo se explica en la sección siguiente en "Descripción del ejemplo".

YAML
name: 'Link Checker: All English'

# **What it does**: Renders the content of every page and check all internal links.
# **Why we have it**: To make sure all links connect correctly.
# **Who does it impact**: Docs content.

on:
  workflow_dispatch:
  push:
    branches:
      - main
  pull_request:

permissions:
  contents: read
  # Needed for the 'trilom/file-changes-action' action
  pull-requests: read

# This allows a subsequently queued workflow run to interrupt previous runs
concurrency:
  group: '${{ github.workflow }} @ ${{ github.event.pull_request.head.label || github.head_ref || github.ref }}'
  cancel-in-progress: true

jobs:
  check-links:
    runs-on: ${{ fromJSON('["ubuntu-latest", "self-hosted"]')[github.repository == 'github/docs-internal'] }}
    steps:
      - name: Checkout
        uses: actions/checkout@v2

      - name: Setup node
        uses: actions/setup-node@v2
        with:
          node-version: 16.13.x
          cache: npm

      - name: Install
        run: npm ci

      # Creates file "$/files.json", among others
      - name: Gather files changed
        uses: trilom/file-changes-action@a6ca26c14274c33b15e6499323aac178af06ad4b
        with:
          fileOutput: 'json'

      # For verification
      - name: Show files changed
        run: cat $HOME/files.json

      - name: Link check (warnings, changed files)
        run: |
          ./script/rendered-content-link-checker.mjs \
            --language en \
            --max 100 \
            --check-anchors \
            --check-images \
            --verbose \
            --list $HOME/files.json

      - name: Link check (critical, all files)
        run: |
          ./script/rendered-content-link-checker.mjs \
            --language en \
            --exit \
            --verbose \
            --check-images \
            --level critical

Descripción del ejemplo

En la tabla siguiente se explica cómo se usa cada una de estas características al crear un flujo de trabajo de GitHub Actions.

Código Explicación
YAML
name: 'Link Checker: All English'

El nombre del flujo de trabajo tal como aparecerá en la pestaña "Acciones" del repositorio GitHub.

YAML
on:

La palabra clave on te permite definir los eventos que se desencadenan cuando se ejecuta el flujo de trabajo. Aquí puedes definir varios eventos. Para obtener más información, consulta "Desencadenamiento de un flujo de trabajo".

YAML
  workflow_dispatch:

Agrega el evento workflow_dispatch si quieres poder ejecutar manualmente este flujo de trabajo desde la interfaz de usuario. Para más información, vea workflow_dispatch.

YAML
  push:
    branches:
      - main

Agrega el evento push para que el flujo de trabajo se ejecute automáticamente cada vez que se inserta una confirmación en una rama llamada main. Para más información, vea push.

YAML
  pull_request:

Agrega el evento pull_request para que el flujo de trabajo se ejecute automáticamente cada vez que se crea o actualiza una solicitud de incorporación de cambios. Para más información, vea pull_request.

YAML
permissions:
  contents: read
  pull-requests: read

Modifica los permisos predeterminados concedidos a GITHUB_TOKEN. Esto variará en función de las necesidades del flujo de trabajo. Para obtener más información, consulta "Asignación de permisos a trabajos".

YAML
concurrency:
  group: '${{ github.workflow }} @ ${{ github.event.pull_request.head.label || github.head_ref || github.ref }}'

Crea un grupo de simultaneidad para eventos específicos y utiliza el operador || para definir los valores de reserva. Para más información, consulta "Uso de simultaneidad".

YAML
  cancel-in-progress: true

Cancela cualquier flujo de trabajo o trabajo actualmente en ejecución en el mismo grupo de simultaneidad.

YAML
jobs:

Agrupa todos los trabajos que se ejecutan en el archivo de flujo de trabajo.

YAML
  check-links:

Define un trabajo con el id. check-links que se almacena dentro de la clave jobs.

YAML
    runs-on: ${{ fromJSON('["ubuntu-latest", "self-hosted"]')[github.repository == 'github/docs-internal'] }}

Configura el trabajo para que se ejecute en un ejecutor hospedado de GitHub o en un ejecutor autohospedado, en función del repositorio que ejecuta el flujo de trabajo. En este ejemplo, el trabajo se ejecutará en un ejecutor autohospedado si el repositorio tiene el nombre docs-internal y está dentro de la organización github. Si el repositorio no coincide con esta ruta de acceso, se ejecutará en un ejecutor ubuntu-latest hospedado en GitHub. Para obtener más información sobre estas opciones, consulta "Elección del ejecutor para un trabajo".

YAML
    steps:

Agrupa todos los pasos que se ejecutarán como parte del trabajo check-links. Cada trabajo de un flujo de trabajo tiene su propia sección steps.

YAML
      - name: Checkout
        uses: actions/checkout@v2

La palabra clave uses indica al trabajo que recupere la acción denominada actions/checkout. Esta es una acción que revisa tu repositorio y lo descarga al ejecutor, lo que te permite ejecutar acciones contra tu código (tales como las herramientas de prueba). Debes utilizar la acción de verificación cada que tu flujo de trabajo se ejecute contra el código del repositorio o cada que estés utilizando una acción definida en el repositorio.

YAML
      - name: Setup node
        uses: actions/setup-node@v2
        with:
          node-version: 16.13.x
          cache: npm

En este paso, se usa la acción actions/setup-node para instalar la versión especificada del paquete de software Node.js en el ejecutor, lo que te da acceso al comando npm.

YAML
      - name: Install
        run: npm ci

La palabra clave run indica al trabajo que ejecute un comando en el ejecutor. En este caso, npm ci se usa para instalar los paquetes de software npm del proyecto.

YAML
      - name: Gather files changed
        uses: trilom/file-changes-action@a6ca26c14274c33b15e6499323aac178af06ad4b
        with:
          fileOutput: 'json'

Usa la acción trilom/file-changes-action para recopilar todos los archivos modificados. Este ejemplo se ancla a una versión específica de la acción mediante el SHA a6ca26c14274c33b15e6499323aac178af06ad4b.

YAML
      - name: Show files changed
        run: cat $HOME/files.json

Muestra una lista del contenido de files.json. Esto será visible en el registro de la ejecución del flujo de trabajo y puede ser útil para la depuración.

YAML
      - name: Link check (warnings, changed files)
        run: |
          ./script/rendered-content-link-checker.mjs \
            --language en \
            --max 100 \
            --check-anchors \
            --check-images \
            --verbose \
            --list $HOME/files.json

En este paso se usa el comando run para ejecutar un script almacenado en el repositorio en script/rendered-content-link-checker.mjs y se pasan todos los parámetros que necesita ejecutar.

YAML
      - name: Link check (critical, all files)
        run: |
          ./script/rendered-content-link-checker.mjs \
            --language en \
            --exit \
            --verbose \
            --check-images \
            --level critical

En este paso también se usa el comando run para ejecutar un script almacenado en el repositorio en script/rendered-content-link-checker.mjs y se pasa un conjunto de parámetros distinto.

Pasos siguientes