Más allá del ciclo CI/CD podemos automatizar diferentes actividades a nivel de repositorio. A continuación veremos algunas de ellas.

Cerrar Issues y PRs sin actividad

Si tenemos un proyecto robusto sobre el que se abren y cierran Issues debemos llevar de alguna manera monitoreo sobre qué conversaciones están vigentes y cuáles no, para esto crearemos un Workflow que correrá todos los días y verificará el estado del Issue/PR.

El trigger de este Workflow será tipo Schedule y correrá todos los días a las 1:30AM en horario UTC, la única tarea que llevará a cabo será sin-actividad, que mediante el Action stale revisará todos los hilos abiertos y manejará 2 estados: el primero verificará si el Issue o PR llevan más de 60 días inactivos, si es así, se marcará un temporizador de 7 días para reactivarlo y se aplicará la etiqueta sin-actividad.

name: 'Cerrar Issues y PRs sin actividad'
on:
  schedule:
    - cron: '30 1 * * *'

jobs:
  sin-actividad:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/stale@v7
        with:
          stale-issue-message: 'Este Issue no tiene actividad desde hace más de 60 días, si no tiene actividad en los próximos 7 días, se eliminará'
          stale-pr-message: 'Este Pull Request no tiene actividad desde hace más de 60 días, si no tiene actividad en los próximos 7 días, se eliminará'
          stale-issue-label: 'sin-actividad'
          stale-pr-label: 'sin-actividad'

SonarCloud para revisar código estático

SonarCloud es una herramienta que realiza análisis estático a nuestro código, es decir, revisa el source sin compilarlo ni buildearlo para buscar vulnerabilidades a nivel superficial.

Este Workflow se correrá bajo push en la rama main y bajo PR en las etiquetas opened, syncronize (push a una rama que tiene un PR abierto) y reopened, lo que hará será un checkout y realizar un scan de SonarCloud, para esto usaremos el respectivo Action con nuestro Github Token y Sonar Token.

name: SonarCloud
run-name: SonarCloud
on:
  push:
    branches:
      - main
  pull_request:
    types: [opened, synchronize, reopened]
jobs:
  sonarcloud:
    name: SonarCloud
    runs-on: ubuntu-latest
    steps:
      - name: "Checkout repositorio"
        uses: actions/checkout@24cb9080177205b6e8c946b17badbe402adc938f #v3: v3.4.0
        with:
          fetch-depth: 0  
      - name: SonarCloud Scan
        uses: SonarSource/sonarcloud-github-action@master
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}  
          SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }}

Lint Formatter