diff --git a/.github/workflows/sync.yml b/.github/workflows/sync.yml index df0be4886e..fbdf291bdd 100644 --- a/.github/workflows/sync.yml +++ b/.github/workflows/sync.yml @@ -2,7 +2,9 @@ name: Sync with private repo on: push: - branches: [ master, main, nightly ] + branches: + - release + - main jobs: sync: diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index b982239229..2e64e8f9e6 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -2,9 +2,13 @@ name: Run tests on: push: - branches: [ master, main, nightly ] + branches: + - release + - main pull_request: - branches: [ master, main, nightly ] + branches: + - release + - main jobs: tests: diff --git a/README.rst b/README.rst index fc0d3b2504..2c592975e5 100644 --- a/README.rst +++ b/README.rst @@ -93,4 +93,4 @@ We welcome contributions to Tutor! To learn how you can contribute, please check License ------- -This work is licensed under the terms of the `GNU Affero General Public License (AGPL) `_. +This work is licensed under the terms of the `GNU Affero General Public License (AGPL) `_. diff --git a/changelog.d/20241107_144307_kyle_branch_rename.md b/changelog.d/20241107_144307_kyle_branch_rename.md new file mode 100644 index 0000000000..460e59a905 --- /dev/null +++ b/changelog.d/20241107_144307_kyle_branch_rename.md @@ -0,0 +1,4 @@ +- 💥[Improvement] Rename Tutor's two branches (by @kdmccormick): + * Rename **master** to **release**, as this branch runs the latest official Open edX release. + * Rename **nightly** to **main**, as this branch runs the Open edX master (a.k.a. main) branches, which are the basis fort the next Open edX release. + * For Tutor Nightly users who do not set a TUTOR_ROOT, both the project root (`~/.local/share/tutor-nightly` on Linux) and the plugins root (`~/.local/share/tutor-nightly-plugins` on Linux) will be automatically renamed. (by @regisb) diff --git a/changelog.d/20241127_001212_kyle_tutor_branch_is_main.md b/changelog.d/20241127_001212_kyle_tutor_branch_is_main.md new file mode 100644 index 0000000000..c804ceee03 --- /dev/null +++ b/changelog.d/20241127_001212_kyle_tutor_branch_is_main.md @@ -0,0 +1,2 @@ +- [Feature] Add the `TUTOR_BRANCH_IS_MAIN` variable to the template context, which is set to True for users running Tutor Main (by @kdmccormick). +- [Bugfix] Use `TUTOR_BRANCH_IS_MAIN` rather than the edx-platform branch name in order to determine which patches to apply. This way, when developers are testing an edx-platform branch that is not master but which may be *based on* master, they will receive master patches rather than release patches, assuming they are running Tutor Main in the first place (by @kdmccormick). diff --git a/docs/configuration.rst b/docs/configuration.rst index 6e40797a14..5c183f7871 100644 --- a/docs/configuration.rst +++ b/docs/configuration.rst @@ -132,7 +132,7 @@ Open edX customisation This defines the git repository from which you install Open edX platform code. If you run an Open edX fork with custom patches, set this to your own git repository. You may also override this configuration parameter at build time, by providing a ``--build-arg`` option. -- ``OPENEDX_COMMON_VERSION`` (default: ``"open-release/redwood.3"``, or ``master`` in :ref:`nightly `) +- ``OPENEDX_COMMON_VERSION`` (default: ``"open-release/redwood.3"``, or ``master`` in :ref:`Tutor Main
`) This defines the default version that will be pulled from all Open edX git repositories. @@ -392,7 +392,7 @@ Tutor builds images with the latest translations using the ``atlas pull`` `comma By default the translations are pulled from the `openedx-translations repository `_ from the ``ATLAS_REVISION`` branch. You can use custom translations on your fork of the openedx-translations repository by setting the following configuration parameters: -- ``ATLAS_REVISION`` (default: ``"main"`` on nightly and ``"{{ OPENEDX_COMMON_VERSION }}"`` if a named release is used) +- ``ATLAS_REVISION`` (default: ``"main"`` for Tutor Main, or ``"{{ OPENEDX_COMMON_VERSION }}"`` if a named release is used) - ``ATLAS_REPOSITORY`` (default: ``"openedx/openedx-translations"``). There's a feature request to `support GitLab and other providers `_. - ``ATLAS_OPTIONS`` (default: ``""``) Pass additional arguments to ``atlas pull``. Refer to the `atlas documentations `_ for more information. diff --git a/docs/dev.rst b/docs/dev.rst index 5095b29c6e..19fd1fd92d 100644 --- a/docs/dev.rst +++ b/docs/dev.rst @@ -12,7 +12,7 @@ For detailed explanations on how to work on edx-platform and its dependencies, s First-time setup ---------------- -Firstly, either :ref:`install Tutor ` (for development against the named releases of Open edX) or :ref:`install Tutor Nightly ` (for development against Open edX's master branches). +Firstly, either :ref:`install Tutor ` (for development against the named releases of Open edX) or :ref:`install Tutor Main
` (for development against Open edX's master branches). Then, optionally, tell Tutor to use a local fork of edx-platform:: diff --git a/docs/index.rst b/docs/index.rst index 4efaf54ff6..a62adb56c1 100644 --- a/docs/index.rst +++ b/docs/index.rst @@ -40,7 +40,7 @@ Tutor: the Docker-based Open edX distribution designed for peace of mind Source code Community forums Pypi releases - Changelog + Changelog Source code ----------- @@ -58,7 +58,7 @@ The complete source code for Tutor is available on Github: https://github.com/ov License ------- -This work is licensed under the terms of the `GNU Affero General Public License (AGPL) `_. +This work is licensed under the terms of the `GNU Affero General Public License (AGPL) `_. The AGPL license covers the Tutor code, including the Dockerfiles, but not the content of the Docker images which can be downloaded from https://hub.docker.com. Software other than Tutor provided with the docker images retain their original license. diff --git a/docs/install.rst b/docs/install.rst index b5d8ccadb3..59ff280422 100644 --- a/docs/install.rst +++ b/docs/install.rst @@ -113,7 +113,7 @@ Upgrading to a new Open edX release Major Open edX releases are published twice a year, in June and December, by the Open edX `Build/Test/Release working group `__. When a new Open edX release comes out, Tutor gets a major version bump (see :ref:`versioning`). Such an upgrade typically includes multiple breaking changes. Any upgrade is final because downgrading is not supported. Thus, when upgrading your platform from one major version to the next, it is strongly recommended to do the following: -1. Read the changes listed in the `CHANGELOG.md `__ file. Breaking changes are identified by a "💥". +1. Read the changes listed in the `CHANGELOG.md `__ file. Breaking changes are identified by a "💥". 2. Perform a backup (see the :ref:`backup tutorial `). On a local installation, this is typically done with:: tutor local stop diff --git a/docs/troubleshooting.rst b/docs/troubleshooting.rst index ef3ac7d99b..06e60fa583 100644 --- a/docs/troubleshooting.rst +++ b/docs/troubleshooting.rst @@ -91,7 +91,7 @@ If that does not work, then check if there are any other Docker containers runni docker ps -a -For example, if you have ever used :ref:`Tutor Nightly `, check whether there are still ``tutor_nightly_`` containers running. Conversely, if trying to run Tutor Nightly now, check whether there are non-Nightly ``tutor_`` containers running. If so, switch to that other version of Tutor, run ``tutor (dev|local|k8s) stop``, and then switch back to the preferred version of Tutor. +For example, if you have ever used :ref:`Tutor Main
`, check whether there are still ``tutor_main_`` containers running. Conversely, if trying to run Tutor Main now, check whether there are non-Main ``tutor_`` containers running. If so, switch to that other version of Tutor, run ``tutor (dev|local|k8s) stop``, and then switch back to the preferred version of Tutor. Alternatively, if there are any other non-Tutor containers using port 3306, then stop and remove them:: diff --git a/docs/tutor.rst b/docs/tutor.rst index 4435ac911d..b0e6dafc40 100644 --- a/docs/tutor.rst +++ b/docs/tutor.rst @@ -98,7 +98,7 @@ When making a new Tutor release, increment the: - MAJOR version when making a backward-incompatible change (prefixed by "💥" in the changelog, as explained below). - MINOR version when making a backward-compatible change. -An optional BRANCH suffix may be appended to the release name to indicate that extra changes were added on top of the latest release. For instance, "x.y.z-nightly" corresponds to release x.y.z on top of which extra changes were added to make it compatible with the Open edX master branches (see the :ref:`tutorial on running Tutor Nightly `). +An optional BRANCH suffix may be appended to the release name to indicate that extra changes were added on top of the latest release. For instance, "x.y.z-main" corresponds to release x.y.z on top of which extra changes were added to make it compatible with the Open edX master branches (see the :ref:`tutorial on running Tutor Main
`). `Officially-supported plugins `__ follow the same versioning pattern. As a third-party plugin developer, you are encouraged to use the same pattern to make it immediately clear to your end-users which Open edX versions are supported. diff --git a/docs/tutorials/edx-platform.rst b/docs/tutorials/edx-platform.rst index 125a0cb324..cd66d0893e 100644 --- a/docs/tutorials/edx-platform.rst +++ b/docs/tutorials/edx-platform.rst @@ -25,7 +25,7 @@ Check out the right version of the upstream repository. If you are working on th # I.e: aspen, birch, cypress, etc. git checkout open-release/zebulon.master -On the other hand, if you are working on the Tutor :ref:`"nightly" ` branch then you should checkout the master branch:: +On the other hand, if you are using :ref:`Tutor Main
`, then you should checkout the master branch:: git checkout master diff --git a/docs/tutorials/index.rst b/docs/tutorials/index.rst index cef5c070e5..f052f99833 100644 --- a/docs/tutorials/index.rst +++ b/docs/tutorials/index.rst @@ -12,7 +12,7 @@ Open edX customization edx-platform edx-platform-settings google-smtp - nightly + main System administration --------------------- diff --git a/docs/tutorials/main.rst b/docs/tutorials/main.rst new file mode 100644 index 0000000000..3add7dd443 --- /dev/null +++ b/docs/tutorials/main.rst @@ -0,0 +1,64 @@ +.. _main: + +Running Open edX on the master branch ("Tutor Main") +==================================================== + +Tutor was designed to make it easy for everyone to run the latest release of Open edX. But sometimes, you want to run the latest, bleeding-edge version of Open edX. This is what we call "running master", as opposed to running the release branch. Running the master branch in production is strongly **not** recommended unless you are an Open edX expert and you really know what you are doing. But Open edX developers frequently need to run the master branch locally to implement and test new features. Thus, Tutor makes it easy to run Open edX on the master branch: this is called "Tutor Main". + +Installing Tutor Main +--------------------- + +Running Tutor Main requires more than setting a few configuration variables: because there are so many Open edX settings, version numbers, etc. which may change between the latest release and the current master branch, Tutor Main is actually maintained as a separate branch of the Tutor repository. To install Tutor Main, you should install Tutor from the "main" branch of the source repository. To do so, run:: + + git clone --branch=main https://github.com/overhangio/tutor.git + pip install -e "./tutor[full]" + +As usual, it is strongly recommended to run the command above in a `Python virtual environment `__. + +In addition to installing Tutor Main itself, this will install automatically the main versions of all official Tutor plugins (which are enumerated in `plugins.txt `_). Alternatively, if you wish to hack on an official plugin or install a custom plugin, you can clone that plugin's repository and install it. For instance:: + + git clone --branch=main https://github.com/myorganization/tutor-contrib-myplugin.git + pip install -e ./tutor-contrib-myplugin + +Once Tutor Main is installed, you can run the usual ``tutor`` commands:: + + tutor dev launch + tutor dev run lms bash + # ... and so on + +Upgrading to the latest version of Open edX +------------------------------------------- + +To pull the latest upstream changes, you should first upgrade Tutor Main:: + + cd ./tutor + git pull + +Then, you will have to generate a more recent version of the main Docker images. Images for running Tutor Main are published daily to docker.io (see `here `__). You can fetch the latest images with:: + + tutor images pull all + +Alternatively, you may want to build the images yourself. As usual, this is done with:: + + tutor images build all + +However, these images include the application master branch at the point in time when the image was built. The Docker layer caching mechanism might cause the ``git clone`` step from the build to be skipped. In such cases, you will have to bypass the caching mechanism with:: + + tutor images build --no-cache all + +Running Tutor Main alongside the latest release +-------------------------------------------------- + +When running Tutor Main, you usually do not want to override your existing Tutor installation. That's why a Tutor Main installation has the following differences from a regular release installation: + +- The default Tutor project root is different in Tutor Main. By default it is set to ``~/.local/share/tutor-main`` on Linux (instead of ``~/.local/share/tutor``). To modify this location check the :ref:`corresponding documentation `. +- The plugins root is set to ``~/.local/share/tutor-main-plugins`` on Linux (instead of ``~/.local/share/tutor-plugins``). This location may be modified by setting the ``TUTOR_PLUGINS_ROOT`` environment variable. +- The default docker-compose project name is set to ``tutor_main_local`` (instead of ``tutor_local``). This value may be modified by manually setting the ``LOCAL_PROJECT_NAME``. + +Making changes to Tutor Main +---------------------------- + +In general pull requests should be open on the "release" branch of Tutor: the "release" branch is automatically merged on the "main" branch at every commit, such that changes made to Tutor releases find their way to Tutor Main as soon as they are merged. However, sometimes you want to make changes to Tutor Main exclusively, and not to the Tutor releases. This might be the case for instance when upgrading the running version of a third-party service (for instance: Elasticsearch, MySQL), or when the release branch requires specific changes. In that case, you should follow the instructions from the :ref:`contributing` section of the docs, with the following differences: + +- Open your pull request on top of the "main" branch instead of "release". +- Add a description of your changes by creating a changelog entry with `make changelog-entry`, as in the release branch. diff --git a/docs/tutorials/nightly.rst b/docs/tutorials/nightly.rst index 6ee60f3de0..8bd3dcc9f1 100644 --- a/docs/tutorials/nightly.rst +++ b/docs/tutorials/nightly.rst @@ -1,64 +1,8 @@ -.. _nightly: - -Running Open edX on the master branch ("nightly") -================================================= - -Tutor was designed to make it easy for everyone to run the latest release of Open edX. But sometimes, you want to run the latest, bleeding-edge version of Open edX. This is what we call "running master", as opposed to running the release branch. Running the master branch in production is strongly **not** recommended unless you are an Open edX expert and you really know what you are doing. But Open edX developers frequently need to run the master branch locally to implement and test new features. Thus, Tutor makes it easy to run Open edX on the master branch: this is called "Tutor Nightly". - -Installing Tutor Nightly ------------------------- - -Running Tutor Nightly requires more than setting a few configuration variables: because there are so many Open edX settings, version numbers, etc. which may change between the latest release and the current master branch, Tutor Nightly is actually maintained as a separate branch of the Tutor repository. To install Tutor Nightly, you should install Tutor from the "nightly" branch of the source repository. To do so, run:: - - git clone --branch=nightly https://github.com/overhangio/tutor.git - pip install -e "./tutor[full]" - -As usual, it is strongly recommended to run the command above in a `Python virtual environment `__. - -In addition to installing Tutor Nightly itself, this will install automatically the nightly versions of all official Tutor plugins (which are enumerated in `plugins.txt `_). Alternatively, if you wish to hack on an official plugin or install a custom plugin, you can clone that plugin's repository and install it. For instance:: - - git clone --branch=nightly https://github.com/myorganization/tutor-contrib-myplugin.git - pip install -e ./tutor-contrib-myplugin - -Once Tutor Nightly is installed, you can run the usual ``tutor`` commands:: - - tutor dev launch - tutor dev run lms bash - # ... and so on - -Upgrading to the latest version of Open edX -------------------------------------------- +:orphan: -To pull the latest upstream changes, you should first upgrade Tutor Nightly:: - - cd ./tutor - git pull - -Then, you will have to generate a more recent version of the nightly Docker images. Images for running Tutor Nightly are published daily to docker.io (see `here `__). You can fetch the latest images with:: - - tutor images pull all - -Alternatively, you may want to build the images yourself. As usual, this is done with:: - - tutor images build all - -However, these images include the application master branch at the point in time when the image was built. The Docker layer caching mechanism might cause the ``git clone`` step from the build to be skipped. In such cases, you will have to bypass the caching mechanism with:: - - tutor images build --no-cache all - -Running Tutor Nightly alongside the latest release --------------------------------------------------- - -When running Tutor Nightly, you usually do not want to override your existing Tutor installation. That's why a Tutor Nightly installation has the following differences from a regular release installation: - -- The default Tutor project root is different in Tutor Nightly. By default it is set to ``~/.local/share/tutor-nightly`` on Linux (instead of ``~/.local/share/tutor``). To modify this location check the :ref:`corresponding documentation `. -- The plugins root is set to ``~/.local/share/tutor-nightly-plugins`` on Linux (instead of ``~/.local/share/tutor-plugins``). This location may be modified by setting the ``TUTOR_PLUGINS_ROOT`` environment variable. -- The default docker-compose project name is set to ``tutor_nightly_local`` (instead of ``tutor_local``). This value may be modified by manually setting the ``LOCAL_PROJECT_NAME``. - -Making changes to Tutor Nightly -------------------------------- +.. _nightly: -In general pull requests should be open on the "master" branch of Tutor: the "master" branch is automatically merged on the "nightly" branch at every commit, such that changes made to Tutor releases find their way to Tutor Nightly as soon as they are merged. However, sometimes you want to make changes to Tutor Nightly exclusively, and not to the Tutor releases. This might be the case for instance when upgrading the running version of a third-party service (for instance: Elasticsearch, MySQL), or when the master branch requires specific changes. In that case, you should follow the instructions from the :ref:`contributing` section of the docs, with the following differences: +Obsolete: Tutor nightly +======================= -- Open your pull request on top of the "nightly" branch instead of "master". -- Add a description of your changes by creating a changelog entry with `make changelog-entry`, as in the master branch. +The "nightly" branch was renamed to "main". See :ref:`Tutor Main
`. diff --git a/tutor/__about__.py b/tutor/__about__.py index e838560256..84510f6009 100644 --- a/tutor/__about__.py +++ b/tutor/__about__.py @@ -6,8 +6,8 @@ # The version suffix will be appended to the actual version, separated by a # dash. Use this suffix to differentiate between the actual released version and -# the versions from other branches. For instance: set the suffix to "nightly" in -# the nightly branch. +# the versions from other branches. For instance: set the suffix to "main" in +# the main branch. # The suffix is cleanly separated from the __version__ in this module to avoid # conflicts when merging branches. __version_suffix__ = "nightly" @@ -19,7 +19,7 @@ __app__ = os.environ.get("TUTOR_APP", "tutor") # Package version, as installed by pip, does not include the version suffix. -# Otherwise, nightly plugins will automatically install non-nightly Tutor +# Otherwise, Tutor Main plugins will automatically install non-Main Tutor # version. __package_version__ = __version__ diff --git a/tutor/env.py b/tutor/env.py index fef5f2cbed..1b61d7a926 100644 --- a/tutor/env.py +++ b/tutor/env.py @@ -10,7 +10,7 @@ import jinja2 from tutor import exceptions, fmt, hooks, plugins, utils -from tutor.__about__ import __app__, __version__ +from tutor.__about__ import __app__, __version__, __version_suffix__ from tutor.types import Config, ConfigValue TEMPLATES_ROOT = str(importlib_resources.files("tutor") / "templates") @@ -64,6 +64,7 @@ def _prepare_environment() -> None: ("HOST_USER_ID", utils.get_user_id()), ("TUTOR_APP", __app__.replace("-", "_")), ("TUTOR_VERSION", __version__), + ("TUTOR_BRANCH_IS_MAIN", __version_suffix__ == "main"), ("is_docker_rootless", utils.is_docker_rootless), ], ) diff --git a/tutor/plugins/base.py b/tutor/plugins/base.py index af6d8c08c6..65d17264b0 100644 --- a/tutor/plugins/base.py +++ b/tutor/plugins/base.py @@ -7,8 +7,8 @@ PLUGINS_ROOT_ENV_VAR_NAME = "TUTOR_PLUGINS_ROOT" # Folder path which contains *.yml and *.py file plugins. -# On linux this is typically ``~/.local/share/tutor-plugins``. On the nightly branch -# this will be ``~/.local/share/tutor-plugins-nightly``. +# On linux this is typically ``~/.local/share/tutor-plugins``. On the main branch +# this will be ``~/.local/share/tutor-plugins-main``. # The path can be overridden by defining the ``TUTOR_PLUGINS_ROOT`` environment # variable. PLUGINS_ROOT = os.path.expanduser( diff --git a/tutor/plugins/indexes.py b/tutor/plugins/indexes.py index c32d1117af..311a403ebe 100644 --- a/tutor/plugins/indexes.py +++ b/tutor/plugins/indexes.py @@ -11,7 +11,7 @@ from tutor.types import Config, get_typed PLUGIN_INDEXES_KEY = "PLUGIN_INDEXES" -# Current release name ('zebulon' or 'nightly') and version (1-26) +# Current release name ('zebulon' or 'main') and version (1-26) RELEASE = __version_suffix__ or env.get_current_open_edx_release_name() MAJOR_VERSION = int(__version__.split(".", maxsplit=1)[0]) diff --git a/tutor/plugins/openedx.py b/tutor/plugins/openedx.py index f01288173e..78ed23589f 100644 --- a/tutor/plugins/openedx.py +++ b/tutor/plugins/openedx.py @@ -4,15 +4,46 @@ import re import typing as t -from tutor import bindmount, hooks +from tutor import bindmount, fmt, hooks from tutor.__about__ import __version_suffix__ +from tutor.plugins.base import PLUGINS_ROOT + + +@hooks.Actions.PROJECT_ROOT_READY.add(priority=hooks.priorities.HIGH) +def _migrate_obsolete_nightly_root(root: str) -> None: + """ + Since Tutor switched from the "nightly" branch to the "main" branch, we + automatically migrate data from the project root and the plugins root. + + REMOVE-ME-AFTER-v20: migrate this code to the sumac upgrade commands. + """ + if __version_suffix__ == "main": + return + + # Migrate the project root + nightly_root = os.path.join(os.path.dirname(root), "tutor-nightly") + if os.path.exists(nightly_root) and not os.path.exists(root): + fmt.echo_alert( + f"Migrating legacy nightly root from {nightly_root} to {root}..." + ) + os.rename(nightly_root, root) + + # Migrate the plugins root + nightly_plugins_root = os.path.join( + os.path.dirname(PLUGINS_ROOT), "tutor-nightly-plugins" + ) + if os.path.exists(nightly_plugins_root) and not os.path.exists(PLUGINS_ROOT): + fmt.echo_alert( + f"Migrating legacy nightly plugins root from {nightly_plugins_root} to {PLUGINS_ROOT}..." + ) + os.rename(nightly_plugins_root, PLUGINS_ROOT) @hooks.Filters.CONFIG_DEFAULTS.add() -def _set_openedx_common_version_in_nightly( +def _set_openedx_common_version_in_main( items: list[tuple[str, t.Any]] ) -> list[tuple[str, t.Any]]: - if __version_suffix__ == "nightly": + if __version_suffix__ == "main": items.append(("OPENEDX_COMMON_VERSION", "master")) return items diff --git a/tutor/templates/build/openedx/Dockerfile b/tutor/templates/build/openedx/Dockerfile index a7e01e9d4c..ebc715727f 100644 --- a/tutor/templates/build/openedx/Dockerfile +++ b/tutor/templates/build/openedx/Dockerfile @@ -50,10 +50,10 @@ RUN git config --global user.email "tutor@overhang.io" \ {%- if patch("openedx-dockerfile-git-patches-default") %} # Custom edx-platform patches {{ patch("openedx-dockerfile-git-patches-default") }} -{%- elif EDX_PLATFORM_VERSION == "master" %} -# Patches in nightly node +{%- elif TUTOR_BRANCH_IS_MAIN %} +# Patches in Main node {%- else %} -# Patches in non-nightly mode +# Patches in non-Main mode (i.e., Release mode) {%- endif %} {# Example: RUN curl -fsSL https://github.com/openedx/edx-platform/commit/.patch | git am #} diff --git a/tutor/templates/config/defaults.yml b/tutor/templates/config/defaults.yml index 816ce21747..76fd71d515 100644 --- a/tutor/templates/config/defaults.yml +++ b/tutor/templates/config/defaults.yml @@ -60,7 +60,7 @@ OPENEDX_CMS_UWSGI_WORKERS: 2 OPENEDX_LMS_UWSGI_WORKERS: 2 OPENEDX_MYSQL_DATABASE: "openedx" OPENEDX_MYSQL_USERNAME: "openedx" -# the common version will be automatically set to "master" in the nightly branch +# the common version will be automatically set to "master" in the main branch OPENEDX_COMMON_VERSION: "open-release/redwood.3" OPENEDX_EXTRA_PIP_REQUIREMENTS: [] MYSQL_HOST: "mysql"