Versionamiento
La notación para versionamiento se ocupa en tres lugares: (1) Descriptor del Projecto (ej. package.json, pom.xml), (2) Tag del commit que se está liberando (ej. tag en commit the rama master), (3) Build del código fuente (ej. .jar, .dll, etc)
El estándar para versionamiento, está basado en Semantic 2.0
Lineamientos para versionamiento
-
Un número normal de versión DEBE tomar la forma
X.Y.ZdondeX,Y, yZson enteros no negativos.Xes la versión “major”,Yes la versión “minor”, yZes la versión “patch”. Cada elemento DEBE incrementarse numéricamente en incrementos de 1. Por ejemplo:1.9.0->1.10.0->1.11.0 -
Una vez que un paquete versionado ha sido liberado (release), los contenidos de esa versión NO DEBEN ser modificadas. Cualquier modificación DEBE ser liberada como una nueva versión
-
La versión
majoren cero(0.y.z)es para desarrollo inicial. Cualquier cosa puede cambiar en cualquier momento. El API pública no debiera ser considerada estable -
La versión
1.0.0define el API pública. La forma en que el número de versión es incrementado después de este release depende de esta API pública y de cómo esta cambia -
La versión
patchZ(x.y.Z | x > 0)DEBE incrementarse cuando se introducen solo arreglos compatibles con la versión anterior. Un arreglo de bug se define como un cambio interno que corrige un comportamiento erróneo -
La versión
minorY(x.Y.z | x > 0)DEBE ser incrementada si se introduce nueva funcionalidad compatible con la versión anterior. Se DEBE incrementar si cualquier funcionalidad de la API es marcada como deprecada. PUEDE ser incrementada si se agrega funcionalidad o arreglos considerables al código privado. Puede incluir cambios de nivelpatch. La versiónpatchDEBE ser reseteada a 0 cuando la versiónminores incrementada -
La versión
majorX(X.y.z | X > 0)DEBE ser incrementada si cualquier cambio no compatible con la versión anterior es introducida a la API pública. PUEDE incluir cambios de nivelminory/opatch. Las versionespatchyminorDEBEN ser reseteadas a 0 cuando se incrementa la versiónmajor -
Una versión
pre-releasePUEDE ser representada por adjuntar un guión y una serie de identificadores separados por puntos inmediatamente después de la versiónpatch. Los identificadores DEBEN consistir solo de caracteres ASCII alfanuméricos y el guión[0-9A-Za-z-]. Las versionespre-releasesatisfacen pero tienen una menor precedencia que la versión normal asociada.Ejemplos:1.0.0-alpha,1.0.0-alpha.1,1.0.0-0.3.7,1.0.0-x.7.z.92 -
Los
meta-datosdelbuildPUEDE ser representada adjuntando un signo más y una serie de identificadores separados por puntos inmediatamente después de la versiónpatcho lapre-release. Los identificadores DEBEN consistir sólo de caracteres ASCII alfanuméricos y el guión[0-9A-Za-z-]. Losmeta-datosdelbuildDEBIERAN ser ignorados cuando se intenta determinar precedencia de versiones. Luego, dos paquetes con la misma versión pero distinta metadata de build se consideran la misma versión. Ejemplos:1.0.0-alpha+001,1.0.0+20130313144700,1.0.0-beta+exp.sha.5114f85 -
La precedencia se refiere a como son comparadas dos versiones una con la otra cuando son ordeandas. La precedencia DEBE ser calculada separando la versión en major, minor, patch e identificadores
pre-releaseen ese orden (Lameta-datadelbuildno figura en la precedencia). Las versionesmajor,minor, ypatchson siempre comparadas numéricamente. La precedencia depre-releaseDEBE ser determinada comparando cada identificador separado por puntos de la siguiente manera: los identificadores que solo consisten de números son comparados numéricamente y los identificadores con letras o guiones son comparados de acuerdo al orden establecido por ASCII. Los identificadores numéricos siempre tienen una precedencia menor que los no-numéricos. Ejemplo:1.0.0-alpha<1.0.0-alpha.1<1.0.0-beta.2<1.0.0-beta.11<1.0.0-rc.1<1.0.0
