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