Renderfarm .sh to Makefile refactoring
Goal
In order to have better control over content generation and simplify maintenance, the goal is to convert the Renderfarm.sh script to a Makefile, create wrapper sh script for that Makefile and to document the production pipeline.
Tasks
-
Renderfarm.sh refactor -
Create a Makefile describing the production process of a Pepper & Carrot episode -
Make sure the new renderfarm works with translators' SVG that contains images in addition to the background (#27 (comment 857130)) -
Make sure transcripts are only REgenerated when using the all
target -
Make sure intermediate files are hidden -
Make sure backup and wip are only generated if necessary
-
-
Update Renderfarm.sh script to convert it into a wrapper script -
Allow the new renderfarm.sh to exactly reproduce the old behavior -
Allow renderfarm.sh to provide finer control over content generation through arguments -
Allow renderfarm.sh to provide a selection menu for the rendering target using zenity
-
-
Create a dedicated documentation Readme for the Makefile -
Document the rendering workflow as a Mermaid flowchart
-
Rationale
Renderfarm.sh has grown really long and complex (700 line long) to describe how to build each final file of a Pepper & Carrot episode and each step in the process. It also implement a custom cache system to avoid rebuilding already rendered files and a multi-thread system to parallelize independent tasks. This brings the following issues:
- The code is tedious to understand due to it's long length
- Caching and multi threading system add a complexity layer and a maintenance cost
- Renderfarm only generate in a "all or nothing" mode: either you update and/or generate everything, or you don't. This is not practical when one wish to render only a small part, such as translators rendering their translations for a single language.
All these behaviors are extremely similar to the functionalities provided by make
. The advantages using make would bring are the following:
- Makefiles are widely spread, well documented and stable
-
make
does not use a cache system, reducing the working drive load -
make
provides a built-in safe multi threading option, removing the need to implement and maintain such a feature - If carefully writing a Makefile, one would have a wide range of generation options, from 'generate everything you can' to 'generate this very specific file'
This new Makefile could be used in three ways:
- Directly through the use of the
make
command - Through a wrapper script to have additional information such as execution time
- Generation goal could be passed as an argument of the script to allow it's use in script chains
- When no goal is provided, the generation targets and their descriptions could be selected through the use of a zenity interface