Una colección de workflows reutilizables de GitHub Actions para automatizar procesos CI/CD, análisis de código, construcción de imágenes Docker y gestión de releases.
Este repositorio contiene workflows diseñados para ser reutilizados en otros proyectos a través de workflow_call. Incluye soluciones para:
- ✅ Integración continua (CI) para Go y Node.js
- 🐳 Construcción de imágenes Docker
- 📊 Análisis de lenguajes de código
- 🏷️ Validación de etiquetas en PRs
- 📝 Generación automática de CHANGELOG
- 🚀 Gestión automatizada de releases
Workflow reusable para proyectos Go que ejecuta tests, análisis estático y construcción.
go-version(string, optional): Versión de Go a usar. Default:"1.21"
- Configuración de Go con caché
- Descarga de dependencias (
go mod download) - Análisis estático (
go vet) - Ejecución de tests con cobertura (
go test) - Construcción del proyecto (
go build)
name: My Go Project CI
on:
pull_request:
branches: [main]
jobs:
ci:
uses: slice-soft/ss-pipeline/.github/workflows/ci-go.yml@v0
with:
go-version: "1.21"Workflow reusable para librerías y proyectos Node.js.
node-version(string, optional): Versión de Node.js a usar. Default:"22"
- Configuración de Node.js
- Caché inteligente de
node_modules - Instalación de dependencias
- Ejecución de tests
- Linting (si está configurado)
- Construcción (si está configurada)
name: My Node.js Library CI
on:
pull_request:
branches: [main]
jobs:
ci:
uses: slice-soft/ss-pipeline/.github/workflows/ci-node.yml@v0
with:
node-version: "22"Workflow reusable que valida que los PRs tengan etiquetas semánticas de versionado (patch, minor, major).
- Al menos una de las siguientes etiquetas debe estar presente:
patch,minor,major
- Verifica la presencia de etiquetas semver
- Falla si ninguna etiqueta está presente
- Proporciona un mensaje claro del error
name: Validate PR
on:
pull_request:
types: [opened, labeled, unlabeled, synchronize]
branches: [main]
jobs:
validate:
uses: slice-soft/ss-pipeline/.github/workflows/validate-pr.yml@v0Workflow reusable que utiliza GitHub Linguist para analizar los lenguajes presentes en el repositorio.
workdir(string, optional): Directorio de trabajo. Default:"."
- Configuración de Ruby
- Instalación de GitHub Linguist gem
- Análisis de lenguajes del repositorio
- Generación de reporte
- Subida de artefacto
name: Analyze Repository
on:
push:
branches: [main]
jobs:
analyze:
uses: slice-soft/ss-pipeline/.github/workflows/analyze-code.yml@v0
with:
workdir: "."Workflow reusable que genera automáticamente un CHANGELOG, crea un tag de versión y publica un release en GitHub.
- Genera CHANGELOG según Conventional Commits
- Crea automáticamente tags de versión semántica (semver)
- Crea un release en GitHub con el CHANGELOG
- Actualiza el tag major para facilitar referencias
- Genera CHANGELOG y versión usando Conventional Commits
- Extrae la versión major del tag
- Crea un release en GitHub
- Actualiza el tag de versión major
name: Release Pipeline
on:
push:
branches: [main]
permissions:
contents: write
jobs:
release:
uses: slice-soft/ss-pipeline/.github/workflows/create-release.yml@v0Workflow reusable para construir y publicar imágenes Docker en GitHub Container Registry.
workdir(string, required): Directorio de trabajodockerfile(string, required): Ruta del Dockerfileimage_name(string, required): Nombre de la imagen Dockerversion(string, required): Tag de versión para la imagen
SSH_PRIVATE_KEY(required): Clave privada SSH para acceso a repositorios privados
- Análisis de código con Linguist
- Construcción con Docker BuildKit habilitado
- Push a GitHub Container Registry
- Firma de imágenes con Cosign
name: Build Docker Image
on:
push:
tags:
- 'v*'
jobs:
build:
uses: slice-soft/ss-pipeline/.github/workflows/build-docker.yml@v0
with:
workdir: "."
dockerfile: "Dockerfile"
image_name: "my-app"
version: "1.0.0"
secrets:
SSH_PRIVATE_KEY: ${{ secrets.SSH_PRIVATE_KEY }}Crea un archivo en .github/workflows/ en tu repositorio:
name: CI Pipeline
on:
pull_request:
branches: [main]
push:
branches: [main]
jobs:
validate:
uses: slice-soft/ss-pipeline/.github/workflows/validate-pr.yml@v0
test-go:
uses: slice-soft/ss-pipeline/.github/workflows/ci-go.yml@v0
with:
go-version: "1.21"Asegúrate de que tu repositorio tiene los permisos necesarios en Settings > Actions > General:
- ✅ Actions permissions: "Allow all actions and reusable workflows"
- ✅ Workflow permissions: "Read and write permissions"
Para workflows que requieren secretos (como build-docker.yml), agrega los secretos en:
Settings > Secrets and variables > Actions
- El proyecto debe tener un archivo
go.mod - Tests en formato estándar de Go
- El proyecto debe tener
package.json package-lock.jsonpara reproducibilidad
- Commits que sigan Conventional Commits
- Permisos de escritura en el repositorio
- Dockerfile presente en la ruta especificada
- GitHub Container Registry configurado
Se usa para acceso a repositorios privados durante la construcción:
# Generar una clave SSH (si no tienes ya una)
ssh-keygen -t ed25519 -f gh-action-key -N ""
# Agregar a SSH_PRIVATE_KEY secret en GitHub
cat gh-action-key | base64Para que el workflow create-release.yml funcione correctamente, sigue las convenciones de commits:
feat: Nueva característica (MINOR)
fix: Corrección de bug (PATCH)
perf: Mejora de rendimiento (PATCH)
docs: Cambios de documentación
refactor: Refactorización sin cambio de funcionalidad
test: Agregación o modificación de tests
chore: Cambios en herramientas, configuración, etc.
Ejemplo:
feat(auth): agregar autenticación de dos factores
BREAKING CHANGE: La API de login ha cambiado
El workflow validate-pr.yml requiere una de las siguientes etiquetas en cada PR:
| Etiqueta | Significado | Versión |
|---|---|---|
patch |
Correcciones de bugs | 1.0.x |
minor |
Nuevas características | 1.x.0 |
major |
Cambios incompatibles | x.0.0 |
- Verifica que los commits sigan Conventional Commits
- Asegúrate de que no hay tags previos en el repositorio
- Verifica que la clave SSH está correctamente codificada en base64
- Asegúrate de que el host está agregado a
known_hosts
- Verifica que
package-lock.json(Node.js) ogo.sum(Go) estén versionados - El hash del archivo debe ser determinístico
Este proyecto es de código abierto y está disponible para uso en otros proyectos.
Para contribuir mejoras a estos workflows, por favor:
- Crea un branch con tu cambio
- Asegúrate de etiquetar tu PR correctamente
- Los cambios serán validados antes de ser mergeados
Última actualización: 25 de febrero de 2026