feat: expose integer Tutor version parts to templates
WIP
@michaelwheeler
For some context, this is related to a question that I brought up during the Tutor Users' Group about writing plugins that support multiple Tutor versions. We're currently doing something along the lines of...
{% if TUTOR_VERSION.startswith("14.") %}
# Do something for Tutor v14 only...
{% else %}
# Do something for Tutor versions after 14...
{% endif %}
But having major/minor/patch versions available to the context as integers would allow more precision and flexibility.
@michaelwheeler I'd like to understand better your use case. Have you considered having multiple branches for your plugin, one for every major release?
Have you considered having multiple branches for your plugin, one for every major release?
In our team, managing multiple branches for our plugins felt like more overhead than adding an occasional conditional. We also think it will slightly simplify the process of upgrading to a newer named release.
I think this would useful to have as an option for plugin authors, particularly for cases where the plugins don't change that much between releases.
Right. I'm still not sure if it makes sense to add these settings to Tutor core. You do know that you could define these variables in your own plugin by adding a callback to the ENV_TEMPLATE_VARIABLES filter, right?
You do know that you could define these variables in your own plugin by adding a callback to the
ENV_TEMPLATE_VARIABLESfilter, right?
I didn't know that!
It still feels to me like Tutor should provide the variable, since the version is a property of Tutor itself, but if that's undesirable for other reasons then maybe ENV_TEMPLATE_VARIABLES can get me where I need to go.
Sorry for the delay @michaelwheeler. I think this is ready to go. Can you review it and try it out with one of your plugins?
I think this is ready to go. Can you review it and try it out with one of your plugins?
Yep, thanks! I'll try to take a look before the end of next week.
Hey @kdmccormick, I tested this out and things work as expected from my perspective. Thanks!
@michaelwheeler Would you have any objection to me removing TUTOR_VERSION_PATCH from this PR? You'd still have TUTOR_VERSION_MAJOR and TUTOR_VERSION_MINOR, but the patch version would remain unavailable to plugin authors without manually parsing TUTOR_VERSION.
My thinking is that it would be nice, as maintainers, to have some flexibility with the patch version. We don't currently use alpha/beta suffixes or release candidates (19.2.3a, 19.2.rc1, etc.) but I can't say for sure that we never will, so I'd rather not encourage plugin authors to rely on it always being an integer.
Would you have any objection to me removing
TUTOR_VERSION_PATCHfrom this PR?
No objection @kdmccormick. In practice I suspect I would only ever be using TUTOR_VERSION_MAJOR.