Ejercicio: Uso de Script de GitHub en Acciones de GitHub
En esta unidad, obtendrá más información sobre cómo puede usar script de GitHub para mejorar el flujo de trabajo.
Agregar problemas a un panel de proyecto
Además de usar octokit/rest.js para crear comentarios y abrir solicitudes de incorporación de cambios, también puede usar octokit/rest.js para administrar proyectos de GitHub. En el ejemplo de código siguiente, se crea un flujo de trabajo que se ejecuta cada vez que alguien agrega un nuevo problema al repositorio. Esto agrega el problema a un panel de proyecto, lo que facilita la evaluación de prioridades del trabajo.
name: Learning GitHub Script
on:
issues:
types: [opened]
jobs:
comment:
runs-on: ubuntu-latest
steps:
- uses: actions/github-script@0.8.0
with:
github-token: {% raw %}${{secrets.GITHUB_TOKEN}}{% endraw %}
script: |
github.issues.createComment({
issue_number: context.issue.number,
owner: context.repo.owner,
repo: context.repo.repo,
body: "🎉 You've created this issue comment using GitHub Script!!!"
})
github.projects.createCard({
column_id: {{columnID}},
content_id: context.payload.issue.id,
content_type: "Issue"
});
La primera sección de este flujo de trabajo crea un comentario cada vez que se crea un nuevo problema, que se trata en la unidad anterior. En la sección siguiente se crea una tarjeta basada en este problema y se agrega al panel del proyecto.
Separar el flujo de trabajo en pasos
Una ventaja de usar acciones es que puede separar los trabajos en unidades de trabajo más pequeñas denominadas pasos. En el flujo de trabajo de ejemplo anterior, puede separar el flujo de trabajo en dos pasos.
Una ventaja de dividir el flujo de trabajo actual en varios pasos es que permite usar expresiones para aplicar lógica. El uso de pasos le permite crear reglas sobre cuándo se permite la ejecución de los pasos y puede ayudar a optimizar la ejecución del flujo de trabajo.
Para separar el flujo de trabajo de ejemplo en pasos debe:
- Asigne un nombre a cada paso para que pueda realizar un seguimiento desde la pestaña Acciones .
- Use expresiones para determinar si un paso debe ejecutarse (opcional).
En este ejemplo, las dos tareas del archivo de flujo de trabajo original se separan en pasos individuales:
name: Learning GitHub Script
on:
issues:
types: [opened]
jobs:
comment:
runs-on: ubuntu-latest
steps:
- name: Comment on new issue
uses: actions/github-script@0.8.0
with:
github-token: {% raw %}${{secrets.GITHUB_TOKEN}}{% endraw %}
script: |
github.issues.createComment({
issue_number: context.issue.number,
owner: context.repo.owner,
repo: context.repo.repo,
body: "🎉 You've created this issue comment using GitHub Script!!!"
})
- name: Add issue to project board
if: contains(github.event.issue.labels.*.name, 'bug')
uses: actions/github-script@0.8.0
with:
github-token: {% raw %}${{secrets.GITHUB_TOKEN}}{% endraw %}
script: |
github.projects.createCard({
column_id: {{columnID}},
content_id: context.payload.issue.id,
content_type: "Issue"
});
Cada paso incluye un elemento descriptivo name que también le ayuda a realizar un seguimiento desde la pestaña Acciones .
El Add issue to project board paso también incluye una if instrucción que especifica que el problema se debe agregar al panel del proyecto solo si está etiquetado como bug.
Uso del entorno de Node.js
GitHub Script también le concede acceso a un entorno de Node.js completo. Aunque no se recomienda usar script de GitHub para escribir la lógica de acciones complejas, puede usarla para agregar más funcionalidad a la API de octo/rest.js.
Por ejemplo, puede usar Node.js para mostrar una guía de contribución cada vez que se abra un problema. Puede usar el sistema de archivos Node.js para leer un archivo y usarlo como cuerpo del comentario del problema. Para acceder a los archivos dentro del repositorio, incluya la acción actions/checkout como primer paso del flujo de trabajo.
En el ejemplo siguiente se realiza el siguiente cambio en el archivo de flujo de trabajo:
- Agrega la
action/checkoutacción para leer el archivo de respuesta con plantilla que se encuentra en.github/ISSUE_RESPONSES/comment.md - Agrega JavaScript para usar el módulo del sistema de archivos Node.js para colocar el contenido de la respuesta con plantilla como el cuerpo del comentario del problema.
name: Learning GitHub Script
on:
issues:
types: [opened]
jobs:
comment:
runs-on: ubuntu-latest
steps:
- name: Checkout repo
uses: actions/checkout@v2
- name: Comment on new issue
uses: actions/github-script@0.8.0
with:
github-token: {% raw %}${{secrets.GITHUB_TOKEN}}{% endraw %}
script: |
const fs = require('fs')
const issueBody = fs.readFileSync(".github/ISSUE_RESPONSES/comment.md", "utf8")
github.issues.createComment({
issue_number: context.issue.number,
owner: context.repo.owner,
repo: context.repo.repo,
body: issueBody
})
- name: Add issue to project board
if: contains(github.event.issue.labels.*.name, 'bug')
uses: actions/github-script@0.8.0
with:
github-token: {% raw %}${{secrets.GITHUB_TOKEN}}{% endraw %}
script: |
github.projects.createCard({
column_id: {{columnID}},
content_id: context.payload.issue.id,
content_type: "Issue"
});
El script de GitHub le ayudó a crear una respuesta completa a un nuevo problema. Esta respuesta también se basa en una plantilla del repositorio, por lo que es fácil cambiar. Por último, también ha incluido un desencadenador para agregar el problema al panel del proyecto para que pueda evaluar fácilmente la prioridad para trabajos futuros.