Skip to content
msinn edited this page May 11, 2019 · 9 revisions

SmartHomeNG Kern

Der SmartHomeNG Kern verwendet für die Versionsnummern das Schema "x.y.z". Wobei x für die major-Version und y für die minor Version stehen. z wird nur für Patches des Kerns verwendet die nach dem Release einer Version notwendig sind.

Die Änderung der major-Version bedeutet signifikante Änderungen am Programmcode. Zum Beispiel wenn sich die Kompatibilität zur Vorversion nicht erhalten ließ. Die major-Version kann aber auch aus Marketinggründen erhöht werden, wenn die Anzahl der Erweiterungen groß genug ist um dieses zu rechfertigen.

Die minor-Version bedeutet eine Erweiterung des SmartHomeNG (neue Plugins, neue Funktionen).

Die Patch-Versionen werden nur bei Bugfixes nach einem Release verwendet. (siehe Releasemanagement)

Versionsnummern in Plugins

Innerhalb der Plugins wird das gleiche Schema für die Versionsnummern verwendet wie im Kern("x.y.z").

Der in der Vergangenheit genutzte Zusammenhang, dass X und Y der Version von SmartHomeNG entsprechen ist nicht mehr notwendig. Dieser Zusammenhang wird über zwei Angaben in den Metadaten (plugin.yaml) hergestellt.

Neben der Versionsnummer, können in den Metadaten die minimale und die maximale SmartHomeNG Core Version angegeben werden, zu denen das Plugin kompatibel ist:

plugin:
    version: 1.5.6                 # Plugin version
    sh_minversion: 1.5             # minimum shNG version to use this plugin
#   sh_maxversion:                 # maximum shNG version to use this plugin (leave empty if latest)

Damit die Versionsnummer aus dem Source Code auslesbar ist, muss diese in einer Variable PLUGIN_VERSION der Klasse gespeichert werden:

from lib.model.smartplugin import SmartPlugin

class MyPlugin(SmartPlugin):
   PLUGIN_VERSION="1.1.22"

Diese Versionsnummer wird beim laden des Plugins automatisch ausgelesen und gegen die Versionsangabe in den Metadaten geprüft.

Versionen für Releases

Versionen entsprechen grundsätzlich der Versionsnummer des Kerns (..). Das gilt auch für Releaeses des Plugin-Repositories.

Wenn ein reines Release für das Plugin Repository erfolgt, erhält es die selbe Major- und Minor-Version wie das aktuelle Core-Release. Als Patch-Version wird die nächst höhere (bisher nicht vergebene) Patch-Nummer verwendet. Falls später ein Patch-Release des Core erfolgen soll, erhält es die nächst höhere bisher nicht vergebene Patch-Nummer.

Beispiel:

Release:

  • Core: 1.6
  • Plugins: 1.6

Core Patch-Release:

  • Core: 1.6.1
  • Plugins: Bleiben bei 1.6, es sei denn, es erfolgt auch ein Release mit Veränderungen bei Plugins, dann 1.6.1

Plugin-Release:

  • Core: Bleibt unverändert bei 1.6.1
  • Plugins: 1.6.2

Weiteres Core Patch-Release:

  • Core: 1.6.3
  • Plugins: Bleiben bei 1.6.2, es sei denn, es erfolgt auch ein Release mit Veränderungen bei Plugins, dann 1.6.3

Pflege der Versionsnummern

Die Versionsnummern des Core bzw. des Plugin-Repos müssen im Rahmen eines Releases angepasst werden.

  • Die Versionsnummer und der Branch des Core werden in der Datei /bin/shngversion.py gepflegt
  • Die Versionsnummer und der Branch des Plugin-Repos werden in der Datei /__init__.py im Root des Plugin-Repos gepflegt.