Saltar al contenido principal
Si vas a mantener un paquete Laravel durante mucho tiempo, prepara desde el principio el historial de cambios y el procedimiento de release. Sistematizar la gestión de releases evita olvidos al anunciar cambios rompedores y que la tarea dependa de una única persona.
Esta página es hermana de Desarrollo de paquetes Laravel. Para la estrategia de compatibilidad con Laravel/PHP, consulta Gestión de la compatibilidad de versiones de paquetes.

Cómo escribir el CHANGELOG.md

El CHANGELOG es la fuente primaria donde los usuarios consultan «qué cambió, cuándo y en qué versión». Adoptar el formato de Keep a Changelog unifica la estructura de categorías dentro del equipo.

Reglas básicas

  • Titula cada versión con el formato ## [x.y.z] - YYYY-MM-DD.
  • Usa Added / Changed / Deprecated / Removed / Fixed / Security.
  • Coloca enlaces de comparación al final para poder seguir las diferencias.
  • Acumula los cambios aún no publicados en ## [Unreleased].
# CHANGELOG

All notable changes to this project will be documented in this file.

The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).

## [Unreleased]

### Added
- Add `Package::warmCache()` for preloading metadata.

## [2.1.0] - 2026-05-10

### Added
- Add Laravel 13 support.

### Changed
- Improve default cache key generation for tagged cache stores.

### Deprecated
- Deprecate `Package::legacyHandle()` and schedule removal in v3.0.

### Fixed
- Fix null handling in `Package::resolveTenant()`.

## [2.0.0] - 2026-03-01

### Removed
- Drop Laravel 11 support.

### Security
- Harden signed URL validation against malformed host headers.

[Unreleased]: https://github.com/vendor/package/compare/v2.1.0...HEAD
[2.1.0]: https://github.com/vendor/package/compare/v2.0.0...v2.1.0
[2.0.0]: https://github.com/vendor/package/releases/tag/v2.0.0
Usa como notas de la release el fragmento correspondiente del CHANGELOG. Con una única fuente de verdad para el historial evitas divergencias entre README, GitHub Releases y anuncios en redes sociales.

Versionado semántico (SemVer)

En Semantic Versioning, MAJOR.MINOR.PATCH se usa con estos criterios:
  • MAJOR: cambios que rompen la compatibilidad hacia atrás (Breaking changes).
  • MINOR: adiciones de funcionalidad manteniendo la compatibilidad hacia atrás.
  • PATCH: correcciones de bugs manteniendo la compatibilidad hacia atrás.

Ejemplos de decisión en un paquete Laravel

La compatibilidad con Laravel 13 se trata de forma distinta según el cambio.
CambioVersión recomendada
Mantener el soporte a Laravel 12 y añadir ^13.0.MINOR
Retirar soporte a Laravel 11/12 y quedarte solo con ^13.0.MAJOR
Corrección de bug que solo ocurre en Laravel 13.PATCH
Consulta siempre la guía de actualización para conocer los cambios de Laravel. La situación de las releases más recientes puede consultarse en laravel/framework releases. Si algún cambio rompe una API que utiliza tu paquete, replantea tu política de compatibilidad.
Subir el requisito mínimo de PHP o eliminar una API pública también es un Breaking change desde el punto de vista del usuario. Aunque coincida con la migración a una nueva Laravel major, trátalo como un release MAJOR.

Tags de Git y GitHub Releases

Primero crea el tag de Git y hazle push a origin.
git tag v2.1.0
git push origin v2.1.0
Después, en la pantalla de creación de Release de GitHub selecciona el tag v2.1.0 y publícalo. Pega en el cuerpo la sección ## [2.1.0] del CHANGELOG.
1

Mergea a main el commit objetivo del release

Con todos los tests en verde, mergea en main.
2

Crea y publica el tag de Git

Crea un tag con el formato vX.Y.Z y hazle push a origin.
3

Publica el GitHub Release

Título: el nombre del tag; cuerpo: la sección correspondiente del CHANGELOG.

Releases automatizados con GitHub Actions

Si usas push: tags: como disparador, la creación de un tag publica automáticamente el GitHub Release. Con softprops/action-gh-release puedes reutilizar directamente el contenido de CHANGELOG.md como cuerpo.
name: release

on:
  push:
    tags:
      - "v*.*.*"

permissions:
  contents: write

jobs:
  test:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: shivammathur/setup-php@v2
        with:
          php-version: "8.3"
      - run: composer install --no-interaction --prefer-dist
      - run: vendor/bin/pest

  release:
    needs: test
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - name: Publish GitHub Release
        uses: softprops/action-gh-release@v2
        with:
          generate_release_notes: true
Con needs: test en el job release, si los tests fallan, la publicación se detiene. Mantén siempre esa protección, tanto para releases manuales como automáticos.

Cómo gestionar los Breaking changes

Diseña los Breaking changes para permitir una migración por fases. Marca primero como deprecado y elimina en el siguiente MAJOR: reducirás el coste de migración de tus usuarios.

1. Señala la deprecación en el código

<?php

namespace Vendor\Package;

class Client
{
    /**
     * @deprecated Use handle() instead. Will be removed in v3.0.
     */
    public function legacyHandle(array $payload): array
    {
        trigger_error(
            'Client::legacyHandle() is deprecated. Use Client::handle().',
            E_USER_DEPRECATED
        );

        return $this->handle($payload);
    }

    public function handle(array $payload): array
    {
        return $payload;
    }
}

2. Documenta la guía de migración

En UPGRADE.md o en una página dedicada, describe paso a paso los cambios que esperas que hagan tus usuarios.
## Upgrading from v2 to v3

- Replace `legacyHandle()` with `handle()`.
- Update PHP to 8.3+.
- Update Laravel constraint to `^13.0`.

3. Deja notas de migración entre versiones MAJOR

Al subir de MAJOR, enlaza mutuamente la sección Removed del CHANGELOG con la guía de migración. Así, los usuarios pueden ver de un vistazo «qué se eliminó» y «cómo arreglarlo».

Páginas relacionadas

Desarrollo de paquetes Laravel

Repasa los fundamentos de implementación centrados en los service providers.

Gestión de la compatibilidad de versiones de paquetes

Organiza los criterios de compatibilidad Laravel/PHP y el uso de SemVer.

Probar paquetes Laravel con Orchestra Testbench

Revisa la estrategia y la implementación de pruebas necesarias antes del release.
Última modificación el 13 de julio de 2026