Batch-Verarbeitung von Modulen mit der Bash

in  Basics , , , , ,

Batch-Verarbeitung von Modulen mit der Bash

In diesem Beitrag wird gezeigt, wie man eine ganze Reihe von Modulen automatisch mit Hilfe eines Bash-Skriptes neu generieren kann. Auch die Übersetzungen der Module können automatisch neu generiert werden. Das spart mühsame Handarbeit, insbesondere wenn die Anzahl der Module in größeren Projekten zunimmt.

Das erste Skript verwendet den Standalone Generator von ModuleStudio und aktualisiert damit die Implementierung der Module. Dateien, die in den Modellen in der markFiles-Direktive angegeben sind, werden entfernt - das ist aber Geschmackssache und kann je nach Vorliebe anders ausgestaltet werden.

#!/bin/bash

vendor="Acme"

echo "Create work directory and download generator"
mkdir -p work
cd work
wget https://github.com/Guite/MostGenerator/releases/download/standalone/ModuleStudio-generator.jar

# iterate over all modules
for fullModulePath in `find ../modules/${vendor} -mindepth 1 -maxdepth 1 -type d`
do
    moduleName=${fullModulePath/../modules/${vendor}/}
    fullModuleName="${vendor}${moduleName}"
    modulePath="${vendor}/${moduleName}"

    echo "Processing ${moduleName} ..."

    echo "Fetch model and regenerate it"
    modelName="${moduleName/Module/}.mostapp"
    cp ${fullModulePath}/Resources/docs/model/${modelName} ./${modelName}
    java -jar ModuleStudio-generator.jar ${modelName} output

    echo "Remove unrequired files and copy new version into the module directory"
    outputPath="output/${modulePath}"
    #rm ${outputPath}/Resources/public/images/*.png
    find ${outputPath} -type f -name '*.generated.*' -delete
    cp -R ${outputPath} ../modules/${vendor}

    echo "Cleanup"
    rm -rf output
done

echo "Final cleanup"
cd ..
rm -rf work

echo "All done"

Im zweiten Skript sollen die Übersetzungskataloge für alle Module neu erzeugt werden. Dabei werden die überschriebenen Templates und JavaScript-Dateien aus app/Resources/Modulname/ mit berücksichtigt. Vom Vorgehen her sieht das dem ersten Skript sehr ähnlich, man könnte auch beides in einem Skript durchführen.

#!/bin/bash

vendor="Acme"

for fullModulePath in `find modules/${vendor} -mindepth 1 -maxdepth 1 -type d`
do
    moduleName=${fullModulePath/modules/${vendor}/}
    fullModuleName="${vendor}${moduleName}"
    modulePath="${vendor}/${moduleName}"
    php app/console translation:extract en --bundle=$fullModuleName --enable-extractor=jms_i18n_routing --output-format=po --dir=./modules/$modulePath --dir=./app/Resources/$fullModuleName
done

Weitere Beiträge in Kategorie Basics

Einfaches JS-Management mit ImportMaps in neuer Symfony AssetMapper-Komponente
- Im Symfony-Ökosystem werden Frontend-Komponenten seit einiger Zeit zunehmend über UX-Komponenten verarbeitet. Auch wenn hierdurch einige Anbelange vereinfacht werden, ist doch oftmals der Aufbau einer …
Symfony UX im Kontext von ModuleStudio
- Stimulus und Symfony UX Ein JavaScript-Ökosystem für Symfony wurde bereits Ende 2020 gestartet. Vereinfacht ausgedrückt wurde Symfony Flex erweitert, um auch JavaScript-Anteile in einem Bundle leicht …
Das Buch zu Symfony ist in einer neuen Version erschienen
- Bereits im Jahr 2020 haben wir das Buch “Symfony: The Fast Track” hier vorgestellt. Nun ist eine neue Auflage bereitgestellt worden, welche auf den Stand für Symfony 5.4 und 6.0 gebracht …
Symfony und API Platform starten offiziellen Docker-Support
- Seit knapp einem Monat steht eine umfangreiche Unterstützung zur Docker-basierten Arbeit mit Symfony bereit. Hierbei gibt es Neuerungen in mehreren zentralen Werkzeugen, die ineinander greifen und …
Optische Varianzen mit SCSS-Maps umsetzen
- In vielen Weblayouts ist es notwendig, unterschiedliche Ausprägungen einer bestimmten kosmetischen “Stellschraube” zu realisieren. So können etwa einzelne Akzentfarben je nach Unterseite, …