En este módulo aprenderás:
- Lleva tu mise.toml a GitHub Actions con jdx/mise-action@v2, GitLab CI, DevContainers y Docker multi-stage.
- Comandos y configuraciones clave para 12. CI/CD y DevContainers: Mise en Todas Partes
- Ejercicios prácticos listos para probar en tu terminal local
Habla causita: El mismo mise.toml en tu laptop, en GitHub y en producción
Mano, ¿cuántas veces has visto el clásico desastre en el equipo?:
- En tu laptop tienes Node 24.15 y pnpm 10.
- Tu compañero en su jato usa Node 22 porque le dio flojera actualizar.
- Y en GitHub Actions el pipeline corre con Node 20 y revienta en pleno deploy a las 11 PM un viernes.
¡Están renegando gratis! La verdadera magia de mise es que el mismo archivo mise.toml que usas para programar localmente se convierte en la única fuente de verdad (Single Source of Truth) para tu pipeline de CI/CD, tus DevContainers y tus imágenes de Docker.
1. GitHub Actions con jdx/mise-action@v2
Olvídate de encadenar actions/setup-node, actions/setup-python, actions/setup-go y configurar 4 caches distintos que vuelven tu workflow lentazo como desfile militar. Con la acción oficial de mise, instalas todo tu stack en un solo paso con caché inteligente de binarios:
name: CI Pipeline
on:
push:
branches: [main]
pull_request:
branches: [main]
jobs:
test:
runs-on: ubuntu-latest
steps:
- name: Checkout del repositorio
uses: actions/checkout@v4
- name: Instalar herramientas con Mise
uses: jdx/mise-action@v2
with:
# mise-action lee automáticamente el mise.toml del repo
cache: true
install: true
- name: Ejecutar pruebas y linter
run: |
mise run lint
mise run test
mise run build
Bacán: Tareas unificadas en CI
Al usar mise run <task> en tu workflow de GitHub Actions, garantizas que los mismos comandos exactos que corren los devs en local sean los que se ejecuten en la nube. ¡Cero sorpresas!
2. Integración en GitLab CI
Si en tu chamba usan GitLab CI, puedes instalar mise en la fase de preparación o usar una imagen base ligera:
default:
image: ubuntu:24.04
before_script:
- apt-get update && apt-get install -y curl git
- curl https://mise.run | sh
- export PATH="$HOME/.local/bin:$PATH"
- mise install --yes
stages:
- test
- deploy
run-checks:
stage: test
script:
- mise run lint
- mise run test
3. DevContainers con devcontainer.json
Para que cualquier nuevo programador que ingrese a tu equipo o abra el proyecto en GitHub Codespaces tenga el entorno listo en 1 minuto sin configurar nada:
{
"name": "Entorno Pro Mise",
"image": "mcr.microsoft.com/devcontainers/base:ubuntu-24.04",
"features": {
"ghcr.io/jdx/mise:latest": {
"version": "latest"
}
},
"postCreateCommand": "mise install --yes",
"customizations": {
"vscode": {
"extensions": [
"mise.mise-vscode",
"biomejs.biome"
]
}
}
}
4. Docker Multi-stage para Producción Limpia
En producción no quieres instalar compilers ni cosas pesadas. Usas mise en la etapa de builder para generar el bundle estático y luego copias solo los artefactos al contenedor final en Nginx o distroless:
# --- STAGE 1: Builder con mise ---
FROM ubuntu:24.04 AS builder
# Instalar dependencias mínimas para mise
RUN apt-get update && apt-get install -y curl git ca-certificates && rm -rf /var/lib/apt/lists/*
# Instalar mise
RUN curl https://mise.run | sh
ENV PATH="/root/.local/bin:$PATH"
WORKDIR /app
COPY mise.toml package.json pnpm-lock.yaml ./
# Instalar Node y pnpm según mise.toml
RUN mise install --yes
# Copiar código y compilar
COPY . .
RUN mise exec -- pnpm install --frozen-lockfile
RUN mise exec -- pnpm build
# --- STAGE 2: Runtime ligero ---
FROM nginx:alpine AS runner
COPY --from=builder /app/dist /usr/share/nginx/html
EXPOSE 80
CMD ["nginx", "-g", "daemon off;"]
Ojo con las versiones flotantes en CI
En tu mise.toml para producción y CI, evita usar etiquetas como node = "latest". Especifica al menos la versión menor como node = "24.15" para que tu build sea 100% determinista y no se rompa de la nada cuando salga una actualización en la madrugada.
Reto Ninja de la Lección 🥷
Demuestra que dominas CI/CD y DevContainers con mise respondiendo este test rápido:
¿Cuál es la GitHub Action oficial y optimizada para instalar herramientas y gestionar caché con mise?
Ejercicio Práctico Ninja 🥷
- Revisa tu
mise.tomly asegúrate de que todas tus herramientas tengan versiones fijadas. - Crea el directorio
.github/workflows/si no existe. - Agrega un workflow con
jdx/mise-action@v2. - Haz push a GitHub y observa cómo tu pipeline descarga y cachea el entorno completo en tiempo récord. ¡Cero renegar gratis!
¿Terminaste esta lección?
Marca tu progreso para sincronizar el avance en tu navegador.