Türchen 05: Magento Connect Pakete in der Shell bauen

Als Entwickler steht man so manches mal vor der Herrausforderung Pakete für Magento Connect zu erstellen. Hierfür bietet Magento im Backend ein klickbares GUI. Dazu muss man eine ganze Reihe von Formularen ausfüllen und zum Schluss muss der Entwickler die Pfade zu den Quellen seines Moduls konfigurieren. Im Anschluss daran wird ein Archiv erstellt, welches anschließend zu Magento Connect 2.0 hoch geladen weden kann.

Leider ist es nicht möglich das Profil zu speichern. Lediglich bestehende Pakete können geladen und somit die Felder vorausgefüllt werden. Dieser Vorgang muss nun für jedes Paket, dass man erstellt hat, wiederholt werden. Das ganze ist aufwendig und der gemeine Entwickler schreibt lieber Konfigurationsdateien als etwas zu klicken!

Geschichte

Ich habe diese Script erstellt weil ich eine neue Version der Flagbit FilterUrls Extension veröffentlichen wollte. Leider hatte ich nach dem ersten klicken das Archiv gelöscht und hatte wenig Lust das noch mal zu machen. Und so einen Ausflug in den Magento Core macht doch jeder mal gerne oder?

Was kann es bis jetzt?

Das Script basiert auf dem originalen Packager Code. Der Unterschied liegt lediglich in der Quelle der Informationen. Diese werden aus einer Composer Konfiguration gelesen. Was Composer ist und warum man es unbedingt auch für Magento verwenden sollte, lest ihr am besten im Türchen 02: Composer für Magento von Vinai nach.

Das Script liest aus einer composer.json alle Daten aus und füllt die Packager Klassen mit Informationen. Anschließend wird das Paket gebaut. Dazu muss das Script in Ordner shell einer Magento-Installation liegen und es benötigt als Parameter den Pfad zur composer.json. Sollte wichtige Informationen fehlen, reagiert der Packager mit Exceptions.

Ein Beispielaufruf lautet wie folgt:

php packager.php --composer <path to composer.json>

Das fertige Archiv wird in Form einer *.tgz Datei in Pfad zu Magento/var/connect abgelegt. Diese Pakete sind allerdings nur mit Magento Connect 2.0 kompatibel.

Wie muss eine composer.json aussehen?

{
    "name":"module_vendor/module_name",
    "type":"magento-module",
    "license":"GPL-3.0",
    "description":"",
    "homepage":"http://example.com",
    "minimum-stability":"beta",
    "authors":[
        {
            "name":"Author 1",
            "email":"author1@example.de"
        },
        {
            "name":"Author 2",
            "email":"author2@example.de"
        }
    ],
    "extras":{
        "magento_connect":{
            "channel":"community",
            "php_min":"5.3.0",
            "php_max":"6.0.0",
            "content":[
                {
                    "type":"magecommunity",
                    "structure":"dir",
                    "path":"module_vendor/module_name"
                },
                {
                    "type":"mageetc",
                    "structure":"file",
                    "path":"modules/module_config_file_name.xml"
                },
                {
                    "type":"mage",
                    "structure":"file",
                    "path":"just a random file path"
                }
            ]
        }
    }
}

Der aufwendigste Teil ist der content Bereich. Hier müssen die Zielpfade der Quellen des Moduls im Bezug zu Magento hinterlegt werden. Das ist sehr ähnlich zo modman und es drängt sich der Gedanke auf daraus einfach eine modman Datei generieren zu lassen.

Was steht auf der Roadmap?

  • Generierung einer modman Datei
  • Batchverarbeitung für mehrere composer.json Dateien
  • Unterstützung der fehlenden Optionen Felder aus dem Backend

Ich würde mich über Kommentare und Pullrequests freuen. Viel Spaß beim Packages erzeugen.

Den Quellcode findet ihr GitHub unter: Magento Packager



Ein Beitrag von Karl Spies
Karl's avatar

Karl Spies arbeitet seit 2009 mit Magento und ist seit 2011 durch Magento zertifizierter Entwickler. Er arbeitet für die SYNAXON AG. In seiner Freizeit ist er Nerd und ein Technologiejunkie. Ihr erreichet Ihn per E-Mail unter karl.spies@gmx.net.

Alle Beiträge von Karl

Kommentare
Augsten am

Da muss man sich wohl doch mal den Composer anschauen. Bisher mach ich das mit einem ANT-Script aus Eclipse heraus.

In Magento 1.5 gab es ein Problem mit dem Lesen von tgz-Files, die über ein externes Tool erstellt wurden sind. Da immer Blockweise gelesen wurde, wurde über das File hinaus gelesen und dann hat das letzte File einen falschen Inhalt. Keine Ahnung ob der Fehler immer noch drin ist. Ein Fix war das Anhängen eines 4k-Dummy-Files an das Ende des Archives.

Sebastian am

Hi,

ich habe mich mit dem composer noch nicht wirklich auseinandergesetzt. Dank diesem Artikel und auch Türchen 02 habe ich jetzt schon mal einen prima Einstieg um mit diesem Thema anzufangen.

Karl Spies am

Hey Vinai,

ja da können wir composer, modman und packager noch aufpolieren.

Karl Spies am

Jan sowas haben wir schon: http://packages.firegento.com/ Oder meinst du etwas anderes?

Jan Brinkmann am

Ich finde die Idee auch super! Cool wäre vielleicht dann in Zukunft noch so etwas wie packagist.org, nur Magento spezifisch (vielleicht kann man es sogar abstrakt halten, sodass es zusammen passt?) :-)

Vinai Kopp am

Hey Karl,

klasse Idee und sehr schöner Artikel. Das Script lässt sich sicher sehr nützlich erweitern. Ich sehe schon, eine Menge Arbeit im Januar auf dem Hackathon :)

Dein Kommentar