Entwicklungsrichtlinien under construction

Im folgenden werden eine Hilfen und Richtlinien beschrieben, die wichtig sind, wenn das zu erstellende Plugin in das globale Repository von SmartHomeHG aufgenommen werden soll.


Nutzung von git und GitHub

Eine recht umfassende Einführung (in englischer Sprache) in git ist auf gitimmersion.com zu finden.

Wenn das Plugin veröffentlicht werden soll, ist es sinnvoll so schnell wie möglich ein Konto auf github.com zu erstellen.

Falls die Kommandozeilenversion der Git-Software zu komplex erscheint, ist SourceTree von Atlassian eine gute Client Software mit graphischer Oberfläche. Alternativ kann auch auf GitHub Desktop zurück gegriffen werden. Beide Tools sind kostenlos erhältlich.


Die Repositories von SmartHomeNG

Der Code von SmartHomeNG ist in zwei Repositories auf github.com gespeichert.

  • smarthomeNG/smarthome enthält den Core von SmartHomeNG

  • smarthomeNG/plugins enthält alle Plugins, die mit SmartHomeNG veröffentlicht werden.

Repositories und Branches

Jedes Repositry enthält mindestens zwei Branches:

  • master: enthält den stabilen Code, also die Releases von SmartHomeNG

  • develop: ist der Branch in dem die Entwicklung stattfindet, in den also neue Features und Plugins gemerged werden

Das Setup der Branches basiert auf diesem Modell

Eine ausführliche Beschreibung zur Nutzung des Workflows für SmartHomeNG findet sich [hier im Wiki

Die Quellen finden/installieren

  • Sie können auf GitHub einen Fork der Repositories erstellen

oder

  • Sie holen sich das Repository direkt:

    • git clone https://github.com/smarthomeNG/smarthome.git .

    • git clone https://github.com/smarthomeNG/plugins.git plugins

  • Sie erstellen Ihren eigenen (lokalen) Branch (von Develop):

    git checkout -b myplugin Develop


Code Stil

Der Code sollte pep 8 entsprechen. (Es ist ok den Fehler „E501-Zeile zu lang“ zu ignorieren.)


Programmieren beginnen

  • Kopieren Sie das Beispiel-Plugin-Verzeichnis: cp -r dev/sample_pluginplugins/myplugin

  • Bearbeiten Sie die Hauptdatei: vi plugins/myplugin/__init__.py

Tools

Schauen Sie sich die folgenden Tools an, um Ihren Code zu testen:

pep8

  • Pep8 installieren: apt-get install pep8

  • Testen Sie Ihren Code: pep8 -qq –statistics yourcode.py

autopep8

  • pip3 install autopep8

  • autopep8 yourcode.py -i

flake8

  • pip3 install flake8

  • flake8 yourcode.py

flake8 kann als Vim-Plugin verwendet werden. Der Code wird jedes Mal überprüft, wenn die Datei gespeichert wird.

Testen und Dokumentieren

Bitte den Code des Plugins ausgiebig testen und dokumentieren!

In Ihrem Plugin-Verzeichnis sollte sich eine Datei user_doc.rst (aus dem Verzeichnis „sample_plugin“) befinden. Bitte diese Datei mit die notwendigen Informationen befüllen. viplugins/myplugin/user_doc.rst

Methoden und Funktionen sollten mit einem Docstring versehen werden, der den Zweck der Methode/Funktion, die Aufrufparameter und den Rückgabewert beschreibt.

Weiterhin ist es sinnvoll Unittests für das Plugin zu erstellen.

Basic Rules

  • Nur Pull Requests gegen den develop Branch des jeweiligen Repositories stellen

  • Änderungen an Inhalten des smarthomeNG/smarthome-Repositorys müssen mit dem SmartHomeNG-Entwicklerteam (möglichst vor der Entwicklung) abgeklärt werden.

  • Änderungen an Plugins anderer Autoren/Maintainer müssen mit dem jeweiligen Autoren/Maintainer abgeklärt werden.

Fork erstellen

  • Gehen Sie aif GitHub zum SmartHome Repo und melden Sie sich mit Ihrem Benutzernamen/Passwort an

  • Klicken Sie rechts oben auf „Fork“.

  • Wechseln Sie zu Ihrem Terminal und geben Sie „git clone https://USER:PASSWORD@github.com/USER/smarthome“ ein

  • Checken Sie den Entwicklungszweig „git checkout Develop“ aus

  • Wiederholen Sie dieses für das Plugin Repo

  • Eine Datei ändern/erstellen.

  • Fügen Sie die Datei „git add FILE“ hinzu

  • Übernehmen Sie die Änderungen mit einem nützlichen Kommentar: „git commit“

  • Übertragen Sie Ihre Änderungen in Ihr Repository: „git pull && git push“.

  • Erstellen Sie eine Pull-Request auf GitHub: Basis: smarthomeNG/develop, Vergleich: USER/develop

Merge (description is deprecated, has to be updated)

Wenn Sie glauben, dass Ihr Code für die Hauptsendezeit bereit ist, senden Sie einen Pull-Request über Github

Mitglieder des Core Teams von SmartHomeNG können dann den Pull-Request prüfen und in das Repository mergen.

.git/config (description is deprecated, has to be updated)

Falls Probleme beim pushen auf GitHub bestehen, bitte die config-Datei im .git Verzeichnis überprüfen. Sie sollte zum Beispiel folgendermaßen aussehen:

[remote "origin"]
    url = https://github.com/smarthomeNG/smarthome
    fetch = +refs/heads/*:refs/remotes/origin/*

[branch "master"]
    remote = origin
    merge = refs/heads/master

[branch "develop"]
    remote = origin
    merge = refs/heads/develop

Falls der Code für GitHub verifizierbar signiert werden soll, muss noch die gpg Signierung auf GitHub und in der Entwicklungsumgebung konfiguriert sein. In dem Fall gibt es noch die beiden folgenden Abschnitte in der git config-Datei:

[commit]
    gpgSign = true
[user]
    signingkey = xxxxxxxxxxxxxxxx

Arbeiten mit dem Git-Befehlszeilen-Client

Hier ein paar Tipps, wenn Sie mit dem Kommandozeilen-Client von Git arbeiten:

Nützliche Git-Befehle

  • Liste der Änderungen seit der Veröffentlichung mit dem Tag VERSIONTAG: git log –pretty=format:“%s“ <VERSIONTAG>..HEAD

  • Commit mit der ID XXXIDXXX rückgängig machen: git reset –hard XXXIXXX && git push origin Develop –force

  • Commit in den aktuellen Zweig kopieren: git Cherry-pick <commit>

Folgen Sie dem Commit Atom Feed

Globale Einstellungen

  • Nur den aktuellen Zweig pushen (nicht alle): git config –global push.default current

  • Passen Sie Ihre Benutzereinstellungen an: * git config –global user.name „Ihr Name“ * git config –global user.email you@example.com