Semantische Versionierung nach Ruby 2.1.0

Wir haben uns entschieden, ab Ruby 2.1.0 zu einer semantischen Versionierung zu wechseln.

Um ein besser organisiertes und ordentlich nutzbares Versionierungsschema für Ruby zur Verfügung zu stellen, haben wir uns dafür entschieden, die folgenden Richtlinien umzusetzen.

Richtlinienänderungen

Die Richtlinie basiert auf einem Vorschlag des Administrators von ruby-lang.org, Hiroshi Shibata (@hsbt).

Versionierungsschema

  • MAJOR: Wird erhöht, wenn es inkompatible Änderungen gibt, die nicht per MINOR veröffentlicht werden können.
    • Für besondere Ereignisse reserviert.
  • MINOR: Wird jedes Jahr an Weihnachten erhöht, kann API-kompatibel sein.
  • TEENY: Sicherheits- oder Bugfix, der API-Kompatibilität gewährleistet.
    • Kann größer als 10 werden (z.B. 2.1.11) und wird etwa alle 2-3 Monate erhöht.
  • PATCH: Anzahl der Commits seit dem letzten MINOR-Release (wird auf 0 zurückgesetzt, wenn MINOR erhöht wird).

Branching-Schema

Wir werden die folgenden Zweige unterstützen:

  • trunk
  • ruby_{MAJOR}_{MINOR}

Der Zweig ruby_{MAJOR}_{MINOR} wird für TEENY-Veröffentlichungen laufend aktualisiert. Wir werden jedes Release mit Tags versehen.

API-Kompatibilität

Die folgenden Dinge können als inkompatible Änderung markiert werden und somit eine Erhöhung der MINOR-Version erforderlich machen:

  • Entfernen von API-Features auf C-Ebene
  • Nicht rückwärtskompatible Änderungen und Erweiterungen

ABI-Kompatibilität

Das ABI wird dem folgenden Schema folgen: {MAJOR}.{MINOR}.0

Wir bemühen und so gut wie möglich (best effort), die ABI-Kompatibilität innerhalb derselben MINOR-Veröffentlichungsreihe aufrecht zu erhalten, daher wird TEENY auf 0 festgehalten.

Referenzen

Sie können die folgenden Beiträge lesen, um mehr über diesen Vorschlag zu erfahren:

Vielen Dank!

Ich möchte mich an dieser Stelle persönlich bei jedem bedanken, der zu dieser Diskussion beigetragen hat. Jeder Schritt, den wir unternehmen, ist einer hin zu einem stabileren und effektiveren Ruby.